@[TOC]维纳滤波器及其matlab仿真
一、维纳滤波器原理
维纳滤波作为一种基于最小均方误差准则的最优线性滤波器,用于从含噪信号中恢复原始信号,其核心思想是频域信噪比加权,在信号处理、通信、图像等领域有广泛应用,基本模型如下:
y ( n ) = x ( n ) + w ( n ) y(n) = x(n) + w(n) y(n)=x(n)+w(n)
其中: y(n):观测到的信号,x(n):原始信号,w(n):加性噪声。
在频域,维纳滤波器的传递函数H(f)为:
H ( f ) = P x y ( f ) P y y ( f ) H(f) = \frac{P_{xy}(f)}{P_{yy}(f)} H(f)=Pyy(f)Pxy(f)
其中: P x y ( f ) : P_{xy}(f): Pxy(f): 信号和观测信号的互功率谱, P y y ( f ) : P_{yy}(f): Pyy(f):观测信号y的自功率谱。
若信号 x ( n ) x(n) x(n)和噪声 w ( n ) w(n) w(n)不相关,维纳滤波器可简化为
H ( f ) = P x x ( f ) P x x ( f ) + P w w ( f ) H(f) = \frac{P_{xx}(f)}{P_{xx}(f)+P_{ww}(f)} H(f)=Pxx(f)+Pww(f)Pxx(f)
其中: P x x ( f ) : P_{xx}(f): Pxx(f): 信号的功率谱, P w w ( f ) : P_{ww}(f): Pww(f):噪声的功率谱。
二、matlab仿真
1、代码
%------Function:Denoise --------------------
%------Remark:Using Wiener Filter ----------
%------Time:2025.06.19----------------------
%------Author:Clemence----------------------
clc;
close all;
clear all;
%--------------Set Para-------------------------
f1 = 30;
A = 1;
duration =20;
fs = 99;
t = 1/fs;
%--------------Create Signal---------------------
t0 = 0:t:duration-t;
x = A*sin(2*pi*f1*t0);
noise = 0.1*rand(size(x));
xn = x+ noise;
%--------------Calculate Filter Coefficient------
yn = fft(x);
xn_power = abs(yn).^2/length(yn);
noise_power =var(noise);
wiener = xn_power./(xn_power+noise_power);
wiener(wiener<0)=0;
%--------------Wiener Filter ---------------------
x_hat = wiener.*yn;
xf = real(ifft(x_hat));
%--------------Plot Result -----------------------
figure;
subplot(3,1,1)
plot(10*log10(abs(fft(x))));
legend('原始信号');
subplot(3,1,2)
plot(10*log10(abs(fft(xn))));
legend('含噪信号');
subplot(3,1,3)
plot(10*log10(abs(fft(xf))));
legend('维纳滤波后信号');
2、仿真结果
三、总结
示例中原始信号为标准正弦信号,噪声为随机高斯白噪声。从仿真结果可以看出,维纳滤波后信号信噪比大大提高。