LMS算法仿真(Matlab)
(2009-02-07 19:13:39)
标签:
杂谈 |
分类: 学术讨论 |
程序1:基本LMS算法
%
clear
g=100;
N=1024;
k=128;
pp=zeros(g,N-k);
u=0.001;
for
q=1:g
t=1:N;
程序2
MATLAB程序实现如下:
1. NLMS算法1次实验
%
%
clear;
N=500;
db=20;
sh1=sqrt(10^(-db/10));
u=1;
error_s=zeros(1,N);
for
for n=3:N;
end
z=M+V;
for n=8:N;
end
for n=2:11;
end
for n=12:N;
end
for n=11:N;
end
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
for
end
for n=8:N;
end
for n=2:11;
end
for n=12:N;
end
for n=11:N;
end
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次实验误差平方的均值曲线');
基于LMS算法的系统辨识
clear
clc
ee=0;
fs=800;
det=1/fs;
f1=100;
f2=200;
t=0:det:2-det;
x=randn(size(t))+cos(2*pi*f1*t)+cos(2*pi*f2*t);
%未知系统
[b,a]=butter(5,150*2/fs);
d=filter(b,a,x);
%自适应FIR滤波器
N=5;
delta=0.06;
M=length(x);
y=zeros(1,M);
h=zeros(1,N);
for
end
X=abs(fft(x,2048));
Nx=length(x);
kx=0:800/Nx:(Nx/2-1)*(800/Nx);
D=abs(fft(d,2048));
Nd=length(D);
kd=0:800/Nd:(Nd/2-1)*(800/Nd);
Y=abs(fft(y,2048));
Ny=length(Y);
ky=0:800/Ny:(Ny/2-1)*(800/Ny);
figure(1);
subplot(3,1,1)
plot(kx,X(1:Nx/2));xlabel('Hz')
title('原始信号频谱')
subplot(3,1,2)
plot(kd,D(1:Nd/2))
title('经未知系统后信号频谱');xlabel('Hz')
subplot(3,1,3)
plot(ky,Y(1:Ny/2))
title('经自适应FIR滤波器后信号频谱');xlabel('Hz')