Guardando questa risposta: Python Scipy FFT wav filesPerché dovrei scartare la metà di quanto ritorna un FFT?
La parte tecnica è evidente e di lavoro, ma ho due questioni teoriche (il codice di cui è al di sotto):
1) Perché devo normalizzato (b=...
) i telai? Cosa succederebbe se usassi i dati grezzi?
2) Perché dovrei utilizzare solo la metà del risultato FFT (d=...
)?
3) Perché dovrei ottenere il risultato FFT abs(c)
?
Forse mi manca qualcosa a causa di una comprensione inadeguata del formato WAV o FFT, ma mentre questo codice funziona bene, sarei felice di capire perché funziona e come sfruttarlo al meglio.
Edit: in risposta al commento di @Trilarion:
Sto cercando di scrivere un semplice, non accurato al 100%, ma più come un proof-of-concept Speaker Diarisation in Python. Ciò significa prendere un file wav (in questo momento sto usando this one per i miei test) e in ogni secondo (o qualsiasi altra risoluzione) dire se l'oratore è la persona numero 1 o persona numero 2. So in anticipo che queste sono 2 persone e non sto cercando di collegarle a qualsiasi firma vocale nota, solo per separarle. In questo momento prendi ogni secondo, FFT (e quindi ottieni un elenco di frequenze), e raggruppale usando KMean con il numero di cluster tra 2 e 4 (A, B [, Silenzio [, A + B]]).
Sono ancora nuovo nell'analisi di file wav e audio in generale.
import matplotlib.pyplot as plt
from scipy.io import wavfile # get the api
fs, data = wavfile.read('test.wav') # load the data
a = data.T[0] # this is a two channel soundtrack, I get the first track
b=[(ele/2**8.)*2-1 for ele in a] # this is 8-bit track, b is now normalized on [-1,1)
c = sfft.fft(b) # create a list of complex number
d = len(c)/2 # you only need half of the fft list
plt.plot(abs(c[:(d-1)]),'r')
plt.show()
Per i principianti, è possibile leggere [questo] (http://mathworks.com/help/matlab/math/fast-fourier-transform-fft.html). – mkrieger1
Per quanto riguarda (2): assomiglia ai tagli di risposta originali dei termini di frequenza negativa e utilizza solo i termini di frequenza positiva. Per un segnale audio quelli dovrebbero essere ridondanti. – dhke
Per favore, fai una vera domanda. Perché dovresti fare qualcosa dipende ovviamente da ciò che vuoi ottenere. Poiché è questa domanda non è chiara e quindi non utile tranne per te. Le risposte sono molto generose nello spiegare le conoscenze dietro le trasformazioni di Fourier, ma non possono mai rispondere perché dovresti farlo. – Trilarion