How do I run a simulation with a transfer function block and a multi dimensional input ?
Mostrar comentarios más antiguos
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
Respuesta aceptada
Más respuestas (5)
Doug Eastman
el 7 de Jul. de 2011
4 votos
Another option is to discretize the transfer function because a discrete transfer function does allow a vector input signal.
If you have the Control System Toolbox, you can automatically calculate the discrete form of the transfer function using C2D.
1 comentario
Pham Dang
el 8 de Jul. de 2011
Arnaud Miege
el 7 de Jul. de 2011
0 votos
The transfer function block only supports scalar input signals, hence the error, see the documentation:
"The block can model single-input single-output (SISO) and single-input multiple output (SIMO) systems."
As Paulo suggests, make multiple copies of the block.
Arnaud
Pham Dang
el 17 de Sept. de 2011
Guy Rouleau
el 20 de Sept. de 2011
0 votos
Hi Pham, In R2011b, place the transfer function inside the For Each subsystem.
The For Each subsystem now support continuous time, so it can vectorize any algorithm very easily.
K E
el 3 de En. de 2013
0 votos
Would it be possible to make one input time series which has all the desired sine waves concatenated into 1 series, and then just run 1 long simulation? You would need to know the start/end of each sine wave in order to extract each segment in postprocessing. Just mentioning in case that makes implementation easier.
Categorías
Más información sobre General Applications en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!