Компенсируйте задержку, введенную БИХ

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

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

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

Fs = 500;
N = 500;

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

Удалите часть шума с помощью фильтра, который останавливает частоты выше 75 Гц. Задайте БИХ фильтр 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'.

См. также

| | |

Похожие темы