资源简介
自校正广义预测控制 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逆变器仿真
相关资源
- MATLAB仿真[张雪英][程序源代码].rar
- GPS L5软件MATLAB仿真接收机,根据经典
- 直接序列扩频伪码捕获的matlab仿真
- 一份完整的CDMA收发系统的MATLAB仿真程
- 单载波为、BPSK、QPSK三种情况下锁相环
- 跳频通信系统的matlab仿真
- 4份直接序列扩频+BPSK/QPSK的MATLAB仿真程
- 各种通信编解码、滤波、调制、解调
- 无线传感器网络leach协议matlab仿真
- matlab仿真中的T2F函数
- matlab仿真计算光纤的色散和自相位调
- 基于遗传算法寻优的PID控制及MATLAB仿
- LMMSE算法信道均衡MATLAB仿真
- 磁感应强度测定结果的MATLAB仿真
- SVPWM matlab仿真220137
- 6自由度puma机器人matlab仿真
- 车辆动态仿真MATLAB仿真代码
- 异步电机的间接矢量matlab仿真
- SPWM交流调速的MATLAB仿真
- LDPC 的编译码MATLAB仿真
- 滑模变结构控制MATLAB仿真基本理论与
- lorenz系统程序matlab仿真
- matlab仿真,lt码
- 双闭环直流调速MATLAB仿真模型基于传
- 电磁波行进以及电磁分布的Matlab仿真
- matlab仿真IMM算法
- 最小拍控制器的Matlab仿真
- M/M/N 排队系统多服务员排队系统的m
- 双参数cfar检测器 matlab仿真程序
- matlab仿真 短时谱 语谱图 倒谱复倒谱
评论
共有 条评论