This week I welcome guest blogger Aarti Ramani to talk about a long requested feature, variable size signals in Simulink.
Depending on target ranges, radar systems operate in
different modes (different lengths of data etc). Let’s assume we have two
planes at two different altitudes. Now, what happens if there is a new plane in
sight? Since the number of targets being detected by the radar is now changing,
how would you use Simulink to add this plane to its tracking list?
A short and simple answer to this question is: Variable
I’ve read many customer requests wanting to be able to
change the dimensions of their Simulink variables while the simulation runs. Be
it a radar system which needs to operate in different modes based on its target
range to a simple combustion engine that needs to change its frame size based
on the number of samples per cycle, each of these system dynamics work with
signals whose sizes change during model execution.
Although, earlier I had to tell our customers that Simulink
did not have this capacity and you could not change a model’s signals
dimensions during execution; with R2009b, Simulink now supports variable-size
inputs and outputs in over 40 Simulink blocks.
How does one create a variable size signal?
There are several methods of creating a variable size
signal: Switch blocks; Multi-Switch blocks with different input sizes; a Selector
block indexing options or custom code blocks (S-functions and Embedded MATLAB
A common way of generating variable-size signals is to use a
Switch block for which each of the input signals differ in size. The Switch
Block now allows variable size signals to be passed in as inputs:
By simply selecting the option “Allow different data input
sizes”, you can obtain a variable size output signal whose dimensions change
experiment, let us look at a simple demo model “sldemo_varsize_basic.mdl”. This demonstration
contains examples of how to use variable-size signals in a Simulink model, and
to show what kind of operations you can apply to them.
how the Switch block, allowing 2 inputs of different dimensions, can be used
for operations like addition, vector concatenation etc.
You can also use the
“Selector” blocks to create a variable size signal. The Selector block generates as
output selected or reordered elements of an input vector, matrix, or
multidimensional signal. Using the “Starting and ending indices (port)”
indexing option, you can allow inputs of variable dimensions to generate
variable size signals.
You can use the Selector block to subreferece a matrix as shown below:
How can I get the current dimensions or width of a
You can use the Probe block to output the width of a signal.
allows you to visualize and save the signal dimensions and view the I/O and
state data for blocks selected. This could also be used in a calculation that
requires sample size information.
How can I convert a variable-size signal into a
To convert a variable size signal into a fixed size signal,
you can use the “Assignment” block. The variable-size signal feeds into the second
input port of the Assignment block and can be used to convert the incoming
signal into a fixed size signal.
By allowing signal sizes in Simulink models to vary during
execution, one can easily model systems with varying environments, resources,
and constraints. So, coming back to our radar system, using variable size
signals, you can now create a conceptual air traffic control (ATC) radar
simulation based on your radar range equation(s):
For more details on how this snazzy feature works, check out
Now it’s your turn
Do you plan to upgrade to R2009b and use variable size signals?
Leave a comment here and tell me what you plan to model.
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.