东北大学系统建模作业 1(2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统建模方法作业
姓名:冯天宇
学号:1001258
班级:双控3班
1.考虑如下系统
y () 1.5(1)0.7(2)(3)0.5(4)()k y k y k u k u k k ξ--+-=-+-+
式中,()k ξ为白噪声。
取初值6(0)10P I =,ˆ(0)0θ=。分别选择M 序列和方差为1的正态分布白噪声作为输入信号()u k ,采用递推最小二乘算法进行参数估计,迭代L=400步停止计算。
要求
i) 给出基本迭代公式;
ii) 画出程序流程框图;
iii) 画出输入输出数据曲线、参数估计曲线、误差曲线;
提示:
产生长度为L 方差为1的正态分布白噪声,相应的MATLAB 命令为 randn (L,1)。
i)迭代公式:
1ˆˆˆ()(1)()[()()(1)]1()(1)()()(1)()()()[()()](1)T T T k k k z k k k k k k k k k k k I k k k θθθ-⎧=-+--⎪⎪⎡⎤=--+⎨⎢⎥Λ⎣⎦⎪
⎪=--⎩
K h K P h h P h P K h P
在计算过程中,增益矩阵K(k)可能产生误差,经过算法的迭代,造成误差传
递和累积,最后将影响辨识算法的精度。为此,可采用下面的计算式,以截断误
差的传递,保证辨识精度。
1()(1)()()()(1)()()T T k k k k k k k k ⎡⎤=---+⎢⎥Λ⎣
⎦P P K K h P h
ii)程序流程框图:
N
y(k)
工作间清零
产生输出采样信号
给被辨识参数θ和P赋初值
计算P(k)
计算被辨识参数的相对变化量
参数收敛满足要求?
停机
计算K(k)
计算θ(k)
第四个移位寄存器的输出取反,并将幅值变为1得到辨识系统的输入信号样本值给M序列的长度L和移位寄存器的输入赋初始值
画出被辨识参数θ的各次递推估计值图形
分离参数
画出被辨识参数θ的相对误差的图形
画出辨识的输入信号曲线图形
图最小二乘递推算法辨识的Malab程序流程框图
Y
iii)程序、输入输出数据曲线、参数估计曲线、误差曲线、结果分析:
(1)当输入信号u(k)为M序列时,程序:
clear %清理工作间变量
L=400; % M序列的周期
m1=1;m2=1;m3=1;m4=0; %四个移位寄存器的输出初始值
for i=1:L; %开始循环,长度为L
x1=xor(m3,m4); %第一个移位寄存器的输入是第三个与第四个移位寄存器的输出的“异或”
x2=m1; %第二个移位寄存器的输入是第一个移位寄存器的输出x3=m2; %第三个移位寄存器的输入是第二个移位寄存器的输出x4=m3; %第四个移位寄存器的输入是第三个移位寄存器的输出m(i)=m4; %取出第四个移位寄存器的幅值为"0"和"1"的输出信号,即M序列
if m(i)>0.5,u(i)=-1; %如果M序列的值为"1", 辨识的输入信号取“-1”
else u(i)=1; %如果M序列的值为"0", 辨识的输入信号取“1”
end %小循环结束
m1=x1;m2=x2;m3=x3;m4=x4; %为下一次的输入信号做准备
end %大循环结束,产生输入信号u
y(4)=0;y(3)=0;y(2)=0;y(1)=0; %设y的前四个初始值为零
N
for k=5:400 %循环变量从5到400
y(k)=1.5*y(k-1)-0.7*y(k-2)+u(k-3)+0.5*u(k-4); %输出采样信号
end
figure(1), subplot(2,1,1), stem(u),
title('input')
subplot(2,1,2), stem(y), hold on
k=1:400;
plot(k,y)
title('output')
%RLS递推最小二乘辨识
c0=[0 0 0 0]'; %直接给出被辨识参数的初始值,即一个充分小的实向量p0=10^6*eye(4,4); %直接给出初始状态P0,即一个充分大的实数单位矩阵c=[c0,zeros(4,399)]; %被辨识参数矩阵的初始值及大小
e=zeros(4,400); %相对误差的初始值及大小
for k=5:400; %开始求K
h1=[-y(k-1),-y(k-2),u(k-3),u(k-4)]';
x=h1'*p0*h1+1;
x1=inv(x); %开始求K(k)
k1=p0*h1*x1; %求出K的值
d1=y(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; %给下次用
end %循环结束
c,e %显示被辨识参数及其误差(收敛)情况
%分离参数
a1=c(1,:);
a2=c(2,:);
b1=c(3,:);
b2=c(4,:);
ea1=e(1,:);
ea2=e(2,:);
eb1=e(3,:);
eb2=e(4,:);
figure(2); %第二个图形
i=1:400; %横坐标从1到400
plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':') %画出a1,a2,b1,b2的各次辨识结果
title('Parameter Identification with Recursive Least Squares Method') %图形标题
figure(3); %第三个图形
i=1:400; %横坐标从1到400
plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') %画出a1,a2,b1,b2的各次辨识结果的收敛情况title('Identification Precision') %图形标题