Domanda

Il tipico FFT per l'audio è abbastanza simile a questo, con la maggior parte dell'azione che si svolge sul lato più a sinistra

http://www.flight404.com/blog/images/fft.jpg

Lo ha moltiplicato per un'onda sinusoidale parziale per portarlo in fondo, ma l'articolo non è troppo specifico su questa parte di esso. Sembra anche un & Quot; abbastanza buono & Quot; modifica del set di dati, piuttosto che uno basato su alcune proprietà. Comprendo che l'udito umano è più adatto alle frequenze più alte, quindi, la maggior parte della musica avrà bassi amplificati e acuti attenuati in modo che entrambi i suoni abbiano una forza relativamente uguale.

La mia domanda è: quale modifica è necessario apportare alla FFT per compensare questo calo standard?

for(i = 0; i < fft.length; i++){
     fft[i] = fft[i] * Math.log(i + 1); // does, eh, ok but the high
                                        // end is still not really "loud"
                                        // enough
}

EDIT ::

http://en.wikipedia.org/wiki/Equal-loudness_contour

Mi sono imbattuto in questo articolo, penso che potrebbe essere la direzione in cui dirigersi, ma potrebbe esserci ancora qualche proprietà di una FFT che deve essere controattenta.

È stato utile?

Soluzione

Innanzitutto, sei sicuro di volerlo fare? Ha senso compensare alcune cose, come la risposta del microfono non essendo piatta, ma non la percezione umana. Le persone sono abituate a sentire i suoni con il contenuto spettrale che i suoni hanno nel mondo reale, non lungo le curve percettive di uguale intensità. Se suoni un suono che hai modificato nel modo in cui suggerisci, suonerebbe strano. Forse ad alcune persone piace che la musica abbia migliorato le basse frequenze, ma questa è una questione di gusti, non di psicofisica.

O forse stai compensando per qualche altro motivo, ad esempio, tenere conto della scarsa sensibilità alle frequenze più basse potrebbe migliorare un algoritmo di compressione. È questa l'idea?

Se si desidera normalizzare con le curve di uguale intensità, si dovrebbe notare che la maggior parte delle curve e delle equazioni sono in termini di livello di pressione sonora (SPL). SPL è il registro del quadrato dell'ampiezza della forma d'onda, quindi quando si lavora con gli FFT, è probabilmente più facile lavorare con il loro quadrato (la potenza specta). (O, naturalmente, potresti compensare in altri modi, per esempio, moltiplicando per sqrt (log (i + 1)) nella tua equazione sopra - supponendo che il log fosse un'approssimazione della curva inversa di uguaglianza).

Altri suggerimenti

Penso che il contorno di uguale volume sia esattamente la direzione giusta. Tuttavia, la sua forma dipende dal livello di pressione assoluta. In altre parole, la curva di sensibilità del nostro udito cambia con la pressione del suono.

Non esiste " normalizzazione corretta " se non hai informazioni sui livelli assoluti. Se questo è un problema dipende da cosa vuoi fare con i dati.

Il profilo del volume è standardizzato in ISO 226 ma questo documento non è disponibile gratuitamente per il download. Dovrebbe essere in una biblioteca universitaria decente però. Ecco un'altra fonte per contorni di volume

Quindi stai cercando di alzare il livello delle frequenze alte? Sembra che un filtro passa-alto con un moltiplicatore minimo possa funzionare, in modo da non attenuare troppo i segnali a bassa frequenza. Prendi un buon libro sul design del filtro, magari vai in giro con questa applet

Ai vecchi tempi dei primi campionatori, questo è prima che MOTU Boost people :) non fosse FFT ma semplice (credo Fairlight o Roland prima) Normalizzazione eseguita sul segnale del dominio del tempo originale o risultante (se lo sei fare beat slicing, stile riciclo); non puoi farlo? Oppure scegli la FFT solo dopo aver compensato per contrattaccarla?

Sembra una procedura in due fasi, altrimenti lascerei personalmente FFT come per il compito ..

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