Puoi aumentare la risoluzione in frequenza di FFT senza aumentare le dimensioni della finestra?


12

Vorrei usare STFT per l'analisi multipitch. Mi rendo conto che rilevare i parziali esistenti nel segnale è solo l'inizio. Ho ancora problemi con questo.

Supponiamo che il segnale sia stato campionato con la frequenza "CD" 44100Hz. Con la finestra dei 1024campioni ottengo una risoluzione del bin di frequenza di 22500Hz/512=43Hz. Questo è sufficiente solo per discernere le note di piano alto come: C5 = 523.251Hze C#5 = 554.365.

Pensavo 1024fosse una finestra abbastanza grande. Ma forse non lo è e normalmente vengono utilizzate finestre più grandi per rilevare i parziali?

La risoluzione della frequenza può essere aumentata con un metodo diverso dall'aumento della dimensione della finestra, il che peggiora la risoluzione temporale? Ho pensato a due metodi:

Metodo 1:

  1. Dividi il segnale in bande di frequenza con i filtri passa-banda (ad esempio 0-11.25Hze 11.25-22.5Hz).
  2. Effettua il downsampling delle bande più alte in modo che le alte frequenze originali diventino ora basse (quindi fallo per la seconda banda 11.25-22.5Hz -> 0Hz-22.5Hz) - non sono sicuro che ciò sia possibile.
  3. Concat set di contenitori risultanti con etichette regolate.

method2:

  1. Utilizzare una serie di filtri passa-basso con limite crescente.
  2. Eseguire FFT su intervalli di frequenza crescenti.
  3. Per ogni frequenza utilizzare la migliore risoluzione possibile (bin del primo FFT in cui era inclusa questa frequenza).
  4. Questo farà sì che le basse frequenze abbiano una risoluzione migliore, ma penso che questo sia ok perché per le note più alte la differenza di frequenza è maggiore.

Sarò grato per qualsiasi commento su questo argomento.

Ho anche letto qui: in che modo la dimensione della finestra, la frequenza di campionamento influenzano la stima del passo FFT? sul metodo per migliorare i risultati di picco picking. Penso che proverò ad usarlo.


Se sai che esiste un solo componente sinusoidale, puoi adattare una parabola ai bidoni vicini del picco e interpolare per trovare il picco "vero". Non sono sicuro di come si paragona al metodo di fase descritto da @pichenettes.
endolith

Risposte:


9

Se insisti davvero sull'uso della FFT (piuttosto che sui metodi parametrici, che non risentirebbero di compromessi tempo / frequenza), puoi falsificare una risoluzione molto migliore usando le informazioni sulla fase per recuperare la frequenza istantanea per ogni bin FFT. I parziali possono quindi essere rilevati cercando gli altipiani nella funzione che fornisce la frequenza istantanea in funzione dell'indice di bin FFT. L'implementazione comune di questa tecnica come descritta in questo documento "costerà" un ulteriore STFT (la frequenza istantanea viene recuperata dalle operazioni sullo STFT del segnale e STFT della derivata del segnale).

Vedi ad esempio la funzione ifgram in questa implementazione di Matlab della modellazione sinusoidale di segnali audio.

Si noti che ciò non aiuterà a risolvere due parziali che cadono nei bidoni FFT adiacenti. Fornirà solo una stima della frequenza molto più accurata rispetto alla semplice conversione in una frequenza dell'indice bin FFT di un picco spettrale.


Cosa intendi con metodi parametrici? Inoltre, qualche mese fa hai menzionato un algoritmo simile a FFT ma con una scala di ottava di frequenza anziché una scala di frequenza uniforme?
Jim Clay,

I metodi parametrici sono metodi statistici di analisi del segnale che presuppongono che il segnale sia generato da un processo specifico descritto da un insieme di parametri e che calcoli una stima del minimo di questi parametri dalle osservazioni. Ad esempio, se si assume che il segnale sia una somma di N sinusoidi smorzati esponenzialmente + rumore, algoritmi come ESPRIT o MUSIC possono essere utilizzati per inferire le N ampiezze e pulsazioni complesse.
Pichenettes,

