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

Figure contains an axes. The axes contains 4 objects of type line, text.

Повреждение ЭКГ аддитивным шумом. Сбросьте генератор случайных чисел для воспроизводимых результатов. Создайте lowpass конечную импульсную характеристику фильтр равновесия и фильтруйте шумную форму волны, используя как нулевую фазу, так и обычную фильтрацию.

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

Figure contains 2 axes. Axes 1 with title Filtered Waveforms contains 2 objects of type line. These objects represent Zero-phase Filtering, Conventional Filtering. Axes 2 with title Original Waveform contains an object of type line.

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

Повторите вышесказанное с помощью фильтра секции второго порядка Butterworth.

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Noisy ECG, Zero-Phase Filtering.

Это функция, которая генерирует сигнал ЭКГ.

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-dB 0.5, рад/выборка.

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

Входной сигнал, заданный как вектор с реальным или комплексным значением, матрица или N-D массив. x должно быть конечным. 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 строка 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-dB 0.5, рад/выборка.

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

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

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

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

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

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

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

свернуть все

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

Ссылки

[1] Gustafsson, F. «Определение начальных состояний в обратной фильтрации». IEEE® Транзакции по обработке сигналов. Том 44, апрель 1996 года, стр. 988-992.

[2] Митра, Санджит К. Цифровая обработка сигналов. 2nd Ed. New York: McGraw-Hill, 2001.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Обработка сигнала в дискретном времени. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

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

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