2017-05-06 123 views
1

我想使用Matlab编码器为DCT函数生成C++代码。我写了这个简单的函数,并试图将其转换为C++。在Matlab编码器中使用可变大小的参数

function output_signal = my_dct(input_signal) 
    output_signal = dct(input_signal); 
end 

当我使用一个固定大小类型的输入参数(如双1x64),是没有问题的;然而,可变大小类型(如双1X:64)对这些错误的输入参数的结果:

The preceding error is caused by: Non-constant expression..

The input to coder.const cannot be reduced to a constant.

任何人都可以帮我吗? 在此先感谢。

回答

1

该文档对于编码器中的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总是由64个元件的尺寸为1。当然,输出也总是会有64个元素,这意味着它会被缩放,并且可能会有一个与您预期不同的频率范围。

相关问题