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 IIR

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.

Los filtros de respuesta de impulsos infinitos retrasan algunos componentes de frecuencia más que otros. Distorsionan eficazmente la señal de entrada. La función compensa los retrasos introducidos por dichos filtros y corrige así la distorsión del filtro.filtfilt Este "filtrado de fase cero" resulta del filtrado de la señal en las direcciones hacia delante y hacia atrás.

Tome una lectura de electrocardiograma muestreada 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;

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

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

Filtre la señal. La señal filtrada es más limpia que la original, pero se retrasa en el tiempo con respecto a ella. También se distorsiona debido a la fase no lineal del filtro. Acerque el zoom cerca del 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])

Una mirada A la introducida por el filtro muestra que el retardo es dependiente de la frecuencia.group delay

grpdelay(d,N,Fs)

Filtre la señal usando.filtfilt El retardo y la distorsión se han eliminado eficazmente. Se utiliza cuando es fundamental 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