나는 음성 녹음기에서 기본 주파수로 돌아 오는 안드로이드 프로젝트를하고 있습니다. 내가로부터 FFT 클래스와 주파수를 계산 :FFT의 기본 주파수
http://introcs.cs.princeton.edu/java/97data/FFT.java
및 복잡한 배열에서 :
http://introcs.cs.princeton.edu/java/97data/Complex.java.html.
는 여기 주파수를 계산 어디에 내 코드입니다 :
public double calculateFFT(byte[] signal)
{
final int mNumberOfFFTPoints =1024;
double mMaxFFTSample;
double temp;
Complex[] y;
Complex[] complexSignal = new Complex[mNumberOfFFTPoints];
double[] absSignal = new double[mNumberOfFFTPoints/2];
for(int i = 0; i < mNumberOfFFTPoints; i++){
temp = (double)((signal[2*i] & 0xFF) | (signal[2*i+1] << 8))/32768.0F;
complexSignal[i] = new Complex(temp,0.0);
}
y = FFT.fft(complexSignal);
mMaxFFTSample = 0.0;
int mPeakPos = 0;
for(int i = 0; i < (mNumberOfFFTPoints/2); i++)
{
absSignal[i] = Math.sqrt(Math.pow(y[i].re(), 2) + Math.pow(y[i].im(), 2));
if(absSignal[i] > mMaxFFTSample)
{
mMaxFFTSample = absSignal[i];
mPeakPos = i;
}
}
return ((1.0 * sampleRate)/(1.0 * mNumberOfFFTPoints)) * mPeakPos;
}
곳 sampleRate = 44100 및 mNumberOfFFTPoints = 1024. 이 코드에서 많은 값을 읽었지만 은 기본 주파수 만 가져오고 싶기 때문에 값만 필요합니다. 이 알고리즘을 이해하도록 도와 주시겠습니까?
에서 Fundamental frequency detection /// Speech Signal Analysis
FFT, 그래프 및 오디오 데이터 만 주관적으로 어떤 종류의 결정에 의해 답변을 얻을 수 있습니다 :
다음 참조를 참조하십시오 당신이 관심을 갖는 신호. 당신을 위해 일할 수도 있고하지 않을 수도있는 간단한 해결책은 가장 강한 구성 요소를 취하거나 주파수가 낮고 강한 것을 선택하는 것입니다. –
나는 인간의 목소리의 기본 주파수를 시도해야합니다, 나는이 기본 주파수의 값처럼 최대 값을 고려해야할지 모르겠다. – user3582433