在Matlab编码器中使用可变大小参数 我想用MATLAB编码器生成DCT函数的C++代码。我写了这个简单函数,并尝试转换成C++。 function output_signal = my_dct(input_signal) output_signal = dct(input_signal); end

在Matlab编码器中使用可变大小参数 我想用MATLAB编码器生成DCT函数的C++代码。我写了这个简单函数,并尝试转换成C++。 function output_signal = my_dct(input_signal) output_signal = dct(input_signal); end,matlab,matlab-coder,Matlab,Matlab Coder,当我为输入参数使用固定大小的类型时(例如double 1x64),没有问题;但是,输入参数的可变大小类型(如double 1x:64)会导致以下错误: 前面的错误是由以下原因引起的:非常量表达式.. coder.const的输入不能减少为常量。 有人能帮我吗? 提前感谢。文档对于编码器中的DCT有点模糊,但它意味着输入大小必须是沿变换维度的2的恒定幂。从DCT帮助: C/C++代码生成 使用Matlab®编码器生成C和C++代码™. 使用说明和限制: DCT和C++代码生成需要DSP系统工具箱™

当我为输入参数使用固定大小的类型时(例如double 1x64),没有问题;但是,输入参数的可变大小类型(如double 1x:64)会导致以下错误:

前面的错误是由以下原因引起的:非常量表达式..

coder.const的输入不能减少为常量。

有人能帮我吗?
提前感谢。

文档对于编码器中的DCT有点模糊,但它意味着输入大小必须是沿变换维度的2的恒定幂。从DCT帮助:

C/C++代码生成 使用Matlab®编码器生成C和C++代码™. 使用说明和限制:

DCT和C++代码生成需要DSP系统工具箱™ 软件

变换维度的长度必须是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乘以64个元素。当然,输出也将始终是64个元素长,这意味着它将被缩放,并且可能具有不同于您预期的频率缩放