在 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 编码器中使用可变大小的参数的主要内容,如果未能解决你的问题,请参考以下文章

用于 keras 中可变大小图像的全卷积自动编码器

Tensorflow 可变图像输入大小(自动编码器,放大...)

可变长度整数的编码

MATLAB 中的 GPU 编码器,用于大量面向对象的代码

Matlab 编码器和动态字段参考

方块编码基于matlab的图像方块编码仿真