资源描述
基于matlab的预测控制(DMC)仿真
一、 实验目的:
通过对动态矩阵控制的MATLAB仿真,发现其对直接处理带有纯滞后、大惯性的对象,有良好的跟踪性和有较强的鲁棒性,输入已知的控制模型,通过对参数的选择,来取得良好的控制效果。
二、 实验原理:
预测控制算法是一种基于被控对象非参数数学模型的控制算法,它是一种基于对象阶跃响应的预测控制算法,它以对象的阶跃响应离散系数为模型,避免了通常的传递函数或状态空间方程模型参数的辨识,又因为采用多步预估技术,能有效解决时延过程问题,并按预估输出与给定值偏差最小的二次性能指标实施控制,它适用于渐进稳定的线性对象,系统的动态特性中具有纯滞后或非最小相位特性都不影响改算法的直接应用,因此是一种最优控制技术。
三、 实验环境:
计算机,matlab
四、 实验步骤
预测控制算法充分利用了反映被控对象动态行为的有用信息,对被控对象时滞和阶次变化的鲁棒性都有所提高,从而得到好的控制性能。但是由于预测控制采用模型预测的方式,其参数的选择对性能有重要的影响。合理的选择控制参数非常重要,它直接影响着系统整体的控制效果。对DMC来说,影响其性能的主要参数有以下几个。
1)采样周期T与模型长度N
在DMC中采样周期T和模型长度N的选择需要满足香农定理和被控对象的类型及其动态特性的要求。为使模型参数尽可能完整的包含被控对象的动态特征,通常要求NT后的阶跃响应输出值已经接近稳定值。因此,T减小就会导致N增大,若T取得过小,N变大,会增加计算量。而适当的选取采样周期,使模型长度控制在一定的范围内,避免因为采样周期减少而使模型长度增加使计算量增加,降低系统控制的实时性。所以,从计算机内存和实时计算的需要出发,应选取合适的采样周期和模型长度。
2)预测时域长度P
预测时域长度P对系统的稳定性和快速性具有重要的影响。为使滚动优化真正有意义,应使预测时域长度包括对象的主要动态部分。若预测时域长度P小,虽控制系统的快速性好,但稳定性和鲁棒性会变差;若预测时域长度P很大,虽明显改善系统的动态性能,即控制系统的稳定性和鲁棒性变好,但系统响应过于缓慢,增加计算时间,降低系统的实时性。
3)控制时域长度M
控制时域长度M在优化性能指标中表示所要确定的未来控制量的改变数目,即优化变量的个数。在预测时域长度P已知的情况下,控制时域长度M越小,越难保证输出在各采样点紧密跟踪期望输出值,系统的响应速度比较慢,但容易得到稳定的控制和较好的鲁棒性;控制时域长度M越大,控制的机动性越强,能够改善系统的动态响应,增大了系统的灵活胜和快速性,提高控制的灵敏度,但是系统的稳定性和鲁棒性会变差。因此,控制时域长度的选择应兼顾快速性和稳定性。
五、 实验控制算法实例仿真
被控对象模型为
分别用MAC和DMC算法进行仿真。
无论是MAC还是DMC算法,它们都适用于渐进稳定的线性对象,先对该对象进行MAC算法仿真,MAC预测模型为, j=1, 2, 3,……,P.。写成矩阵形式为,即
预测误差为,参考轨迹。流程图如下
1. 算法实现
由于DMC算法是一种基于模型的控制,并且运用了在线优化的原理,与PID算法相比,显然需要更多的离线准备工作
(1) 测试对象的阶跃响应要经过处理及模型验证后得到的模型系数a1,……aN。在这里,应该强调模型动态响应必须是光滑的,测量噪声和干扰必须滤除
(2) 利用仿真程序确定优化策略,计算出控制系数d1……dp。
(3) 选择校正系数h1……hN。
这三组动态系数确定后,应置入固定内存单元,以便实时调用。
2.参数选择
当DMC算法在线实施时,只涉及模型参数ai,控制参数di和校正参数hi。但其中除了hi可以由设计者自由选择外,ai取决于对象阶跃响应特性及采样周期的选择,di取决于ai及优化性能指标,他们都是设计的结果而非直接可调参数。在设计中,真正要确定的参数应该是
(1) 采样周期T
(2) 滚动优化参数的初值,包括预测时域长度P,控制时域长度M,误差权矩阵Q和控制权矩阵R
(3) 误差校正参数hi。
3.用DMC算子进行仿真,得出
ysp
参考轨迹
dT
G(z-1)
Ĝ(z-1)
H
y(k)
u(k)
e(k)
W(k+1)
+
+
-
-
e(k)
+
+
Ŷ0(k+1)
+
+
1
1-z –1
Du(k)
结合matlab中simulink框图和程序对对象进行仿真,得出的结果如下图所示,
结论:图中曲线为使用DMC控制后系统的阶跃响应曲线。从图中可看出:采用DMC控制后系统的调整时间小,响应的快速性好,而且系统的响应无超调。该结果是可以接受的。优化时域P表示我们对k时刻起未来多少步的输出逼近期望值感兴趣。控制时域M表示所要确定的未来控制量的改变数目。
模型算法控制(MAC)方案设计图
模型算法控制(MAC)由称模型预测启发控制(MPHC),与MAC相同也适用于渐进稳定的线性对象,但其设计前提不是对象的阶跃响应而是其脉冲响应。它的原理结构图如下图所示:
图 模型算法控制原理结构图
附录
clc
clear
Num1=[0.2713];
den=[1 0.9];
numm=[0.2713];
denm=[1 1]; %定义对象及模型的传递函数
n=40;
t1=0:0.1:n/10;
g=1*impulse(Num1,den,t1)';
gm=1*impulse(numm,denm,t1)';
for i=1:n
g(i)=g(i+1);
end
for i=1:n
gm(i)=gm(i+1);
end
a=g;am=gm;
N=40;
p=15;
M=1;
m=M;
G=zeros(p,m);
for i=1:p
for j=1:m
if i==j
G(i,j)=g(1);
else if i>j
G(i,j)=g(1+i-j);
else G(i,j)=0;
end
end
end
if i>m
s=0;
for k=1:(i-m+1)
s=s+g(k);
G(i,m)=s;
end
end
end
F=zeros(p,n-1);
for i=1:p
k=1;
for j=(n-1):-1:1
if i==j
F(i,j)=g(n);
else if i>j
F(i,j)=0;
else F(i,j)=g(i+k);
end
end
k=k+1;
end
end
R=1.0*eye(m);
Q=0.9*eye(p);
H=0.3*ones(p,1); %定义各系数矩阵
e=zeros(4*N,4);
y=e;ym=y;
U=zeros(4*N,4);
w=1;
Yr=zeros(4*N,4);
b=[0.1;0.4;0.6;0.9];
for i=1:4
for k=N+1:4*N
y(k,i)=a(1:N)*U(k-1:-1:k-N,i); %求解对象输出
ym(k,i)=am(1:N)*U(k-1:-1:k-N,i); %求解模型输出
e(k)=y(k)-ym(k);
for j=1:p
Yr(k+j,i)=b(i)^(j)*y(k)+(1-b(i)^(j))*w;
end
dt=[1 zeros(1,m-1)]*inv(G'*Q*G+R)*G'*Q;
U(k,i)=dt*(Yr(k+1:k+p,i)-F*U(k-N+1:k-1,i)-H*e(k));
end
end
t=0:0.1:11.9;
subplot(2,1,1);
plot(t,y(N:N+119,1))
hold on;
plot(t,y(N:N+119,2))
hold on
plot(t,y(N:N+119,3))
hold on;
plot(t,y(N:N+119,4))
%t,y(N:N+119,3),t,y(N:N+119,4),t,Yr(N:N+119,1),t,w*ones(1,120));
%grid on
%legend('输出1','输出2','输出3','输出4','柔化曲线','期望曲线');
%title('Plot of MAC');
%plot(U);
%grid on;
% DMC.m 动态矩阵控制(DMC)
Num1=0.2713;
den=[1 -0.8351 0 0 0 0];
G=tf(Num1,den,’Ts’.0.4); %连续系统
Ts=0.4; %采样时间 Ts
G=c2d(G,Ts); %被控对象离散化
[Num1,den,]=tfdata(G,'v');
N=60; %建模时域 N
[a]=step(G,1*Ts:Ts:N*Ts); %计算模型向量 a
M=2; %控制时域
P=15; %优化时域
for j=1:M
for i=1:P-j+1
A(i+j-1,j)=a(i,1);
end
end %动态矩阵 A
Q=1*eye(P); %误差权矩阵 Q
R=1*eye(M); %控制权矩阵 R
C=[1,zeros(1,M-1)]; %取首元素向量 C 1*M
E=[1,zeros(1,N-1)]; %取首元素向量 E 1*N
d=C*(A'*Q*A+R)^(-1)*A'*Q; %控制向量 d=[d1 d2 ...dp]
h=1*ones(1,N); %校正向量 h(N维列向量)
I=[eye(P,P),zeros(P,N-P)]; %Yp0=I*YNo
S=[[zeros(N-1,1) eye(N-1)];[zeros(1,N-1),1]]; %N*N移位阵 S
sim('DMCsimulink') %运行siumlink文件
subplot(2,1,1); %图形显示
plot(y,'LineWidth',2);
hold on;
plot(w,':r','LineWidth',2);
xlabel('\fontsize{15}k');
ylabel('\fontsize{15}y,w');
legend('输出值','设定值')
grid on;
subplot(2,1,2);
plot(u,'g','LineWidth',2);
xlabel('\fontsize{15}k');
ylabel('\fontsize{15}u');
grid on;
附2 DMC程序代码
%DMC控制算法
% DMC.m 动态矩阵控制(DMC)
num=0.2713;
den=[1 -0.8351 0 0 0 0];
G=tf(num,den,’Ts’.0.4); %连续系统
Ts=0.4; %采样时间 Ts
G=c2d(G,Ts); %被控对象离散化
[num,den,]=tfdata(G,'v');
N=60; %建模时域 N
[a]=step(G,1*Ts:Ts:N*Ts); %计算模型向量 a
M=2; %控制时域
P=15; %优化时域
for j=1:M
for i=1:P-j+1
A(i+j-1,j)=a(i,1);
end
end %动态矩阵 A
Q=1*eye(P); %误差权矩阵 Q
R=1*eye(M); %控制权矩阵 R
C=[1,zeros(1,M-1)]; %取首元素向量 C 1*M
E=[1,zeros(1,N-1)]; %取首元素向量 E 1*N
d=C*(A'*Q*A+R)^(-1)*A'*Q; %控制向量 d=[d1 d2 ...dp]
h=1*ones(1,N); %校正向量 h(N维列向量)
I=[eye(P,P),zeros(P,N-P)]; %Yp0=I*YNo
S=[[zeros(N-1,1) eye(N-1)];[zeros(1,N-1),1]]; %N*N移位阵 S
sim('DMCsimulink') %运行siumlink文件
subplot(2,1,1); %图形显示
plot(y,'LineWidth',2);
hold on;
plot(w,':r','LineWidth',2);
xlabel('\fontsize{15}k');
ylabel('\fontsize{15}y,w');
legend('输出值','设定值')
grid on;
subplot(2,1,2);
plot(u,'g','LineWidth',2);
xlabel('\fontsize{15}k');
ylabel('\fontsize{15}u');
grid on;
展开阅读全文