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 IIR

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.

Los filtros de respuesta de impulso infinito retrasan algunos componentes de frecuencia más que otros. Distorsionan eficazmente la señal de entrada. La función compensa los retrasos introducidos por estos filtros y, por lo tanto, corrige la distorsión del filtro.filtfilt Este "filtrado de fase cero" resulta del filtrado de la señal en las direcciones hacia adelante y hacia atrás.

Tome un electrocardiograma de lectura muestreado a 500 Hz durante 1 s. Añadir ruido aleatorio.

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

Retire parte del ruido con un filtro que detenga las frecuencias por encima de 75 Hz. Especifique un filtro IIR de 7o orden con 1 dB de ondulación de banda de paso y 60 dB de atenuación de banda de parada.

Nf = 7; Fp = 75; Ap = 1; As = 60;  d = designfilt('lowpassiir','FilterOrder',Nf,'PassbandFrequency',Fp, ...     'PassbandRipple',Ap,'StopbandAttenuation',As,'SampleRate',Fs);

Filtra la señal. La señal filtrada es más limpia que la original, pero se retiene en el tiempo con respecto a ella. También se distorsiona debido a la fase no lineal del filtro. Acérquese al pico.

xfilter = filter(d,xn);  plot(tn,xn,tn,xfilter)  title 'Electrocardiogram' xlabel 'Time (s)', legend('Original Signal','Filtered Signal') axis([0.25 0.55 -1 1.5])

Un vistazo a lo introducido por el filtro muestra que el retardo depende de la frecuencia.retraso del grupo

grpdelay(d,N,Fs)

Filtrar la señal utilizando .filtfilt El retraso y la distorsión se han eliminado efectivamente. Utilícelo cuando sea crítico mantener intacta la información de fase de una señal.filtfilt

xfiltfilt = filtfilt(d,xn);  plot(tn,xn,tn,xfilter) hold on plot(tn,xfiltfilt,'r','linewidth',2) hold off  title 'Electrocardiogram' xlabel 'Time (s)' legend('Original Signal','Filtered Signal', ...        'Zero-phase filtered with ''filtfilt''') axis([0.25 0.55 -1 1.5])

Consulte también

| | |

Temas relacionados