Convierte un FIR a un IIR equivalente

8

¿Hay alguna forma de convertir FIRa en un IIRfiltro con el comportamiento más similar?

Andrea
fuente
3
Su frase "comportamiento más similar" hace que esta pregunta sea difícil de responder. ¿Puedes describir qué significa para ti el "comportamiento más similar"?
Richard Lyons
1
La pregunta debe ser general. Una forma de preservar el módulo de la transformación FIR y / o una forma de preservar más la fase que el módulo
Andrea

Respuestas:

7

Diría que la respuesta a su pregunta, si se toma literalmente, es 'no', no existe una forma general de convertir simplemente un filtro FIR en un filtro IIR.

Estoy de acuerdo con RBJ en que una forma de abordar el problema es observar la respuesta al impulso del filtro FIR y utilizar un método de dominio de tiempo (como el método de Prony) para aproximar esa respuesta al impulso mediante un filtro IIR.

Si comienza con la respuesta de frecuencia, entonces tiene muchos métodos para diseñar filtros IIR. Aunque se publicó hace unos 25 años, creo que el método de Chen y Parks sigue siendo una de las mejores formas de abordar el problema del diseño. Otro método muy simple para el diseño del dominio de frecuencia de los filtros IIR es el método de error de ecuación, que se describe en el libro Digital Filter Design de Parks and Burrus. Lo he explicado en esta respuesta .

Si la respuesta de fase es importante para usted, entonces un problema que enfrentará al diseñar filtros IIR en el dominio de frecuencia es la elección exacta de la respuesta de fase deseada. Si se da la forma general de la fase deseada, todavía tiene un grado de libertad, que es el retraso. Por ejemplo, si la fase deseada esϕre(ω), y la magnitud deseada es METROre(ω) entonces su respuesta de frecuencia deseada se puede elegir como

(1)Hre(ω)=METROre(ω)mij(ϕ(ω)-ωτ)

dónde τes un parámetro de retraso desconocido. Por supuesto que puedes decir que siϕre(ω)se da, entonces no desea modificarlo con un retraso adicional (positivo o negativo). Pero resulta que, en la práctica, el retraso promedio no siempre es importante y, lo que es más importante, para ciertos valores deτsu aproximación será mucho mejor para un orden de filtro dado que para otros. Entonces la demoraτ puede convertirse en un parámetro de diseño adicional y debe elegirse de manera óptima o al menos razonablemente.

He escrito una tesis sobre el diseño de filtros digitales con magnitud prescrita y respuestas de fase. Un capítulo trata del diseño del dominio de frecuencia de los filtros IIR. Ese método puede usarse para diseñar filtros IIR con una fase aproximadamente lineal en las bandas de paso, o para aproximar cualquier otra respuesta de fase (y magnitud) deseada. No solo se garantiza que los filtros sean estables, sino que también puede prescribir un radio de polo máximo, es decir, puede definir un cierto margen de estabilidad. También puede encontrar este método en un documento publicado en el IEEE Transactions on Signal Processing.

Matt L.
fuente
3

La respuesta de Matt L es la mejor desde una perspectiva DSP.

Existe una gran variedad de técnicas de la literatura de control que también pueden hacer lo que está pidiendo. Si bien esto no está convirtiendo explícitamente un filtro FIR en un IIR, las técnicas generalmente encontrarán una solución IIR a menos que se apliquen otras restricciones.

Algunas de las técnicas son:

Peter K.
fuente
2

Otro método que podría aproximarse (no coincidir exactamente) con una respuesta de frecuencia arbitraria dada (como la descrita por un filtro FIR dado) mediante un filtro IIR, es la evolución diferencial. La evolución diferencial es un tipo de algoritmo genético que, para este uso, selecciona y adapta iterativamente un conjunto de polos y ceros en un intento de minimizar un error de diferencia calculado. Parece que hay algunos documentos de IEEE sobre el tema, así como un capítulo en uno de los libros de Rick Lyons ("Streamlining DSP").

hotpaw2
fuente
2

