【问题标题】:Using a variable-sized argument in Matlab coder在 Matlab 编码器中使用可变大小的参数
【发布时间】: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.

谁能帮帮我? 提前致谢。

【问题讨论】:

    标签: matlab matlab-coder


    【解决方案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 个元素长,这意味着它会被缩放,并且可能具有比您预期的不同的频率比例。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多