matlab的coder工具箱能够把大多数matlab代码转换为c/c++代码或dll。今天在转换一个函数时出现了以下错误:Undefined function or variable 'imfs'. The first assignment to a local variable determines its class.
我的matlab代码如下:
function [imfs, residual] = fun_vmd(data, num_imfs)
[imfs, residual] = vmd(data, 'NumIMFs', num_imfs);
end
作用是把原始的复杂信号分解为若干简单信号。data是原始信号输入,num_imfs是输入参数,指定分解为多少条简单信号。imfs是分解后的信号输出,residual是分解后的残差输出。此函数在matlab中调用没有任何问题。
data = load("data01.txt");
[imfs, residual] = fun_vmd(data, 5);
我把这个函数转换为c代码时,指定输入参数data类型为double,形式是Nx1向量;输入参数num_imfs类型为int32,形式是1x1向量。结果开始生成源码时出现了错误:
Function call failed.
Undefined function or variable 'imfs'. The first assignment to a local variable determines its class.
Undefined function or variable 'residual'. The first assignment to a local variable determines its class.
在网上查了各种资料和问答,都语焉不详,测试了各种方案都没解决,包括把imfs和residual使用前初始化,都不行。
最后的解决办法是把num_imfs类型由int32改为double,问题成功解决。