exponenta event banner

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

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

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

Возьмите показания электрокардиограммы, отобранные при 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.

См. также

| | |

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