Компенсируйте задержку, введенную конечная импульсная характеристика

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

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

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

Fs = 500;
N = 500;
rng default

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

Удалите часть шума с помощью фильтра, который останавливает частоты выше 75 Гц. Использование designfilt для разработки фильтра порядка 70.

nfilt = 70;
Fst = 75;

d = designfilt('lowpassfir','FilterOrder',nfilt, ...
               'CutoffFrequency',Fst,'SampleRate',Fs);

Фильтрация сигнала и построение графика. Результат плавнее оригинала, но отстает от него.

xf = filter(d,xn);

plot(tn,xn)
hold on, plot(tn,xf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel 'Time (s)', legend('Original Signal','Filtered Signal')

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

Использование grpdelay чтобы проверить, что задержка, вызванная фильтром, равна половине порядка фильтра.

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.

delay = mean(grpdelay(d))
delay = 35

Переместите отфильтрованный сигнал, чтобы выровнять данные. Удалите его первый delay выборки. Удалите последнюю delay выборки исходного и временного вектора.

tt = tn(1:end-delay);
sn = xn(1:end-delay);

sf = xf;
sf(1:delay) = [];

Постройте график сигналов и проверьте, что они выровнены.

plot(tt,sn)
hold on, plot(tt,sf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel('Time (s)'), legend('Original Signal','Filtered Shifted Signal')

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

См. также

| | |

Похожие темы