8527 发表于 2006-12-16 13:37

大家帮忙看看一个关于LMS算法的小程序吧

我是个新手,学习自适应滤波后想编个小例子练练,用了基本LMS算法,更新步长mu的取值是自己试了几次试出来的(其实我是看书上确定mu的公式太难了就懒省事了)。
输入信号是正弦波加高斯白噪声,关键是想绘制出迭代次数n和均方误差的关系图,算法的matlab语言描述一定是有问题的,更奇怪的是我绘的第二个坐标里怎么没图像阿。下面附上程序和截图

clear
clc
t=0:0.01:5;
s=sin(2*pi*t);
d=sin(2*pi*t);
s_noise=randn(size(t));
u=s+s_noise;

mu=0.0002;
M=32;                  %指定滤波器阶数
W=zeros(1,M);          %权系数初始化
for n=1:1000 ;          % LMS
y1=conv(u,W);         
y=y1(1:length(d));
e=d-y;
W=W+mu*u*e';
E=d-y ;
J=(E*E');
J1=mean(E*E');
J=20*log10(abs(J1))%
end;

figure(1);
subplot(2,1,1),plot(t,s,t,u);legend('s','u');
title('滤波前');;
subplot(2,1,2),plot(t,s,t,y);legend('s','y');
title('滤波后');
figure(2);
plot(n,J);title('学习曲线');

[ 本帖最后由 8527 于 2006-12-16 16:40 编辑 ]

xjzuo 发表于 2006-12-16 15:47

回复

第二个图之所以"没图像",是因为在你的程序中,
J 只是一个数,只能绘出一点而已.
具体的你自己再看看,相信应该知道改哪里了.

[ 本帖最后由 xjzuo 于 2006-12-16 15:49 编辑 ]

8527 发表于 2006-12-16 16:39

回复 #2 xjzuo 的帖子

谢谢你,我在看看

回忆的路上 发表于 2006-12-17 10:50

算均方误差的时候
应该是e.^2
而不是e*e'
我也在学习这几个算法
遇到点问题
我的帖子:
http://forum.vibunion.com/thread-34727-1-1.html
交流一下吧
页: [1]
查看完整版本: 大家帮忙看看一个关于LMS算法的小程序吧