filtfilt

Нулевая фаза цифровая фильтрация

Синтаксис

y = filtfilt(b,a,x)
y = filtfilt(sos,g,x)
y = filtfilt(d,x)

Описание

пример

y = filtfilt(b,a,x) выполняет нулевую фазу цифровая фильтрация путем обработки входных данных, x, и в прямых и в обратных направлениях. После фильтрации данных в прямом направлении filtfilt инвертирует отфильтрованную последовательность и запускает его назад через фильтр. Результат имеет следующие характеристики:

  • Нулевое искажение фазы.

  • Передаточная функция фильтра равняется значению в квадрате исходной передаточной функции фильтра.

  • Порядок фильтра, который удваивает порядок фильтра, заданного b и a.

filtfilt минимизирует запуск и конечные переходные процессы путем соответствия с начальными условиями. Не используйте filtfilt с дифференциатором и Гильбертовыми КИХ-фильтрами, потому что работа этих фильтров зависит в большой степени от их фазового отклика.

y = filtfilt(sos,g,x) нулевая фаза фильтрует входные данные, x, с помощью раздела второго порядка (biquad) фильтр, представленный матричным sos и значениями шкалы g.

y = filtfilt(d,x) нулевая фаза фильтрует входные данные, x, с помощью цифрового фильтра, d. Используйте designfilt, чтобы сгенерировать d на основе спецификаций частотной характеристики.

Примеры

свернуть все

Фильтрация нулевой фазы помогает сохранить функции в отфильтрованной форме волны времени точно, где они происходят в неотфильтрованном сигнале.

Чтобы проиллюстрировать использование filtfilt для фильтрации нулевой фазы, рассмотрите форму волны электрокардиограммы.

wform = ecg(500);

plot(wform)
axis([0 500 -1.25 1.25])
text(155,-0.4,'Q')
text(180,1.1,'R')
text(205,-1,'S')

Комплекс QRS является важной функцией в ECG. Здесь это начинается вокруг момента времени 160.

Повредите ECG с аддитивным шумом. Сбросьте генератор случайных чисел для восстанавливаемых результатов. Создайте lowpass КИХ equiripple, фильтруют и фильтруют шумную форму волны с помощью и нулевой фазы и обычной фильтрации.

rng default

x = wform' + 0.25*randn(500,1);
d = designfilt('lowpassfir', ...
    'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...
    'PassbandRipple',1,'StopbandAttenuation',60, ...
    'DesignMethod','equiripple');
y = filtfilt(d,x);
y1 = filter(d,x);

subplot(2,1,1)
plot([y y1])
title('Filtered Waveforms')
legend('Zero-phase Filtering','Conventional Filtering')

subplot(2,1,2)
plot(wform)
title('Original Waveform')

Фильтрация нулевой фазы уменьшает шум в сигнале и сохраняет комплекс QRS одновременно, это происходит в оригинале. Обычная фильтрация уменьшает шум в сигнале, но задерживает комплекс QRS.

Повторите вышеупомянутое использование Баттерворта фильтр раздела второго порядка.

d1 = designfilt('lowpassiir','FilterOrder',12, ...
    'HalfPowerFrequency',0.15,'DesignMethod','butter');
y = filtfilt(d1,x);

subplot(1,1,1)
plot(x)
hold on
plot(y,'LineWidth',3)
legend('Noisy ECG','Zero-Phase Filtering')

Входные параметры

свернуть все

Коэффициенты передаточной функции, заданные как векторы. Если вы используете фильтр все-полюса, введите 1 для b. Если вы используете все-нуль (КИХ) фильтр, введите 1 для a.

Пример: b = [1 3 3 1]/6 и a = [3 0 1 0]/3 задают третий порядок Фильтр Баттерворта с нормированной частотой на 3 дБ 0.5π рад/выборка.

Типы данных: double

Входной сигнал, заданный как или комплексный вектор с действительным знаком, матрица или массив N-D. filtfilt действует вдоль первого измерения массива x с размером, больше, чем 1.

Пример: cos(pi/4*(0:159))+randn(1,160) является одноканальным сигналом вектора - строки.

Пример: cos(pi./[4;2]*(0:159))'+randn(160,2) является двухканальным сигналом.

Типы данных: double
Поддержка комплексного числа: Да

Коэффициенты раздела второго порядка, заданные как матрица. sos является K-by-6 матрица, где количество разделов, K, должно быть больше, чем или равным 2. Если количество разделов - меньше чем 2, то filtfilt обрабатывает вход как вектор числителя. Каждая строка sos соответствует коэффициентам второго порядка (biquad) фильтр. i th строка sos соответствует [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)].

Пример: s = [2 4 2 6 0 2;3 3 0 6 0 0] задает третий порядок Фильтр Баттерворта с нормированной частотой на 3 дБ 0.5π рад/выборка.

Типы данных: double

Масштабные коэффициенты, заданные как вектор.

Типы данных: double

Цифровой фильтр, заданный как объект digitalFilter. Используйте designfilt, чтобы сгенерировать цифровой фильтр на основе спецификаций частотной характеристики.

Пример: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) задает третий порядок Фильтр Баттерворта с нормированной частотой на 3 дБ 0.5π рад/выборка.

Типы данных: double

Выходные аргументы

свернуть все

Фильтрованный сигнал, возвращенный как вектор, матрица или массив N-D.

Ссылки

[1] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

[2] Mitra, цифровая обработка сигналов Сэнджита К. 2-й Эд. Нью-Йорк: McGraw-Hill, 2001.

[3] Густафсон, F. “Определяя начальные состояния в прямой обратной фильтрации”. IEEE® Transactions на Обработке сигналов. Издание 44, апрель 1996, стр 988–992.

Расширенные возможности

Представлено до R2006a