exponenta event banner

Компенсация задержки, вносимой фильтром БИХ

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

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

Возьмите показания электрокардиограммы, отобранные при 500 Гц в течение 1 с. Добавьте случайный шум.

Fs = 500;
N = 500;

rng default
xn = ecg(N) + 0.2*randn([1 N]);
tn = (0:N-1)/Fs;

Удалите часть шума с помощью фильтра, который останавливает частоты выше 75 Гц. Укажите фильтр IIR 7-го порядка с 1 дБ пульсации полосы пропускания и 60 дБ затухания полосы останова.

Nf = 7;
Fp = 75;
Ap = 1;
As = 60;

d = designfilt('lowpassiir','FilterOrder',Nf,'PassbandFrequency',Fp, ...
    'PassbandRipple',Ap,'StopbandAttenuation',As,'SampleRate',Fs);

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

xfilter = filter(d,xn);

plot(tn,xn,tn,xfilter)

title 'Electrocardiogram'
xlabel 'Time (s)', legend('Original Signal','Filtered Signal')
axis([0.25 0.55 -1 1.5])

Figure contains an axes. The axes with title Electrocardiogram contains 2 objects of type line. These objects represent Original Signal, Filtered Signal.

Взгляд на групповую задержку, введенную фильтром, показывает, что задержка зависит от частоты.

grpdelay(d,N,Fs)

Figure Filter Visualization Tool - Group delay contains an axes and other objects of type uitoolbar, uimenu. The axes with title Group delay contains an object of type line.

Фильтрация сигнала с помощью filtfilt. Задержка и искажение были эффективно устранены. Использовать filtfilt когда важно сохранить информацию о фазе сигнала нетронутой.

xfiltfilt = filtfilt(d,xn);

plot(tn,xn,tn,xfilter)
hold on
plot(tn,xfiltfilt,'r','linewidth',2)
hold off

title 'Electrocardiogram'
xlabel 'Time (s)'
legend('Original Signal','Filtered Signal', ...
       'Zero-phase filtered with ''filtfilt''')
axis([0.25 0.55 -1 1.5])

Figure contains an axes. The axes with title Electrocardiogram contains 3 objects of type line. These objects represent Original Signal, Filtered Signal, Zero-phase filtered with 'filtfilt'.

См. также

| | |

Связанные темы