📄 untitled.m
字号:
clear
format long
L=300;
y1=1;y2=1;y3=1;y4=0;y5=0;y6=0;%6个移位积存器的输出初始值
for i=1:L;
x1=xor(y5,y6);%第一个移位积存器的输入是第3个与第4个移位积存器的输出的“或”
x2=y1;%第二个移位积存器的输入是第3个移位积存器的输出
x3=y2;
x4=y3;
x5=y4;x6=y5;
y(i)=y6;%取出第四个移位积存器幅值为"0"和"1"的输出信号,
if y(i)==0,u(i)=0;%如果M序列的值为"1"时,辨识的输入信号取“-0.03”
else u(i)=y6%当M序列的值为"0"时,辨识的输入信号取“0.03”
end%小循环结束
y1=x1;y2=x2;y3=x3;y4=x4;y5=x5;y6=x6;%为下一次的输入信号做准备
end%大循环结束,产生输入信号u
figure(1);%第1个图形
stem(u),grid on%以径的形式显示出输入信号并给图形加上网格
z(2)=0;z(1)=0;%取z的前两个初始值为零
for k=3:300;%循环变量从3到300
z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)%+rand/1000;%给出理想的辨识输出采样信号
end
%RLS递推最小二乘辨识
c0=[0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值,即一个充分小的实向量
p0=10^6*eye(4,4);%直接给出初始状态P0,即一个充分大的实数单位矩阵
c=[c0,zeros(4,299)];%被辨识参数矩阵的初始值及大小
for k=3:300; %开始求K
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)
k1=p0*h1*x1;%求出K的值
d1=z(k)-h1'*c0; c1=c0+k1*d1;%求被辨识参数c
c0=c1;%新获得的参数作为下一次递推的旧参数
c(:,k)=c1;%把辨识参数c 列向量加入辨识参数矩阵的最后一列
p1=p0-k1*k1'*x;%求出 p(k)的值
%p1=p0-p0*k1*h1';
p0=p1;%给下次用
end
c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -