【信号去噪】基于低通和自适应滤波LMS去噪matlab源码

一、简介

自适应滤波是近30年以来发展起来的关于信号处理技术的方法。它是在维纳滤波、Kalman滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有更强的适应性和更优的滤波性能,从而在工程实际中,尤其在信息处理技术中得到了广泛的应用。
维纳滤波器等滤波器设计方法都是建立在信号特征先验知识基础上的。遗憾的是,在实际应用中常常无法得到信号特征先验知识,在这种情况下,自适应滤波器能够得到比较好的滤波性能。当输入信号的统计特性未知,或者输入信号的统计特性变化时,自适应滤波器能够自动地迭代调节自身的滤波器参数,以满足某种准则的要求,从而实现最优滤波。
自适应滤波的研究对象是具有不确定的系统或信息过程。这里的“不确定性”是指所研究的处理信息过程及其环境的数学模型不是完全确定的。其中包含一些未知因素和随机因素。
自适应滤波一般包括3个模块:滤波结构、性能判据和自适应算法。其中,自适应滤波算法的研究是自适应信号处理中最为活跃的研究课题之一,包括线性自适应算法和非线性自适应算法。非线性自适应算法具有更强的信号处理能力,但计算比较复杂,实际应用最多的仍然是线性自适应算法。
1 自适应滤波的基本原理

2 自适应滤波算法
自适应滤波算法种类
2.1 最小均方误差算法(LMS)
由Widrow和Hoff提出的最小均方误差(LMS)算法,因其具有计算量小、易于实现等优点而在实践中被广泛采用。

2.2 递推最小二乘算法(RLS)

2.3 变换域自适应滤波算法
对于强相关的信号,LMS算法的收敛性能降低,这是由于LMS算法的收敛性能依赖于输入信号自相关矩阵的特征值发散程度。输入信号自相关矩阵的特征值发散程度越小,LMS算法的收敛性能越好。经过研究发现,对输入信号作某些正交变换后,输入信号自相关矩阵的特征值发散程度会变小。于是,Dentino等1979年首先提出了变换域自适应滤波的概念,其基本思想是把时域信号转变为变换域信号,在变换域中采用自适应算法。Narayan等对变换域自适应滤波算法作了全面的总结。
变换域自适应滤波算法的一般步骤是:

2.4 仿射投影算法

2.5 其他
共轭梯度算法
基于子带分解的自适应滤波算法
基于QR分解的自适应滤波算法
其他
其他不再具体说明。
3 自适应滤波算法性能评价
下面对各种类型的自适应滤波算法进行简单的总结分析。

变步长的自适应滤波算法虽然解决了收敛速度、时变系统跟踪速度与收敛精度方面对算法调整步长因子u的矛盾,但变步长中的其它参数的选取还需实验来确定,应用起来不太方便。
对RLS算法的各种改进,其目的均是保留RLS算法收敛速度快的特点而降低其计算复杂性。
变换域类算法亦是想通过做某些正交变换使输入信号自相关矩阵的特征值发散程度变小。提高收敛速度。
而仿射投影算法的性能介于LMS算法和RLS算法之间。
共轭梯度自适应滤波算法的提出是为了降低RLS类算法的杂性和克服某些快速RLS算法存在的数值稳定性问题。
信号的子带分解能降低输入信号的自相关矩阵的特征值发散程度,从而加快自适应滤波算法的收敛速度,同时便于并行处理,带来了一定的灵活性。
矩阵的QR分解具有良好的数值稳定性。

二、源代码

clc;
clear all;
close all;

%% 产生信号源
[X,Fs] = audioread('song.wav');
s = X(:,1); %取出双通道中其中一个通道作为信号源s
audiowrite('原始音频.wav',s,Fs); %创建原始音频.wav
n = length(s);
t=(0:n-1);
figure(1);
subplot(4,1,1);
plot(t,s);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('原始音频信号');
%% 产生均值为0方差为0.1的噪声信号
v = sqrt(0.1)*randn(n,1);

%% 产生AR模型的噪声
ar=[1,1/2]; %AR模型
v_ar=filter(1,ar,v);
% subplot(4,1,2);
% plot(t,v_ar);grid;
% ylabel('幅度');
% xlabel('时间');
% title('AR模型噪声信号');

%% 产生MA模型的噪声 是AR模型的相关噪声
ma=[1,-0.8,0.4,-0.2]; %MA模型
v_ma=filter(ma,1,v);
subplot(4,1,2);
plot(t,v_ma);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('相关噪声信号');

%% 产生期望信号
dn = s + v_ar;
audiowrite('含噪音频.wav',dn,Fs); %创建含噪音频
subplot(4,1,3);
plot(t,dn);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('含噪音频信号');

%% LMS滤波算法
M = 50; %滤波器阶数M
mu = 0.0008; %滤波器的步长
[ylms,W,elms] =LMS(v_ma,dn,M,mu);

%% 绘制去噪后的语音信号
subplot(4,1,4);
plot(t,elms);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('去噪后的音频信号');
audiowrite('去噪音频.wav',elms,Fs);%保存去除噪声的音频

%%
e = s-elms;%剩余噪声
figure(2);
subplot(2,1,1);
plot(t,e);grid;
ylabel('幅度');
xlabel('时间');
title('剩余噪声');

三、运行结果

(0)

相关推荐