LMS算法的MATLAB实现
用MATLAB实现LMS算法,将输入和输出信号对比,并给出均方误差曲线。假设滤波器抽头个数为K,数据长度为N。
>> g=100;
N=1024;
k=128;
pp=zeros(g,N-k);
u=0.0002;
for q=1:g
t=1:N;
a=1;
s=a*sin(0.05*pi*t);
figure(1);
subplot(311)
plot(t,real(s));
title('信号s时域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5);
y=zeros(1,N);
y(1:k)=xn(1:k);
w=zeros(1,k);
e=zeros(1,N);
for i=(k+1):N
XN=xn((i-k+1):(i));
y(i)=w*XN';
e(i)=s(i)-y(i);
w=w+u*e(i)*XN;
end
pp(q,:)=(e(k+1:N)).^2;
end
subplot(312)
plot(t,real(xn));
title('信号s加噪声后的时域波形');
subplot(313);
plot(t,real(y));
title('自适应滤波后的输出时域波形');
for b=1:N-k
bi(b)=sum(pp(:,b))/g;
end
figure(2);