filtfilt

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

Описание

пример

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 к нулевой фазе фильтруют синтетическую электрокардиограмму (ECG) форма волны. Функция, которая генерирует форму волны, в конце примера. Комплекс QRS является важной функцией в ECG. Здесь это начинается вокруг момента времени 160.

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')

Повредите 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')

Это - функция, которая генерирует форму волны ECG.

function x = ecg(L)
%ECG Electrocardiogram (ECG) signal generator.
%   ECG(L) generates a piecewise linear ECG signal of length L.
%
%   EXAMPLE:
%   x = ecg(500).';
%   y = sgolayfilt(x,0,3); % Typical values are: d=0 and F=3,5,9, etc. 
%   y5 = sgolayfilt(x,0,5); 
%   y15 = sgolayfilt(x,0,15); 
%   plot(1:length(x),[x y y5 y15]);

%   Copyright 1988-2002 The MathWorks, Inc.

a0 = [0,1,40,1,0,-34,118,-99,0,2,21,2,0,0,0]; % Template
d0 = [0,27,59,91,131,141,163,185,195,275,307,339,357,390,440];
a = a0 / max(a0);
d = round(d0 * L / d0(15)); % Scale them to fit in length L
d(15)=L;

for i=1:14,
       m = d(i) : d(i+1) - 1;
       slope = (a(i+1) - a(i)) / (d(i+1) - d(i));
       x(m+1) = a(i) + slope * (m - d(i));
end

end

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

свернуть все

Коэффициенты передаточной функции, заданные как векторы. Если вы используете фильтр все-полюса, введите 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