Filtraggio dell'audio in streaming


9

Dato qualcosa come 103 punti dati (N=103), un DFT restituirà 103 valori di frequenza. Quindi fare qualcosa come filtrare le alte frequenze implica impostare i valori delle alte frequenze dal DFT a zero e fare il DFT inverso per recuperare 103 punti dati che rappresentano il segnale originale senza le alte frequenze.

Questo ha senso per me dato tutti i 103 punti dati tutti in una volta. Ma per quanto riguarda lo streaming di un file WAV audio che è piuttosto grande (diciamo ad esempioN=105). Se si volesse filtrare le alte frequenze, l'approccio che ho appena descritto sugli interi dati di105punti logicamente ha senso. Ma ciò non è ragionevole quando si esegue lo streaming di un file WAV per la riproduzione. Cosa viene fatto per filtrare ad alta frequenza una riproduzione in streaming di un file audio?

Risposte:


12

FFT -> coefficienti di azzeramento -> IFFT non è il modo corretto di fare il filtraggio - il filtro effettivo realizzato facendo ciò ha scarse caratteristiche.

Il modo corretto di filtrare i segnali è calcolare i coefficienti di un filtro digitale , un processo noto come design del filtro e per il quale è disponibile un ampio corpus di strumenti software / documentazione e applicarlo alla sequenza di input. In breve, ciò consiste nel valutare per ciascun campione una combinazione lineare dei campioni di input passati e dei campioni di output passati. A seconda dei requisiti del filtro in termini di reiezione / ondulazione della banda di arresto, potrebbero essere necessari solo pochi coefficienti, rendendolo molto più efficiente di FFT. Poiché le uniche informazioni richieste per calcolare un campione di output sono i pochi campioni di input / output passati, non vi è alcun problema ad applicarlo allo streaming audio.

Dovrai utilizzare FFT solo se decidi di utilizzare i filtri FIR e se i tuoi requisiti di filtro fanno sì che abbiano un numero follemente elevato di coefficienti. In questo caso particolare, sarà efficace applicare il filtro ai blocchi successivi dei dati di input tramite FFT e overlap-add .


8

Il modo migliore per applicare il filtro del dominio di frequenza per i flussi di segnale è aggiungere sovrapposizione (o salvare i sapori sovrapposti sovrapporre, o bloccare i convolvers, ecc.).

Praticamente prendi un fotogramma alla volta (diciamo 1024 campioni). Zero pad al doppio della lunghezza (2048), eseguire una FFT, moltiplicare con (anche zero imbottito) la funzione di trasferimento del filtro, eseguire una FFT inversa. Salvare gli ultimi 1024 campioni come sovrapposizione per il fotogramma successivo, aggiungere la sovrapposizione dal fotogramma precedente i primi 1024 campioni e questo è il risultato. Per ogni 1024 campioni di input si ottengono 1024 campioni di output e lo si ripete semplicemente per i fotogrammi successivi fino al termine del flusso.

L'intero business con zero padding e sovrapposizione è necessario poiché la moltiplicazione nel dominio della frequenza implementa la convoluzione circolare e si desidera davvero una convoluzione lineare nella maggior parte delle applicazioni.

Esistono varianti di questi metodi che utilizzano diverse funzioni della finestra e si sovrappongono, ma è sempre lo stesso principio: tagliarlo in piccoli pezzi ed elaborare un pezzo alla volta.


C'è un libro che entra nei dettagli di questo?
user782220

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.