Documentation |
How to create multi-input, multi-output (MIMO) models.
On this page… |
---|
MIMO Descriptor State-Space Model |
This example shows how to create a multi-input, multi-output (MIMO) transfer function model by concatenating single-input, single-output (SISO) transfer function models.
To create the one-input, two-output MIMO transfer function:
$$G\left(s\right)=\left[\begin{array}{c}\frac{s-1}{s+1}\\ \frac{s+2}{{s}^{2}+4s+5}\end{array}\right],$$
perform the following steps:
Create SISO transfer functions for each channel.
g11 = tf([1 -1],[1 1]); g21 = tf([1 2],[1 4 5]);
Tip Use zpk instead of tf to create MIMO transfer functions in factorized form. |
Concatenate the transfer functions.
G = [g11; g21];
This example shows how to create a MIMO state-space model using ss.
You create a MIMO state-space model in the same way as you create a SISO state-space model. The only difference between the SISO and MIMO cases is the dimensions of the state-space matrices. The dimensions of the B, C, and D matrices increase with the numbers of inputs and outputs as shown in the following illustration.
In this example, you create a state-space model for a rotating body with inertia tensor J, damping force F, and three axes of rotation, related as:
$$\begin{array}{c}J\frac{d\omega}{dt}+F\omega =T\\ y=\omega .\end{array}$$
The system input T is the driving torque. The output y is the vector of angular velocities of the rotating body.
To express this system in state-space form:
rewrite it as:
$$\begin{array}{c}\frac{d\omega}{dt}=-{J}^{-1}F\omega +{J}^{-1}T\\ y=\omega .\end{array}$$
Then the state-space matrices are:
$$A=-{J}^{-1}F,\text{\hspace{1em}}B={J}^{-1},\text{\hspace{1em}}C=I,\text{\hspace{1em}}D=0.$$
To create this model, enter the following commands:
J = [8 -3 -3; -3 8 -3; -3 -3 8]; F = 0.2*eye(3); A = -J\F; B = inv(J); C = eye(3); D = 0: sys_mimo = ss(A,B,C,D);
These commands assume that J is the inertia tensor of a cube rotating about its corner, and the damping force has magnitude 0.2.
sys_mimo is an ss model.
This example shows how to create a continuous-time descriptor (implicit) state-space model using dss.
Note: This example uses the same rotating-body system shown in MIMO State-Space Model, where you inverted the inertia matrix J to obtain the value of the B matrix. If J is poorly-conditioned for inversion, you can instead use a descriptor (implicit) state-space model. |
A descriptor (implicit) state-space model is of the form:
$$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du\end{array}$$
Create a state-space model for a rotating body with inertia tensor J, damping force F, and three axes of rotation, related as:
$$\begin{array}{c}J\frac{d\omega}{dt}+F\omega =T\\ y=\omega .\end{array}$$
The system input T is the driving torque. The output y is the vector of angular velocities of the rotating body. You can write this system as a descriptor state-space model having the following state-space matrices:
$$A=-F,\text{\hspace{1em}}B=I,\text{\hspace{1em}}C=I,\text{\hspace{1em}}D=0,\text{\hspace{1em}}E=J.$$
To create this system, enter:
J = [8 -3 -3; -3 8 -3; -3 -3 8]; F = 0.2*eye(3); A = -F; B = eye(3); C = eye(3); D = 0; E = J; sys_mimo = dss(A,B,C,D,E)
These commands assume that J is the inertia tensor of a cube rotating about its corner, and the damping force has magnitude 0.2.
sys is an ss model with a nonempty E matrix.
This example shows how to create a MIMO frequency-response model using frd.
Frequency response data for a MIMO system includes a vector of complex response data for each of the input/output (I/O) pair of the system. Thus, if you measure the frequency response of each I/O pair your system at a set of test frequencies, you can use the data to create a frequency response model:
Load frequency response data in AnalyzerDataMIMO.mat.
load AnalyzerDataMIMO H11 H12 H21 H22 freq
This command loads the data into the MATLAB^{®} workspace as five column vectors H11, H12, H21, H22, and freq. The vector freq contains 100 test frequencies. The other four vectors contain the corresponding complex-valued frequency response of each I/O pair of a two-input, two-output system.
Organize the data into a three-dimensional array.
Hresp = zeros(2,2,length(freq)); Hresp(1,1,:) = H11; Hresp(1,2,:) = H12; Hresp(2,1,:) = H21; Hresp(2,2,:) = H22;
The dimensions of Hresp are the number of outputs, number of inputs, and the number of frequencies for which there is response data. Hresp(i,j,:) contains the frequency response from input j to output i.
Create a frequency-response model.
H = frd(Hresp,freq);
sys is an frd model object, which is a data container for representing frequency response data.
You can use frd models with many frequency-domain analysis commands. For example, visualize the response of this two-input, two-output system using bode.
Tip By default, the frd command assumes that the frequencies are in radians/second. To specify different frequency units, use the TimeUnit and FrequencyUnit properties of the frd model object. For example: sys = frd(Hresp,freq,'TimeUnit','min','FrequencyUnit','rad/TimeUnit') sets the frequency units to in radians/minute. |
This example shows how to select the response from the first input to the second output of a MIMO model.
Create a two-input, one-output transfer function.
N = {[1 -1],[1];[1 2],[3 1 4]}; D = [1 1 10]; H = tf(N,D)
Note: For more information about using cell arrays to create MIMO transfer functions, see the tf reference page. |
Select the response from the second input to the output of H.
To do this, use MATLAB array indexing.
H12 = H(1,2)
For any MIMO system H, the index notation H(i,j) selects the response from the jth input to the ith output.