随机信号包括了确定信号和随机噪声两部分。维纳滤波的本质是设计一组冲击响应的函数,抑制信号中的随机噪声部分,或者说非预期信号部分,使得信号与预期值的均方误差达到最小。
在开始维纳滤波的介绍前,先描述一下几个基本的概念 以下只给出离散过程的公式
自相关函数 为了描述随机变量X(n),X(n+t),在不同时刻下的相互联系,引入了自相关函数 t为间隔,t>0。 R x x ( t ) = E [ X ( n ) ∗ X ( n + t ) ] R_{xx}(t) = E[X(n)*X(n+t)] Rxx(t)=E[X(n)∗X(n+t)] 作为一种预期,这里自相关函数只与间隔有关,与起始时间无关。同时,要注意到,自相关函数是关于时间间隔t的偶函数,既有 R x x ( t ) = R x x ( − t ) R_{xx}(t)=R_{xx}(-t) Rxx(t)=Rxx(−t)互相关函数 描述不同随机过程引入的随机序列的相互关系 R X Y ( t ) = E [ X ( n ) ∗ Y ( n + t ) ] R_{XY} (t)= E[X(n)*Y(n+t)] RXY(t)=E[X(n)∗Y(n+t)] 并且满足: R X Y ( t ) = R Y X ( − t ) R_{XY} (t)= R_{YX} (-t) RXY(t)=RYX(−t)维纳滤波原理 本质上,维纳滤波是设计一个冲击响应函数h,对观察到的信号序列X进行滤波,使得其与期望信号S的最小平方和达到最小值。 假设信号S的长度为N,下标从0开始计算, S = [ s ( 0 ) , ⋯ , s ( N − 1 ) ] , s ( i ) ∈ R S = [s(0),\cdots,s(N-1)],s(i) \in \mathbb{R} S=[s(0),⋯,s(N−1)],s(i)∈R, 对于滤波器h而言,其滤波过程如下, 对n时刻的信号估计值 s ^ ( n ) = ∑ m = 0 n h ( m ) x ( n − m ) \hat{s}(n) = \sum_{m=0}^{n}h(m)x(n-m) s^(n)=m=0∑nh(m)x(n−m) 维纳滤波器的目标如下: m i n E ( e n 2 ) = E ( [ s ( n ) − s ^ ( n ) ] 2 ) min \ E(e_n^2) = E([s(n)-\hat{s}(n)]^2) min E(en2)=E([s(n)−s^(n)]2) 按 h ( i ) h(i) h(i)对上式进行求导,由最小值条件得到 E ( [ s ( n ) − s ^ ( n ) ] ∗ x ( n − i ) ) = 0 ⇒ E [ s ( n ) x ( n − i ) ] − E [ ∑ m = 0 n h ( m ) x ( n − m ) ∗ x ( n − i ) ] = 0 E([s(n)-\hat{s}(n)]*x(n-i) )= 0 \Rightarrow \\ E[s(n)x(n-i)]- E[\sum_{m=0}^{n}h(m)x(n-m)*x(n-i)] =0 E([s(n)−s^(n)]∗x(n−i))=0⇒E[s(n)x(n−i)]−E[m=0∑nh(m)x(n−m)∗x(n−i)]=0 整理上式,结合相关函数的性质可以得到 E [ s ( n ) x ( n − i ) ] = R s x ( − i ) = R x s ( i ) E [ h ( m ) x ( n − m ) ∗ x ( n − i ) ] = h ( m ) E ( x ( n − m ) ∗ x ( n − i ) ) = h ( m ) R x x ( m − i ) R x s ( i ) = ∑ m = 0 n h ( m ) R x x ( m − i ) E[s(n)x(n-i)] = R_{sx}(-i) =R_{xs}(i) \\ E[h(m)x(n-m)*x(n-i)] = h(m)E(x(n-m)*x(n-i)) = h(m)R_{xx}(m-i) \\ R_{xs}(i) = \sum_{m=0}^{n}h(m)R_{xx}(m-i) E[s(n)x(n−i)]=Rsx(−i)=Rxs(i)E[h(m)x(n−m)∗x(n−i)]=h(m)E(x(n−m)∗x(n−i))=h(m)Rxx(m−i)Rxs(i)=m=0∑nh(m)Rxx(m−i) 对于长度为N的滤波器h,则有 [ R x s ( 0 ) ⋮ R x s ( i ) ⋮ R x s ( N − 1 ) ] = [ R x x ( 0 ) ⋯ R x x ( i ) ⋯ R x x ( N − 1 ) ⋮ ⋱ ⋮ ⋮ R x x ( − i ) ⋯ R x x ( 0 ) ⋯ R x x ( N − 1 − i ) ⋮ ⋮ ⋱ ⋮ R x x ( 1 − N ) ⋯ R x x ( i − N + 1 ) ⋯ R x x ( 0 ) ] [ h ( 0 ) ⋮ h ( i ) ⋮ h ( N − 1 ) ] \begin{bmatrix} R_{xs}(0) \\ \vdots \\ R_{xs}(i) \\ \vdots \\R_{xs}(N-1) \end{bmatrix}= \begin{bmatrix} R_{xx}(0)& \cdots & R_{xx}(i) & \cdots & R_{xx}(N-1)\\ \vdots&\ddots & \vdots& & \vdots\\ R_{xx}(-i) & \cdots & R_{xx}(0) & \cdots & R_{xx}(N-1-i)\\ \vdots& & \vdots &\ddots & \vdots\\ R_{xx}(1-N) & \cdots & R_{xx}(i-N+1) & \cdots & R_{xx}(0) \end{bmatrix} \begin{bmatrix} h(0) \\ \vdots \\ h(i) \\ \vdots \\h(N-1) \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡Rxs(0)⋮Rxs(i)⋮Rxs(N−1)⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡Rxx(0)⋮Rxx(−i)⋮Rxx(1−N)⋯⋱⋯⋯Rxx(i)⋮Rxx(0)⋮Rxx(i−N+1)⋯⋯⋱⋯Rxx(N−1)⋮Rxx(N−1−i)⋮Rxx(0)⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡h(0)⋮h(i)⋮h(N−1)⎦⎥⎥⎥⎥⎥⎥⎤ 将上式进行简化,得到 R X S = R X X ∗ h ⇒ h = R X X − 1 R X S RXS =RXX*h \Rightarrow h = RXX^{-1}RXS RXS=RXX∗h⇒h=RXX−1RXS R X X RXX RXX是一个对称矩阵,且对角线元素都是 R x x ( 0 ) R_{xx}(0) Rxx(0),在下面构造RXX矩阵的时候利用了这一点。和卡尔曼滤波一样,维纳滤波是信号处理中一种经典的滤波算法。上述的互相关函数可以借用matlab的xcorr函数计算得到,这里为了完整地了解整个过程计算过程,使用自己编写的代码。