Matlab代码生成的重采样:项数N必须为常数

时间:2018-10-23 04:53:59

标签: matlab matlab-coder

我使用Matlab编码器生成具有以下功能的C代码:

function [out] = myresample(in)
    out = resample(in,4644,1000,10);
end

并通过codegen myresample -args {coder.typeof(0, [1 Inf]), 0} -config cfg生成代码,其中cfg = coder.config('lib')cfg.DynamicMemoryAllocation = 'AllVariableSizeArrays'

但是它将错误报告为:

??? The number of terms N must be constant.

我很困惑为什么错了。有趣的是,当我将功能更改为

function [out] = myresample(in)
    out = resample(in,10,10,10);
end

有效。

我发现some links解释了如何生成resample的代码。但这似乎不适用于我的情况。

我使用Matlab 2017b。

谢谢。

1 个答案:

答案 0 :(得分:1)

根据Matlab 2017b documentation

  

C / C ++代码生成:使用MATLAB®Coder™生成C和C ++代码。
  使用注意事项和限制:
  C和C ++代码生成用于重采样需要DSP System Toolbox™软件。   上采样和下采样因子必须指定为常数。如果表达式或变量的值不变,则允许它们。
  不支持可变大小的输入。

在您的代码上,您有in,不受大小限制。

在函数myresample中,应尝试指定一个限制。像这样:

limited_in = in(1:128);
out = resample(limited_in,4644,1000,10);

因此resample的输入大小将始终是恒定的。