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.

Implementación de filtros anticausales y de fase cero

En el caso de los filtros FIR, es posible diseñar filtros de fase lineal 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 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 funciona esto, 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 de tiempo invertido
<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 duración de 1 segundo 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 6o orden para filtrar el sinusoides de alta frecuencia. Filtrar utilizando 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 el sinusoides de 40 Hz evidente en la señal original. La gráfica también muestra cómo y difieren.filterfiltfilt La línea está en fase con el sinusoides original de 3 Hz, mientras que la línea se retrasa.filtfiltfilter La línea muestra un transitorio en las primeras horas. reduce los transitorios de inicio del filtro eligiendo cuidadosamente las condiciones iniciales y anteponiendo en 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 tenga longitud al menos tres veces el orden del filtro y de los tapers a cero en ambos bordes.

Consulte también

| |