Design del filtro FIR: Window vs Parks McClellan e Least Squares


21

Ci sono dei vantaggi nell'usare un approccio finestra rispetto agli algoritmi Parks-McClellan (ulteriormente abbreviato qui come PMcC) o Least Squares per la progettazione del filtro FIR di un filtro passa basso? Supponiamo con il potere computazionale di oggi che la complessità degli algoritmi stessi non sia un fattore.

Questa domanda non sta paragonando PMcC ai minimi quadrati, ma in particolare se c'è qualche motivo per usare una tecnica di progettazione FIR per finestre invece di quegli algoritmi, o se le tecniche di finestre per filtrare il design fossero obsolete da quegli algoritmi e relegate a scopi didattici?

Di seguito è riportato un confronto in cui avevo confrontato una finestra di Hamming con il mio approccio di design preferito con Least-Squared, utilizzando lo stesso numero di tocchi. Ho allargato la banda passante nell'approccio Least Squared in modo che corrispondesse da vicino a quella della finestra di Hamming, e in questo caso era abbastanza chiaro che il Least-Squared avrebbe sovraperformato (offrendo un rifiuto della banda di arresto significativamente maggiore). Non l'ho fatto con tutte le finestre, il che mi porta alla domanda se potresti mai superare PMcC e minimi quadrati, o se ci sono altre applicazioni per un filtro passa basso FIR dove sarebbe preferibile un approccio a finestre?

inserisci qui la descrizione dell'immagine


2
potrei suggerire di confrontare Kaiser -windowed sinc con firpm()e con firls().
robert bristow-johnson,

Risposte:


16

Concordo sul fatto che il metodo di progettazione del filtro per finestre non è più uno dei metodi di progettazione più importanti e potrebbe in effetti essere sovrarappresentato nei libri di testo tradizionali, probabilmente a causa di ragioni storiche.

Tuttavia, penso che il suo uso possa essere giustificato in determinate situazioni. Non sono d'accordo sul fatto che la complessità computazionale non sia più un problema. Questo dipende dalla piattaforma. Seduti sul nostro computer desktop e progettando un filtro, non dobbiamo preoccuparci della complessità. Tuttavia, su piattaforme specifiche e in situazioni in cui la progettazione deve essere eseguita quasi in tempo reale, la complessità computazionale è un problema e una tecnica di progettazione subottimale semplice sarà preferita rispetto a una tecnica ottimale che è molto più complessa. Ad esempio, una volta ho lavorato su un sistema di beamforming in cui il filtro (beamformer) avrebbe dovuto essere riprogettato al volo, e quindi la complessità computazionale era davvero un problema.

Sono anche convinto che in molte situazioni pratiche non dobbiamo preoccuparci della differenza tra il design ottimale e quello non ottimale. Ciò diventa ancora più vero se dobbiamo usare l'aritmetica in virgola fissa con coefficienti quantizzati e risultati quantizzati di operazioni aritmetiche.

Un altro problema è la stabilità numerica dei metodi ottimali di progettazione del filtro e delle relative implementazioni. Mi sono imbattuto in diversi casi in cui l'algoritmo Parks-McClellan (dovrei dire, l' implementazione che ho usato) semplicemente non converge. Questo accadrà se la specifica non ha molto senso, ma può anche accadere con specifiche totalmente ragionevoli. Lo stesso vale per il metodo di progettazione dei minimi quadrati in cui è necessario risolvere un sistema di equazioni lineari, che può diventare un problema mal condizionato. In queste circostanze, il metodo a finestre non ti deluderà mai.

Un'osservazione sul tuo confronto tra il metodo della finestra e il design dei minimi quadrati: non penso che questo confronto mostri alcuna superiorità generale del metodo dei minimi quadrati rispetto al metodo della finestra. Innanzitutto, sembra che si osservi l'attenuazione della banda di arresto, che non è un obiettivo di progettazione per nessuno dei due metodi. Il metodo a finestre non è ottimale in alcun senso e il design dei minimi quadrati minimizza l'energia della banda di arresto e non si preoccupa affatto delle dimensioni dell'ondulazione della banda di arresto. Ciò che si può vedere è che il bordo della banda passante del design della finestra è più grande di quello del design dei minimi quadrati, mentre il bordo della fascia di arresto è più piccolo. Di conseguenza, l'ampiezza della banda di transizione del filtro progettato per finestre è inferiore, il che si tradurrà in increspature della banda di arresto più elevate. La differenza nella larghezza della banda di transizione può essere piccola, ma le proprietà del filtro sono molto sensibili a questo parametro. Non c'è dubbio che il filtro dei minimi quadrati superi quello dell'altro filtro quando si tratta di fermare l'energia della banda, ma non è facile da vedere quanto le dimensioni dell'ondulazione. E la domanda rimane se quella differenza farebbe davvero la differenza in un'applicazione pratica.

Lascia che ti mostri che tali confronti possono spesso essere fatti per apparire come vorremmo che fossero. Nella figura seguente paragone un filtro passa basso ottimale dei minimi quadrati progettato con la funzione Matlab / Octave firls.m(blu) con un filtro passa basso progettato con il metodo della finestra usando una finestra Kaiser (rossa).

inserisci qui la descrizione dell'immagine

Dalla figura, si potrebbe persino concludere che il filtro progettato per finestre è leggermente migliore del filtro ottimale dei minimi quadrati. Questo ovviamente non ha senso perché non abbiamo nemmeno definito "migliore", e il filtro dei minimi quadrati deve avere un errore di approssimazione al quadrato medio più piccolo. Tuttavia, non lo vedi direttamente nella figura. Ad ogni modo, ciò serve solo a sostenere la mia affermazione secondo cui bisogna fare molta attenzione e chiarezza quando si effettuano tali confronti.

