📄 lsl1.m
字号:
% Arithmetic comparision between LSL and LMS
% Latest change: $Date: 2008/3/27 20:36(The fifth change)
% Author: Mr Wu & Mr Gao $Tutor: Professor Jiang
% $Revision: Beta 1.2 $
%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
n = 200; % 迭代次数
m = 2; % 阶数
a1 = 1.4; % 模型参数
a2 = -0.4;
de = 1;
u = 0.005; % 步长
%=================================================
%%%%%%%%%%%%%%%%%%%% 产生序列 %%%%%%%%%%%%%%%%%%%%
en = randn(1,n);
x(1) = en(1); % 赋初值
x(2) = en(2);
nn(1) = 1;
nn(2) = 2;
for L = 3 : n
x(L) = a1*x(L-1)+a2*x(L-2)+en(L);
nn(L) = L;
end
x = x';
%=================================================
plot(nn,x); grid on % 绘制随机过程的一个取样序列
xlabel('n');
ylabel('x(n)');
title('2阶自回归随机过程的取样序列');
% ------------------LSL--------------------
%%%%%%%%%%%%%% 利用LSL算法估计权值a1、a2 %%%%%%%%%%%%%%
% 初始化
eb0(1) = 0; eb1(1) = 0;
d1(1) = 0; d2(1) = 0;
gama0(1) = 1; gama1(1) = 1;
ebf0(1) = de; ebf1(1) = de;
ebb0(1) = de; ebb1(1) = de;
% 迭代计算(按时间n=1,2,...)
for L = 2:n
eb0(L) = x(L);
ef0(L) = x(L);
ebf0(L) = ebf0(L-1)+x(L).^2;
ebb0(L) = ebb0(L-1)+x(L).^2;
gama0(L) = 1;
end
% 1阶时(m=0)
for L = 2:n
d1(L) = d1(L-1)+eb0(L-1).*ef0(L)./gama0(L-1);
kb1(L) = d1(L)./ebb0(L-1);
kf1(L) = d1(L)./ebf0(L);
ef1(L) = ef0(L)-kb1(L).*eb0(L-1);
eb1(L) = eb0(L-1)-kf1(L).*ef0(L);
ebf1(L) = ebf0(L)-d1(L).^2./ebb0(L-1);
ebb1(L) = ebb0(L-1)-d1(L).^2./ebf0(L);
gama1(L-1) = gama0(L-1)-eb0(L-1).^2./ebb0(L-1);
end
% 2阶时(m=1)
for L = 2:n
d2(L) = d2(L-1)+eb1(L-1).*ef1(L)./gama1(L-1);
kb2(L) = d2(L)./ebb1(L-1);
kf2(L) = d2(L)./ebf1(L);
ef2(L) = ef1(L)-kb2(L).*eb1(L-1);
eb2(L) = eb1(L-1)-kf2(L).*ef1(L);
ebf2(L) = ebf1(L)-d2(L).^2./ebb1(L-1);
ebb2(L) = ebb1(L-1)-d2(L).^2./ebf1(L);
gama2(L-1) = gama1(L-1)-eb1(L-1).^2./ebb1(L-1);
end
for L = 1:n
aa1(L) = kb1(L)-kf1(L).*kb2(L);
aa2(L) = kb2(L);
nn(L) = L;
end
figure
plot(nn,aa1,'b',nn,aa2,'c');
grid on
%===============================================
% ---------------------LMS-----------------------
%%%%%%%%%%%%%%%%%%%% 赋初始值 %%%%%%%%%%%%%%%%%%%%
X = [x(2) ; x(1)];
w1 = [0 ; 0]; % 权系数赋初值
e1(2) = x(2)-w1'*X; % 产生误差信号(LMS)
%=================================================
%%%%%%%%%%%%%%%%%%%% 估计权系数 %%%%%%%%%%%%%%%%%%%%
for k = 3 : n
w1 = w1+2*u*e1(k-1)*X; % LMS算法的权系数迭代公式
X = [x(k-1);x(k-2)]; % 下一时刻的输入信号
e1(k) = x(k)-w1'*X; % 下一时刻的输出信号误差e(n)
a11(k) = w1(1);
a22(k) = w1(2);
n1(k) = k;
end
%=================================================
hold on;
plot(n1,a11,'g',n1,a22,'k'); % 绘制LMS算法权系数的收敛特性图
xlabel('n');
ylabel('a1(n),a2(n)');
plotyline(a1,'r');plotyline(a2,'r');
legend('LSL算法a1','LSL算法a2','LMS算法a1','LMS算法a2','理想权值','Location','Best')
title('LSL和LMS算法估计信号模型参数的性能比较 a1=1.558,a2=-0.81');
% ---------初始预测误差剩余对LSL收敛性能的影响------------
% 出示预测误差剩余分别取0.1、1、10
de = [0.1 1 10];
figure
for i = 1:3
% 初始化
ebf0(1) = de(i);
ebb0(1) = de(i);
% 迭代计算(按时间n=1,2,...)
for L = 2:n
eb0(L) = x(L);
ef0(L) = x(L);
ebf0(L) = ebf0(L-1)+x(L).^2;
ebb0(L) = ebb0(L-1)+x(L).^2;
gama0(L) = 1;
end
% 1阶时(m=0)
for L = 2:n
d1(L) = d1(L-1)+eb0(L-1).*ef0(L)./gama0(L-1);
kb1(L) = d1(L)./ebb0(L-1);
kf1(L) = d1(L)./ebf0(L);
ef1(L) = ef0(L)-kb1(L).*eb0(L-1);
eb1(L) = eb0(L-1)-kf1(L).*ef0(L);
ebf1(L) = ebf0(L)-d1(L).^2./ebb0(L-1);
ebb1(L) = ebb0(L-1)-d1(L).^2./ebf0(L);
gama1(L-1) = gama0(L-1)-eb0(L-1).^2./ebb0(L-1);
end
% 2阶时(m=1)
for L = 2:n
d2(L) = d2(L-1)+eb1(L-1).*ef1(L)./gama1(L-1);
kb2(L) = d2(L)./ebb1(L-1);
kf2(L) = d2(L)./ebf1(L);
ef2(L) = ef1(L)-kb2(L).*eb1(L-1);
eb2(L) = eb1(L-1)-kf2(L).*ef1(L);
ebf2(L) = ebf1(L)-d2(L).^2./ebb1(L-1);
ebb2(L) = ebb1(L-1)-d2(L).^2./ebf1(L);
gama2(L-1) = gama1(L-1)-eb1(L-1).^2./ebb1(L-1);
end
for L = 1:n
aa1(i,L) = kb1(L)-kf1(L).*kb2(L);
aa2(i,L) = kb2(L);
nn(i,L) = L;
end
end
plot(nn(1,:),aa1(1,:),'b');
hold on;grid on;
plot(nn(2,:),aa1(2,:),'c');
plot(nn(3,:),aa1(3,:),'g');
xlim([0 100])
xlabel('n');ylabel('a1(n)');
title('初始预测误差剩余对LSL收敛性能的影响');
plotyline(a1,'r')
legend('0.1','1','10','Ideal Value','Location','Best')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -