В случае КИХ-фильтров возможно спроектировать линейные фильтры фазы это, когда применился к данным (использующий filter
или conv
), просто задержите выход постоянным числом выборок. Для БИХ-фильтров, однако, искажение фазы обычно очень нелинейно. filtfilt
функционируйте использует информацию в сигнале в точках до и после текущей точки, в сущности "изучая будущее", устранить искажение фазы.
Чтобы видеть, как filtfilt
делает это, вспоминают что если Z-преобразование действительной последовательности , затем Z-преобразование инвертированной временем последовательности . Рассмотрите следующую схему обработки:
Когда , это , выход уменьшает до . Учитывая все выборки последовательности , вдвойне отфильтрованная версия это имеет искажение нулевой фазы, возможно.
Например, 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
уменьшает переходные процессы запуска фильтра путем тщательного выбора начальных условий, и путем предварительного ожидания на вход упорядочивают короткую, отраженную часть входной последовательности.
Для лучших результатов убедитесь последовательность, которую вы фильтруете, имеет длину по крайней мере три раза порядок фильтра и заострения, чтобы обнулить на обоих ребрах.