Main Content

Compensar el retraso introducido por un filtro FIR

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

Los filtros de respuesta de impulso sin impulso finitos a menudo retrasan todos los componentes de frecuencia en la misma cantidad. Esto hace que sea fácil de corregir para el retardo cambiando la señal a tiempo.

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

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

Retire 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);

Filtrar la señal y trazarla. El resultado es más suave que el original, pero se queda atrás.

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 utiliza para comprobar que el retraso causado por el filtro es igual a la mitad del orden del filtro.grpdelay

grpdelay(d,N,Fs)

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

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

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

Trazar las señales y verificar 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