2
Probabilmente ti riferisci alla trasformazione Q costante. L'avvertenza è che non è affatto efficiente dal punto di vista computazionale quanto la FFT; e che invertire questa trasformazione è un problema di ottimizzazione non banale.
Pichenettes,

@JimClay: forse questo dovrebbe essere migrato qui?
endolith

1
Dire che i metodi parametrici non soffrono di compromessi tempo / frequenza è fuorviante. Alla base, i metodi parametrici modellano il sistema e usano il modello per estrarre dati significativi. Ma le prestazioni sono buone solo come il modello. Supponendo che sia scelto il modello "migliore" (numero di poli o numero di autovettori dello spazio del segnale), le prestazioni di questi metodi sono ancora molto sensibili alla lunghezza del set di dati.
Bryan,

2

Il termine "risoluzione" ha molteplici significati. In generale, non è possibile aumentare la capacità di separare (o "risolvere") picchi spettrali ravvicinati per interpolazione utilizzando la stessa lunghezza dei dati della finestra. Ma puoi stimare la frequenza dei picchi spettrali stazionari isolati che sono ben al di sopra del rumore di fondo con una risoluzione più fine (a volte una risoluzione molto più fine) rispetto alla spaziatura del bidone FFT con vari metodi di interpolazione.

I metodi di interpolazione dei risultati FFT comuni per stime a risoluzione più elevata includono interpolazione parabolica, interpolazione Sinc, riempimento zero dei dati in un FFT molto più lungo e metodi del vocoder di fase che utilizzano finestre (leggermente) sovrapposte di offset.

Un FFT è essenzialmente un banco di filtri passa-banda, ognuno con una transizione molto ripida ma tonnellate di ondulazione di banda di arresto per una data lunghezza del kernel del filtro FIR. Come tali, questi filtri non hanno un grande rifiuto del rumore del rumore non periodico nella finestra. Se si sospetta che questo tipo di interferenza sia un problema, una FFT con finestra o una banca di filtri personalizzata potrebbero funzionare meglio.


1

Dopo ulteriori ricerche invocate dalla domanda di Jim Clay e dalla risposta di Pichenettes nei commenti, ho scoperto che il mio metodo 2 è stato reinventato. Trasformata Q legata descritta ad esempio da Kashima e Mont-Reynaud (non sono sicuro di poter collegare a questo articolo, il file sembra strappato ) .

Il loro approccio è algoritmicamente più efficiente in quanto partono dalla più ampia gamma di frequenze e ripetutamente lo campionano di 2 fino a raggiungere l'ottava più bassa.

I vantaggi delle trasformazioni Q sono stati anche esplorati da Brown, ad esempio qui . Potrebbe non essere efficiente come il singolo FFT, ma ha il vantaggio di non calcolare il FFT spesso su bande ad alta frequenza che non lo richiedono.

Grazie per tutte le risposte, commenti e collegamenti.


Quello che stai descrivendo sembra molto simile a una trasformazione wavelet, che sembra essere confermata da questo . Mi rendo conto che questo è un vecchio post, ma i futuri lettori potrebbero voler guardare anche le wavelet. Tuttavia, come ho sottolineato nella mia risposta, non è possibile modificare il principio di incertezza frequenza-tempo, ma la conoscenza dei dati può consentire di imbrogliare un po '.
orodbhen,

1

Se conservi una "cronologia" degli input e la usi per sovrapporre i tuoi DFT, fornirebbe ulteriori informazioni da cui estrarre il contenuto spettrale. Naturalmente, ciò dipende dalla natura variabile nel tempo del segnale. Sarebbe simile nella forma a una funzione di distribuzione di probabilità.

Questo ti darebbe DFT che sono distanziati più vicini nel tempo. Tuttavia, aumenterebbe ancora l'incertezza temporale di ogni DFT, che è vincolata dalle leggi della natura: il valore esatto del comportamento temporale e spettrale non può essere determinato contemporaneamente.

Se il contenuto della frequenza non varia molto all'interno della finestra, tuttavia, dovrebbe andare bene.

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.