参考视频:

https://www.bilibili.com/video/BV1eV411W7V4/?spm_id_from=333.788&vd_source=77c874a500ef21df351103560dada737

语音增强(去噪):消除语音中的噪声,增加语音听感与可懂度。

顾名思义,谱减法,就是用带噪信号的频谱减去噪声信号的频谱。谱减法基于一个简单的假设:假设语音中的噪声只有加性噪声,只要将带噪语音谱减去噪声谱,就可以得到纯净语音,这么做的前提是噪声信号是平稳的或者缓慢变化的。提出这个假设就是基于短时谱(25ms),就是频谱在短时间内是平稳不变的。

那噪音是怎么估计出来的呢?文献中一般都假设输入的一段语音中前n帧作为silence时间,也就是说这段时间没有语音输入,只有噪音,可以称之为底噪,将这前n帧中的噪音强度取平均值,作为估计出来的噪音。

实际上,我们不知道噪声是什么,我们要想办法对噪声进行估计,一般我们认为噪声是加性噪声,从语音开始的那一小段对噪声进行估计。一般去带噪语音前20-40帧进行噪声估计

但是这样做的方法有一个缺点就是由于我们估计噪音的时候取得平均值,那么有的地方噪音强度大于平均值的时候,相减后会有残留的噪音存在。在噪音波形谱上表现为一个一个的小尖峰,我们将这种残存的噪声称之为音乐噪声(music noise)。

运行程序后出现问题如下:

解决方法:

你可以偷偷看一下你是不是在新建python文件时文件命名是这样的情况:

‘test_’开头或者‘_test’结尾

因为这个,所以在运行这个python文件的时候报错Empty suite

比如你是test_A,把下划线去掉就可以了testA,然后就可以正常运行了。

下面来说一下为什么‘test_’开头或者‘_test’结尾用会导致出现Empty suite:

因为test_ 或者 _test 会使得程序认为你这个是做自动化测试的测试用例文件,

程序如下:

import librosa
from librosa.core.spectrum import amplitude_to_db
import numpy as np
import soundfile as sf
import matplotlib.pyplot as pltif __name__ == "__main__":clean_wav_file = "sf1_cln.wav"clean,fs = librosa.load(clean_wav_file,sr=None) # sr=None表示读取原始信号的采样率print(fs)noisy_wav_file = "sf1_n0L.wav"noisy,fs = librosa.load(noisy_wav_file,sr=None)# 计算 nosiy 信号的频谱,帧长win_length,帧移hop_length,傅里叶变换的点数是n_fft=256个点S_noisy = librosa.stft(noisy,n_fft=256, hop_length=128, win_length=256)  # D x TD,T = np.shape(S_noisy)Mag_noisy= np.abs(S_noisy)Phase_nosiy= np.angle(S_noisy)Power_nosiy = Mag_noisy**2 # 得到信号的能量谱print(fs)# 估计噪声信号的能量# 由于噪声信号未知 这里假设 含噪(noisy)信号的前30帧为噪声Mag_nosie = np.mean(np.abs(S_noisy[:,:30]),axis=1,keepdims=True) # 沿T的维度取均值,输出维度是129*1Power_nosie = Mag_nosie**2Power_nosie = np.tile(Power_nosie,[1,T]) # 对前30帧进行不断复制到与带噪语音等长# 能量减Power_enhenc = Power_nosiy-Power_nosie# 保证能量大于0Power_enhenc[Power_enhenc<0]=0Mag_enhenc = np.sqrt(Power_enhenc)# 幅度减# Mag_enhenc = np.sqrt(Power_nosiy) - np.sqrt(Power_nosie)# Mag_enhenc[Mag_enhenc<0]=0# 对信号进行恢复S_enhec = Mag_enhenc*np.exp(1j*Phase_nosiy)enhenc = librosa.istft(S_enhec, hop_length=128, win_length=256)sf.write("enhce.wav",enhenc,fs)print(fs)# 绘制谱图plt.subplot(3,1,1)plt.specgram(clean,NFFT=256,Fs=fs)plt.xlabel("clean specgram")plt.subplot(3,1,2)plt.specgram(noisy,NFFT=256,Fs=fs)plt.xlabel("noisy specgram")   plt.subplot(3,1,3)plt.specgram(enhenc,NFFT=256,Fs=fs)plt.xlabel("enhece specgram")  plt.show()plt.imshow(librosa.amplitude_to_db(Mag_enhenc,ref=np.max),origin='lower') plt.show()# plt.show()# plt.savefig("suntest_1.bmp")

