%lms算法仿真
g=100; %统计仿真次数为g
N=1024;% 输入信号抽样点数
k=128;% 滤波器阶数
pp=zeros(g,N-k);% 将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均
u=0.00026;% 滤波器收敛因子
for q=1:g
t=1:N;
a=1;
s=a*sin(0.05*pi*t);%输入单信号s
figure(1);
subplot(411)
plot(s)
title('信号s时域波形');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5);%加入均值为0的高斯白噪声
%设置初值
y=zeros(1,N);%输出信号y
y(1:k)=xn(1:k);%将输入信号xn的前k个值作为输出y的前k个值
w=zeros(1,k);%设置抽头加权初值
e=zeros(1,N);%误差信号
%用LMS算法迭代滤波
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(412);
plot(xn);
title('信号s加噪声后的时域波形');
subplot(413)
plot(y);
title('自适应滤波后的输出时域波形');
subplot(414);
plot(e);
title('估计误差e(t)的时域波形');
for b=1:N-k
bi(b)=sum(pp(:,b))/g;
end
figure(2);
t=1:N-k;
plot(t,bi,'r');
title('收敛曲线');
hold on