How to Add Measured Output Disturbance to my State Space Model for MPC Controller?

30 views (last 30 days)
Hello Respectable Community,
I am looking for attention of experts from following background state space modeling and model predictive controller.
Subject: I want to add affect of "Zd" step disturbance to my current plant state space equation which will be use as measured disturbance in mpc controller block.
I am designing an MPC controller, which should be robust to disturbance rejection and I have a known Measured Disturbance which I want to add to "md", but I am getting some errors.
I have following state space equation of my plant, which I found using system identification technique.
%Transfer Function By System identification
num = [-1.324 6.6e05 -6.914e09 5.128e13 -1.054e19]
den = [1 1.99e04 1.371e09 1.145e13 4.037e17]
%Conversion to SS
plant = tf([num],[den], 'OutputDelay',1)
% Simplify the model to remove insignificant poles and zeros
SSpzt = ss(plant) %This gives continuous time linear state space model of TFpzt
Ac = SSpzt.A;
Bc = SSpzt.B;
Cc = SSpzt.C;
Dc = SSpzt.D;
Ts = 3.1309e-05 %Sampling time actual = 3.1309e-05
Td = 0.009; %time Delay baed on frequency data
%Contineous Model to discrete Statespace Matrices
SSpzt_dis = c2dm(Ac,Bc,Cc,Dc,Ts)
[Ad,Bd,Cd,Dd] = c2dm(Ac, Bc, Cc, Dc, Ts)
Dd = 0
sysdis = ss(Ad,Bd,Cd,Dd,Ts)
sysdis shows my plant discrete statespace model which i used to design mpc controller. but when I add md as step, it gives me following error and I know this is because I think I need to add some rows and coloum to my matrix B or C for measured disturbance, but I am not sure how to add them. So, I am asking here for help.
But when I use MPC Controller without md it works fine, but it is not robust to disturbance rejection, and my main concern is to eliminate the disturbance effectively. Even it doesn't respond to disturbance. I am looking for help in this regards. Attached is the files of my design. First run PZTModel1.m file then load PID_Controller22_December, and DisRejection_27December files and open MPC_simulink1.

Answers (1)

Sam Chak
Sam Chak on 29 Dec 2023
You must have previously created the model predictive controller object 'mpcobj = mpc(model)' based on the specified model set, which includes the plant. However, you may have overlooked the input disturbance. Without considering the input disturbance, you can run the MPC Controller block without the measured disturbance (md) input port.
You can specify the input disturbance model as an LTI state-space (ss), transfer function (tf), or zero-pole-gain (zpk) object using setindist().
  1 Comment
Muhammad
Muhammad on 1 Jan 2024
Dear @Sam Chak Thanks for your reply to my Question.
I have solved the step disturbance model by resdesigning MPC controller in simulink. One of my friend had mpc toolbox so I specified measured output disturbance there and it works well for me.
Now I have some confusion because I am not sure how this has been modeled in my plant, by using getoutdist I can get my disturbance model but I am not sure what is the actual equation my MPC is solving behind.
i.e. is it
x_(k+1) = Ax + Bu
y(k+1) = Cx
or
x_(k+1) = Ax + Bu
y(k+1) = Cx + Ld
where I assume L is a matrix and d is disturbance.
I know it will be like some how y(k+1) = Cx + Ld but how can I get the final MPC equation so that I could explain it in my thesis that my MPC has following state space model with Measured Output Disturbance.
Please help me in this regard.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!