音频噪声抑制(2):维纳(Wiener)滤波器篇

之前的文章讲了使用经典滤波器来抑制噪声。

Review:噪声抑制之经典滤波器篇

里面提到,“用经典滤波器抑制噪声,非常简单。如果噪声的功率谱PSD和有用信号功率谱PSD没有重叠的话,那可以实现非常好的效果。

但是,如果有重叠,去噪的效果就不是特别理想了。因为在复指数信号空间里面,没办法把有用信号和噪声信号分离啊。”


正是由于“噪声谱和有用信号谱可能重叠”,所以发展了维纳滤波器。

前面的文章对维纳滤波器的设计也讲过了。

Review:维纳滤波器的设计


这篇文章,就是真实地来操作一下,设计一个维纳滤波器来抑制噪声。


因为没有去录音,所以噪声源还是matlab里的randn产生的高斯过程的数据。

再假设高斯过程并不是直接加入有用数据的,而是经过了一个“信道”,发生了一些变化,比如,AR过程。


然后就是分两步了。

1. 训练过程,用已知的训练信号和已知的接收信号,通过解方程,求得滤波器系数;

2. 滤波器系数不变,用这组系数对此后接收到的信号进行滤波,实现噪声抑制。


代码比较简单,所以直接出来了。


主函数。


维纳滤波器设计的函数。


其中,加入噪声的代码如下。

主要是要注意采样率,还有要根据信噪比重新调整噪声幅度。


效果示意图。


训练阶段。


滤波阶段。



求解方程得到的滤波器的频率响应。



看得出来,因为是语音嘛,所以,设计出来的滤波器的性质可能更多的还是低通…

总之,这是一种在整个频率范围内的,均方意义下的最优……


最后,因为维纳滤波器的前提是,信号与噪声不相关,信号与噪声宽平稳,……

反正约束条件还是挺多的,所以,虽然对信号的噪声抑制效果,比经典滤波器的要好,

但是,为了得到更好的效果,还需要利用更先进的技术。比如,之后要讲的,自适应滤波器(adaptive filter)。


敬请期待。谢谢观赏。

你可能感兴趣的:(filter,matlab,去噪,维纳,weiner)