Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Compensar el retardo introducido por un filtro IIR

Al filtrar una señal se puede generar un retardo. Esto significa que la señal de salida está desplazada en el tiempo con respecto a la entrada.

Los filtros de respuesta infinita al impulso retrasan algunos componentes de frecuencia más que otros. En la práctica, distorsionan la señal de entrada. La función filtfilt compensa los retardos que introducen dichos filtros y, así, corrige la distorsión de filtro. Este "filtrado de fase cero" se debe al filtrado de la señal en dirección hacia delante y hacia atrás.

Tome la lectura de un electrocardiograma muestreada a 500 Hz durante 1 s. Añada ruido aleatorio.

Fs = 500;
N = 500;

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

Elimine parte del ruido utilizando un filtro que detenga las frecuencias superiores a 75 Hz. Especifique un filtro IIR de 7.º orden con 1 dB de ondulación de la banda de paso y 60 dB de atenuación de la banda de parada.

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 esta última. 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])

Figure contains an axes object. The axes object with title Electrocardiogram, xlabel Time (s) contains 2 objects of type line. These objects represent Original Signal, Filtered Signal.

Al observar el retardo de grupo introducido por el filtro, se establece que el retardo depende de la frecuencia.

grpdelay(d,N,Fs)

Figure Figure 1: Group delay contains an axes object. The axes object with title Group delay, xlabel Frequency (Hz), ylabel Group delay (in samples) contains an object of type line.

Filtre la señal utilizando filtfilt. Como podrá comprobar, el retardo y la distorsión se han eliminado. Utilice filtfilt cuando sea fundamental mantener intacta la información de fase de una señal.

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

Figure contains an axes object. The axes object with title Electrocardiogram, xlabel Time (s) contains 3 objects of type line. These objects represent Original Signal, Filtered Signal, Zero-phase filtered with 'filtfilt'.

Consulte también

| | |

Temas relacionados