먼저 당신은 당신의 기본 주파수가에있는 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