在 Matlab 编码器中使用可变大小的参数
Posted
技术标签:
【中文标题】在 Matlab 编码器中使用可变大小的参数【英文标题】:Using a variable-sized argument in Matlab coder 【发布时间】:2017-05-06 13:17:08 【问题描述】:我想使用 Matlab 编码器为 DCT 函数生成一个 c++ 代码。我写了这个简单的函数,并尝试将其转换为 c++。
function output_signal = my_dct(input_signal)
output_signal = dct(input_signal);
end
当我对输入参数使用固定大小类型(如double 1x64)时,没有问题;但是,输入参数的可变大小类型(例如 double 1x:64)会导致以下错误:
The preceding error is caused by: Non-constant expression..
The input to coder.const cannot be reduced to a constant.
谁能帮帮我? 提前致谢。
【问题讨论】:
【参考方案1】:文档对于 Coder 中的 DCT 有点模糊,但它暗示输入大小必须是沿变换维度的 2 的恒定幂。来自 DCT 帮助:
C/C++ 代码生成 使用 MATLAB® Coder™ 生成 C 和 C++ 代码。 使用说明和限制:
为 dct 生成 C 和 C++ 代码需要 DSP System Toolbox™ 软件。
变换维度的长度必须是 2 的幂。如果指定,填充或截断值必须是常数。如果表达式或变量的值不变,则允许使用表达式或变量。
它并没有直接说进入dct
函数的变量的长度(至少沿着被转换的维度)必须是一个常数,但考虑到编码器的工作方式,它确实可能必须是一个常数。由于这是它返回的错误,因此这似乎是一个限制。
您始终可以将调用函数修改为将零填充到已知的最大长度,从而使长度保持不变。
例如,这样的事情可能会起作用:
function output_signal = my_dct(input_signal)
maxlength = 64;
tinput = zeros(1,maxlength);
tinput(1:min(end, numel(input_signal))) = input_signal(1:min(end, maxlength));
output_signal = dct(tinput);
end
该代码将导致 tinput
始终具有 1 x 64 个元素的大小。当然,输出也总是 64 个元素长,这意味着它会被缩放,并且可能具有比您预期的不同的频率比例。
【讨论】:
以上是关于在 Matlab 编码器中使用可变大小的参数的主要内容,如果未能解决你的问题,请参考以下文章