极点配置直接自校正控制最小相位确定性系统Word文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%极点配置直接自校正控制(最小相位确定性系统)
设被控对象为开环不稳定最小相位系统:
()2(1) 1.1(2)(3)0.5(4)y k y k y k u k u k --+-=-+-
期望传递函数分母多项式为:
112()1 1.32050.4966m A z z z ---=-+ 取遗忘因子=1,期望输出y r (k )为幅值为10的方波信号。
clear all;close all;
a=[1 -2 1.1];b=[1 0.5];d=3; %对象参数
Am=[1 -1.3 0.5]; %期望闭环特征多项式
na=length(a)-1;nb=length(b)-1;
nam=length(Am)-1;
nf=nb+d-1;ng=na-1;
%确定多项式A0
na0=2*na-nam-nb-1; %观测器最低阶次
A0=1;
for i=1:na0
A0=conv(A0,[1 0.3-i*0.1]); %生成观测器
end
AA=conv(A0,Am);naa=na0+nam;
nfg=max(naa,max(nf,ng)); %用于ufk, yuf更新
nr=na0; %R的阶次
L=400;
uk=zeros(d+nb,1);
ufk=zeros(d+nfg,1); %滤波输入的初值
yk=zeros(max(na,d),1);
yfk=zeros(d+nfg,1);
yrk=zeros(max(na,d),1);
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)] ;
%RELS初值设定
thetae_1=0.001*ones(nf+ng+2,1);
P=10^6*eye(nf+ng+2);
lambda=1; %遗忘因子
for k=1:L
time(k)=k;
y(k)=-a(2:na+1)*yk(1:na)+b*uk(d:d+nb);
ufk(d)=-AA(2:naa+1)*ufk(d+1:d+naa)+uk(d); %滤波输入输出
yfk(d)=-AA(2:naa+1)*yfk(d+1:d+naa)+yk(d);
%递推最小二乘法
phie=[ufk(d:d+nf);yfk(d:d+ng)];
K=P*phie/(lambda+phie'*P*phie);
thetae(:,k)=thetae_1+K*(y(k)-phie'*thetae_1);
P=(eye(nf+ng+2)-K*phie')*P/lambda;
%提取辨识参数
be0=thetae(1,k);
thetaeb(:,k)=thetae(:,k)/be0;
Fe=thetaeb(1:nf+1,k)';
Ge=thetaeb(nf+2:nf+ng+2,k)';
Bm1=sum(Am)/be0; %确定多项式Bm'
R=Bm1*A0;
u(k)=(-Fe(2:nf+1)*uk(1:nf)+R*[yr(k+d:-1:k+d-min(d,nr));yrk( 1:nr-d)]-Ge*[y(k);yk(1:ng)])/Fe(1);
%更新数据
thetae_1=thetae(:,k);
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=max(d,na):-1:2 yk(i)=yk(i-1);
yrk(i)=yrk(i-1); end
yk(1)=y(k);
yrk(1)=yr(k);
for i=d+nfg:-1:d+1
ufk(i)=ufk(i-1); yfk(i)=yfk(i-1); end
end
figure(1);
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('k');ylabel('y_r(k),y(k)');
legend('y_r(k)','y(k)');axis([0 L -20 20]);
subplot(2,1,2);
plot(time,u);
xlabel('k');ylabel('u(k)');axis([0 L -5 5]);
figure(2);
plot([1:L],thetaeb(2:nf+ng+2,:));
xlabel('k');ylabel('辨识参数f,g');
legend('f_1','f_2','f_3','g_0','g_1');axis([0 L -1 1.5]);
(注:素材和资料部分来自网络,供参考。请预览后才下载,期待你的好评与关注!)