代码生成中的 resample() 函数。有什么方法可以使用可变 Q 下采样因子?
resample() function in code generation. Any way to use variable Q downsampling factor?
我需要使用 resample()
函数在 Simulink 中获取 Q 下采样因子的可变参数。基本上是一个包含以下代码的 Simulink fcn
块:
function y = resample(data,Q)
y=resample(data,1000,Q);
在桌面模拟中,我可以通过将变量 Q 指定为 MATLAB 解释函数的输入来让变量 Q 作为参数工作,但由于我需要生成 C 代码,我唯一的选择是使用 fcn 块,显然它由于上述限制,无法编译。
error: the downsample factor Q must be constant
我理解这是一个 documented limitation 的重采样函数:
resample: The upsampling and downsampling factors must be specified as
constants. Expressions or variables are allowed if their values do not
change.
有任何解决方法或不同的方法来解决这个问题吗?也许其他能够做同样工作的块? ofc 它必须与 Simulink 编码器兼容。
谢谢!
resample 函数需要设计过滤器并根据样本因子决定输出大小。在代码生成之后,这不能改变,这就是为什么这个函数需要采样因子是常数。
但是,如果您需要支持的不同下采样因子值有限,您可以使用条件分支调用,以在每个分支中使用常量值重新采样。例如,
% 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
如果这是来自 MATLAB Function 块的输出变量,您还需要在其余 MATLAB 代码和 Simulink 模型中处理可变大小的数据 "out"。
我需要使用 resample()
函数在 Simulink 中获取 Q 下采样因子的可变参数。基本上是一个包含以下代码的 Simulink fcn
块:
function y = resample(data,Q)
y=resample(data,1000,Q);
在桌面模拟中,我可以通过将变量 Q 指定为 MATLAB 解释函数的输入来让变量 Q 作为参数工作,但由于我需要生成 C 代码,我唯一的选择是使用 fcn 块,显然它由于上述限制,无法编译。
error: the downsample factor Q must be constant
我理解这是一个 documented limitation 的重采样函数:
resample: The upsampling and downsampling factors must be specified as constants. Expressions or variables are allowed if their values do not change.
有任何解决方法或不同的方法来解决这个问题吗?也许其他能够做同样工作的块? ofc 它必须与 Simulink 编码器兼容。
谢谢!
resample 函数需要设计过滤器并根据样本因子决定输出大小。在代码生成之后,这不能改变,这就是为什么这个函数需要采样因子是常数。
但是,如果您需要支持的不同下采样因子值有限,您可以使用条件分支调用,以在每个分支中使用常量值重新采样。例如,
% 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
如果这是来自 MATLAB Function 块的输出变量,您还需要在其余 MATLAB 代码和 Simulink 模型中处理可变大小的数据 "out"。