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