Converti un FIR in un IIR equivalente


8

C'è un modo per convertire un FIRin un IIRfiltro con il comportamento più simile?


3
La tua frase "comportamento più simile" rende difficile rispondere a questa domanda. Puoi descrivere cosa significa "comportamento più simile" per te?
Richard Lyons,

1
La domanda dovrebbe essere generale. Un modo per preservare il modulo della trasformazione FIR e / o un modo per preservare maggiormente la fase rispetto al modulo
Andrea

Risposte:


7

Direi che la risposta alla tua domanda - se presa alla lettera - è "no", non esiste un modo generale per convertire semplicemente un filtro FIR in un filtro IIR.

Concordo con RBJ sul fatto che un modo per affrontare il problema è esaminare la risposta all'impulso del filtro FIR e utilizzare un metodo nel dominio del tempo (come il metodo di Prony) per approssimare la risposta all'impulso mediante un filtro IIR.

Se inizi dalla risposta in frequenza, hai molti metodi per progettare i filtri IIR. Anche se è stato pubblicato circa 25 anni fa, credo che il metodo di Chen e Parks sia ancora uno dei modi migliori per affrontare il problema di progettazione. Un altro metodo molto semplice per la progettazione del dominio di frequenza dei filtri IIR è il metodo dell'errore di equazione, che è descritto nel libro Digital Filter Design di Parks and Burrus. L'ho spiegato in questa risposta .

Se la risposta di fase è importante per te, allora un problema che dovrai affrontare durante la progettazione di filtri IIR nel dominio della frequenza è la scelta esatta della risposta di fase desiderata. Se viene data la forma complessiva della fase desiderata, si ha ancora un grado di libertà, che è il ritardo. Ad esempio, se la fase desiderata èϕD(ω)e la grandezza desiderata è MD(ω) quindi la risposta in frequenza desiderata può essere scelta come

(1)HD(ω)=MD(ω)ej(ϕ(ω)ωτ)

dove τè un parametro di ritardo sconosciuto. Ovviamente puoi dire che seϕD(ω)viene dato quindi non si desidera modificarlo con un ritardo aggiuntivo (positivo o negativo). Ma si scopre che in pratica il ritardo medio non è sempre importante, e - soprattutto - per determinati valori diτl'approssimazione sarà molto migliore per un determinato ordine di filtro rispetto ad altri. Quindi il ritardoτ può diventare un parametro di progettazione aggiuntivo e deve essere scelto in modo ottimale o almeno ragionevole.

Ho scritto una tesi sulla progettazione di filtri digitali con magnitudo e risposte di fase prescritte. Un capitolo riguarda la progettazione del dominio di frequenza dei filtri IIR. Tale metodo può essere utilizzato per progettare filtri IIR con fase approssimativamente lineare nelle bande passanti o per approssimare qualsiasi altra risposta di fase (e grandezza) desiderata. I filtri non solo sono garantiti per essere stabili, ma puoi anche prescrivere un raggio polare massimo, cioè puoi definire un certo margine di stabilità. È inoltre possibile trovare questo metodo in un documento pubblicato nelle Transazioni IEEE sull'elaborazione del segnale.


3

La risposta di Matt L è la migliore dal punto di vista del DSP.

Esistono tutta una serie di tecniche dalla letteratura di controllo che potrebbero anche fare ciò che stai chiedendo. Mentre questo non sta esplicitamente trasformando un filtro FIR in un IIR, le tecniche generalmente troveranno una soluzione IIR a meno che non vengano applicati altri vincoli.

Alcune delle tecniche sono:


2

Ancora un altro metodo che potrebbe essere in grado di approssimare (non esattamente corrispondere) una data risposta di frequenza arbitraria (come quella descritta da un determinato filtro FIR) da un filtro IIR, è l'evoluzione differenziale. L'evoluzione differenziale è un tipo di algoritmo genetico che, a tale scopo, seleziona e adatta in modo iterativo un insieme di poli e zeri nel tentativo di minimizzare un errore di differenza calcolata. Sembra che ci siano alcuni documenti IEEE sull'argomento, nonché un capitolo in uno dei libri di Rick Lyons ("Streamlining DSP").


2

Se stai cercando di abbinare la risposta all'impulso dell'IIR a una data risposta all'impulso, tuttavia è matematicamente definita (immagino che la FIR sia buona come una definizione), ho sempre pensato che il metodo Prony fosse il primo pugnalare il problema.

Se stai cercando di abbinare la risposta in frequenza dell'IIR a una determinata risposta in frequenza, tuttavia è matematicamente definita (immagino che la risposta in frequenza della FIR sia buona come una definizione), ho recentemente pensato che Greg Berchin FDLS potrebbe essere la strada da percorrere. Richard Lyons (che ha commentato la tua domanda), ha pubblicato una monografia in cui Greg aveva un capitolo che descriveva il metodo. Matt L ha anche studiato e pubblicato il problema.


Il codice a quel particolare link viene modificato dalla mia versione originale da qualcuno diverso da me. L'originale è disponibile da me personalmente, se mai riuscissi a capire come ricevere messaggi di posta elettronica personali tramite SE.
Greg Berchin,

1

bene sì, dal momento che non hai richiesto un equivalente esatto ma non senza dolore

Un filtro FIR equivale a un polinomio

Si può derivare un'approssimazione di Pade.

Non sarà necessariamente stabile, è molto sensibile al ridimensionamento e il risultato non è elettrizzante.

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

Usare una finestra sospesa come esempio FIR e la routine Pade nella casella degli strumenti simbolici (cosa che la maggior parte delle persone non ha ma gnu Maxima lo fa)

L'altra mia idea che non ho perseguito sarebbe quella di generare un processo MA pseudocasuale e quindi utilizzare uno stimatore ARMA per ripristinare la funzione di trasferimento razionale.

p = poly2sym (sym (round (100 * hanning (16))))% hanning in scala

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, 'Ordine', [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 1964 821-987

abete = sym2poly (p);

rn = radici (NUM)

rn = -3,2067 + 0,0000i

-0,5812 + 0,1633i

-0,5812 - 0,1633i

rd = radici (DEN)

rd = -0.6679 + 0.0000i

0,7777 + 0,2510i

0,7777 - 0,2510i

num = num / sum (abs (num)); % coefficienti normalizzanti

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

abete = abete / sum (abs (abete));

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

figura (1) grafico (z, log10 (abs (h))); ylabel ('dB') figure (2) [h, z] = freqz (fir, 1,1024); plot (z, log10 (abs (h))); ylabel ( 'dB')

echeggiare

Risposta Pade

Risposta di Hamming


0

È allettante ipotizzare che se una risposta all'impulso finestra, h di lunghezza L può essere "ben modellata" da un filtro iir di ordine basso (rispetto a L), quest'ultimo può essere usato per estrapolare il filtro FIR oltre la sua lunghezza originale.

Quali sono i pro e i contro pratici dell'uso di prony (dominio del tempo) rispetto a invfreqz (dominio della frequenza)?

-K

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.