Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Compensación del retardo generado por un filtro FIR

Al filtrar una señal se puede generar un retardo. Esto significa que la señal de salida está desplazada en el tiempo con respecto a la entrada. El siguiente ejemplo muestra cómo contrarrestar este efecto.

Los filtros de respuesta al impulso finita suelen retrasar todos los componentes de frecuencia en la misma medida. Esto facilita corregir retardos desplazando la señal en el tiempo.

Tome la lectura de un electrocardiograma muestreada a 500 Hz durante 1 s. Añada ruido aleatorio. Reinicie el generador de números aleatorios a efectos de reproducibilidad.

Fs = 500;
N = 500;
rng default

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

Elimine parte del ruido utilizando un filtro que detenga las frecuencias superiores a 75 Hz. Utilice designfilt para diseñar un filtro de orden 70.

nfilt = 70;
Fst = 75;

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

Filtre la señal y represéntela. El resultado es más suave que el original, pero presenta un desfase.

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 object. The axes object with title Electrocardiogram, xlabel Time (s) contains 2 objects of type line. These objects represent Original Signal, Filtered Signal.

Utilice grpdelay para comprobar que el retardo causado por el filtro es igual a la mitad de la orden de filtrado.

grpdelay(d,N,Fs)

Figure Figure 1: Group delay contains an axes object. The axes object with title Group delay, xlabel Frequency (Hz), ylabel Group delay (in samples) contains an object of type line.

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

Desplace la señal filtrada para alinear los datos. Elimine las primeras muestras delay. Elimine las últimas muestras delay del original y del vector temporal.

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

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

Represente las señales y verifique que están alineadas.

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 object. The axes object with title Electrocardiogram, xlabel Time (s) contains 2 objects of type line. These objects represent Original Signal, Filtered Shifted Signal.

Consulte también

| | |

Temas relacionados