Come faccio a creare un diagramma frequenza vs tempo?


9

Sono un ingegnere chimico, non un EE, quindi è un po 'difficile.

Sto cercando di capire come prendere i dati di ampiezza rispetto al tempo e trasformarli in frequenza rispetto al tempo. Il mio primo istinto è quello di dividere i miei dati in blocchi, eseguire la FFT su ogni blocco e quindi tracciarli. Sfortunatamente, poiché la durata temporale di ciascuna sezione si avvicina allo zero, non ci sono più informazioni sufficienti per ottenere informazioni precise sulla frequenza (le basse frequenze richiedono più di una porzione di tempo molto piccola). Quindi ... come posso fare? Sono sicuro che si tratti di una sorta di famoso problema che qualcuno ha già risolto.

Ecco il tipo di trasformazione che sto cercando, illustrato con un'onda sonora (nota di pianoforte G). Come puoi vedere, questo grafico è a tre assi, con il terzo rappresentato dal colore.

Grazie!

inserisci qui la descrizione dell'immagine

Risposte:


5

La risoluzione tempo vs frequenza è un problema ben noto, e ci sono davvero approcci per superarlo. Per i segnali audio, alcune delle tecniche comunemente usate includono: metodi parametrici; risoluzione adattativa (analizza con varie configurazioni tempo / frequenza e collega i risultati insieme - Wen X. e M. Sandler, "Spettrogramma composito che utilizza trasformazioni multiple di Fourier"); wavelet / decomposizioni su basi incomplete; e l'uso delle informazioni di fase per estrarre la posizione precisa dei picchi di frequenza (IFgram).

Tuttavia, sembra che il grafico che hai mostrato non usi alcune di queste tecniche; quindi sospetto che questo non sia ciò che potresti cercare. Sembra che ci sia un po 'di "sbavatura" sull'asse orizzontale (ad esempio at = 1.2s) e questo è un segno sicuro che l'analisi è stata fatta con una sovrapposizione elevata tra i blocchi.

In effetti, la durata del blocco e il numero di frame di analisi al secondo non devono essere collegati tra loro se si consente la sovrapposizione dei frame. Quindi, se si desidera utilizzare un frame di analisi lungo 40 ms, la griglia non deve essere:

frame 1: t = 0..t = 40ms; frame 2: t = 40ms..t = 80ms

Potrebbe benissimo essere:

frame 1: t = 0..t = 40ms; frame 2: t = 10ms..t = 50ms

Questa sovrapposizione può dare l'illusione di una risoluzione temporale più elevata senza ridurre troppo le dimensioni della finestra FFT. Nota che questo può solo aiutare a localizzare accuratamente un evento sull'asse del tempo - non aiuterà a risolvere due eventi vicini nel tempo ... Proprio come aumentare la dimensione FFT potrebbe aiutare a identificare la posizione di un picco di frequenza, ma non con il risoluzione di due picchi di frequenza adiacenti.


Come andresti dall'altra parte (trasformando da spettrogramma in segnale audio)
pete

4

Sì, molte persone hanno lavorato all'analisi frequenza-tempo.

L'approccio di "suddividere i miei dati in blocchi, eseguire la FFT su ogni blocco" è una buona idea. L'applicazione di una "funzione finestra" su ogni blocco, appena prima di eseguire la FFT, aiuta a evitare molti artefatti. Anche consentire la sovrapposizione di blocchi aiuta. Dopo queste modifiche, si finisce con la trasformazione di Gabor , che sembra essere la trasformazione di Fourier a breve termine più popolare (STFT).

Come hai già sottolineato, e come sottolinea l'articolo di Wikipedia, tutte le tecniche di trasformazione di Fourier a breve termine hanno un compromesso:

  • quando si tagliano le serie temporali in pezzi molto corti, si ottengono informazioni temporali molto precise su esattamente quando un tono inizia e si arresta, ma le informazioni sulla frequenza sono molto sfocate.
  • Quando si tagliano le serie temporali in pezzi molto lunghi, si ottengono informazioni di frequenza estremamente precise sull'esatta frequenza di un tono, ma l'ora esatta in cui inizia e si interrompe è sfocata.

Questo è un problema famoso, ma purtroppo, non solo non è stato risolto, è stato dimostrato che l'incertezza tra i due è inevitabile: il limite di Gabor, il limite di Heisenberg-Gabor, il principio di incertezza , ecc.

Se fossi in te, inizierei con una delle tante librerie disponibili per calcolare la trasformazione di Gabor e sperimenterei come tagliare le serie temporali in varie lunghezze. C'è una buona probabilità che tu sia fortunato e finirai con un po 'di lunghezza che offre un'adeguata localizzazione del tempo e un'adeguata discriminazione in frequenza.

Se questo non funziona per questa applicazione, quindi vorrei passare ad altri approcci alla rappresentazione tempo-frequenza e analisi tempo-frequenza - trasformate wavelet, trasforma chirplet , frazionale trasformata di Fourier (FRFT), etc.

EDIT: Alcuni codici sorgente per generare spettrogrammi / grafici a cascata da dati audio:

L'immagine allo spettrogramma va nella direzione opposta rispetto ai programmi di cui sopra.


La trasformazione di Gabor è solo con finestre gaussiane. Se usi un'altra finestra, è solo una STFT. (E le vere finestre gaussiane non esistono in digitale perché si riducono all'infinito.)
Endolith

@endolith: hai ragione. La trasformazione di Gabor utilizza una "funzione finestra gaussiana" che viene troncata a lunghezza finita - è piuttosto vicina, ma non matematicamente identica, una gaussiana ideale.
David Cary,

Penso che la trasformazione di Gabor sia una trasformazione continua, usando un integrale, quindi può avere un gaussiano non troncato come finestra?
endolith il

@endolith: Sì, in linea di principio, una persona potrebbe usare un gaussiano non troncato come finestra. In pratica, poiché praticamente tutta l'energia del gaussiano si trova all'interno di alcuni sigma della gobba centrale, l'uso di una finestra troncata praticamente non fa mai percepire differenze diverse nel diagramma di output. Poiché il software che produce grafici a cascata per spettrogramma applica ripetutamente la finestra gaussiana e quindi esegue una FFT per ogni colonna del grafico, "non troncare" renderebbe il software insopportabilmente lento.
David Cary,
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.