2010-07-20 16 views
5

Come devono essere rappresentati i dati audio stereo (2 canali) per FFT? TiCome rappresentare i dati audio stereo per FFT

A. prendere la media dei due canali e si assegna al componente reale di un numero e lasciare il componente immaginaria 0.

B. Assegnare un canale alla componente reale e l'altro canale di la componente imag.

C'è un motivo per fare l'uno o l'altro? Ho cercato nel web ma non ho trovato nessuna risposta definitiva su questo.

Sto facendo una semplice analisi spettrale e, non sapendo niente, ho usato l'opzione A). Questo mi ha dato un risultato inaspettato, mentre l'opzione B è andata come previsto. Ecco alcuni ulteriori dettagli:

Ho un file WAV di un pianoforte "medio-C". Per definizione, il C medio è 260Hz, quindi mi aspetto che la frequenza di picco sia a 260 Hz e picchi più piccoli alle armoniche. Ho confermato questo visualizzando lo spettro tramite un software di editing audio (Sound Forge). Ma quando ho preso la FFT da sola, con l'opzione A), il picco era a 520Hz. Con l'opzione B), il picco era a 260Hz.

mi sto perdendo qualcosa? La spiegazione che ho fornito fino ad ora è che la rappresentazione di dati stereo usando una componente reale e immagistica implica che i due canali sono indipendenti, il che, suppongo, non lo sono, e quindi il disordine.

risposta

2

Opzione B non ha senso. L'opzione A, che equivale a convertire il segnale in mono, è OK (se sei interessato a uno spettro globale). Il tuo problema (doppia freq) è sicuramente correlato a qualche incomprensione nell'uso delle tue routine FFT.

+0

In effetti ha molto senso. Vedere la risposta di questa domanda per i dettagli: http://stackoverflow.com/questions/14477454/apply-fft-to-a-both-channels-of-a-stereo-signal-separatamente –

4

Non penso che tu stia prendendo la media correttamente. :-)

C. Processo ciascun canale separatamente, assegnando l'ampiezza della componente reale e lasciando la componente immaginaria come 0.

+0

O semplicemente utilizzare un FFT ottimizzato in modo reale - la maggior parte dei kit di strumenti ne offre uno e impedirebbe la confusione sui componenti reali e immaginari, almeno per l'input;) Alcuni offrono persino varianti "n-dimensionali" ; Pensa a ciascun canale del tuo ingresso audio come una dimensione. Ovviamente, dovresti trovare la media dei risultati FFT in seguito. – T045T

2

Una volta presa la FFT è necessario ottenere la magnitudine del complesso spettro di frequenza. Per ottenere la magnitudine, prendi l'assoluto dello spettro complesso | X (w) |. Se si desidera esaminare lo spettro di potenza, si allinea lo spettro di ampiezza, | X (w) |^2.

In termini di spostamento di frequenza, penso che abbia a che fare con l'impostazione delle parti immaginarie a zero. Se immagini lo spettro di frequenze complesso come una serie di vettori o vettori di posizione complessi in uno spazio cartesiano. Se si prendesse un bin X di frequenza discreta (w), ci sarebbe un componente reale che rappresenta la sua direzione nell'asse reale (direzione-x) e un componente immaginario nell'asse immaginario (direzione y). Ci sono quattro valori importanti su questa frequenza discreta, 1. valore reale, 2. valore immaginario, 3. magnitudine e, 4. fase. Se assumi il valore reale e imposta l'immaginario su 0, stai impostando Magnitude = real e phase = 0deg o 90deg. Quindi hai modificato in seguito lo spettro risultante e applicato un bias a ogni intervallo di frequenza. Dai un'occhiata al wiki su Magnitude of a vector, chiamato anche la norma euclidea di un vettore per rispolverare la tua comprensione. Leonbloy aveva ragione, ma spero che questo sia stato più informativo.

+0

Penso che tu sia confuso riguardo quando OP sta impostando la parte immaginaria a zero, cioè nell'input della FFT. Questo è perfettamente a posto, perché i dati audio non hanno una parte immaginaria, mentre i dati trasformati sì. Non appena la FFT ha finito, hai ragione, ovviamente. Dovresti calcolare la magnitudine, piuttosto che la parte reale. Penso che l'incomprensione di leonbloy abbia avuto a che fare più con l'etichettatura dei bin di frequenza che con la norma :) – T045T

0

Pensa alla FFT come un modo per ottenere informazioni da un singolo segnale. Quello che stai chiedendo è qual è il modo migliore per visualizzare i dati da due segnali. La mia risposta sarebbe trattarli in modo indipendente e mostrare una FFT per ciascuno.

Se si desidera uno streaming FFT veramente veloce, è possibile leggere un algoritmo che ho scritto qui: www.depthcharged.us/?p = 176

Problemi correlati