我需要使用resample()
函数在Simulink中获取Q下采样因子的变量参数。基本上是包含此代码的Simulink fcn
块:
function y = resample(data,Q)
y=resample(data,1000,Q);
在桌面模拟中,我可以通过将其指定为MATLAB解释函数的输入来使变量Q作为参数工作,但由于我需要生成C代码,我唯一的选择是使用fcn块,显然它赢了&# 39;由于上述限制而编译。
错误:下采样因子Q必须是常数
我知道这是重新采样功能的documented limitation:
重新采样:必须将上采样和下采样因子指定为 常量。如果它们的值不允许,则允许表达式或变量 变化
解决此问题的任何解决方法或不同方法?也许其他能够做同样工作的街区?它必须与Simulink编码器兼容。
谢谢!
答案 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功能块的输出变量。