Wiener Filter
因为最近看文章接触了维纳滤波,所以这里写一下Weiner Filter的一些简单理解和推导。
基本定义
维纳滤波是一种在含噪声的时序信号把信号提取出来的滤波器,其基本框图如下:
简单的维纳滤波其实就是通过一个FIR滤波器,去除噪声的过程。在这里, h h h的作用也可以理解为: 通过训练集的数据对信号和噪声的建模,然后通过前几个点的信息,预测当前时刻的噪声信号所占的比例,然后去除掉,剩下的就是预测的时序信号了。维纳滤波作为一种使用很广泛的滤波器,其变化的形式也有很多种,可以是单输入输出的,也可以是多输入输出的。 h h h所表示的变换也可以写成非线性; h h h可以是有限长的FIR滤波器,也可以是无限长的IIR滤波器。要取决于当前你所解决的问题。但是维纳滤波的基本思想还是一致的。通过滤波(矩阵或者其他模型的形式)来从信号和噪声的混合中提取信号。所以维纳滤波的核心,就是计算这个滤波器(矩阵 h h h或者模型的参数)。也就是解Wiener-Hopf方程。
本文用比较简单的单输入输出,且只考虑有限长滤波(即认为当前时刻的信号只和前有限个时间点的信号相关)。
公式推导
首先,对于图1中的滤波器:
y ( n ) = x ( n ) ∗ h ( n ) = ( s ( n ) + v ( n ) ) ∗ h ( n ) (1) y(n) = x(n) * h(n) = (s(n)+v(n))*h(n) \tag{1} y(n)=x(n)∗h(n)=(s(n)+v(n))∗h(n)(1)
其中 ∗ * ∗表示卷积, x ( n ) x(n) x(n)表示输入信号, y ( n ) y(n) y(n)表示输出信号, s ( n ) s(n) s(n)表示输入信号中,有用的信号部分; v ( n ) v(n) v(n)表示输入信号中的噪声部分。
维纳滤波的目标是,保证输出 y ( n ) y(n) y(n)和真实信号 s ( n ) s(n) s(n)的差别最小,由于 y ( n ) y(n) y(n)和 s ( n ) s(n) s(n)是时序信号,所以要保证两者的均方误差最小,所以有:
E { e 2 ( n ) } = E { ( y ( n ) − s ( n ) ) 2 } = E { ( x ( n ) ∗ h ( n ) − s ( n ) ) 2 } (2) E\{e^2(n)\} = E\{(y(n)-s(n))^2\} = E\{(x(n)*h(n)-s(n))^2\} \tag{2} E{ e2(n)}=E{ (y(n)−s(n))2}=E{ (x(n)∗h(n)−s(n))2}(2)
即求使得Eq(2)最小的 h h h。所以 E { e 2 } E\{e^2\} E{ e2}对 h h h求偏导。有:
∂ E { e 2 ( n ) } ∂ h = 2 E { e ( n ) ∗ ∂ e ( n ) ∂ h } = 0 (3) \frac{\partial{E\{e^2(n)\}}}{\partial{h}} = 2E\{e(n) * \frac{\partial{e(n)}}{\partial{h}}\} = 0 \tag{3} ∂h∂E{ e2(n)}=2E{ e(n)∗∂h∂e(n)}=0(3)
∂ E { e 2 ( n ) } ∂ h = 2 E { [ ∑ m = 0 N − 1 h ( m ) x ( n − m ) − s ( n ) ] x ( n − j ) } , j = 0 , 1 , . . . , N − 1 (4) \frac{\partial{E\{e^2(n)\}}}{\partial{h}} = 2E\{[\sum_{m=0}^{N-1}{h(m)x(n-m) - s(n)}]x(n-j)\}, j = 0, 1, ... , N-1 \tag{4} ∂h∂E{ e2(n)}=2E{ [m=0∑N−1h(m)x(n−m)−s(n)]x(n−j)},j=0,1,...,N−1(4)
∂ E { e 2 ( n ) } ∂ h = 2 ∑ m = 1 N − 1 h ( m ) E { x ( n − j ) x ( n − m ) } − 2 E { s ( n ) x ( n − j ) } = 0 , j = 0