Matlab кодер: «Все входы должны быть постоянными» - PullRequest
1 голос
/ 13 февраля 2020

Я использую 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');

Но все равно сообщает о той же ошибке. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 19 марта 2020

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.

[число, день] = hpbutter_mex (2,0,3)

число =

0.5050   -1.0100    0.5050

день =

1.0000   -0.7478    0.2722

[num, den] = hpbutter_mex (3,0.4)

num =

0.2569   -0.7707    0.7707   -0.2569

den =

1.0000   -0.5772    0.4218   -0.0563
1 голос
/ 14 февраля 2020

Определение свойств класса с постоянными значениями

In ConstInput.m

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

Затем переименуйте fs в ConstInput.fs. (К сожалению, Shift+Enter не работает. Может быть, эта ссылка поможет изменить имена переменных .)

...