📄 mzxec.m
字号:
%M序列
clear
clc
L=15;%M序列周期
y1=1;y2=1;y3=1;y4=0;%移位寄存器初始值
for i=1:L
x1=xor(y3,y4);%
x2=y1;
x3=y2;
x4=y3;
y(i)=y4;
if y(i)>0.5
u(i)=-0.03;%如果M序列为1辨识输入信号取-0.03
else u(i)=0.03;
end
y1=x1;y2=x2;y3=x3;y4=x4;%为下一次输入信号做准备
end
z(2)=0;z(1)=0;%取z的前两个初始值为0
for k=3:15;%循环变量从3到31
z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2);%给出理想辨识输出采样信号
end
c0=[0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值:充分小的实向量
p0=1e+6*eye(4,4);%直接给出初始状态p0,即一个充分大的实属单位矩阵
E=0.000000005;%相对误差E=0.000000005
c=[c0,zeros(4,14)];%被辨识参数矩阵的初始值及大小
e=zeros(4,15);%相对误差的初始值及其大小
for k=3:15;%开始求k
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';
x=h1'*p0*h1+1;
x1=inv(x);%开始求k(r)
k1=p0*h1*x1;%求出k的值
d1=z(k)-h1'*c0;
c1=c0+k1*d1;%求被辨识参数c
e1=c1-c0;%参数当前值与上一次的值的差值
e2=e1./c0;%求参数的相对变化
e(:,k)=e2;%把当前相对变化的列向量假如误差矩阵的最后一列
c0=c1;%新获得的参数作为下一次递推的旧参数
c(:,k)=c1;%把辨识参数c列向量加入辨识参数矩阵的最后一列
p1=p0-k1*k1'*[h1'*p0*h1+1];%求出p(k)的值
p0=p1;%下次
if e2<=E break;%合格
end
end
c%显示被辨识参数
e%显示辨识结果的收敛情况
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -