📄 lmsandrls.m
字号:
clc;
clear;
close all;
nx=randn(1,500);
b=[1 -1.6 0.8];
a=1;
e=3;
f=[1 2 1];
x=filter(f,e,nx);
d=filter(b,a,x);
n=1:length(d);
% LMS
miu=0.02;
w=zeros(3,500);
e(1)=0;
e(2)=0;
y(1:3)=0;
for n=3:500;
e(n)=d(n)-[x(n) x(n-1) x(n-2)]*w(:,n);
w(:,n+1)=w(:,n)+2*miu*e(n).*[x(n) x(n-1) x(n-2)]';
y(n+1)=[x(n) x(n-1) x(n-2)]*w(:,n+1);
end
figure(1)
subplot(2,1,1)
plot(abs(e))
title('LMS的输出误差曲线')
xlabel('迭代次数(n)')
ylabel('误差幅值')
% RLS
lamda=5;
x=x';
ww=zeros(3,500);
T=10*eye(3);
for i=3:500;
xx=x(i:-1:i-3+1);
enn(i)=d(i)-ww(:,i)'*xx;
k=T*xx/(lamda+xx'*T*xx);
T=(T-(T*xx*xx'*T)/(lamda+xx'*T*xx));
ww(:,i+1)=ww(:,i)+k*enn(i);
end
subplot(2,1,2)
plot(abs(enn))
title('RLS的输出误差曲线')
xlabel('迭代次数(n)')
ylabel('误差幅值')
figure(2)
subplot(3,1,1)
plot(0:500,w(1,:),'r',0:500,ww(1,:),'b');
title('LMS和RLS的权值收敛情况')
legend('LMS','RLS',4);
xlabel('迭代次数(n)');
ylabel('权值幅值')
subplot(3,1,2)
plot(0:500,w(2,:),'r',0:500,ww(2,:),'b');
legend('LMS','RLS');
xlabel('迭代次数(n)')
ylabel('权值幅值')
subplot(3,1,3)
plot(0:500,w(3,:),'r',0:500,ww(3,:),'b');
legend('LMS','RLS',4);
xlabel('迭代次数(n)')
ylabel('权值幅度')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -