近期比较忙,git
抽空出来5.1开源献礼.github
但凡学习音频降噪算法的朋友,确定看过一个算法.算法
<<语音加强-理论与实践>> 中说起到基于对数的最小均方偏差的降噪算法,也就是LogMMSE.学习
资料见:ui
<<Speech enhancement using a minimum mean-square error log-spectral amplitude estimator.>> blog
-----Ephraim, Y. and Malah, D. (1985)ip
以前也是花了很多时间去查阅降噪相关的思路,get
可是最终发现前人的思路,有不少局限性或者说弊端.数学
通常都是提出一种数学先验的假设,换句话说,在paper里讲点故事.it
而后最终,故事的结局都是it works.
但实际应用却差强人意.
而通常的图像降噪流程,见图:
也就是,一个降噪算法的基本组成部分有:
1.噪声提取(用于提取噪声)
2.静音检测(通常检测是否为人声,减小误判)
3.数学先验假设(用于降噪)
固然最小均方偏差的降噪思路,用在图像上同样适用.
可是,大多数音频降噪算法仅仅适配某种特殊状况(特例).
工程化应用时,会发现,
一个坑接着一个坑,
而后不得不妥协.勉强能用就行,
要求过高不现实.
而当年看了logMMSE的思路以后,就很清楚地明白,
这思路是可行的,可是特别鸡肋.
话说如此,可是对做为学习信号处理,音频降噪来讲,
这个是一个特别好的入门示例算法.
至少通过实践以后,你心中能有了个大概的印象.
音频降噪是一个什么样的工做,会碰到什么样的难点.
logmmse的各类实现,在github搜索一下,都能找获得.
这里,并不打算解析logmmse的算法细节.
只是分享一段很是简单有效的相似logmmse算法的c语言实现.
说是相似,不如说,
思路来自logmmse,只是更加的简洁明了.(自我觉得)
本身动手,丰衣足食.
稍微改进一下,能够进一步适配各类环境和状况,
固然也不是那么容易,
例如:
+vad.
+延时记忆机制诸如此类
代码基于本人最近开源的基于傅里叶变换的重采样算法.
https://github.com/cpuimage/FFTResampler
题外话:
在以前为了找各类重采样算法,费心死了.
因此,写一个通用简洁的重采样算法是个人一个待办事项.
重采样算法算是暂时结束了.
https://github.com/cpuimage/resampler
https://github.com/cpuimage/FFTResampler
这两个平时应该是够用了,
下一步要继续作的话,
可能就是音频超分辨率算法了.
除了懒,没别的,能复用就复用了.
回到主题上,这个简易的算法用来去除平稳噪声或底噪,是很是合适的,
固然当前开源实现的算法,是非实时的,
固然稍微改进下能够应用在实时的环境.
值5.1放假之际,开源出来,给你们参考学习.
权当抛砖引玉,一块儿玩耍.
项目地址:
https://github.com/cpuimage/SimpleAudioDenoise
如有其余相关问题或者需求也能够邮件联系俺探讨。
固然一些基础性的问题,一律忽略.
有时间给我写邮件,不如多看点资料书籍.
邮箱地址是: gaozhihan@vip.qq.com