C'è un modo per convertire un FIR
in un IIR
filtro con il comportamento più simile?
C'è un modo per convertire un FIR
in un IIR
filtro con il comportamento più simile?
Risposte:
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 èe la grandezza desiderata è quindi la risposta in frequenza desiderata può essere scelta come
dove è un parametro di ritardo sconosciuto. Ovviamente puoi dire che seviene 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 dil'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.
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:
Il troncamento bilanciato è, in effetti, un approccio di analisi delle componenti principali per ridurre l'ordine di un filtro. C'è un'implementazione matlab di esso nel Robust Control Toolbox.
L'approssimazione della norma Hankel ottimale utilizza la norma Hankel a infinito per approssimare un sistema di ordine superiore con uno di ordine inferiore. C'è un'implementazione matlab di esso nel Robust Control Toolbox.
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").
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.
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
È 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