Domanda

Voglio prendere i dati audio PCM e trovare picchi in esso. In particolare, voglio tornare la frequenza e l'ora in cui si verifica un picco.

La mia comprensione di questo è che devo prendere i dati PCM e discarica in un array, impostandola come i valori reali con le parti complesse impostato a 0. Ho poi prendere la FFT, e ottengo una matrice indietro. Se ogni numero della matrice è un valore di magnitudo, come faccio a ottenere la frequenza associato a ciascuno di essi? Inoltre, faccio a prendere la grandezza della parte reale e complesso o solo scartare i valori complessi?

Infine, se volevo trovare i picchi in una singola canzone, posso solo impostare una piccola finestra per FFT e farla scorrere attraverso qualsiasi tipo di suono? Qualche suggerimento su come grande finestra che dovrebbe essere?

È stato utile?

Soluzione

Si può effettivamente essere alla ricerca di un spettrogramma , che è fondamentalmente una FFT dei dati in una piccola finestra che viene fatto scorrere lungo l'asse del tempo. Se si dispone di un software che implementa questo, si potrebbe risparmiare un po 'fatica. E 'ciò che è comunemente usato per l'analisi tempo variabile segnali acustici, ed è un modo molto utile per guardare i suoni. Inoltre, ci sono alcuni trucchi, per esempio, con i dati a finestre per FFT, che lo spettrogramma probabilmente arrivare subito, ma sarà più difficile (anche se non molto duro) da fare per voi correttamente.

Altri suggerimenti

Se la frequenza di campionamento dei dati PCM è F, quindi la componente più alta frequenza nella FFT è F / 2. Supponiamo che il vostro dati PCM è stato campionato a 44100 Hz, quindi i valori di FFT verrà eseguito da 0 Hz (DC) a 22050Hz. Se si inizia con N campioni, (N è una potenza di 2), quindi la FFT può restituire N 2 / valori che rappresentano tutte le frequenze positive da 0 a F / 2, o può restituire N valori che includono anche le frequenze negative - F / 2 a 0. si dovrebbe controllare le specifiche del vostro algoritmo FFT per scoprire su quale frequenza ogni elemento array è mappato.

Per trovare le vette, è necessario guardare alla grandezza dei valori FFT. Quindi è necessario aggiungere le parti reale e immaginaria squadrate di ogni valore complesso.

Supponiamo che il vostro FFT di campioni N PCM ritorna N / 2 valori complessi che rappresentano frequenze positive. Allora la distanza tra 2 campioni complessi è F / 2N Hz. Con F = 44100Hz e N = 1024 campioni, questo sarebbe 21.5Hz. Questa è la vostra risoluzione di frequenza. Se hai bisogno di trovare battute a bassa frequenza, dovrà essere estesa la finestra FFT.

bene, Una matrice crudo di dimensioni 512 dei numeri complessi che esprimono l'onda di ingresso, quando trattati con FFT si sostituirà le parti immaginarie con zero (secondo la destinazione d'uso), lasciando le parti reale, quindi passare la matrice al FFT con frequenza di campionamento: 8192 Hz.

Ora abbiamo un 512 array di valori reali FFTed, ogni valore è un numero irrazionale, ogni numero irrazionale esprimere diversi valori utili.

Per ottenere la frequenza fondamentale dobbiamo dividere la frequenza di campionamento per la dimensione del buffer:

8192/512 = 32;

32 è la risoluzione dei valori FFT significa che stiamo per conoscere le alte frequenze di ampiezza vicino i numeri che sono multipli di 32.

Come se abbiamo un'ondata di

Frequenza: 3 48 23 128 Ampiezza: 10 5 12 8 dB (ref = 1)

dopo FFT otteniamo:

Frequenza: 0 32 64 128 Ampiezza: 9 8 2 8

FFT è dominio della frequenza significa che organizza in base alla frequenza Time-dominio sull'altro lato significa organizzare dal tempo di ascoltare la musica dal secondo zero a seconda N.

FFT può ascoltare soltanto quando disposto dalla frequenza da 0 a frequenza frequenza N.

Quindi organizza frequenze in ordine crescente, dal momento che non ha preso tutti i campioni reali dal audio (che si stanno avvicinando infinita) come prendere ogni nanosecondo e meno alla FFT, per fortuna questo non accade FFT preleva campioni da l'audio, batte ogni (1 / frequenza di campionamento) secondo campione. questa campioni vengono bufferizzati (nel nostro caso: 512)., ogni 512 campioni tamponati in FFT, l'uscita è 512 valori FFT

Da FFT organizza frequenze, pasticci con i campioni di tempo, campioni ora disposte secondo loro frequenze.

Le frequenze indicate su regolarmnente che è la frequenza fondamentale che è la frequenza di campionamento diviso la dimensione di buffer, che è nel nostro caso 8192/512 = 32.

Quindi, le frequenze di potenza mostrato ogni 32 frequenze, la potenza della frequenza più vicina è mostrato in base a quanto la frequenza di rete è vicino a l'indice.

ad alta risoluzione può essere ottenuto utilizzando la frequenza di campionamento più elevata.

Per mostrare frequenze stampiamo l'indice in ordine crescente che corrisponde alla ampiezza.

Ampiezza = 20Log10 (uscita / ref)

Le ampiezze adiacenti si Index mostrano la potenza della frequenza e si fanno più precise in base alla precisione della risoluzione.

Conclusione, FFT produce un indice di ampiezze, ogni ampiezza esprime la potenza del suo indice corrispondente (frequenza).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top