Esistono moduli di implementazione standard per filtri Butterworth sintonizzabili?


17

Uno dei metodi standard per implementare un filtro Butterworth è con una cascata di sezioni del secondo ordine, ciascuna corrispondente a una coppia di poli coniugati complessi. Per un filtro del quarto ordine, ad esempio, ci sarebbero due sezioni del secondo ordine. Se consideriamo come le posizioni dei poli per un filtro passa-basso cambiano nel piano z mentre il taglio è progettato per quasi 0hz vicino a Nyquist, il percorso "spazzato" da ciascuna coppia di poli corrisponde a una coppia di archi all'interno del cerchio dell'unità , come illustrato dalla figura seguente [per i filtri del quarto ordine]:

Posizioni polari sul piano Z per filtri passa basso Butterworth di quarto ordine

Dato da quanto tempo esistono questi filtri e dato il fatto che questi "archi" corrispondono a linee rette nel piano s, è ovvio che qualcuno avrebbe sviluppato un modulo di implementazione con un singolo parametro in grado di spazzare i poli lungo gli archi a "tempo di esecuzione" [al contrario di "tempo di progettazione"]. Tuttavia, non ho ancora incontrato nulla del genere.

È relativamente semplice trovare vari modi per farlo, specialmente all'interno di segmenti della gamma, e con la volontà di lanciarvi un piccolo calcolo in più. Quello che mi chiedo è il seguente:

Esiste un modo standard per implementare un filtro Butterworth [digitale] sintonizzabile di un determinato ordine in cui 1) ha proprietà ottimali (ad esempio efficienza, robustezza) e 2) copre l'intera gamma?

O è davvero un problema così semplice che nessuno si preoccupa di parlarne? In tal caso, sembra che verrebbe visualizzato nei programmi di progettazione dei filtri accanto alle opzioni per i progetti "statici".

Ho trovato questo: un filtro Butterworth multiuso con frequenza di taglio variabile , ma all'inizio su Google non sembrano esserci molte informazioni su cosa ci sia dentro.

Aggiornamento (ri: risposte)

Giusto per essere un po 'più chiaro:

  • Sto cercando un "meta-design" con un parametro (diciamo da [0,1]) che regolerà automaticamente il cutoff da DC a Nyquist (mantenendo il guadagno normalizzato) per l'uso in un sistema che varia nel tempo. Qualcosa di simile a questo risuonatore a due poli , tranne per i vincoli di Butterworth. L'idea è che il calcolo del parametro sarebbe più efficiente rispetto alla normale procedura di progettazione offline in fase di esecuzione.
  • Non sto nemmeno necessariamente cercando il modo di progettare un "meta-filtro" (ovvero fare matematica con variabili anziché numeri), mi chiedo se ci siano scelte per i moduli di implementazione standard [non ovvi], perché, diciamo, l'approccio diretto che corrisponde al caso statico finisce per avere problemi numerici nel caso variabile nel tempo.
  • Forse non ci sono problemi e l'approccio diretto è quello che viene utilizzato nella pratica. Sarebbe grandioso. La mia preoccupazione è che non ho visto questo argomento menzionato esplicitamente in nessuna delle fonti che ho consultato, ma forse mi sono perso qualcosa di veramente ovvio, quindi chiedo.
  • Nel processo di aggiunta di maggiori dettagli qui, mi sono imbattuto in un trattamento generale di strutture biquad parametriche, che è quasi quello che sto cercando (e ha alcuni bei riferimenti).

Aggiornamento 2

Sto cercando risposte come quella che ho inserito nel mio secondo commento a Jason R, come segue:

"Oh sì, vuoi usare la parametrizzazione III-2b dalla tesi del genere, in forma reticolare di stato intercettato perché risolve questo caso limite mentre usa il numero minimo di moltiplicazioni."

Forse non esiste nulla del genere, ma la mia domanda è se lo fa e, in caso affermativo, che cos'è o dove posso trovarlo?

Montepremi

Sulla base di un riferimento alla "forma canonica dell'osservatore" fornito da Tim Wescott nel thread comp.dsp nella risposta di Jason R , ho deciso di presumere che avrei dovuto iniziare a scavare nella letteratura dei sistemi di controllo, quindi ho cercato di cercare "spazio di stato" butterworth , e ha rivelato il seguente, molto interessante, trattamento di progettazione / implementazione, non solo di Butterworth parametrico, ma anche di filtri Chebyshev ed ellittici:

Sophocles J. Orfanidis, "Progettazione di equalizzatori parametrici digitali di alto ordine", J. Audio Eng. Soc., Vol. 53, pagg. 1026-1046, novembre 2005.

Ci vorrà un po 'di tempo per approfondire, ma in base a ciò che ho letto finora, sarei molto sorpreso se non è quello che sto cercando. Sto dando questo a Jason R per il riferimento comp.dsp che mi ha portato al documento Orfanidis. La sua risposta è anche una bella panoramica pratica della progettazione di filtri Butterworth.

