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

В случае КИХ-фильтров возможно разработать линейные фильтры фазы, которые, когда применился к данным (использующий 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')

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

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

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

| |