自适应滤波器MATLAB仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自适应滤波器MATLAB仿真
摘要:本文介绍了自适应滤波器的工作原理,以及推导了著名的LMS(Least mean squares)算法。以一个例子演示了自适应滤波器的滤波效果。实验结果表明,该滤波器滤波效果较好。
关键词:自适应滤波器 MATLAB7.0 LMS算法
Simulate of adaptive filter based on MATLAB7.0
Abstract:This article described the working principle of adaptive filter and deduced the well-known LMS algorithm. Take an example to demonstrate the adaptive filters filtering effects. The results show that the filter has an effective way to filter single.
Key words:LMS algorithm Adaptive Filter Matlab7.0
1 引言
由Widrow B等提出的自适应滤波理论,是在维纳滤波、卡尔曼滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有更强的适应性和更优的滤波性能,从而广泛应用于通信、系统辨识、回波消除、自适应谱线增强、自适应信道均衡、语音线性预测和自适应天线阵等诸多领域[1]。自适应滤波器最大的优点在于不需要知道信号和噪声的统计特性的先验知识就可以实现信号的最佳滤波处理。本文通过一个具体例子和结果论证了自适应滤波器的滤波效果。
2 自适应滤波原理及LMS算法
2.1 自适应滤波原理
自适应滤波原理图[2],如图1所示。
图1自适应滤波原理图
在自适应滤波器中,参数可调的数字滤波器一般为FIR数字滤波器,IIR数字滤波器或格型数字滤波器。自适应滤波分2个过程。第一,输入信号想x(n)通过参数可调的数字滤波器后得输出信号y(n),y(n)与参考信号d(n)进行比较得误差信号e(n);第二,通过一种自适应算法和x(n)和e(n)的值来调节参数可调的数字滤波器的参数,即加权系数,使之达到最佳滤波效果。
2.2 LMS 算法及相关参数的选择
LMS 算法最核心的思想是用平方误差代替均方误差[2]。因此该算法简化了计算量。在自适应噪音抵消系统中,如自适应滤波器参数选择不当,就达不到应有的滤波效果,而且还可能得到适得其反的效果。因此针对不同的信号和噪声应选择相应的参数 [3]。可见,参数的选择对滤波效果是至关重要的。下面仅以L 阶加权自适应横向滤波器为例,推导LMS 算法的公式。L 阶加权自适应横向滤波器,如图2所示。
图2 L 阶加权自适应横向滤波器
LMS 算法公式推导:
设()()()()1......x T
n x n x n x n L =--⎡⎤⎣⎦;
()()()()01......w T L n w n w n w n =⎡⎤⎣⎦;其中()x n 为输入信号,()w n 为加权系数。 误差信号:()()()()()()()()()T T x w w x e n d n y n d n n n d n n n =-=-=-
(1) 公式(1)中d (n )为参考信号,y(n) 为输出信号。
误差信号均方值:()()2n E e n ξ⎡⎤=⎣⎦ (2)
由公式(1)和公式(2)得:
均方误差性能曲面的梯度:
()()()()()()()ˆˆ22x w w n e n n n e n e n n ξ∂∂∇≈∇===-∂∂ (3)
而最陡下降法迭代计算全矢量公式:()()()1w w n n n μ+=-∇ (4) 公式(4)中μ为控制稳定性和收敛速度的参数。
由公式(3)和公式(4)得:()()()()12w w x n n e n n μ+=+ (5) 公式(5)说明了LMS 算法的核心是用每次迭代的粗略估计值代替了实际的精确值,这样大大简化了计算量,但是不可否认,加权系数不可能准确的沿着理想的最陡下降路径来调整自身的参数,而加权系数与µ有着密切的关系。因此,适当的选择自适应滤波器性能参数µ显得格外重要。
3 MATLAB7.0仿真
本例通过设计一个二阶加权系数自适应横向FIR滤波器,对一正弦信号加噪声信号进行滤波[4]。为了实现该功能,得先生成一个标准正弦波信号s(n)和一个随机噪声信号n(n),然后将s(n)与n(n)相加就得到了加噪后的正弦信号x(n),再依照由LMS算法推导出来的公式(5),设计自适应滤波算法,对噪声干扰信号进行滤波,最后得到滤波后的信号e(n),实现程序代码如下:
clear
t=0:1/10000:1-0.0001;%设置迭代次数
s=sin(2*pi*t);%标准正弦信号
n=randn(size(t));%与时间t等长随机信号
x=s+n;%加噪信号
w=[0,0.5];%初始2阶加权系数
u=0.00026;%最佳参数
for i=1:9999;%自适应算法
y(i+1)=n(i:i+1)*w';
e(i+1)=x(i+1)-y(i+1);
w=w+2*u*e(i+1)*n(i:i+1);
end;
%画图程序
figure(1)
subplot(4,1,1)
plot(t,n);
title('Noise signal');xlabel('t');ylabel('n(t)');
subplot(4,1,2)
plot(t,s);
title('Sinusoidal signal');xlabel('t');ylabel('s(t)');
subplot(4,1,3)
plot(t,x);
title('Sinusoidal signal with noise');xlabel('t');ylabel('x(t)');
subplot(4,1,4)
plot(t,e);
title('the result of filtering');xlabel('t');ylabel('e(t)');