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 = 0norte- 1x [ k ] h [ n - k ]
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.norte→ ∞
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:
una0 0y[ n ] =∑k = 1METRO- 1unaky[ n - k ] +∑k = 0norte- 1sikx [ n - k ]
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 comoMETROnortenorteMETROm a x ( M, N) - 1una0 01a(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.unaksik
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).sik
¿Cómo diseña MATLAB los filtros Butterworth?
La documentación de la butter
funció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.