⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7-4.m

📁 matlab数字信号与应用源代码7
💻 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 + -