Citando la classica elaborazione digitale dei segnali di Bellanger - Teoria e pratica , il punto non è dove si trova la frequenza di taglio, ma quanta attenuazione hai bisogno, quanta ondulazione nel segnale che vuoi conservare puoi tollerare e, soprattutto, come restringere la transizione da pass-to stopband (larghezza di transizione) deve essere.
Suppongo che tu voglia un filtro di fase lineare (sebbene tu specifichi la latenza minima, non penso che un filtro di fase minimo sia una buona idea, in generale, a meno che tu non sappia dannatamente bene cosa farai dopo con il tuo segnale) . In tal caso, l'ordine del filtro (che è il numero di tocchi) è
N≈ 23log10[ 110 δ1δ2]fSΔ f
con
fSΔ fδ1δ2 la frequenza di campionamento la larghezza di transizione, vale a dire. la differenza tra la banda di fine passaggio e l'inizio della banda di arresto l'ondulazione nella banda passante, vale a dire. "quanta ampiezza originale puoi permetterti di variare" la soppressione nella banda di arresto .
Inseriamo alcuni numeri! È stata specificata una frequenza di taglio di fS100 , quindi andrò avanti e affermerò che la larghezza della transizione non sarà superiore alla metà, quindiΔ f= fS200 .
Proveniente dalla tecnologia SDR / RF, 60 dB di soppressione sono in genere completamente sufficienti: hardware, senza costi folli, non sarà migliore nel mantenere i segnali indesiderati dal tuo input, quindi non sprechiamo la CPU per avere un filtro fantastico che è meglio di quello che può fare il tuo hardware. Quindi, δ2= - 60 dB = 10- 3 .
Supponiamo che tu possa vivere con una variazione di ampiezza dello 0,1% nella banda passante (se puoi vivere con più, considera anche di rendere meno severo il requisito di soppressione). Questo è δ1= 10- 4 .
Quindi, collegandolo a:
NIl filtro di Tommy≈ 23log10[ 110 δ1δ2]fSΔ f= 23log10[ 110 ⋅ 10- 4⋅ 10- 3]fSfS200= 23log10[ 110 ⋅ 10- 7]200= 23log10[ 110- 6]200= 23( log10106)200= 23⋅ 6 ⋅ 200= 800 .
Quindi, con i tuoi 200 tocchi, sei lontano, se usi una banda di passaggio estremamente stretta nel filtro come pensavo che avresti fatto.
Si noti che non è così deve essere un problema: prima di tutto, un filtro a 800 tocchi fa paura, ma francamente, solo a prima vista:
- Come ho testato in questa risposta su StackOverflow : la CPU al giorno d'oggi è veloce , se si utilizza l'implementazione FIR ottimizzata per la CPU di qualcuno. Ad esempio, ho usato GNU Radio implementazione FFT-FIR di esattamente con lo schema delle specifiche del filtro sopra. Ho ottenuto una prestazione di 141 milioni di campioni al secondo, che potrebbe o non potrebbe bastare per te. Quindi, ecco il nostro caso di test specifico per la domanda (che mi ha richiesto pochi secondi per produrre):
- MMM= 50120050= 24 moltiplicazioni / accumulazioni per campione di input - molto più semplice. I filtri in GNU Radio generalmente hanno questa capacità. E in questo modo, anche con la FIR FFT (che non si presta molto bene all'implementazione di un decimatore polifasico), posso ottenere un altro fattore 2 in termini di prestazioni. Non posso fare molto di più. Questo è abbastanza vicino alla larghezza di banda RAM, nella mia esperienza, sul mio sistema. Per
- Latenza: non importa. Davvero, no, a meno che non sia necessario. Lo stai facendo con le frequenze di campionamento audio tipiche? Ricorda,96kSS«ridicolosamente141SIGNORINAS
- 1100