mat2str issue in an embedded MATLAB Function
Show older comments
Hi, I'm working on Simulink and transferring large integers between 2 MATLAB Function blocks . Inside the receiver block, when I use the 'mat2str' function (to convert from the sent matrix to string) I get this error :
MATLAB Function Interface Error: Class mismatch for variable 'mat2str'. Expected 'double', Actual 'char'. Block Triggered Subsystem/MATLAB Function2
Even if the function's input array is initialized as double type, in this way :
X = zeros(1,168,'double');
However,when I don't initialize the input array, I don't get this error but instead I get the following one when I try to access and/or just display a portion of the outputted array (Xi6 = Xi6(2:165);):
"Subscripting into an mxArray is not supported."
I found that Mike Hosea already answered this question in a topic from 2011 ( Subscripting into an mxArray issue Answer ) and said that it's necessary to pre-define its size and type of variables, which I did in my first approach.
I wish I explained the problem clearly, any suggestion to get around this issue would be really appreciated as I'm stuck here for days, thanks.
Remark : I don't get any of those errors when I write the code on a simple MATLAB script (not embedded MATLAB in Simulink).
Here is my code :
function Z_Gold = Golden_Model(sim_time,X,Y)
%#codegen
Xi = zeros(24,1);
Xi2 = zeros(21,1);
Xi22 = zeros(1,21);
Xi3 = zeros(21,8);
Xi4 = zeros(168,1,'double');
Xi44 = zeros(1,168,'double');
%Xi5 = zeros(1,170);
%Xi5 = zeros(337,1,char);% Output class, specified as 'double', 'single', 'int8',...,
%Xi6 = zeros(1,170);
%Xi6 = zeros(1,164);
%Xi7 = '0000';
Yi = zeros(24,8);
X_g = zeros(21,1);
Y_g = zeros(21,1);
Z_Gold = 0;
coder.extrinsic('disp');
coder.extrinsic('sprintf');
coder.extrinsic('mat2str');
coder.extrinsic('strcat');
coder.extrinsic('str2num');
coder.extrinsic('vec2str');
coder.extrinsic('sscanf');
i20 = 0.4e-06 ;
if sim_time == i20
Xi = bi2de(de2bi(X,8));
disp('Xi = '); disp(Xi);disp('size Xi = '); disp(size(Xi));
Xi2 = Xi(3:23); % extract submatrix from matrix
disp('Xi2 = '); disp(Xi2); disp(size(Xi2));
Xi22 = Xi2'; disp('Xi2 = '); disp(Xi2); % transpose
Xi3 =de2bi(Xi22); disp('Xi3 = '); disp(Xi3);
Xi4 = double(Xi3'); Xi44 = double(Xi4(:)'); disp('Xi4 = '); disp(Xi4);
disp('Xi44 = '); disp(Xi44);
%Xi44 = double(Xi44);
Xi5 = mat2str(Xi44); % mat2str input should be of type double
%Xi5 = vec2str(Xi44);
disp('Xi5 = '); disp(Xi5);
%disp(mat2str(Xi44));
%Xi5 = Xi5(2:end-4);
%disp('Xi5_2= '); disp(Xi5);
Xi6 = sscanf(Xi5,'%s');
%Xi6 = Xi5(Xi5~=' ');
disp('Xi6 = '); disp(Xi6);
%Xi6 = Xi6(2:165);
%Xi7 = Xi6(2:end-1);
end
end
Remark2 : this code is working without errors and displays me the array of bits I was expecting, but still incomplete as I need to further modify this array X6 and remove from it the brackets and the 4 last 0 bits, and that's where I have the errors I'm talking about.
1 Comment
Edgar Zakarian
on 28 Jun 2014
Accepted Answer
More Answers (1)
Edgar Zakarian
on 28 Jun 2014
Categories
Find more on Simulink in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!