¿Cómo maneja MATLAB los filtros IIR?


8

MATLAB tiene un butter, que construye un filtro de Butterworth dado un orden y una frecuencia de corte relativa. El filtro creado se puede usar para filtercualquier señal finita.

¿Cómo hace esto MATLAB si el filtro tiene una respuesta de impulso infinita? Supongo que debe abrir la señal: ¿se hace esto con una simple ventana rectangular para que se utilicen todos los valores conocidos?

Además, ¿cómo se discretiza el filtro continuo? Transformación bilineal, coincidencia de respuesta a impulso, etc.

No creo que el texto de ayuda de MATLAB explique esto:

Y = FILTER(B,A,X)filtra los datos en vector Xcon el filtro descrito por vectores Ay Bcrea los datos filtrados Y. El filtro es una implementación de "Transposición directa de forma II" de la ecuación de diferencia estándar:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                      - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

Respuestas:


8

Esto no es realmente un problema específico de MATLAB; Veo un par de preguntas más generales:

¿Cómo se implementa un filtro digital IIR?

Puede aplicar cualquier filtro digital general haciendo girar su respuesta de impulso con la señal que desea filtrar. Eso parece como:

y[n]=k=0N1x[k]h[nk]

Esto funciona muy bien para los filtros FIR , pero tiene complicaciones con los sistemas IIR , porque sus respuestas de impulso son infinitamente largas ( en la suma anterior). Eso hace que la salida del filtro sea difícil de calcular utilizando la suma de convolución directa anterior. Para implementar realmente un filtro IIR, necesitamos una forma de expresar la salida del filtro de una manera que sea más manejable computacionalmente.N

El atributo de un filtro IIR que hace que su respuesta al impulso sea infinitamente larga es la naturaleza recursiva del sistema ; Hay retroalimentación desde la salida a la entrada del filtro. Esto significa que la salida de un filtro IIR en cualquier instante de tiempo puede depender de dos fuentes de información separadas:

  • La señal de entrada al filtro, pasado y presente, y

  • Valores pasados ​​de la señal de salida del filtro.

Esto lleva a la representación de ecuaciones de diferencia del sistema IIR:

a0y[n]=k=1M1aky[nk]+k=0N1bkx[nk]

Esta representación ilustra que podemos implementar un filtro IIR calculando una suma ponderada de salidas pasadas del filtro y entradas pasadas del filtro (en la práctica, y podrían ser, y a menudo son iguales, el orden del filtro cuando se define como arriba es ). Esta es una expresión de forma cerrada que captura el comportamiento del filtro completamente, adecuada para la implementación automatizada, y es la ecuación a la que se hace referencia en el extracto de ayuda de MATLAB que mostró en su pregunta. Tenga en cuenta que supone casi exclusivamente que es igual a ; Solo lo incluí porque se muestra en el texto de ayuda citado, al que se hace referencia comoMNNMmax(M,N)1a01a(1).

Entonces, para responder específicamente a su pregunta, como sugiere el texto, MATLAB implementa sistemas IIR utilizando la ecuación anterior. Cuando diseña un filtro IIR con MATLAB o de otro modo, obtiene dos conjuntos de coeficientes ( y en la ecuación de diferencia) que definen cómo ponderar las entradas y salidas del filtro en la implementación del filtro. Hay algunas otras sutilezas que a veces son relevantes; por ejemplo, el texto se refiere al uso de una realización de "transposición de forma directa II" del filtro. Luego aplica el filtro calculando la ecuación de diferencia anterior para cada muestra de salida deseada.akbk

De hecho, hay una serie de topologías que se pueden usar para implementar filtros digitales, cada una con sus propias compensaciones. DF2T se usa a menudo debido a su estructura más eficiente (contiene un número mínimo de elementos de retardo) y su robustez mejorada al error de redondeo (ya que los coeficientes de se implementan primero).bk

¿Cómo diseña MATLAB los filtros Butterworth?

La documentación de la butterfunción no especifica cómo genera la aproximación discreta al prototipo de filtro analógico de Butterworth . Sin embargo, al echar un vistazo butter.m, encuentras:

% step 5: Use Bilinear transformation to find discrete equivalent:
if ~analog,
    [a,b,c,d] = bilinear(a,b,c,d,fs);
end

Por lo tanto, parece que utiliza la transformación bilineal para mapear el prototipo de filtro Butterworth a una realización de filtro digital.


2

La función de filtro de MATLAB simplemente implementa la ecuación de diferencia para un filtro transformado de forma directa II. No hay ninguna razón para digitalizar el filtro ya que, en primer lugar, está diseñado en un espacio discreto. La salida de filter () tiene la misma longitud que la entrada. Eso es técnicamente "incorrecto", ya que trunca la parte del filtro que ampliaría esa longitud. Si fue a acceder a la cola, puede agregar una cantidad decente de ceros a su señal de entrada. Como es una respuesta "infinita", no puede hacerlo perfectamente, pero en la práctica en la mayoría de las aplicaciones no es muy difícil de hacer.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.