Risposte:


10

Non sono sicuro esattamente cosa stai cercando. Come notato nella domanda, le funzioni di trasferimento della famiglia di filtri Butterworth sono ben comprese e facilmente calcolabili analiticamente. È abbastanza semplice implementare una struttura di filtro Butterworth che è sintonizzabile per ordine del filtro e frequenza di taglio:

  1. In base all'ordine del filtro selezionato, alla frequenza di taglio e alla frequenza di campionamento, calcolare le posizioni dei poli per il filtro prototipo analogico Butterworth. Poiché i filtri Butterworth non hanno zeri, la funzione di trasferimento è determinata dalle posizioni dei poli (e dal guadagno CC).

  2. Usando la trasformata bilineare , mappare le posizioni dei poli del prototipo analogico nelle posizioni corrispondenti nella realizzazione digitale del filtro.

  3. Ancora una volta, il filtro digitale è definito dalle posizioni dei poli trovate nel passaggio 2. Suddividere il filtro in sezioni del secondo ordine raggruppando i poli in coppie.

Questo è tutto. Come ho già detto, è semplice progettare in modo programmatico un filtro Butterworth usando tutti i parametri di cui potresti aver bisogno; nessuna delle operazioni è terribilmente complicata da implementare.

Modifica: non sono davvero sicuro del risultato finale che stai cercando. Penso che tu sia invece più interessato a come implementare i filtri IIR con coefficienti variabili nel tempo, non necessariamente specifici di un filtro Butterworth. Presumo che il tuo obiettivo sia quello di ridurre al minimo gli artefatti quando si modifica la frequenza di taglio del filtro; questo è stato trattato in una discussione sul newsgroup comp.dsp all'inizio di quest'anno. Anche se non sono sicuro di quali siano i tuoi casi d'uso o i requisiti per questa struttura di filtro, ci sono diversi modi per realizzare la commutazione.

So che hai detto che vorresti che il tuo filtro avesse un singolo parametro che definisce la frequenza di taglio, ma resta il fatto che la tua struttura sintonizzabile deve avere un modo per tradurre la frequenza di taglio nei coefficienti richiesti (o nel caso Butterworth, solo il posizioni dei poli). Il processo che ho descritto sopra è appropriato per generare le posizioni dei poli in base alla frequenza di campionamento normalizzata desiderata.

Potresti potenzialmente semplificare il processo di calcolo della posizione dei poli analizzando la geometria delle posizioni dei poli del filtro digitale nel piano z. Il filtro Butterworth analogico ha poli che giacciono a semicerchio nella metà sinistra dell'aereo s; la trasformazione bilineare mappa questo semicerchio nel modello dall'aspetto ellittico che hai illustrato nella descrizione della domanda. Usando questo modello noto per i poli del filtro Butterworth analogico, la funzione di mappatura della trasformata bilineare e qualche algebra, potresti essere in grado di trovare un'espressione relativamente semplice per le posizioni dei poli del filtro digitale, dandoti così un filtro più semplice messa a punto dell'azione.


Jason, non sto cercando come progettare una determinata specifica Butterworth, sto cercando un "meta-design". Aggiornerò la domanda con un po 'più di dettagli.
datageist

1
Ri: Modifica. Il processo che hai descritto nell'ultimo paragrafo è esattamente come lo approccerei - mi sto solo chiedendo se questo sia stato effettivamente trattato ovunque. In altre parole, cose del tipo: "Oh sì, vuoi usare la parametrizzazione III-2b dalla tesi del genere, in forma reticolare a stato toccato perché risolve un caso del genere con un numero minimo di moltiplicazioni. "
datageist

1
Piccolo commento nitido: nel piano Z il filtro BW ha davvero degli zeri. Per i filtri passa basso sono tutti a -1 e per i filtri passa alto sono a +1.
Hilmar,

S±SS0

2

Sì, ci sono moduli di implementazione standard per Butterworth e quasi ogni altra risposta al filtro. Sono tutti completamente implementati nella mia libreria di filtri IIR open source. Ecco uno snippet di codice che produce le coppie polo / zero per un filtro Butterworth di grado arbitrario:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Come puoi vedere, la posizione dei poli viene calcolata suddividendo il piano s in "coppie" segmenti uguali.

Viene fornito un codice adatto per tutti i tipi comuni di risposte al filtro: Chebyshev, Ellittica, Legendre, comprese le versioni a scaffale di ciascuna.

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

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

Immagine dello schermo


La libreria DSPFilters affronta direttamente il caso d'uso contemplato dalla domanda originale, utilizzando un'equazione parametrizzata per calcolare coppie polari / zero di un filtro digitale in fase di esecuzione. Modificherò la risposta per includere anche uno snippet di codice sorgente.
Vinnie Falco,
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.