Matlab 编码器:"All inputs must be constant"
Matlab coder: "All inputs must be constant"
我正在使用 Matlab Coder 将此代码转换为 C++:
fs = 50;
[b,a] = butter(3,0.5/(fs/2),'high');
...
% Other code using fs
然后,我得到这个错误:"All inputs must be constant"。
如果我这样做:[b,a] = butter(3,0.5/(50/2),'high');
,它会起作用。
我找到这个 post:Constants and Matlab Coder
所以我尝试了:
fs = 50;
[b,a] = coder.const(@butter,3,0.5/(fs/2),'high');
但是还是报同样的错误。我该如何解决这个问题?
Define Class Properties with Constant Values
在ConstInput.m
classdef ConstInput
properties (Constant)
fs = 50;
end
end
然后将 fs
重命名为 ConstInput.fs
。 (不幸的是,Shift+Enter
不起作用。也许此链接对 changing variable names 有帮助。)
MATLAB R2020a 现已可用。函数 butter 在 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。
[num,den] = hpbutter_mex(2,0.3)
数量=
0.5050 -1.0100 0.5050
登=
1.0000 -0.7478 0.2722
[num,den] = hpbutter_mex(3,0.4)
数量=
0.2569 -0.7707 0.7707 -0.2569
登=
1.0000 -0.5772 0.4218 -0.0563
我正在使用 Matlab Coder 将此代码转换为 C++:
fs = 50;
[b,a] = butter(3,0.5/(fs/2),'high');
...
% Other code using fs
然后,我得到这个错误:"All inputs must be constant"。
如果我这样做:[b,a] = butter(3,0.5/(50/2),'high');
,它会起作用。
我找到这个 post:Constants and Matlab Coder
所以我尝试了:
fs = 50;
[b,a] = coder.const(@butter,3,0.5/(fs/2),'high');
但是还是报同样的错误。我该如何解决这个问题?
Define Class Properties with Constant Values
在ConstInput.m
classdef ConstInput
properties (Constant)
fs = 50;
end
end
然后将 fs
重命名为 ConstInput.fs
。 (不幸的是,Shift+Enter
不起作用。也许此链接对 changing variable names 有帮助。)
MATLAB R2020a 现已可用。函数 butter 在 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。
[num,den] = hpbutter_mex(2,0.3)
数量=
0.5050 -1.0100 0.5050
登=
1.0000 -0.7478 0.2722
[num,den] = hpbutter_mex(3,0.4)
数量=
0.2569 -0.7707 0.7707 -0.2569
登=
1.0000 -0.5772 0.4218 -0.0563