程序 1:基本 LMS 算法
% 该程序实现时域 LMS 算法,并用统计的方法仿真得出不同步长下的收敛曲线
clear % 清空变量空间
g=100; % 统计仿真次数为 g
N=1024; % 输入信号抽样点数 N
k=128; % 时域抽头 LMS 算法滤波器阶数
pp=zeros(g,N-k); % 将每次独立循环的误差结果存于矩阵 pp 中,以便后
% 面对其平均
u=0.001; % 收敛因子
for q=1:g
t=1:N;
a=1;
s=a*sin(0.5*pi*t); % 输入单频信号 s
figure(1);
plot(t,real(s)); % 信号 s 时域波形
title('信号 s 时域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,3); % 加入均值为零的高斯白噪声,信噪比为 3dB
% 设置初值
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
for b=1:N-k
bi(b)=sum(pp(:,b))/g; % 求误差的统计平均
end
figure(2); % 算法收敛曲线
t=1:N-k;
plot(t,bi);
hold off % 将每次循环的图形显示结果保存下来
程序 2 归一化 LMS 算法
MATLAB 程序实现如下:
1. NLMS 算法 1 次实验