自适应控制实验

实验一

一、 可增益Lyapunov-MRAC 算法

1.1 步骤:

已知:)

(s D s N )(

第一步:选择参考模型,即Gm (s );

第二步:选择输入信号r y (t )和自适应增益γ;

第三步:采样当前参考模型输出m y (t )和系统实际输出p y (t ); 第四步:利用公式())()(t y t e t k r c γ= 和公式())()(t y t k t u r c =;

第五步:t t+h ,返回第三步,继续循环。

1.2 考虑如下被控方对象模型:

()()1

512

+++=

s s s k s G p p ,p k 未知(仿真时取p k =1)

选择参考模型为:

()()

1

512+++=

s s s k s G m m ,m k =1

因为()s G P 、()s G m 均为严格正实函数。取自适应增益γ=0.2,输入r y 为方波信号,幅值r=1,采用可调增益Lyapunov-MRAC 算法,仿真程序以及仿真结果如下。

二、仿真程序

%可调增益Lyapunov-MRAC clear all ;close all ;

h=0.1;L=100/h;%数值积分步长和仿真步数

num=[1 1];den=[1 5 1];n=length(den)-1; kp=1;[Ap,Bp,Cp,Dp]=tf2ss(kp*num,den); km=1;[Am,Bm,Cm,Dm]=tf2ss(km*num,den); gamma=0.2;

yr0=0;u0=0;e0=0;

xp0=zeros(n,1);xm0=zeros(n,1); kc0=0;

r=1;yr=r*[ones(1,L/4) -ones(1,L/4) ones(1,L/4) -ones(1,L/4)]; for k=1:L;

time(k)=k*h;

xp(:,k)=xp0+h*(Ap*xp0+Bp*u0); yp(k)=Cp*xp(:,k);

xm(:,k)=xm0+h*(Am*xm0+Bm*yr0); ym(k)=Cm*xm(:,k); e(k)=ym(k)-yp(k);

kc=kc0+h*gamma*e0*yr0;%Lyapunov-MRAC 自适应律 u(k)=kc*yr(k);

%更新数据

yr0=yr(k);u0=u(k);e0=e(k); xp0=xp(:,k);xm0=xm(:,k); kc0=kc; end

subplot(2,1,1);

plot(time,ym,'r',time,yp,':'); xlabel('t');ylabel('y_m(t)、y_p(t)'); legend('y_m(t)','y_p(t)'); subplot(2,1,2); plot(time,u);

xlabel('t');ylabel('u(t)');

三、仿真结果

自适应控制实验

自适应控制实验

010203040

5060708090100

-1

1

2

t

y m (t )、y p (t )

010203040

5060708090100

-2

-101

2t

u (t )

实验二

一、最小方差直接自校正控制算法

1.1 步骤:

已知:模型阶次a n 、b n 、c n 及纯延时d 。

第一步:设置初值()0∧

θ和()0P ,输入初始数据; 第二步:采用当前实际输出)(k y 和期望输出)(r d k y +;

第三步: 构造观测数据向量()d k -∧

?,利用递推算法在线实时估计控制器参数∧

θ,即∧

G 、∧

f 和∧

C ;

第四步:计算并实施()k u ;

第五步:k k+h ,返回第二步,继续循环。

1.2 考虑如下被控方对象模型:

y(k)-1.7y(k-1)+0.7y(k-2)=u(k-4)+0.5u(k-5)+ξ(k)+0.2ξ(k-1) 式中,ξ(k)为方差为0.1的白噪声。

取初值P(0)=6

10I 、()0∧θ=0.01,∧

0f 的下界为min f =0.1,期望输出()k y r 为幅

值为10的方波信号,采用最小方差直接自校正控制算法,其控制效果如图1、2.

二、仿真程序

%最小方差直接自校正控制

a=[1 -1.7 0.7];b=[1 0.5];c=[1 0.2];d=4;

na=length(a)-1;nb=length(b)-1;nc=length(c)-1; nf=nb+d-1;ng=na-1;

L=400;

uk=zeros(d+nf,1); yk=zeros(d+ng,1); yek=zeros(nc,1); yrk=zeros(nc,1); xik=zeros(nc,1);

yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; xi=sqrt(0.1)*randn(L,1); %递推估计初值

thetaek=zeros(na+nb+d+nc,d);

P=10^6*eye(na+nb+d+nc);

for k=1:L

time(k)=k;

y(k)=-a(2:na+1)*yk(1:na)+b*uk(d:d+nb)+c*[xi(k);xik];

%递推增广最小二乘法

phie=[yk(d:d+ng);uk(d:d+nf);-yek(1:nc)];

K=P*phie/(1+phie'*P*phie);

thetae(:,k)=thetaek(:,1)+K*(y(k)-phie'*thetaek(:,1));

P=(eye(na+nb+d+nc)-K*phie')*P;

ye=phie'*thetaek(:,d);

%提取辨识参数

ge=thetae(1:ng+1,k)';fe=thetae(ng+2:ng+nf+2,k)';ce=[1

thetae(ng+nf+3:ng+nf+2+nc,k)'];

if abs(ce(2))>0.9

ce(2)=sign(ce(2))*0.9;

end

if fe(1)<0.1

fe(1)=0.1;

end

u(k)=(-fe(2:nf+1)*uk(1:nf)+ce*[yr(k+d:-1:k+d-min(d,nc));yrk(1:nc-d)]-ge*[y(k);yk(1:na-1)])/fe(1);%控制量

%更新数据

for i=d:-1:2

thetaek(:,i)=thetaek(:,i-1);

end

thetaek(:,1)=thetae(:,k);

for i=d+nf:-1:2;

uk(i)=uk(i-1);

end

uk(1)=u(k);

for i=d+ng:-1:2

yk(i)=yk(i-1);

end

yk(1)=y(k);

for i=nc:-1:2;

yek(i)=yek(i-1);

yrk(i)=yrk(i-1); xik(i)=xik(i-1); end

if nc>0

yek(1)=ye; yrk(1)=yr(k); xik(1)=xi(k); 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 -40 40]); figure(2);

subplot(2,1,1);

plot([1:L],thetae(1:ng+1,:),[1:L],thetae(ng+nf+3:ng+2+nf+nc,:)); xlabel('k');ylabel('参数估计g 、c');

legend('g_0','g_1','c_1');axis([0 L -3 4]); subplot(2,1,2);

plot([1:L],thetae(ng+2:ng+2+nf,:));

xlabel('k');ylabel('参数估计f');

legend('f_0','f_1','f_2','f_3','f_4');axis([0 L 0 4]);

三、仿真结果

自适应控制实验

自适应控制实验

图1 直接算法控制结果

-20-1001020

k

y r (k )、y (k )

-40

-20020

40k

u (k )

自适应控制实验

自适应控制实验

图2 控制器参数估计结果

50

100

150

200250

300

350

400

k

参数估计g 、c

50

100

150

200250

300

350

400

0123

4k

参数估计f

相关推荐
相关主题
热门推荐