How can I write a Level-2 MATLAB S-Function where the input and output might have unknown dimensions, or even be variable-size signals?

5 次查看(过去 30 天)
I need to write a Level-2 MATLAB S-Function where the input and/or output dimensions are unknown, and might also change during simulation.
Specifically, I would like to implement the two following scenarios:
A) Input: 1-D array of unknown fixed size. Two outputs: sorted array, and sum of all the elements.
B) Same as A), but the size of the array might vary during simulation.
How can I achieve this?

采纳的回答

MathWorks Support Team
编辑:MathWorks Support Team 2021-9-30
A)
In the setup function of your MATLAB S-Function, you need to configure port properties to be inherited or dynamic:
>> block.SetPreCompInpPortInfoToDynamic;>> block.SetPreCompOutPortInfoToDynamic;
You can then override the only properties that you known, as for example:
>> block.InputPort(1).DatatypeID  = 0;>> block.InputPort(1).Complexity  = 'Real';>> block.InputPort(1).DirectFeedthrough = true;
>> block.OutputPort(1).DatatypeID  = 0;>> block.OutputPort(1).Complexity  = 'Real';>> block.OutputPort(2).Dimensions  = 1;>> block.OutputPort(2).DatatypeID  = 0;>> block.OutputPort(2).Complexity  = 'Real';
Note how the field 'Dimensions' has not been set for InputPort(1) and OutputPort(1).
B)
Similar to A), but the required input and output ports need to be configured so that they can handle variable-size signals:
>> block.InputPort(1).DimensionsMode  = 'Variable';>> block.OutputPort(1).DimensionsMode  = 'Variable';
In addition, in the Outputs function, you need to set the current dimensions of the output port:
>> block.OutputPort(1).CurrentDimensions = block.InputPort(1).CurrentDimensions;
For further details, please refer to the attached files:
A) matlabSfunUnknownSize.m and simpleTestMsfUnknownSize.slx
B) matlabSfunVarSize.m and simpleTestMsfVarSize.slx
and simulate the models step-by-step.
For more information on:

更多回答(0 个)

产品


版本

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by