I filtri IIR possono essere implementati come forma diretta 1 o 2 . Ma come si decide quale modulo utilizzare? Quali sono i pro ed i contro di ognuno?
I filtri IIR possono essere implementati come forma diretta 1 o 2 . Ma come si decide quale modulo utilizzare? Quali sono i pro ed i contro di ognuno?
Risposte:
Prima di tutto, un po 'da Wikipedia sull'implementazione di Direct Form I e II .
La forma diretta I richiede più memoria, ma è una strategia un po 'più semplice ed è meno probabile che abbia problemi di arrotondamento e di risonanza.
La forma diretta II richiede meno memoria, ma ha il potenziale per interazioni insolite, numeri più grandi e più errori di arrotondamento. Gran parte di questo può essere ridotto collegando in cascata i filtri più piccoli, in particolare i filtri del 2 ° ordine.
Un po 'datato ma può meritare una risposta più completa, soprattutto perché Direct Form II può metterti nei guai. Prima di tutto, non esiste una "taglia unica" e la scelta migliore dipende dall'applicazione e dai vincoli specifici. Quello che puoi considerare è
Quindi, in breve, Transposed Form II è il più delle volte la scelta migliore. In alcuni scenari a virgola fissa, soprattutto in presenza di significativi problemi di rumore, Direct Form I è migliore poiché può essere facilmente ampliato con elementi come Error Spectrum Shaping, ecc.
A meno che tu non lavori con un sistema molto scarso di risorse o abbia requisiti estremi, in pratica non importa se scegli la forma diretta I o II. Ad esempio, se stai facendo cose su un PC o uno smartphone, non importa. Personalmente, preferisco il modulo I.
Il vero problema è normalmente MIPS e se prevedi di eseguire un'implementazione a virgola fissa le cose si complicano. Ad esempio, su ARM il tuo filtro IIR consumerà molto più MIPS se sia i coefficienti che gli stati del filtro sono a 32 bit. 32 bit in stati e coefficienti sono necessari se è necessario implementare ad esempio un filtro passa-basso con una frequenza di taglio molto bassa. In questi casi è possibile utilizzare un diverso tipo di filtro, ad esempio un filtro variabile di stato.
A parte le differenze tecniche come l'accuratezza numerica, esiste anche il problema della stabilità. Quando i filtri digitali hanno coppie polo / zero vicine tra loro, la risposta in frequenza può diventare instabile in varie posizioni (in genere avvicinandosi a Nyquist o avvicinandosi allo zero).
Quando i filtri IIR vengono utilizzati per applicazioni musicali, la scelta della realizzazione può avere un profondo effetto sulla stabilità del filtro quando i parametri del filtro sono modulati in tempo reale (ad esempio, variando la frequenza di taglio su un filtro passa basso).
Ho un'applicazione open source che ti consente di ascoltare le differenze, mentre i parametri variabili nel tempo come la frequenza di taglio o il guadagno di picco, di ciascuna delle seguenti realizzazioni:
Il progetto è qui:
Oltre ai commenti sopra su memoria, MIPS, rumore e stabilità; c'è un altro fattore che viene comunemente trascurato. Questo fattore è la capacità di ripristino; che sembra essere molto importante nella maggior parte delle mie situazioni.
Con un'implementazione di Direct Form II, non ci sono stati per gli output ritardati, quindi se "resetti" un filtro Direct Form II per dire "5", il suo output iniziale non sarà 5. Trovo che questo sia abbastanza contro -intuitivo che ha causato una certa frustrazione durante l'uso di Simulink. Per questo motivo utilizzo quasi sempre un'implementazione di Direct Form I. Sfortunatamente Simulink supporta Direct Form I solo se si dispone della casella degli strumenti DSP e anche in questo caso non consente di impostare le condizioni iniziali da un segnale di ingresso.