Si está tratando de hacer coincidir la respuesta al impulso del IIR con una respuesta al impulso dada, sin embargo, está matemáticamente definido (supongo que el FIR es una definición tan buena como cualquiera), siempre he pensado que el método Prony fue el primero apuñalar el problema.

Si está tratando de hacer coincidir la respuesta de frecuencia del IIR con una respuesta de frecuencia dada, sin embargo, está matemáticamente definida (supongo que la respuesta de frecuencia del FIR es una definición tan buena como cualquiera), recientemente pensé que Greg Berchin FDLS podría ser el camino a seguir. Richard Lyons (quien comentó su pregunta), publicó una monografía donde Greg tenía un capítulo que describía el método. Matt L también ha investigado y publicado sobre el problema.

robert bristow-johnson
fuente
El código en ese enlace en particular es modificado desde mi versión original por alguien que no sea yo. El original está disponible para mí personalmente, si alguna vez puedo descubrir cómo recibir mensajes de correo electrónico personales a través de SE.
Greg Berchin
1

pues sí, ya que no necesitabas un equivalente exacto pero no sin pena

Un filtro FIR es equivalente a un polinomio

Uno puede derivar una aproximación de Pade.

No será necesariamente estable, es muy sensible a la escala y el resultado no es emocionante.

https://en.wikipedia.org/wiki/Pad%C3%A9_approximant

Usar una ventana de control como un ejemplo FIR y la rutina Pade en la caja de herramientas simbólicas (que la mayoría de la gente no tiene pero gnu Maxima sí)

Mi otra idea que no he seguido sería generar un proceso MA pseudoaleatorio y luego usar un estimador ARMA para recuperar la función de transferencia racional.

p = poly2sym (sym (round (100 * hanning (16))))% escala escalada

p = 3 * x ^ 15 + 13 * x ^ 14 + 28 * x ^ 13 + 45 * x ^ 12 + 64 * x ^ 11 + 80 * x ^ 10 + 93 * x ^ 9 + 99 * x ^ 8 + 99 * x ^ 7 + 93 * x ^ 6 + 80 * x ^ 5 + 64 * x ^ 4 + 45 * x ^ 3 + 28 * x ^ 2 + 13 * x + 3

h = pade (p, 'Orden', [3 3])

h = - (2534 * x ^ 3 + 11071 * x ^ 2 + 10368 * x + 2961) / (- 2213 * x ^ 3 + 1964 * x ^ 2 + 821 * x - 987)

[n, d] = numden (h)

n = - 2534 * x ^ 3 - 11071 * x ^ 2 - 10368 * x - 2961

d = - 2213 * x ^ 3 + 1964 * x ^ 2 + 821 * x - 987

num = sym2poly (n)

num = -2534 -11071-10368-2961

den = sym2poly (d)

den = -2213 1964821-987

abeto = sym2poly (p);

rn = raíces (num)

rn = -3.2067 + 0.0000i

-0.5812 + 0.1633i

-0.5812 - 0.1633i

rd = raíces (den)

rd = -0.6679 + 0.0000i

0.7777 + 0.2510i

0.7777 - 0.2510i

num = num / sum (abs (num)); % coeficientes de normalización

den = den / sum (abs (den));

abeto = abeto / suma (abs (abeto));

[h, z] = freqz (num, den, 1024);

figura (1) gráfico (z, log10 (abs (h))); ylabel ('dB') figura (2) [h, z] = freqz (abeto, 1,1024); plot (z, log10 (abs (h))); ylabel ('dB')

hacer eco

Respuesta pade

Respuesta Hamming


fuente
0

Es tentador especular que si una respuesta de impulso en ventana, h de longitud L puede ser "bien modelada" por un filtro de bajo orden (en relación con L), entonces este último puede usarse para extrapolar el filtro FIR más allá de su longitud original.

¿Cuáles son los pros y los contras prácticos de usar prony (dominio del tiempo) versus usar invfreqz (dominio de frecuencia)?

-k

Knut Inge
fuente