1 简介

维纳滤波是诺伯特*维纳在二十世纪四十年代提出的一种滤波器,是根据全部过去的和当前的观察数据 来估计信号的当前值,它的解是以均方误差最小条件下所得到的系统的传递函数 H(z)或单位样本响应 h(n)的形式 给出的,因此维纳滤波器也称为最佳线性滤波器.本论文介绍了维纳滤波器的原理并运用 Matlab 软件进行仿真分 析.论文仿真分为两大块,第一:不同信号加入白噪声之后输入维纳滤波器,探讨噪声为白噪声时维纳滤波器对 不同种类信号的滤波降噪效果.第二:选取非周期音频信号加入白噪声之后输入维纳,经典 fir 及自适应滤波器, 对比维纳滤波器与其他滤波器降噪效果.从这两个方面实验展现了维纳滤波器自身特性,得出维纳滤波器具有较 好的性能.

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_去噪

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_数据_02

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_维纳滤波_03

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_数据结构_04

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_去噪_05

2 部分代码

clc
clear all
close all
[x,fs]=wavread('1_NumSound_snr10.wav');
ls=length(x);
xk=x(1:ls);
sound(xk,fs);
figure(1);
plot(x);
title('原始信号');
pause
%sound(xs,fs);
output=WienerScalart96(xk,fs,0.35);
sound(output,fs);
figure(3);
plot(output);
title('去噪信号');
disp('snr=')
snr=SNR_singlech( output,xk(1:length( output)))
Fs = 128;       % 采样频率
L=length(xk);%信号长度
N = 2.^nextpow2(L); %采样点数,采样点数越大,分辨的频率越精确,N>=L,超出的部分信号补为0
Y = fft(x,N)/N*2;   %除以N乘以2才是真实幅值,N越大,幅值精度越高
f = Fs/N*(0:1:N-1); %频率
A = abs(Y);     %幅值
P = angle(Y);   %相值
figure;
subplot(211);plot(f(1:N/2),A(1:N/2));   %函数fft返回值的数据结构具有对称性,因此我们只取前一半
title('幅值频谱')
xlabel('频率(Hz)')
ylabel('幅值')
subplot(212);plot(f(1:N/2),P(1:N/2));
title('相位谱频')
xlabel('频率(Hz)')
ylabel('相位')

3 仿真结果

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_去噪_06

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_去噪_07

4 参考文献

[1]通信工程专业叶祥健, 指导教师张宁教授. 维纳滤波器在信号降噪中的应用. 

【信号去噪】基于维纳滤波算法实现信号去噪matlab代码_数据结构_08