resample的Matlab代码生成:项数N必须是常量

Matlab code generation of resample: the number of terms N must be constant

我使用 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

谢谢。

根据Matlab 2017b documentation

C/C++ Code Generation: Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
C and C++ code generation for resample requires DSP System Toolbox™ software. The upsampling and downsampling factors must be specified as constants. Expressions or variables are allowed if their values do not change.
Variable-size inputs are not supported.

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

在您的函数 myresample 中,您应该尝试指定一个限制。类似于:

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

因此 resample 的输入大小将始终保持不变。