codegen error: Conversion to struct from double is not possible
codegen error: Conversion to struct from double is not possible
我正在尝试将 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))];
行收到错误消息:
Conversion to struct from double is not possible.
我意识到在matlab代码中,它并没有经过这部分代码。 (因为 168%8 == 0)。
有什么解决办法吗?
编辑:经过一些调查,我意识到我正在从 .mat 文件中读取 h
,这可能就是原因。从 .mat 文件中读取的数据是否被视为结构?如果是这种情况,那么也许我需要先将每个元素转换为双精度?看起来有点hacky..
找到解决方案!
使用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
作为双精度数组。
我正在尝试将 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))];
行收到错误消息:
Conversion to struct from double is not possible.
我意识到在matlab代码中,它并没有经过这部分代码。 (因为 168%8 == 0)。
有什么解决办法吗?
编辑:经过一些调查,我意识到我正在从 .mat 文件中读取 h
,这可能就是原因。从 .mat 文件中读取的数据是否被视为结构?如果是这种情况,那么也许我需要先将每个元素转换为双精度?看起来有点hacky..
找到解决方案!
使用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
作为双精度数组。