代码生成中的resample()函数。有什么方法可以使用变量Q下采样因子?

时间:2016-08-10 13:44:00

标签: matlab simulink

我需要使用resample()函数在Simulink中获取Q下采样因子的变量参数。基本上是包含此代码的Simulink fcn块:

function y = resample(data,Q)
y=resample(data,1000,Q);

在桌面模拟中,我可以通过将其指定为MATLAB解释函数的输入来使变量Q作为参数工作,但由于我需要生成C代码,我唯一的选择是使用fcn块,显然它赢了&# 39;由于上述限制而编译。

  

错误:下采样因子Q必须是常数

我知道这是重新采样功能的documented limitation

  

重新采样:必须将上采样和下采样因子指定为   常量。如果它们的值不允许,则允许表达式或变量   变化

解决此问题的任何解决方法或不同方法?也许其他能够做同样工作的街区?它必须与Simulink编码器兼容。

谢谢!

1 个答案:

答案 0 :(得分:1)

重采样功能需要设计滤波器并根据采样因子确定输出大小。代码生成后无法更改,这就是为什么此函数需要采样因子保持不变。

但是,如果您需要支持的不同下采样因子值受限,则可以使用条件分支,并在每个分支中使用常量值重新采样。例如,

% Declare out as a var-size with max decided by the minimum downsampling factor
% Assuming data is [1000, 1]
coder.varsize('out', [500 1]);
out = zeros(500,1);
if Q == 2
   out = resample(data,1000,2);
elseif Q == 4
   out = resample(data,1000,4);
elseif ...
...
end

您还需要处理可变大小的数据" out"在其余的MATLAB代码和Simulink模型中,如果这是MATLAB功能块的输出变量。