我正在使用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