MATLAB: How to run a simulation with a transfer function block and a multi dimensional input

compilationdimensionfunctionloopmonte carlomultirsimrtwsimulinksimulink codertransfertransfer fcn

Hello everyone,
[Context] I want to simulate a complex system many times in order to calculate the average behaviour of the system and I want to avoid the many compilations that would occur in a loop containing the sim(mdl) command. Notice that the only thing changing between each simulation of the system is the input signal values…
[Situation] Let’s take a very simple example to be clear : Create a new model with a “Sine Wave” block with the following parameters :
Sine Type : Time-based (Default)
Time (t) : Use simulation Time (Default)
Amplitude : [ 1 1 1 ]
Bias : [ 0 0 0 ]
Frequency : [1 1 1 ]*2*pi*0.22
Phase : rand(1,3) %Here is the only param that changes between simulations
Sample Time: 0
[Uncheck] Interpret vector parameters as 1-D
Add a “Transfer Fcn” block with the following parameters (for example) :
Numerator : [1]
Denominator : [1 0 1]
(Others to default value)
Connect the “Sine Wave” block to the “Transfer Fcn” block and the output of the “Transfer Fcn” to a “Scope” block. No need to change Configuration Parameters of simulation (Stop time etc…)
[Aim] Instead of running the simulation many times with one sinewave I want to exploit the possibility of generating many (=3 here) sinewaves once and run only one simulation…
[Problem] The simulation throws errors : “Error in port widths or dimensions.[…]” I know that the “Transfer Fcn” block does not feature Scalar expansion so do you have a solution to this problem or a workaround that avoids the repetitive compilations of the model ?
Thank you

Best Answer

I tested a model and found problems doing what you want, my workaround is:
  1. Insert a sine wave block (f=2*pi*0.22 and phase=rand), tf block (your num and den)
  2. Insert one mux block (three inputs) and the scope
  3. Now copy and paste the sine wave block two times
  4. Do the same for the transfer function block (paste it two times)
  5. Connect the sine waves to each transfer function block
  6. Connect the transfer functions outputs to the mux and the mux to the scope
Now with just one simulation you get three waves