1 简介
本文主要目的是回顾和巩固维纳滤波的基础和应用。
1.1 对象
一维音频信号,带高斯随机噪声。
1.2 约定
期望信号/纯净信号序列: x(n)
噪声信号序列: v(n)
带噪信号序列: y(n)
序列长度: L
维纳滤波器阶数:M
1.3 假设
信号是平稳的:也就是说在过去的一段时间和现在的一段时间内,纯净信号和噪声的均值、方差等信息是不变的,这是利用过去信息估计现在信息的基础。
期望信号与噪声是不相关的:期望信号就是理想中的纯净信号。
信号都是零均值的:这有利于计算方差。
2 基础知识
2.1 自相关向量ryy的元素是如何计算的?
ryy的元素ryy(i)是向量y的自相关函数的第i个值。ryy(i)=sum(y[i]*y[i])/L;当i=0时,ryy(0)就是y的方差。利用matlab库函数的实现方法:
ryy_ =xcorr(y,M,'biased'); %这句话计算出来的互相关函数值是2L-1个,关于L对称,M是阶数,也即是相关向量的长度
ryy =ryy_ (L+1:end); % 这里从M+1开始,是因为matlab起始序列号是1,而不是0
2.2 自相关矩阵Ryy是怎么得到的?
得到了自相关向量Ryy就可以构建出来了,利用toeplitz函数即可:
Ryy=toeplitz(ryy);
2.3 互相关向量怎么得到?
自相关都得到了,互相关就是在计算相关函数的时候,第二个变量换成其他变量。
ryx =xcorr(y,x,M,'biased');
3 维纳滤波
核心思想是滤波后的信号与纯净信号的均方误差最小:
这就是维纳意义下均方误差最小的FIR滤波器。
x是未知的,因此上述滤波器是不可得到的。
而噪声的自相关向量我们可以预估。
利用假设,ryx=ryy-rvv。
所以,估计的时刻k的输出就用hw和y来计算得到:
循环使用即可得到所有的输出估计信号。
这一步可以利用matlab的filter函数完成:
filter(h,1,y)