Embeded MATLAB function variable-size signal

3 views (last 30 days)
Hello all
I am simulating something on simulink that requires me to take some number as an input then
generate variable size output signal.
For example, say I have input that says 2, 14, 10.
I am supposed to create [1 by 2] vector then, [1 by 14] vector then, [1 by 10] and so on..
I know that my output variable will not exceed [1 by 10000], so I was trying to define inside function just to see if it works:
function y = fcn(u) %#codegen coder.varsize('y', [1 10000]); y = zeros(u, 1);
I also went to simulink->Edit Data then check my variable y to be variable size and I specified [1 10000], but
still it gives me an error saying:
Computed maximum size is not bounded. Static memory allocation requires all sizes to be bounded. The computed size is [:1 x ?].

Accepted Answer

Ryan Livingston
Ryan Livingston on 16 Jan 2014
You can add calls to ASSERT which effectively bounds the values arguments:
function y = fcn(u)
%#codegen
N = 10000;
coder.varsize('y', [1 N]);
assert(u < N);
y = zeros(1, u);
should do the trick.
The error is effectively complaining about computing the size for the expression:
zeros(1, u);
Which, provided the information given it must assume is unbounded.
You can reference:
for more documentation on this approach.
  1 Comment
mettala
mettala on 22 Feb 2016
I have somewhat similar problem as Daniel had 2 years ago. I tried to use your function with constant input of 14 (or any other value) and get the following error message:
The signal at output port 2 of 'XXX' is a variable-size signal with a nondiscrete sample time.
The sample time for any variable-size signal must be discrete.
I have changed the output to variable and size is specified [1 10000].

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!