维纳滤波




维纳滤波_第1张图片
举例:基于频域维纳滤波的语音增强

还是利用上面的模型:

y(n)=x(n)+w(n)

这里y(n)是麦克风接收的带噪语音,x(n)是干净语音信号,w(n)为白噪声。显然相关函数我们无法得知。

利用一种近似的处理思路:利用前面几个分帧不带语音,估计噪声,从而得到噪声的功率谱近似,利用带噪语音功率减去噪声功率,得到

H(ωk) = Pxy(ωk) / Pyy(ωk) = Pxx(ωk) / (Pxx(ωk)+Pnn(ωk)) = (Pyy(ωk)−Pnn(ωk))/ Pyy(ωk)

利用估计出的维纳滤波器,即可实现信号的频域滤波。这里只是想到的一个实际例子,至于参数估计、迭代方式则是百花齐放了。

附上主要代码:

nw = 512; ni = 64;
NIS = 100;
Y = fft(enframe(y,hamming(nw),ni)');
Yab = abs(Y);
Nest = mean(Yab(:,1:NIS),2);
Yest = zeros(size(Y));
for i = 1:size(Y,2)
    Yest(:,i) = Yab(:,i).*((Yab(:,i)-Nest)./Yab(:,i));
end
Ye = Yest.*exp(1j*angle(Y));
result = zeros(1,length(y));%estimation
for i =1:size(Y,2);
    pos = ((i-1)*ni+1):((i-1)*ni+nw);
   result(pos) = result(pos)+real(ifft(Ye(:,i))).';
end
result = result/max(abs(result));

上面思路处理结果:
维纳滤波_第2张图片

可以看出维纳降噪多少还是有些效果的,H(ωk) = Pxy(ωk) / Pyy(ωk) = Pxx(ωk) / (Pxx(ωk)+Pnn(ωk))= 11 + 1/SNR可以看出SNR越小,维纳滤波器衰减越大。

你可能感兴趣的:(维纳滤波)