Антипричинный, реализация фильтра Нулевой Фазы

В случае КИХ-фильтров возможно спроектировать линейные фильтры фазы это, когда применился к данным (использующий filter или conv), просто задержите выход постоянным числом выборок. Для БИХ-фильтров, однако, искажение фазы обычно очень нелинейно. filtfilt функционируйте использует информацию в сигнале в точках до и после текущей точки, в сущности "изучая будущее", устранить искажение фазы.

Чтобы видеть, как filtfilt делает это, вспоминают что если Z-преобразование действительной последовательности x(n) X(z), затем Z-преобразование инвертированной временем последовательности x(-n) X(z-1). Рассмотрите следующую схему обработки:

Когда |z|=1, это z=ejω, выход уменьшает до X(ejω)|H(ejω)|2. Учитывая все выборки последовательности x(n), вдвойне отфильтрованная версия x это имеет искажение нулевой фазы, возможно.

Например, 1 второй сигнал длительности, произведенный на уровне 100 Гц, состоявших из двух синусоидальных компонентов на уровне 3 Гц и 40 Гц,

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+.25*sin(2*pi*t*40);

Теперь создайте 6-й порядок Баттерворт фильтр lowpass, чтобы отфильтровать высокочастотную синусоиду. Отфильтруйте x использование обоих filter и filtfilt для сравнения:

[b,a] = butter(6,20/(fs/2));

y = filtfilt(b,a,x);
yy = filter(b,a,x);

plot(t,x,t,y,t,yy)
legend('Original','filtfilt','filter')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Original, filtfilt, filter.

Обе отфильтрованных версии устраняют синусоиду на 40 Гц, очевидную в исходном сигнале. График также показывает как filter и filtfilt отличаться. filtfilt линия совпадает с исходной синусоидой на 3 Гц, в то время как filter линия задерживается. filter линия показывает переходному процессу в прежние времена. filtfilt уменьшает переходные процессы запуска фильтра путем тщательного выбора начальных условий, и путем предварительного ожидания на вход упорядочивают короткую, отраженную часть входной последовательности.

Для лучших результатов убедитесь последовательность, которую вы фильтруете, имеет длину по крайней мере три раза порядок фильтра и заострения, чтобы обнулить на обоих ребрах.

Смотрите также

| |