exponenta event banner

filtfilt

Цифровая фильтрация с нулевой фазой

Описание

пример

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

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

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

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

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

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.

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

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. Если используется фильтр с полным нулем (FIR), введите 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 соответствует коэффициентам фильтра второго порядка (биквад). 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] Густафссон, Ф. «Определение начальных состояний при фильтрации вперед-назад». Транзакции IEEE ® при обработке сигналов. том 44, апрель 1996 года, стр. 988-992.

[2] Митра, Санджит К. Цифровая обработка сигналов. 2-й ред. Нью-Йорк: Макгроу-Хилл, 2001.

[3] Оппенгейм, Алан В., Рональд В. Шефер и Джон Р. Бак. Дискретно-временная обработка сигналов. 2-я эд. река Верхнее Седло, Нью-Джерси: Прентис Холл, 1999.

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

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