自适应滤波去噪

      自适应滤波器具有在未知环境下良好的运作并跟踪输入统计量随时间变化的能力。尽管对于不同的应用有不同的实现结构,但是他们都有一个基本的特征:输入向量X(n)和期望响应d(n)被用来计算估计误差e(n),即e(n)=d(n)-X(n),并利用此误差信号构造一个自适应算法的性能函数(比如均方误差MSE),并随数据的不断输入自适应地更新此性能函数,目标是最小化此性能函数,在此过程中不断地更新调整滤波器的滤波参数,使得这个参数在前面的最小化性能函数所使用的准则下最优,从而达到滤波效果,实现自适应过程。自适应滤波器主要应用有:预测、辨识、反建模、干扰抵消

  实现自适应滤波器的算法有很多,比较经典的有:LMS,RLS。其中LMS算法是属于梯度类算法,在1996年被Hassibi等证明了在准则下为最优,失调系数和收敛性可以通过合理的选取收敛因子u,但是如果输入相关矩阵的特征值比较分散时,算法的收敛性变差,故而后来又出现一些改进算法,比如NLMS。RLS是递推算法,准则是最小二乘准则,属于精确分析,相对于LMS滤波,RLS对于非平稳信号的适应性要强很多。

  自适应滤波器可以由不同的结构来实现。目前主要有两种结构:FIR、IIR。前者也可以称为横向结构,易于实现,但是存在收敛性差的问题,后者主要是存在系统可能不稳定的问题。

  自己根据一些matlab书籍上的例程做了一个LMS算法的基本实验,在这里要说一下,有些书籍真是非常的不负责任,源代码乱写,其说明更是漏洞百出。误人子弟也啊。废话不说了,本人写的代码如下:

clear;
clc;
N=150;
length=10000;
t=0:1/(N+length):1-1/(N+length);
s=sin(4*pi*t);
n=randn(size(t));
x=s+n;
w=zeros(1,N);
e=zeros(1,length);
E=zeros(1,length);
u=0.00174;
for i=1:length
    y(i)=x(i:i+N-1)*w';
    e(i)=s(i)-y(i);
    w=w+2*u*e(i)*x(i:i+N-1);
    E(i)=e(i)*e(i);
end
figure(1);
subplot(3,1,1);
plot(t,x);
axis([0 1 -5 5]);
title('带噪声信号');
subplot(3,1,2);
plot(t,s);
axis([0 1 -1.1 1.1]);
title('期望信号');
subplot(3,1,3);
plot(0:1/(N+length):(length-1)/(N+length),y);
axis([0 1 -1.1 1.1]);
title('滤波后信号');
figure(2);
plot((1:length),E);
axis([0 10000 0 0.1]);
title('误差')

结果如下:

  这里我使用的是150个抽头的FIR,主要是因为我的DE2-70的cycloneiiEP2C70 FPGA内嵌的是150个硬乘法器,故而一般就以150作为抽头指标,现在的实验对后续的研究会有一些帮助。一般抽头数是越多越好,但是最少都要有两位数要不得不到好的滤波效果。上图可以看出,此自适应滤波器有良好的滤波效果。

 

【参考文献】 
  [1] 丁玉美,阔永红,高新波 A . 数字信号处理-时域离散随机信号处理 [M] .西安:西安电子科技大学出版社, 2002. 
      [2] 万建伟,王玲. 信号处理仿真技术 [M] .长沙:国防科技大学出版社, 2008 . 
  [3] 薛年喜. MATLAB在数字信号处理中的应用(第2版) [M] .北京:清华大学出版社, 2008 .

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值