运行结果如下:

语音增强——基本谱减法及其python实现相关推荐

  1. 【语音去噪】谱减法+维纳滤波语音去噪(带面板+信噪比)【含GUI Matlab源码 1661期】

    ⛄一.简介 1 维纳滤波法 维纳滤波法(wiener filter)也是一个比较经典的传统做法,它的本质是估计出一个线性滤波器,也就是一个向量,这个滤波器会对不同的频段进行不同程度的抑制,其保真效果会 ...

  2. 【语音去噪】谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

    ⛄一.谱减法+维纳滤波+卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单.去噪效果好,被公认为一种经典的去噪算法.语音信号在时域的表示为: yi( t) = si( ...

  3. 谱减法语音降噪的Python实现

    转自:https://github.com/itaa/soja-box/tree/master/enhance_speach 谱减法语音降噪 #!/usr/bin/env python import ...

  4. python音频 降噪_谱减法语音降噪的Python实现教程

    下面是谱减法语音降噪的Python实现 文件speech_enhanced.py #!/usr/bin/env python import numpy as np import wave import ...

  5. python录音文件降噪_Python谱减法语音降噪实例

    代码中用到了nextpow2,其中n = nextpow2(x) 表示最接近x的2的n次幂. #!/usr/bin/env python import numpy as np import wave ...

  6. [投稿]谱减法语音降噪原理

    本文是音频处理的朋友icoolmedia(QQ:314138065)的投稿.各位做视音频技术朋友如果好的原创技术文章并希望通过我的博客分享给大家,也欢迎投稿到我的邮箱:leixiaohua1020@1 ...

  7. python从语音生成语谱图

    python从语音生成语谱图 文章目录 python从语音生成语谱图 生成语谱图的过程 引入必要的库 语音生成语谱图 结果图 语音信号的原始数据 语音信号转为语谱图 生成语谱图的过程 参考文档 预增强 ...

  8. matlab 的谱相减语音增强算法的研究,基于MATLAB的谱相减语音增强算法的研究

    语音处理 谱减法 语音增加 去噪 维普资讯 http://www.wendangwang.com 第2卷第3 3期 文章编号:06- 3 8 2 0 ) 3-07 0 10 9 4 (0 6 0 2 ...

  9. 【语音去噪】基于matlab谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

    ⛄一.谱减法+维纳滤波+卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单.去噪效果好,被公认为一种经典的去噪算法.语音信号在时域的表示为: yi( t) = si( ...

最新文章

  1. Python如何在控制台显示进度条
  2. C#中全局作用域的常量、字段、属性、方法的定义与使用
  3. Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
  4. 深度学习2.0-7.tensorflow的高阶操作之数据统计
  5. opencv获取人脸眼镜位置_用opencv检测人眼并定位瞳孔位置
  6. 视频教程-程序员面试宝典——助你拿到好offer-招聘/面试
  7. 标准正态分布怎么算_标准正态分布函数的快速计算方法
  8. HDAO 全新项目落地,带动区块链新一轮牛市
  9. 计算机专业今日份例句
  10. 点击劫持(clickjacking)
  11. 【A Neural Algorithm of Artistic Style】 Pics
  12. 为什么要用MQ,MQ是什么?(消息队列)
  13. 高斯模糊的算法(高斯权重)
  14. Centos Backup
  15. 开机动画、反编译、Android 中执行命令
  16. 黑莓省电模式 for BlackBerry 9900 9930 9850 OS7.1
  17. 基于stm32mini开发板的简易函数发生器和简易示波器
  18. 持续编程--切身体会
  19. 使用EasyTouch一分钟简单制作摇杆
  20. 电子技术应用: 基于ADAS的汽车倒车防碰撞系统设计与研究

热门文章

  1. 场景生成及编辑3D定位论文阅读
  2. 超级玛丽Simple版本workshorp第一次练习
  3. 陈为浙江大学计算机学院,浙大陈为
  4. 第七周项目30-分文件用数组求员工工资
  5. 故障处理 软件 需求_几款软件解决日常办公生活所有图片处理需求!
  6. News in IT
  7. 服务器芯片维修,基于英特尔六核64位“服务器级”处理芯片
  8. C++:简易的空战游戏
  9. c++ Builder TMemo控件自动滚动
  10. dnf剑魂buff等级上限_DNF: 剑魂为了调戏团长, 穿一套兵法去漩涡, 却被团长疯狂挽留...