2011-09-29 15 views
5

Mam tablicę danych audio jestem przechodzącej do czytnika:Jak mogę uzyskać dane częstotliwości od PCM za pomocą FFT

recorder.read(audioData,0,bufferSize); 

konkretyzacją jest następująca:

AudioRecord recorder; 
short[] audioData; 
int bufferSize; 
int samplerate = 8000; 

//get the buffer size to use with this audio record 
bufferSize = AudioRecord.getMinBufferSize(samplerate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT)*3; 

//instantiate the AudioRecorder 
recorder = new AudioRecord(AudioSource.MIC,samplerate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,bufferSize); 

recording = true; //variable to use start or stop recording 
audioData = new short [bufferSize]; //short array that pcm data is put into. 

mam Klasa FFT, którą znalazłem w Internecie, i klasa złożona, z którą się spotykam. Próbowałem przez dwa dni szukając w Internecie wszędzie, ale nie mogę się dowiedzieć, jak zapętlić wartości zapisane w audioData i przekazać je do FFT.

Jest to klasa FFT Używam: http://www.cs.princeton.edu/introcs/97data/FFT.java i jest to kompleks klasa iść z nim: http://introcs.cs.princeton.edu/java/97data/Complex.java.html

Odpowiedz

0

PCM jest technika kodowania danych. Nie jest istotne, aby uzyskać analizę częstotliwości danych dźwiękowych za pomocą FFT. Jeśli użyjesz języka Java do dekodowania zakodowanych danych PCM, otrzymasz nieprzetworzone dane audio, które następnie mogą zostać przesłane do twojej biblioteki FFT.

+0

Próbowałem tego, używając metody przejścia przez zero, czy muszę przekazywać dane, które otrzymuję z tej metody do FFT? –

3

Zakładając tablicę audioData zawiera nieprzetworzone dane dźwiękowe, trzeba stworzyć obiekt z tablicy audioData jako takie:

Complex[] complexData = new Complex[audioData.length]; 
for (int i = 0; i < complexData.length; i++) { 
    complextData[i] = new Complex(audioData[i], 0); 
} 

Teraz można przekazać swój obiekt complexData jako parametr do funkcji FFT:

+0

Spróbuj tego, dziękuję! –

+0

@Ben Taliadoros: Czy to pomogło? Ponieważ ja także zmagam się z tym problemem – androidGuy

+0

tak, jaki jest twój problem? # –

1

Niektóre szczegóły zależą od celu FFT.

Długość wymaganej FFT zależy od rozdzielczości częstotliwości i dokładności czasowej (które są odwrotnie proporcjonalne), które chcesz w swojej analizie, która może być lub może nie być zbliżona do długości bufora wejściowego audio. Biorąc pod uwagę te różnice w długości, być może trzeba połączyć wiele buforów, posegmentować pojedynczy bufor lub kombinację tych dwóch, aby uzyskać długość okna FFT spełniającego wymagania analizy.

+0

z tego, co widziałem, długość okna pobiera tylko niektóre wartości z moich wyników? czy biorę tutaj szczyty danych, żeby osiągnąć częstotliwość? Dzięki –

Powiązane problemy