2014-05-23 13 views
0

나는 음성 녹음기에서 기본 주파수로 돌아 오는 안드로이드 프로젝트를하고 있습니다. 내가로부터 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. 이 코드에서 많은 값을 읽었지만 은 기본 주파수 만 가져오고 싶기 때문에 값만 필요합니다. 이 알고리즘을 이해하도록 도와 주시겠습니까?

+1

에서 Fundamental frequency detection /// Speech Signal Analysis

FFT, 그래프 및 오디오 데이터 만 주관적으로 어떤 종류의 결정에 의해 답변을 얻을 수 있습니다 :
다음 참조를 참조하십시오 당신이 관심을 갖는 신호. 당신을 위해 일할 수도 있고하지 않을 수도있는 간단한 해결책은 가장 강한 구성 요소를 취하거나 주파수가 낮고 강한 것을 선택하는 것입니다. –

+0

나는 인간의 목소리의 기본 주파수를 시도해야합니다, 나는이 기본 주파수의 값처럼 최대 값을 고려해야할지 모르겠다. – user3582433

답변

1

일반적으로 음악이나 음성의 기본 주파수 감지는 중요하지 않습니다. 귀하의 출처에 따라 문제를 단순화 할 수도 있습니다.

예를 들어 음원이 단일 음을 노래하는 사람이고 녹음 할 때 음악이나 기타 배경 소리가없는 경우 수정 된 첨두 검지기가 적절한 결과를 제공 할 수 있습니다.

아래 그래프는 B-flat-3 (Bb3) 노트가있는 여성 소프라노의 주파수 스펙트럼을 보여줍니다. BB3의 기본 주파수는 233 Hz로하지만 소프라노 실제로 기본 236 Hz의 노래 (가장 좌측 및 가장 높은 피크).

Frequency spectrum of female soprano singing B-flat-3 note. Sooeet.com FFT calculator

아래 그래프는 채 여성 소프라노의 주파수 스펙트럼을 도시 F4 메모. F4의 기본 주파수는 349 Hz로하지만 소프라노 실제로 기본 360 Hz의 노래 (가장 왼쪽의 피크).

Frequency spectrum of female soprano singing F4 note. Sooeet.com FFT calculator

그러나, 상기 그래프는 기본 주파수의 검출의 과제 중 하나는 도시 . 이 경우 가장 높은 피크는 기본이 아니라 714 Hz의 첫 번째 고조파입니다. 수정 된 피크 검출기는 이러한 경우에 대처해야합니다.

다른 가능성은 셉 스트 럼 분석 및 자기 상관입니다. 이 문제는 당신이 생각하는 것보다 훨씬 더 복잡 Sooeet.com FFT calculator