📄 7-4.m
字号:
%例程7-4 归一化LMS算法
%MATLAB程序实现如下:
%1. NLMS算法1次实验
% N=训练序列长度
% u=收敛因子
clear;
N=500;
db=20;
sh1=sqrt(10^(-db/10));
u=1;
error_s=zeros(1,N);
for loop=1:1
w=0.05*ones(1,11)';
V=sh1*randn(1,N );
K=randn(1,N)-0.5;
x=sign(K);
for n=3:N;
M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);
end
z=M+V;
for n=8:N;
d(n)=x(n-7);
end
a(1)=z(1)^2;
for n=2:11;
a(n)=z(n).^2+a(n-1);
end
for n=12:N;
a(n)=z(n).^2-z(n-11)^2+a(n-1);
end
for n=11:N;
z1=[z(n) z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9) z(n-10)]';
y(n)=w'*z1;
e(n)=d(n)-y(n);
w=w+u./(eps+a(n)).*z1.*conj(e(n));
end
error_s=error_s +e.^2;
end
w
error_s=error_s./1;
n=1:N;
plot(n,error_s);
xlabel('n (当u=1;DB=20时)');
ylabel('e(n)^2');
title('NLMS算法1次实验误差平方的均值曲线');
%2.NLMS算法20次实验
clear;
N=500;
db=20;
sh1=sqrt(10^(-db/10));
u=1;
error_s=zeros(1,N);
for loop=1:20
w=0.05*ones(1,11)';
V=sh1*randn(1,N );
K=randn(1,N)-0.5;
x=sign(K);
for n=3:N;
M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);
end
z=M+V;
for n=8:N;
d(n)=x(n-7);
end
a(1)=z(1)^2;
for n=2:11;
a(n)=z(n).^2+a(n-1);
end
for n=12:N;
a(n)=z(n).^2-z(n-11)^2+a(n-1);
end
for n=11:N;
z1=[z(n) z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9) z(n-10)]';
y(n)=w'*z1;
e(n)=d(n)-y(n);
w=w+u./(eps+a(n)).*z1.*conj(e(n));
end
error_s=error_s +e.^2;
end
w
error_s=error_s./20;
n=1:N;
plot(n,error_s);
xlabel('n (当u=1;DB=20时)');
ylabel('e(n)^2');
title('NLMS算法20次实验误差平方的均值曲线');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -