资源简介
自校正广义预测控制 matlab仿真 自校正GPC

代码片段和文件信息
%广义预测控制_自校正GPC算法仿真
%被控模型为y(k)=1.5*y(k-1)-0.7*y(k-2)+u(k-1)+0.5*u(k-2)+e(k),其中e(k)为噪声
clc;
clear;
%仿真步数
tim=50;
%预辨识次数
tim0=10;
%预测时域和控制时域
N=5;
Nu=4;
%扰动幅度
ampe=1;
%系数λ
lmd=0.5;
%y(k)的最终给定值yr
yr=50;
%柔化因子a
a=0.5;
%β
b=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%参数预辨识
%将系统在正弦信号控制作用下运行tim0步,测的一组系统的运行数据
e=ampe*(1-2*rand(1tim0));
yy(1)=0;yy(2)=0;
uu(1)=0;uu(2)=0;
for k=3:tim0
uu(k)=6+sin(k);
end
for k=3:tim0
yy(k)=1.5*yy(k-1)-0.7*yy(k-2)+uu(k-1)+0.5*uu(k-2)+e(k);
end
%根据所得运行数据,使用递推最小二乘法辨识系统模型参数
A=[1-11];
B=[11];
na=length(A)-1;
nb=length(B)-1;
a1(1)=-1;a2(1)=1;b0(1)=1;b1(1)=1;
THETA=[-A(na:-1:1)B(nb+1:-1:1)]‘;
P=b^2*eye(na+nb+1);
for k=3:tim0
PHI=[yy(k-1:-1:k-na)uu(k-1:-1:k-nb-1)]‘;
THETA=THETA+P*PHI*(yy(k)-THETA‘*PHI)/(1+PHI‘*P*PHI);
P=P-P*PHI*PHI‘*P/(1+PHI‘*P*PHI);
end
A(na:-1:1)=-THETA(1:na);
B(nb+1:-1:1)=THETA(na+1:na+nb+1);
a1(2)=A(2);a2(2)=A(1);b0(2)=B(2);b1(2)=B(1);
%至此预辨识结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%一些计算的中间量
Z=[10];%表示z^(-1)
Zj=cell(1N-1);%Zj中存储的为z^(-j)次
for j=1:N-1
Zj{j}(1)=1;
Zj{j}(2:j+1)=0;
end
delta=[-11];%△
%系统状态的初值
y(1)=0;y(2)=0;
u(1)=0;u(2)=0;
e=ampe*(1-2*rand(1tim));
%下面开始迭代进行自校正GPC控制
for k=3:tim
y(k)=1.5*y(k-1)-0.7*y(k-2)+u(k-1)+0.5*u(k-2)+e(k);
%根据新采集到的系统运行数据进行一次递推最小二乘法辨识
PHI=[y(k-1:-1:k-na)u(k-1:-1:k-nb-1)]‘;
THETA=THETA+P*PHI*(y(k)-THETA‘*PHI)/(1+PHI‘*P*PHI);
P=P-P*PHI*PHI‘*P/(1+PHI‘*P*PHI);
%一步辨识结束,得到参数
A(na:-1:1)=-THETA(1:na);
B(nb+1:-1:1)=THETA(na+1:na+nb+1);
a1(k)=A(2);a2(k)=A(1);b0(k)=B(2);b1(k)=B(1);
Adelta=conv(Adelta);%A△
%迭代求第一个丢番图方程中的EF
E=cell(1N);
F=cell(1N);
E{1}=[1];
F{1}=deconv(polyadd(1-Adelta)Z);
for j=1:N-1
E{j+1}=polyadd(E{j}F{j}(na+1)*Zj{j});
F{j+1}=deconv(polyadd(F{j}-(F{j}(na+1)*Adelta))Z);
end
%求第二个丢番图方程中的GH
G=cell(1N);
H=cell(1N);
for j=1:N
EB=conv(E{j}B);
H{j}=EB(1:length(EB)-j);
G{j}=EB(length(EB)-j+1:length(EB));
end
%将EFGH左右翻转,因为MATLAB中的多项式系数是从高次到低次排列,而GPC算法中是相反的,这样翻转过来使用比较方便
for j=1:N
E{j}=fliplr(E{j});
F{j}=fliplr(F{j});
G{j}=fliplr(G{j});
H{j}=fliplr(H{j});
end
%得出后边计算要用到的系数矩阵F_H_G_
for j=1:N
F_(j1:na+1)=F{j};
H_(j1:nb)=H{j};
end
for i=1:Nu
G_(1:Ni)=[zeros(1i-1)G{N}(1:N+1-i)]‘;
end
%△U(k)=K(k)(Yd(k)-Y0(k))
K=(G_‘*G_+lmd*eye(Nu))\G_‘;
%下面利用上面计算所得结果进行一步自校正GPC控制
%求Y0(k)
deltau(k-1)=u(k-1)-u(k-2);
olddeltaU=[deltau(k-1:-1:k-nb)]‘;
oldY=[y(k:-1:k-na)]‘;
Y0=F_*oldY+H_*olddeltaU;
%求Yd(k)
%计算柔化轨迹
yd(k)=y(k);
for j=1:N
yd(k+j)=a*yd(k+j-1)+(1-a)*yr;
end
Yd=[yd(k+1:k+N)]‘;
dd(k+1)=yd(k+1);
%求最终用到的△U,将△U的第一个u(k)作为当前时刻的输入改变量
deltaU=K*(Yd-Y0);
u(k)=u(k-1)+deltaU(1);
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3619 2012-10-28 15:34 GPC2\GPC_zijiaozheng.m
文件 275 2012-09-24 09:21 GPC2\polyadd.m
目录 0 2012-12-06 18:09 GPC2\
- 上一篇:matlab中用GUI实现串口实时显示波形
- 下一篇:三相SPWM逆变器仿真
相关资源
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 阵列天线的matlab仿真
- 天线阵的波束形成在MATLAB仿真程序及
- OFDM系统MATLAB仿真代码
- CRC循环冗余校验的matlab仿真程序
- (7,4)循环码-信道编码的matlab仿真
- MIMO雷达DOA估计中的克拉美罗界计算
- Boost电路的MATLAB仿真
- 基于气动力的导弹姿态控制(附MATL
- 有源电力滤波器的Matlab仿真_高勇
- 3点GPS定位MATLAB仿真
- 一维光子晶体MATLAB仿真代码吸收率折
- 清洁机器人路径规划matlab仿真程序
- 基于倒谱图判断浊音的基音周期MATL
- 粒子群算法优化pid源码 matlab仿真.ra
- 小卫星多普勒频偏MATLAB仿真程序及参
- 基于Matlab的OFDM系统仿真的设计
- 《MATLAB仿真在现代通信中的应用》徐
- 自抗扰控制ADRC的MATLAB仿真+书籍资料
- Ldpc编译码方案MATLAB仿真
- 基于模型预测控制的车辆轨迹跟踪问
- 合成孔径雷达成像csChirp Scaling算法M
- 冲击电压发生器MATLAB仿真,主要是单
- 信道的MATLAB仿真
- 基于傅里叶叠层的图像重建算法matl
- 信息论大作业 LZ78算法编译码 matlab仿
- 跳频通信系统MATLAB仿真
- 机械臂SEA柔顺控制matlab仿真
- 群速度色散的matlab仿真
- 异步电机降压启动matlab仿真
评论
共有 条评论