codegen错误:无法从double转换为struct

时间:2017-03-08 18:57:49

标签: c matlab matlab-compiler codegen

我正在尝试将Matlab遗留代码转换为C程序。我经历了通常的流程,但是我遇到了一个我不理解的构建错误:

Nfft = 8;
[~,coh] = size(h); // h = array of 168 elements;
display(coh); // displays 168
if mod(coh,Nfft)~=0,  
    h1 = [h zeros(1,Nfft-mod(coh,Nfft))];
else 
    h1 = h;
end

这在Matlab中按预期工作。但是当我通过codegen运行它(删除显示后)时,我在行h1 = [h zeros(1,Nfft-mod(coh,Nfft))];收到错误消息:

  

无法从double转换为struct。

我意识到在matlab代码中,它没有经过这部分代码。 (因为168%8 == 0)。

任何想法如何解决这个问题?

编辑:经过一些调查,我意识到我正在从.mat文件中读取h,这可能就是原因。从.mat文件中读取的数据是否被视为结构?如果是这种情况,那么我可能需要先将每个元素转换为双重元素吗?看起来有点像hacky ..

1 个答案:

答案 0 :(得分:2)

找到了解决方案!

使用coder.load时,.MAT文件作为数组结构导入。所以,在我的代码中,我试图用一个双精度数组连接一个结构。

解决方法就是我加载.MAT文件的方式:

老路:

h = coder.load('my_file.mat', 'my_file_var1');

新方式:

tmp = coder.load('my_file.mat');
h = tmp.my_file_var1;

然后我可以使用h作为双打数组。