Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Compensar el retardo introducido por un filtro FIR

El filtrado de una señal introduce un retardo. Esto significa que la señal de salida se desplaza en el tiempo con respecto a la entrada. Este ejemplo muestra cómo contrarrestar este efecto.

Los filtros de respuesta de impulsos finitos suelen retrasar todos los componentes de frecuencia por la misma cantidad. Esto hace que sea fácil de corregir para el retraso mediante el cambio de la señal en el tiempo.

Tome una lectura de electrocardiograma muestreada a 500 Hz durante 1 s. Añadir ruido aleatorio. Restablezca el generador de números aleatorios para reproducibilidad.

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

Quite parte del ruido con un filtro que detenga las frecuencias por encima de 75 Hz. Se utiliza para diseñar un filtro de orden 70.designfilt

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

Filtra la señal y compelo. El resultado es más suave que el original, pero se queda rezagada.

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')

Se usa para comprobar que el retardo causado por el filtro es igual a la mitad del orden de filtro.grpdelay

grpdelay(d,N,Fs)

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

Cambie la señal filtrada para que alinee los datos. Quite sus primeras muestras.delay Quite las últimas muestras del original y del vector de tiempo.delay

tt = tn(1:end-delay); sn = xn(1:end-delay);  sf = xf; sf(1:delay) = [];

Trace 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')

Consulte también

| | |

Temas relacionados