📄 ls.m
字号:
%最小二乘法ls——系统辨识
%产生M序列
clc
clear
close all
J=16;
y1=1;y2=1;y3=1;y4=0;
for i=1:J;
x1=xor(y3,y4);
x2=y1;
x3=y2;
x4=y3;
y(i)=y4;
if y(i)>0.5,u(i)=-1;
else u(i)=1;
end
y1=x1;
y2=x2;
y3=x3;
y4=x4;
end
z=zeros(1,16);
N=16;
var_v=1;
v=0.02*sqrt(var_v)*randn(1,N);%均值为0,方差为var_v的白噪声信号
for k=5:16
z(k)=3.808*z(k-1)-5.434*z(k-2)+3.445*z(k-3)-0.8187*z(k-4)+u(k)-3.935*u(k-1)+5.806*u(k-2)-3.807*u(k-3)+0.9362*u(k-4)+v(k);
end
HL=[-z(4) -z(3) -z(2) -z(1) u(5) u(4) u(3) u(2) u(1);
-z(5) -z(3) -z(3) -z(2) u(6) u(5) u(4) u(3) u(2);
-z(6) -z(5) -z(4) -z(3) u(7) u(6) u(5) u(4) u(3);
-z(7) -z(6) -z(5) -z(4) u(8) u(7) u(6) u(5) u(4);
-z(8) -z(7) -z(6) -z(5) u(9) u(8) u(7) u(6) u(5);
-z(9) -z(8) -z(7) -z(6) u(10) u(9) u(8) u(7) u(6);
-z(10) -z(9) -z(8) -z(7) u(11) u(10) u(9) u(8) u(7);
-z(11) -z(10) -z(9) -z(8) u(12) u(11) u(10) u(9) u(8);
-z(12) -z(11) -z(10) -z(9) u(13) u(12) u(11) u(10) u(9);
-z(13) -z(12) -z(11) -z(10) u(14) u(13) u(12) u(11) u(10);
-z(14) -z(13) -z(12) -z(11) u(15) u(14) u(13) u(12) u(11);
-z(15) -z(14) -z(13) -z(12) u(16) u(15) u(14) u(13) u(12)] ;
ZL=[z(5);z(6);z(7);z(8);z(9);z(10);z(11);z(12);z(13);z(14);z(15);z(16)];
c1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c=c2*c3 ;
a1=c(1), a2=c(2), a3=c(3), a4=c(4),b1=c(5), b2=c(6), b3=c(7), b4=c(8),b5=c(9)
ze=zeros(1,16);
for k=5:16
z(k)=3.808*z(k-1)-5.434*z(k-2)+3.445*z(k-3)-0.8187*z(k-4)+u(k)-3.935*u(k-1)+5.806*u(k-2)-3.807*u(k-3)+0.9362*u(k-4)+v(k);
ze(k)=-a1*ze(k-1)-a2*ze(k-2)-a3*ze(k-3)-a4*ze(k-4)+b1*u(k)+b2*u(k-1)+b3*u(k-2)+b4*u(k-3)+b5*u(k-4)+v(k);
ee(k)=abs((ze(k)-z(k))/z(k));
end
figure(3)
i=1:16;
plot(i,ee,'r')
title('LS算法模型误差')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -