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

1 简介

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

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 仿真结果

4 参考文献

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值