1、 系统辨识与自适应控制 三阶极点配置控制文字说明与本课程感想 一 课题前申 设有数学模型 其中 设计控制器为 其中 和 为待定多项式,且 为首一多项式, 为参考输入。 这样构成的控制系统方框图见图,表达式如下。 极点配置系统控制方框图 闭环特征多项式为
2、 控制的任务是,在不考虑干扰的情况下,使控制输出与期望输出相等,即 从而有 其中Am, Bm分别为期望的传递函数分母多项式和分子多项式。且两者互 质。一般说来,前者由系统性能要求确定,后者根据系统稳态要求和过程不稳 定零点确定。 将过程的B分成两部分: 其中,前者为不稳定和阻尼差的零点,后者为稳定零点。根据工程经验,控制器的引入可抵消过程的稳定零点,保留不稳定零点和阻尼差的零点,同时该零点应保留在期望传递函数分子中。于是
3、 其中, 是为了消除稳态误差。各式化简整理,左边分子分母对消 B+ ,并考虑右边分子分母的阶次低于左边,为使其相等,右边分子分母同乘多项式A0,从而有
4、 化简 由此有 两边同乘 B+ ,有 即 由上可的 又因为 A、 B-,和d均为已知,当Am A0 确定以后,可求出多项式F1和G。当A和B-互质时,满足该等式的解有无穷组。为使问题有
5、解 ,不妨假设式左边两项有相同的阶次,并规定 并且右边的阶次小于等于左边阶次.本算法引入了diophantine函数解决了该方程有唯一解的问题,使复杂的问题简单化。 二 三阶极点配置控制 本例题是基于二阶极点配置自校正控制研究完成。 设被控对象为 要求的期望特征多项式为 且稳态输出无误差。 采用零阶保持器,并采用采样周期Ts=0.5s,对上述系统离散化
6、得 ; 其零点是z1=-3.1212. z2=-0.2258; 闭环特征多项式离散化后为 (1) 考虑系统零点不被对消的情况 离散化系统的零点为z1=-3.1212. z2=-0.2258;为了不让这个零点与控制器极点对消,即 B+=1, B-=0.01743 z^2 + 0.05833 z + 0.01229 为使系统无误差,Bm’=Am(1)/B^-(1)从程序运行中得0.04569. Bm=0.0083+0.0292Z^(-1)+0.0065Z^(-2) 此时VAL取0.1 零点未对消仿真图像 (2) 考虑系统零点被对消的情况 离散化
7、系统的零点为z1=-3.1212. z2=-0.2258; 为了让这个零点与控制器极点对消,即 B+=(1-3.1212Z^(-1))(1-0.2258Z^(-1)), B-=0.01229 为使系统无误差,Bm’=Am(1)/B^-(1)从程序运行中得0.5659. Bm=0.0103+0.0337Z^(-1) 此时VAL取3.25 零点对消仿真图像 三 附程序及文字解释 u %极点配置控制(PPC)(连续系统离散化)极点未对消 clear all; close all; %被控对象离散化 den=[1 1 1 0]; num=[1]; T
8、s=0.5; Td=0; %连续系统对象参数 sys=tf(num,den,'inputdelay',Td); %连续系统传递函数 dsys=c2d(sys,Ts,'zoh'); %离散化 [dnum,a]=tfdata(dsys,'v'); %提取离散系统数据 na=length(a)-1; b=dnum(2:na+1); nb=length(b)-1; d=Td/Ts+1; %纯延时 %期望特性离散化 den=[1 2*0.7*1 1^2 0.5]; num=[1]; sys=tf(num,den); dsys=c2d(sys,Ts,'zoh'); [dnum,Am
9、]=tfdata(dsys,'v'); %提取Am nam=length(Am)-1; %期望特征多项式阶次 %多项式B的分解 br=roots(b); %求B的根.br =-3.2626,-0.2385 b0=b(1); b1=1; %b0为B-;b0 = 0.0182.b1为B+.b1=1 Val=0.1; %通过修改临界值,确定B零点是否对消(零点绝对值小于临界值,则被抵消) for i=1:nb %分解B-、B+ if abs(br(i))>=Val b0=conv(b0,[1 -br(i)]); else b1=
10、conv(b1,[1 -br(i)]); end end Bm1=sum(Am)/sum(b0);Bm=Bm1*b0; %确定多项式Bm.Bm =0.0440 %确定多项式A0 na0=2*na-1-nam-(length(b1)-1); %观测器最低阶次 A0=1; for i=1:na0 A0=conv(A0,[1 0.5]); %生成观测器 end %计算Diophantine方程,得到F、G、R [F1,G]=diophantine(a,b0,d,A0,Am); %注意,此处为b0 F=conv(F1,b1); R=Bm1*A0;
11、 nf=length(F)-1; ng=length(G)-1; nr=length(R)-1; L=400; %控制步数 uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i) yk=zeros(na,1); %输出初值 yrk=zeros(na,1); %期望输出初值 yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出 for k=1:L time(k)=k*Ts; y(k)=-a(2:na+1)*yk+b*uk(d:d+nb); %采集输出数据
12、 u(k)=(-F(2:nf+1)*uk(1:nf)+R*[yr(k+d:-1:k+d-min(d,nr));yrk(1:nr-d)]-G*[y(k);yk(1:ng)])/F(1); %求控制量 %更新数据 for i=d+nb:-1:2 uk(i)=uk(i-1); end uk(1)=u(k); for i=na:-1:2 yk(i)=yk(i-1); yrk(i)=yrk(i-1); end yk(1)=y(k);
13、yrk(1)=yr(k); end subplot(2,1,1); plot(time,yr(1:L),'r:',time,y); xlabel('t'); ylabel('y_r(t)、y(t)'); legend('y_r(t)','y(t)'); subplot(2,1,2); plot(time,u); xlabel('t'); ylabel('u(t)'); u %极点配置控制(PPC)(连续系统离散化)极点已对消 clear all; close all; %被控对象离散化 den=[1 1 1 0]; num=[1]; Ts=0.5; Td=0;
14、连续系统对象参数 sys=tf(num,den,'inputdelay',Td); %连续系统传递函数 dsys=c2d(sys,Ts,'zoh'); %离散化 [dnum,a]=tfdata(dsys,'v'); %提取离散系统数据 na=length(a)-1; b=dnum(2:na+1); nb=length(b)-1; d=Td/Ts+1; %纯延时 %期望特性离散化 den=[1 2*0.7*1 1^2 0.5]; num=[1]; sys=tf(num,den); dsys=c2d(sys,Ts,'zoh'); [dnum,Am]=tfdata(dsys
15、'v'); %提取Am nam=length(Am)-1; %期望特征多项式阶次 %多项式B的分解 br=roots(b); %求B的根.br =-3.2626,-0.2385 b0=b(1); b1=1; %b0为B-;b0 = 0.0182.b1为B+.b1=1 Val=3.25; %通过修改临界值,确定B零点是否对消(零点绝对值小于临界值,则被抵消) for i=1:nb %分解B-、B+ if abs(br(i))>=Val b0=conv(b0,[1 -br(i)]); else b1=conv(b1,[1 -
16、br(i)]); end end Bm1=sum(Am)/sum(b0);Bm=Bm1*b0; %确定多项式Bm.Bm =0.0440 %确定多项式A0 na0=2*na-1-nam-(length(b1)-1); %观测器最低阶次 A0=1; for i=1:na0 A0=conv(A0,[1 0.5]); %生成观测器 end %计算Diophantine方程,得到F、G、R [F1,G]=diophantine(a,b0,d,A0,Am); %注意,此处为b0 F=conv(F1,b1); R=Bm1*A0; nf=length
17、F)-1; ng=length(G)-1; nr=length(R)-1; L=400; %控制步数 uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i) yk=zeros(na,1); %输出初值 yrk=zeros(na,1); %期望输出初值 yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出 for k=1:L time(k)=k*Ts; y(k)=-a(2:na+1)*yk+b*uk(d:d+nb); %采集输出数据
18、u(k)=(-F(2:nf+1)*uk(1:nf)+R*[yr(k+d:-1:k+d-min(d,nr));yrk(1:nr-d)]-G*[y(k);yk(1:ng)])/F(1); %求控制量 %更新数据 for i=d+nb:-1:2 uk(i)=uk(i-1); end uk(1)=u(k); for i=na:-1:2 yk(i)=yk(i-1); yrk(i)=yrk(i-1); end yk(1)=y(k); yrk(1)=yr(k)
19、 end subplot(2,1,1); plot(time,yr(1:L),'r:',time,y); xlabel('t'); ylabel('y_r(t)、y(t)'); legend('y_r(t)','y(t)'); subplot(2,1,2); plot(time,u); xlabel('t'); ylabel('u(t)'); u diophantine函数 function [F1,G]=diophantine(A,B,d,A0,Am) %*****************************************************
20、 %功能:Diophanine方程的求解 %调用格式:[F1,G]=diophantine(A,B,d,A0,Am) %输入参数:多项式A、B系数向量、纯延迟d、多项式A0、Am系数向量(行向量) %输出参数:Diophanine方程的解F1、G(行向量) %*********************************************************************** dB=[zeros(1,d) B]; na=length(A)-1; nd=length(dB)-1; T1=conv(A0,Am); nt=length(T1); T=[T1';zeros(na+nd-nt,1)]; %得到Sylvester 矩阵 AB=zeros(na+nd); for i=1:na+1 for j=1:nd AB(i+j-1,j)=A(i); end end for i=1:nd+1 for j=1:na AB(i+j-1,j+nd)=dB(i); end end %得到F1,G L=(AB)\T; F1=[ L(1:nd)]'; G=[ L(nd+1:na+nd)]';






