自适应控制实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k c t t
实验一
一、 可增益Lyapunov-MRAC 算法
1.1 步骤:
已知:
N (s )
D (s )
第一步:选择参考模型,即Gm (s );
第二步:选择输入信号 y r (t )和自适应增益γ;
第三步:采样当前参考模型输出 y m (t )和系统实际输出 y p (t );
第四步:利用公式 &
( )= γe (t ) y r (t ) 和公式 u ( )= k c (t ) y r (t ) ;
第五步:t t+h ,返回第三步,继续循环。
1.2 考虑如下被控方对象模型:
G p (s )=
选择参考模型为:
k p (s + 1) s 2 + 5s + 1 , k p 未知(仿真时取 k p =1)
G m (s )= k m (s + 1) s 2 + 5s + 1
, k m =1
因为 G P (s )、 G m (s )均为严格正实函数。取自适应增益γ=0.2,输入 y r 为 方波信号,幅值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;
y m (t )、y p (t )
u (t )
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)');
三、仿真结果
2
1 0
-1
2
1
-1
-2y m (t) y p (t)
0 10 20 30 40 50 60 70 80 90 100
t
t
第一步:设置初值 和 ,输入初始数据;( )0θ
( )0P
∧ 参数 ,即 、 和 ;θG
f C 取初值P(0)=
I 、 =0.01,
的下界为 =0.1,期望输出
为610
( )0θ
f min f
( )ky r 第三步: 构造观测数据向量 ,利用递推算法在线实时估计控制器(
)dk -ϕ 实验二
一、最小方差直接自校正控制算法
1.1 步骤:
已知:模型阶次 n a 、 n b 、 n c 及纯延时d 。
∧
第二步:采用当前实际输出 y (k ) 和期望输出 y r (k + d ) ; ∧
∧ ∧ ∧
第四步:计算并实施 u (k );
第五步: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的白噪声。
∧ ∧
幅值为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);