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.

Aplicación de filtro anticausal, de fase cero

En el caso de los filtros FIR, es posible diseñar filtros de fase lineales que, cuando se aplican a los datos (utilizando o), simplemente retrasan la salida por un número fijo de muestras.filterconv Para los filtros IIR, sin embargo, la distorsión de fase suele ser altamente no lineal. La función utiliza la información de la señal en los puntos antes y después del punto actual, en esencia "mirando hacia el futuro", para eliminar la distorsión de fase.filtfilt

Para ver cómo lo hace, recuerde que si la transformación Z de una secuencia realfiltfilt

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
Es
<math display="block">
<mrow>
<mi>X</mi>
<mo stretchy="false">(</mo>
<mi>z</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
, a continuación, la transformación Z de la secuencia inversa de tiempo
<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mo>-</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
Es
<math display="block">
<mrow>
<mi>X</mi>
<mo stretchy="false">(</mo>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
</math>
. Considere el siguiente esquema de procesamiento:

Cuando

<math display="block">
<mrow>
<mrow>
<mo>|</mo>
<mi>z</mi>
<mo>|</mo>
</mrow>
<mo>=</mo>
<mn>1</mn>
</mrow>
</math>
Es decir
<math display="block">
<mrow>
<mi>z</mi>
<mo>=</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
<mi>ω</mi>
</mrow>
</msup>
</mrow>
</math>
, la salida se reduce a
<math display="block">
<mrow>
<mi>X</mi>
<mo stretchy="false">(</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
<mi>ω</mi>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<msup>
<mrow>
<mo>|</mo>
<mi>H</mi>
<mo stretchy="false">(</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
<mi>ω</mi>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<mo>|</mo>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
. Dadas todas las muestras de la secuencia
<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
, una versión doblemente filtrada de
<math display="block">
<mrow>
<mi>x</mi>
</mrow>
</math>
que tiene distorsión de fase cero es posible.

Por ejemplo, una señal de 1 segundo de duración muestreada a 100 Hz, compuesta por dos componentes sinusoidales a 3 Hz y 40 Hz, es

fs = 100; t = 0:1/fs:1; x = sin(2*pi*t*3)+.25*sin(2*pi*t*40);

Ahora crea un filtro de paso bajo Butterworth de 6 órdenes para filtrar la sinusoide de alta frecuencia. Filtre usando ambos y para la comparación:xfilterfiltfilt

[b,a] = butter(6,20/(fs/2));  y = filtfilt(b,a,x); yy = filter(b,a,x);  plot(t,x,t,y,t,yy) legend('Original','filtfilt','filter')

Ambas versiones filtradas eliminan la sinusoide de 40 Hz evidente en la señal original. La trama también muestra cómo y difieren.filterfiltfilt La línea está en fase con la sinusoide original de 3 Hz, mientras que la línea se retrasa.filtfiltfilter La línea muestra un transitorio en los primeros tiempos. reduce los transitorios de inicio del filtro eligiendo cuidadosamente las condiciones iniciales y anteponiendo a la secuencia de entrada una pieza corta y reflejada de la secuencia de entrada.filterfiltfilt

Para obtener los mejores resultados, asegúrese de que la secuencia que está filtrando tiene una longitud de al menos tres veces el orden de filtro y se estrecha a cero en ambas aristas.

Consulte también

| |