0

GetSpectrumData 함수를 사용하여 마이크에서 오디오 입력의 피치를 계산할 수있었습니다. 하지만 이제는 오디오의 첫 번째 7 고조파 (프로젝트 요구 사항)의 진폭을 얻어야합니다. 오디오 DAC에 대한 지식이 거의 없습니다. 내가 이해할 수있는 유일한 것은 고조파가 기본 주파수의 배수라는 것입니다. 그러나 어떻게 고조파의 진폭을 얻을 수 있을까요?Unity3D의 오디오 신호 고조파의 진폭

감사

답변

1

먼저 당신은 당신의 기본 주파수가에있는 FFT는 빈 알아낼 필요가있다. 그것은 2 차 고조파 빈에있을 것입니다, 그래서 10 고조파 그 빈의 정수배에 상주 할 빈 번호에있는 말 20, bin 30의 세 번째. 이 고조파 대마다 진폭을 계산해야합니다. FFT에서 사용한 창 함수에 따라 계산에 작은 수의 빈을 포함해야합니다 (관심있는 경우 Google 스펙트럼 누출).

double computeAmpl(double[] spectrum, int windowHalfLen, int peakBin, int harmonic) 
{ 
    double sumOfSquares = 0.0; 
    for (int bin = peakBin-windowHalfLen; bin <= peakBin+windowHalfLen; bin++) 
    { 
     sumOfSquares += spectrum[bin] * spectrum[bin]; 
    } 
    return sqrt(sumOfSquares); 
} 

앞에서 말씀 드린대로 절반 길이는 창에 따라 다릅니다. 일반적인 사람은 다음과 같습니다

  • 블랙맨 - 해리스 3-3
  • 블랙맨 - 해리스 4-4
  • 위에 평면 - 5
  • 에서 Hann - 3
관련 문제