In sintesi, oltre ad essere utile per gli studenti DSP per motivi puramente didattici, penso che, nonostante i progressi tecnologici dagli anni '70, l'uso del metodo del windowing possa essere giustificato in alcuni scenari pratici, e non penso che lo farà cambia molto presto.


Buona risposta Matt: chiarimenti / domande sulle coppie: per quanto riguarda la complessità, puoi fornire un esempio concreto? Vedo che questo è un problema con l'implementazione, ma nel trovare i coefficienti non riesco a pensare a un motivo per cui farei il design su una piattaforma inferiore (da qui la mia domanda). Per quanto riguarda il confronto, i minimi quadrati sono chiaramente migliori; per la stessa ondulazione e transizione, ottieni una migliore attenuazione della banda di arresto. Avevo aumentato la larghezza della banda passante per adattarsi alle due; il bordo è leggermente più grande in quanto è lì che ho smesso di abbinare ma potrei abbinare più da vicino per concludere.
Dan Boschen,

2
@DanBoschen: Certo, nella maggior parte dei casi il design è fatto offline e la complessità non è un problema. Tuttavia, mi sono imbattuto in applicazioni in cui i filtri avrebbero dovuto essere riprogettati in tempo quasi reale (che era un'applicazione beamforming), quindi lì hai il problema della complessità.
Matt L.

1
E per quanto riguarda l'effettivo risparmio del numero di rubinetti con un design ottimale rispetto a un design di finestre, i risultati che ho visto sono spesso deludenti. Spesso solo 1 o 2 tocchi, che per molte implementazioni non farebbero molta differenza.
Matt L.

1
OK, per i progetti offline e se la stabilità numerica non risulta essere un problema (per quel progetto specifico; in generale rimane un problema), il windowing non sarebbe utile. Ma in generale, non possiamo sempre fare affidamento su progetti offline e, cosa ancora più importante, non possiamo sempre evitare problemi numerici. Quindi penso che la parola "obsoleto" sia ancora un po 'troppo forte.
Matt L.

3
Davvero ben detto. La cosa da ricordare è che l'ingegneria si basa sulla ricerca di un'implementazione sufficientemente buona da soddisfare le vostre esigenze. Il metodo window è semplice da implementare e funziona sempre. Altri metodi hanno implementazioni più complicate e possono avere casi in cui sono difficili da lavorare. Ho lavorato con diversi sistemi che hanno bisogno di progettare filtri al volo e il metodo window è la scelta giusta per quelle situazioni.
Jason R,

7

I filtri Sinc con finestra possono essere generati in modo adattivo al volo sui processori appena abbastanza potenti da far funzionare il filtro FIR associato. I filtri Sinc con finestra possono essere generati in tempi limitati.

La generazione di alcuni semplici filtri Sinc con finestre può essere completamente descritta (e verificata per malware, ecc.) In poche righe di codice , rispetto all'uso cieco di alcuni toolbox opachi.

Per spiegare un filtro Sinc con finestra è necessario un background matematico pre-requisito inferiore rispetto a quello richiesto per codificare da zero un generatore di filtri PMcC.

Le uguali increspature nella risposta in frequenza di un filtro PMcC possono causare artefatti nel dominio del tempo che sono diversi (e forse meno desiderabili) rispetto agli artefatti prodotti da un semplice filtro con finestre.


1
Sì, punto positivo @ hotpaw2, l'ondulazione della banda passante porta a interferenze intersimboliche (finali e echi iniziali). Grazie
Dan Boschen,

2
Abbiamo parlato di Parks – McClellan pre e post echo su comp.dsp nel 2003 . Alexey Lukin ha pubblicato un esempio minimo di MATLAB:, f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)che funziona anche in Octave. Una spiegazione è che con filtri molto ripidi le increspature possono essere abbastanza regolari da assomigliare a un coseno. L'equivalente nel dominio del tempo del coseno nel dominio della frequenza sarebbero i due echi impulsivi.
Olli Niemitalo,

6

Mostrerò qui un vantaggio di un design a finestre e un trucco per ottenere lo stesso vantaggio da Parks-McClellan.

Per i filtri half-band, quarter-band, ecc., Windowing mantiene gli zeri nel dominio del tempo della funzione sinc scalata, che è il filtro passa-basso ideale prototipico. Gli zeri finiscono nei coefficienti, riducendo il costo computazionale dei filtri. Per un filtro a mezza banda, il design a finestra fornisce un filtro con ogni coefficiente pari 0 tranne il coefficiente medio (che è anche considerato pari):

sinc
Figura 1. La funzione Sinc allungata orizzontalmente di un fattore 2 è il filtro passa-basso semi-banda prototipo con un guadagno di 2, adatto per il sovracampionamento di un fattore 2.

Tuttavia, Parks – McClellan / Remez può essere ingannato per offrire gli stessi vantaggi progettando di usarlo come filtro con un numero pari di tocchi con solo una banda di passaggio del guadagno unitario definita. I coefficienti ottenuti vengono utilizzati come coefficienti dispari di un filtro più lungo. Il coefficiente medio del filtro più lungo è impostato su 1 e gli altri coefficienti pari su 0. Questo filtro ha un guadagno di 2 nella banda passante e un'ondulazione simmetrica nelle bande pass e stop. In Python:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

Figura 2.
Figura 2. Coefficienti del filtro a mezza banda progettato indirettamente utilizzando Python scipy.signal.remez.

Figura 3
Figura 3. Grafico della risposta in frequenza della grandezza del filtro a mezza banda progettato indirettamente utilizzando scipy.signal.remez.

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.