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

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

Фильтры импульсной характеристики Бога задерживают некоторые частотные составляющие больше, чем другие. Они эффективно искажают входной сигнал. Функциональный 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'.

Смотрите также

| | |

Похожие темы