【问题标题】:codegen error: Conversion to struct from double is not possiblecodegen 错误:无法从 double 转换为 struct
【发布时间】:2017-07-29 12:18:24
【问题描述】:

我正在尝试将 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..

【问题讨论】:

  • hstructs 的数组吗?
  • @Suever 是一个双精度数组
  • h 显式更改为double(h) 是否可以解决问题?
  • 我尝试过类似的方法:h1 = [double(h) zeros(1,Nfft-mod(coh,Nfft))]; 这不起作用。你是这个意思吗?

标签: c matlab matlab-compiler codegen


【解决方案1】:

找到了解决办法!

使用 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 作为双精度数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2020-10-02
    • 2015-09-09
    • 1970-01-01
    • 2020-12-01
    • 2021-12-26
    • 2013-01-08
    相关资源
    最近更新 更多