Matlab Кодер и фильтфильт () - PullRequest
2 голосов
/ 25 февраля 2012

Я пытаюсь использовать команду FilterFilt с Matlab Coder , но у меня возникают проблемы.

Если я запускаю программу обычным способом , все работает нормально, нокогда я пытаюсь построить для c-кода, появляется следующее сообщение об ошибке: «Данные должны иметь длину, превышающую порядок фильтрации в 3 раза». Я где-то читал, что это может быть из-за необходимости в функции FilterFiltзнать весь сигнал (со временем), и это может быть несовместимо с Matlab-кодером.Это, однако, кажется неправильным, так как Matlab перечисляет фильтрирование как поддерживаемую функцию для генерации кода - http://www.mathworks.se/help/toolbox/signal/ug/br7exek-1.html

Мой вызов:

y_filt = фильтруемый (b, a, y);

Мои переменные перед вызовом имеют следующие свойства:

Имя Размер .......... Байт ...... Класс

a ...... 1x9 ........... 72 ........... двойной
b ...... 1x9 ........... 72........... double
y ...... 1499400x1 11995200 double

У кого-нибудь есть предложения по решению этой проблемы?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Я понимаю ваше разочарование.Я думаю, что проблема связана с тем, что для использования filtfilt вы предварительно выделяете огромное количество данных.Когда я пытаюсь выполнить аналогичную операцию, моей машине, которая считается классом сервера, не хватает памяти.Я бы порекомендовал взглянуть на ваши требования и убедиться, что filtfilt - единственная функция, которая будет им соответствовать.Я понимаю, что свойство нулевой фазы filtfilt идеально подходит для распространения в Matlab Coder, однако требования к памяти могут еще больше у вас побаливать.Дайте мне знать, если вы хотите обсудить другие альтернативы.Спасибо!

0 голосов
/ 22 апреля 2015

здесь вы используете Buuterwroth-Filter.Это БИХ-фильтр.Запрашиваемый фильтром order может быть намного больше, чем количество вкладок фильтра.И длина сигнала должна быть втрое больше фильтра порядка , а не длины фильтра!

С уважением, Чеков

...