Quali fattori devo considerare quando scelgo la realizzazione di un filtro IIR?


Risposte:


9

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.


2
In entrambi i casi, dovresti essere a cascata sezioni del secondo ordine.
Oliver Charlesworth,

1
Quindi, in breve, è un compromesso tra memoria e errore di arrotondamento?
anasimtiaz,

2
Risposta super debole IMO. Tecnicamente risponde alla domanda ... ma solo "tecnicamente". Vorrei vedere del codice sorgente in una lingua. So come implementare un filtro FIR facile. Vediamo il codice sorgente IIR.
Trevor Boyd Smith,

2
Inoltre, in termini di operazioni matematiche eseguite per campione, qual è una migliore implementazione I o II?
anasimtiaz,

1
so come fare il filtro FIR. so anche cos'è la forma diretta I / II / III / IV. quello che non ho esperienza è IIR: progettazione o realizzazione. Il mio commento originale non era molto costruttivo. Avrei dovuto dire "Capisco cos'è la forma diretta I-IV, per favore, parleresti di più su come si progetta / implementa un filtro IIR?"
Trevor Boyd Smith,

9

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 è

  1. Memoria: Direct Form II e Transposed Form II occupano un po 'meno memoria di stato rispetto a Direct Form I e Transposed Form I ma in un'implementazione in cascata del secondo ordine la differenza è minore
  2. MIPS: in termini di numero di moltiplicazioni e aggiunte, tutte e quattro le implementazioni sono uguali. Tuttavia, a seconda del set di istruzioni del processore specifico, possono esserci differenze significative nell'efficienza dell'implementazione. Quindi "dipende".
  3. Proprietà punto fisso: questo fa una differenza enorme. In primo luogo è necessario assicurarsi che le variabili di stato non trabocchino, quindi è necessario analizzare la funzione di trasferimento tra in / output e le variabili di stato. Qui Direct Form I e Transposed Form II sono i vincitori chiari. Le variabili di stato sono associate a + 106dB o più o meno rispetto a input e output. Nella forma II diretta, ad esempio, la funzione di trasferimento dall'ingresso allo stato è data solo dai poli. Ho visto esempi del mondo reale in cui questo può effettivamente superare i 100 dB di guadagno. Questo è un assoluto no non per l'implementazione in virgola fissa.
  4. Rumore: in termini di troncamento ed errore di arrotondamento, tutte le implementazioni sono più o meno le stesse. Anche il problema della funzione di trasferimento delle variabili di stato menzionato in 3) influisce in qualche modo su questo aspetto e ho riscontrato problemi di rumore udibile con i filtri Direct Form II anche quando si utilizzava il virgola mobile a 32 bit.

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.


Questa è una risposta molto più completa e migliore!
Lorem Ipsum,

2
Oggi ho capito - in un modo molto più difficile - perché Direct Form I è la scelta migliore per la mia applicazione. Grazie per l'ottima risposta!
anasimtiaz,

1

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.


1

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:

  • Modulo diretto I
  • Modulo diretto II
  • Modulo diretto trasposto I
  • Modulo diretto II trasposto
  • Modulo reticolare
  • Variabile di stato

Il progetto è qui:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Immagine dello schermo


1
L'hai pubblicato più volte e sono propenso a far rispettare la politica antispam, a meno che le tue risposte non siano realmente su misura per le domande. Nessuno di questi post risponde direttamente alle domande e promuove anche un prodotto. Modificali per rispondere direttamente alle domande o verranno rimossi.
Phonon,

0

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.

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.