В случае КИХ-фильтров можно проектировать линейные фазовые фильтры, которые при применении к данным (с помощью filter или conv), просто задержать выход на фиксированное количество выборок. Однако для БИХ-фильтров фазовое искажение обычно является очень нелинейным. filtfilt функция использует информацию в сигнале в точках до и после текущей точки, по существу «заглядывая в будущее», для устранения фазового искажения.
Посмотреть, как filtfilt делает это, напомним, что если Z-преобразование действительной последовательности ) равно z), то Z-преобразование обращенной во времени -n) z-1). Рассмотрим следующую схему обработки:

Когда = 1, то = 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-го порядка для фильтрации высокочастотной синусоиды. Фильтр 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 уменьшает переходные процессы запуска фильтра за счет тщательного выбора исходных условий и за счет добавления во входную последовательность короткой отраженной части входной последовательности.
Для получения наилучших результатов убедитесь, что фильтруемая последовательность имеет длину, по крайней мере, в три раза превышающую порядок фильтрации, и сужается до нуля на обеих кромках.