Effacer les filtres
Effacer les filtres

Unexpected MATLAB operator ':' In Simulink MATLAB Function Block

13 vues (au cours des 30 derniers jours)
Nathan Daniel
Nathan Daniel le 8 Juil 2019
I am building a Simulink block diagram that uses a MATLAB Function block. I've run an exact copy of the function in MATLAB, so I know all the syntax and structure (loops and if statements & paired ends, brackets) is correct. However, when I try to build the Simulink model I get the following error:
SimulinkError.PNG
The line in question is shown below and is intended to find the number of unique values in the first column of 'deck'.
nAlt = length(unique(deck(:,1)));
Again I know it works when I run it in MATLAB, so I am assuming it is a problem with Simulink's C coder. I am having a similar index-related error on a later line: SimulinkError.PNG
Machs = sort([deck(1,2),Mach,deck(end,2)]);
Is there a way to get around this sort of error? I would really prefer not to mess around with different ways to do these operations, since I feel like the colon and end operators are pretty basic MATLAB syntax and would surely be supported for C code generation. Please let me know if you come up with a solution or need to see the full code.
  3 commentaires
Nathan Daniel
Nathan Daniel le 9 Juil 2019
Modifié(e) : Nathan Daniel le 9 Juil 2019
The lines which generate deck are:
input = fopen('some_text_file','r');
deck = textscan(input,'%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f','HeaderLines',1);
fclose(input);
deck = cell2mat(deck);
From this I believe deck should always be a matrix variable.
Unless somehow that second line is fixing it to be a cell array in a way that is not a problem in Matlab but is a problem in simulink?
Walter Roberson
Walter Roberson le 9 Juil 2019
In Simulink it can be important not to change data type of a variable.
input = fopen('some_text_file','r');
deckcell = textscan(input,'%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f','HeaderLines',1, 'collectoutput', 1);
fclose(input);
deck = deckcell{1};
There is a possibility that you might first have to use coder.varsize to define deck as 1 x 17 (with the 1 signalling that the actual dimension is variable.)

Connectez-vous pour commenter.

Réponses (1)

akanksha srivastav
akanksha srivastav le 6 Sep 2023
I also faced same error in simulink-
received_signal_1=[zeros(round(target_delay*Fs),numAntennas);repmat(ref_signal(:),1,numAntennas)];
for this matlab_line it shows unexpected error.

Catégories

En savoir plus sur Simulink Functions dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by