?? 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 + -