《最小方差自校正控制Matlab程序.docx》由会员分享,可在线阅读,更多相关《最小方差自校正控制Matlab程序.docx(7页珍藏版)》请在第一文库网上搜索。
1、最小方差自校正控制Mat1ab程序最小方差自校正控制Mat1ab程序1自校正控制自适应控制有很多种,例如模型参考自适应控制系统、自校正控制系统等。自校正控制(STC)最早是由R.E.Ka1man在1958年提出的,他设计了基于最小二乘估计和有限拍控制的自适应控制器,并为了实现这个控制器,还建造了一台专用模拟计算机,但其发展受到了当时的硬件问题的闲扰。4*w1HnwI图1间接自校正控制系统图2直接自校正控制系统自校正控制系统也有内环和外环。内环与常规反馈系统类似,外环由对象参数递推估计器和控制器计算机构组成,其任务是由递推估计器在线估计被控对象参数,用以代替对象的未知参数,然后由设计机构按一定的
2、规则对可调控制器的参数进行在线求解,用以修改内环的控制器。自校正控制器是在线参数估计和控制参数在线设计两者的有机结合。另外,在参数估计时,对观测数据的使用方式有两种。一种是不直接更新控制器参数,而是先估计被控对象模型本身的未知参数,然后再通过设计机构得到控制器参数,如图1所示,称为间接算法,另一种是直接估计控制器参数,这时需要将过程重新参数化,建立一个与控制器参数直接关联的估计模型,称为直接算法,如图2。2.最小方差自校正Mat1ab算法仿真(直接自校正和间接自校正)设被调对象为CARMA模型111()()()()()()dAzytzBzutCzt=+其中,1121111()11.70.7()
3、10.5()10.2AZzzBqzCzz=+=式中,()k为方差为1的白噪声。(一)取初值6?(O)Io(O)OP16=、,0f的下界为min0.1f二,期望输出()ryk为幅值为10的方波信号,采用最小方差直接自校正控制算法,观察不同时滞d=14、8时,最小方差自校正算法的控制效果。QBB(a)时滞为1(b)时滞为4(C)时滞为8图4-2最小方差直接自校正算法仿真结果(二)取初值6?(O)Io(O)0.001PI。期望输出Oryk为幅值为10的方波信号,用增广递推最小二乘法进行参数估计,采用最小方差间接自校正控制算法,仿真效果如图4-3,d=4。图4-3最小方差间接自校正算法仿真效果(d=4
4、)Mat1ab程序:%程序:最小方差直接自校正控制(MVC)算法c1eara11;c1osea11;a=1-1.70.7;b=10.5;c=10.2;d=4;%对象参数na=1ength(a)-1;nb=1ength(b)-1;nc=1ength(c)-1;%na、nb、nc为多项式A、B、C阶次nf=nb+d-1%nf为多项式F的阶次1=400;%控制步数uk=zeros(d+nb,1);%输入初值:uk(i)表示u(k-i);yk=zeros(na11);%输出初值yrk=zeros(ncz1);%期望输出初值xik=zeros(ncz1);%白噪声初值yr=10*ones(14,1)ro
5、nes(14,1)jones(14,1)rones(14+d,1);%期望输出xi=sqrt(O.1)*randn(1z1);%白噪声序列e,f,g=SindiOPhantine(a,b,c,d);%求解单步DioPhantine方程fork=1:1time(k)=k;y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+c*xi(k);xik;%采集输出数据u(k)=(-f(2:nf+1)*uk(1:nf)+c*yr(k+d:-1:k+d-min(d,nc);yrk(1:nc-d)-g*y(k);yk(1:na-1)/f;求控制量%更新数据fori=d+nb:-1:2uk(i)=u
6、k(i-1);enduk(1)=u(k);fori=na:-1:2yk(i)=yk(i-1);endyk=y(k);fori=nc:-1:2yrk(i)=yrk(i-1);xik(i)=xik(i-1);endifnc0yrk(1)=yr(k);xik(1)=xi(k);endendsubp1ot(2,1z1);p1ot(timezyr(11),ztimezy);1abe1(k);y1abe1(,y-r(k)xy(k),);1egendCy_r(k)7y(k);subp1ot(2z1z2);p1ot(timezu);x1abe1(,k,);y1abe1(,u(k),);%程序:最小方差间接自校
7、正控制c1eara11;c1osea11;a=1-1.70.7;b=10.5;c=10.2;d=4;%对象参数na=1ength(a)-1;nb=1ength(b)-1;nc=1ength(c)-1;%naxnb、nc为多项式A、B、C阶次nf=nbd-1;%nf为多项式F的阶次1=400;%控制步数uk=zeros(d+nbz1);%输入初值:Uk(i)表示u(k-i);yk=zeros(na,1);%输出初值yrk=zeros(ncz1);%期望输出初值ik=zeros(ncz1);%白噪声初值xiek=zeros(ncz1);%白噪声估计初值yr=10*ones(14,1)rones(1
8、4,1)jones(14,1)rones(14+d,1);%期望输出xi=sqrt(0.1)*randn(1,1);%白噪声序列%RE1S初值设置thetae-1=0001*ns(na+nb+1+ncz1);%非常小的正数(这里不能为0)P=10A6*eye(na+nb+1+nc);fork=1:1time(k)=k;y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+c*xi(k);xik;%采集输出数据%递推增广最小二乘法phie=-yk;uk(d:d+nb);xiek;K=P*phie(1+phie,*P*phie);thetaeC,k)=thetae-1+K*(y(k)-p
9、hie*thetae-1);P=(eye(na+nb+1+nc)-K*phie,)*P;xie=y(k)-phie*thetae(:,k);%白噪声的估计值%提取辨识参数ae=1thetae(1azk);be=thetae(na+1:na+nb+1zk);ce=1thetae(na+nb+2:na+nb+1+nczk),;ifabs(be)0.9be(2)=sign(ce(2)*0.9;%MVC算法要求B稳定endifabs(ce(2)0.9ce(2)=sign(ce(2)*0.9;ende,fg=SindiOPhantine(ae,be,ce,d);%求解单步Diophantine方程u(k
10、)=(-f(2:nf+1)*uk(1:nf)+ce*yr(k+d:-1:k+d-min(drnc);yrk(1:nc-d)-g*y(k);yk(1:na-1)/f(1);%求控制量%更新数据thetae_1=thetae(:zk);fori=d+nb:-1:2uk(i)=uk(i-1);enduk(1)=u(k);fori=na:-1:2yk(i)=yk(i-1);endyk=y(k);fori=nc:-1:2yrk(i)=yrk(i-1);xik(i)=xik(i-1);xiek(i)=xiek(i-1);endifncOyrk(1)=yr(k);xik(1)=xi(k);xiek(1)=x
11、ie;endendfigure(1);subp1ot(2,1z1);P1ot(time,yr(1:1);r:,time,y);x1abe1(k);y1abe1(y_r(k)、y(k),);1egend(y-r(k),y(k);axis(01-2020);subp1ot(2z1z2);p1ot(timezu);x1abe1(,k);y1abe1(u(k);axis(O1-4040);figure(2)subp1ot(211)p1ot(1,thetae(1na,:);abe1(k);y1abe1(参数估计a);1egend(,a.1a-2);axis(01-32);subp1ot(212)p1ot(1:1zthetae(na+1:na+nb+1+ncr:);x1abe1(,k,);y1abe1(参数估计b、c,);Iegend(b.7b-ic-1,);axis(0101.5);