文档章节

一个频域语音降噪算法实现及改进方法

icoolmedia
 icoolmedia
发布于 2016/02/25 21:15
字数 1166
阅读 395
收藏 0

  发现很多朋友想进入语音降噪处理的大门,却很容易被铺天盖地的理论弄的很迷惑,不知道从哪里开始比较好。网上给出的参考文章大多干说理论,没有代码实现。很不利于学习。于是打算写这篇语音降噪的文章,并给出相应的实现代码方便交流和进一步的学习。


一.算法核心思想与流程概要

本文给出的降噪算法的核心流程很简单,主要是两个步骤:

  1. 环境噪声的假设与估计

  2. 频域维纳滤波降噪

这里简单说一下语音相位问题,通常在语音的降噪算法中,是不考虑纯净语音的相位问题的,这是因为理论上可以证明:带噪语音相位就是纯净语音相位的最优估计!

 

二.环境噪声估计

  首先我们假设环境噪声为随机平稳加性噪声、且与语音信号不相关。要注意这个假设对我们很重要,要记住这个算法的前提 条件。这里介绍的噪声估计算法叫做连续谱最小值跟踪,资料出处为“语音增强-理论与实践”一书中第九章中的一部分内容。此算法利用了带噪语音信号在单个频 带的功率通常会衰减到噪声的功率水平。即使在语音活动期间也是如此。

 

算法主要分为两个步骤:

  1. 对各频点带噪语音功率谱进行平滑处理。短时平滑方式为:

这里,为平滑后的第k帧、频点的语音信号功率谱,为平滑因子(通常取值为: )。

  2.对各频点带噪语音功率最小值进行非线性跟踪。

If

  

else

  

end

  这里,算法中的非线性跟踪会连续对噪声功率进行估计,这主要是由于上式中的第二项实现了一个一阶差分运算,是在离散情况下对求导的一种近似。当带噪语音功率增加时,导数值也会增加,因此差分值为正,当带噪语音功率下降的时候,导数为负,噪声估计减小。算法唯一要注意的是:当语音谱上出现很窄的峰值时,可能会导致在语音活动期音对噪声的过估计,进而可能抑制语音。

 

三.频域维纳滤波

  使用维纳滤波进行语音降噪的过程,其实是把降噪过程视为一个线性时不变系统,当带噪语音通过这个系统时,在均方误差最小化准则下,使得系统的输出与期望的纯净语音信号最接近的过程。系统我们用下面的卷积过程来表示:

  其中y(n)为输入信号,为输出信号,如果我们转换到频域,表示为:,则频率处的估计误差为:

  在频域使其均方误差 最小化:

  

     

   

     

         这里为输入信号的功率谱,是输入信号y(n)与期望信号d(n)的互功率谱,为了得到最优的滤波器,我们对均方误差求关于的复导数,并令其等于0,可得:

         由于,求解,得到维纳滤波的通用形式:

         再由于我们假设噪声为加性噪声,且与语音信号不相关,可得:

         将上面两个式子代入维纳滤波器的通用形式,得到频域维纳滤波器:

  其中为频率处的先验SNR。下面的算法实现中将会用到这个结论。当然,如果想使用平方根维纳滤波器,也可以对再进行一次开方,这个就不再多说了。

 

四.可能的改进方法

总的说来,这是一个降噪算法的小实现,可以改进的地方真的是太多了:

l  结合对先验信噪比与后验信噪比的调整算法(如:判决引导法)

l  结合语音存在的概率进行调整

l  使用超几何增益,而不是维纳增益

l  结合盲信号处理与阵列方向信息


相关代码实现可以到我的空间中下载,欢迎就其它改进方法一起讨论!


© 著作权归作者所有

icoolmedia
粉丝 5
博文 2
码字总数 2456
作品 0
海淀
私信 提问
加载中

评论(1)

i
iaiwuli
非常有用!谢谢分享
基于深层神经网络的语音 增强方法研究

近年来,随着深层神经网络(在语音识别领域的成功应用,给了语音增强任务的研宄人员很多启发。的深层非线性结构可以被设计成一个精细的降噪滤波器。同时基于大数据训练,可以充分学 习带噪语...

chenxiao60
2016/06/07
397
0
梁俊斌:音频技术可以延展众多应用场景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/81213202 广州TIT创意园,这里是腾讯在广州的研发团队所在地。LiveVid...

livevideostack
2018/07/26
0
0
再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 经常逛游戏论坛的朋友会深有感触,很多玩家经常会在论坛里吐槽在网吧开黑的体验很差,噪音太...

腾讯云+社区
2018/08/29
0
0
基于TensorFlow Lite的人声识别在端上的实现

通过TensorFlow Lite,移动终端、IoT设备可以在端上实现声音识别,这可以应用在安防、医疗监护等领域。来自阿里巴巴闲鱼技术互动组仝辉和上叶通过TensorFlow Lite实现了一套完整的提取声音特...

LiveVideoStack
2018/04/26
0
0
基于TensorFlow,人声识别如何在端上实现?

现有的人声识别绝大部分在服务端实现,这会带来如下两方面的问题: 1) 当网络较差的情况下会造成较大的延时,带来较差的用户体验。 2) 当访问量较大的情况下,会大量占用服务端资源。 为解决...

技术小能手
2018/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
26分钟前
4
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
28分钟前
4
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部