Matlab 编码器:"All inputs must be constant"



我正在使用Matlab Coder将此代码转换为C++:

fs = 50;
[b,a] = butter(3,0.5/(fs/2),'high');
...
% Other code using fs

然后,我收到此错误:"所有输入都必须是常量"。

如果我这样做:[b,a] = butter(3,0.5/(50/2),'high');,它有效。

我找到了这篇文章:常量和 Matlab Coder

所以我尝试了:

fs = 50;
[b,a] = coder.const(@butter,3,0.5/(fs/2),'high');

但它仍然报告相同的错误。我该如何解决这个问题?

使用常量值定义类属性

In ConstInput.m

classdef ConstInput
properties (Constant)
fs = 50;
end
end

然后将fs重命名为ConstInput.fs。(不幸的是,Shift+Enter不起作用。也许此链接有助于更改变量名称。

> MATLAB R2020a 现已推出。R2020a 中增强了函数黄油,以支持使用非常量输入生成代码。生成的代码可用于在运行时获取有效阶数和截止频率的任何滤波器的系数。

例如,考虑以下代码,它给出了高通数字滤波器的滤波器系数:

function[num,den] = hpbutter(n,w)
%#codegen
[num,den] = butter(n,w,'high');

现在我们可以生成具有非常量输入的代码,如下所示:

codegen hpbutter -args {coder.typeof(0),coder.typeof(0)}

您可以将任何有效的滤波器阶数 (n( 和截止频率 (w( 传递给生成的 MEX。

[数字,den] = hpbutter_mex(2,0.3(

num =

0.5050   -1.0100    0.5050

窝 =

1.0000   -0.7478    0.2722

[数字,den] = hpbutter_mex(3,0.4(

num =

0.2569   -0.7707    0.7707   -0.2569

窝 =

1.0000   -0.5772    0.4218   -0.0563

相关内容

  • 没有找到相关文章

最新更新