📄 lsl.m
字号:
%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
n = 300; % 迭代次数
m = 2; % 阶数
a1 = 1.558; % 模型参数
a2 = -0.81;
de = 10; % 误差剩余
%=================================================
%%%%%%%%%%%%%%%%%%%% 产生序列 %%%%%%%%%%%%%%%%%%%%
en = randn(1,n);
en = (en-mean(en))/var(en); % 将en标准化
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 % 绘制随机过程的一个取样序列
%%%%%%%%%%%%%% 利用LSL算法估计权值a1、a2 %%%%%%%%%%%%%%
% 初始化
for i = 1:m
eb(i,1) = 0;
% ef(i,1) = 0;
d(i,1) = 0;
gama(i,1) = 1;
ebf(i,1) = de;
ebb(i,1) = de;
end
% 迭代计算(按时间n=1,2,...)
for L = 2:n
eb(1,L) = x(L);
ef(1,L) = x(L);
ebb(1,L) = ebf(1,L-1)+x(L).^2;
ebf(1,L) = ebf(1,L-1)+x(L).^2;
gama(1,L) = 1;
end
% 迭代计算(按阶m=1,1,...,M)
nn(1) = 1;
for i = 2:m
for L = 2:n
d(i,L) = d(i,L-1)+eb(i-1,L-1).*ef(i-1,L)./gama(i-1,L-1);
kb(i,L) = d(i,L)./ebb(i-1,L-1);
kf(i,L) = d(i,L)./ebf(i-1,L);
ef(i,L) = ef(i-1,L)-kb(i,L).*eb(i-1,L-1);
eb(i,L) = eb(i-1,L-1)-kf(i,L).*ef(i-1,L);
ebf(i,L) = ebf(i-1,L)-d(i,L).^2./ebb(i-1,L-1);
ebb(i,L) = ebb(i-1,L-1)-d(i,L).^2./ebf(i-1,L);
gama(i,L-1) = gama(i-1,L-1)-eb(i-1,L-1).^2./ebb(i-1,L-1);
nn(L) = L;
end
end
for L = 1:n
aa1(L) = kb(1,L)-kf(1,L).*kb(2,L);
aa2(L) = kb(2,L);
end
figure
plot(nn(1:100),-aa1(1:100),nn(1:100),-aa2(1:100));
plotyline(-0.81,'r');plotyline(1.558,'r');
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -