, так что я смог решить мою последнюю проблему, но я уже окунулся в следующую.Получение частотных компонентов с FFT
Итак, я хочу сделать простой спектрограмм, но в другом случае я хочу понять, как работают FFT-библиотеки, и что они на самом деле вычисляют и возвращают. (БПФ и обработка сигналов - это тема номер 1, в которую я войду, как только у меня будет время, но прямо сейчас, у меня есть только время для некоторых упражнений по программированию вечером.))
Здесь я просто подвел итоги части:
int framesPerSecond;
int samplesPerSecond;
int samplesPerCycle; // right now i want to refresh the spectogram every
DoubleFFT_1D fft;
WAVReader audioIn;
double audioL[], audioR[];
double fftL[], fftR[];
.....
framesPerSecond = 30;
audioIn= new WAVReader("Strobe.wav");
int samplesPerSecond = (int)audioIn.GetSampleRate();
samplesPerCycle = (int)(audioIn.GetSampleRate()/framesPerSecond);
audioL = new double[samplesPerCycle*2];
audioR = new double[samplesPerCycle*2];
fftL = new double[samplesPerCycle];
fftR = new double[samplesPerCycle];
for(int i = 0; i < samplesPerCycle; i++) {
// don't even know why,...
fftL[i] = 0;
fftR[i] = 0;
}
fft = new DoubleFFT_1D(samplesPerCycle);
.....
for(int i = 0; i < samplesPerCycle; i++) {
audioIn.GetStereoSamples(temp);
audioL[i]=temp[0];
audioR[i]=temp[1];
}
fft.realForwardFull(audioL); //still stereo
fft.realForwardFull(audioR);
System.out.println("Check");
for(int i = 0; i < samplesPerCycle; i++) {
//storing the magnitude in the fftL/R arrays
fftL[i] = Math.sqrt(audioL[2*i]*audioL[2*i] + audioL[2*i+1]*audioL[2*i+1]);
fftR[i] = Math.sqrt(audioR[2*i]*audioR[2*i] + audioR[2*i+1]*audioR[2*i+1]);
}
Итак, вопрос в том, хочу ли я знать, какие частоты находятся в дискретизированном сигнале, как мне их рассчитать? (Когда я хочу, чтобы напечатать массивы fftL/fftR, я получаю некоторые экспоненциальный FORMES на обоих концах массива.)
Thx :)
возможно дубликат [Как я могу получить DFT/FFT выходные частоты в Hertz?] (http://stackoverflow.com/questions/17390677/how-can-i-get-dft-fft-output-frequencies-in-hertz/17391353#17391353), [Как получить частоту от FFT result] (http://stackoverflow.com/questions/4364823/how-to-get-frequency-from-fft-result/4371627#4371627), * et al * ... –
Я нашел из этих тем, но это не помогло. Я вообще в праве писать свои аудио-образцы в первых нескольких слотах массива, а затем получать RE и IM часть в местах 2i 2d + 1? (Я получаю что-то вроде показанного здесь, но я почему-то сомневаюсь, это то, что я хочу иметь. Http://cnx.org/content/m12554/latest/?collection=col10253/1.7) –
Ну, вам нужна функция окна до БПФ, и вам нужно вычислить * величину * выхода FFT для первых N/2 бункеров, а затем найти пики. С какой частью вы испытываете трудности? –