0

私は、GetSpectrumData関数を使用して、マイクからのオーディオ入力のピッチを計算することができました。しかし、今私はオーディオの最初の7つの高調波(プロジェクト要件)の振幅を得る必要があります 私はオーディオDSPの知識が非常に少ないです。私が理解しているのは、高調波が基本周波数の倍数であることだけです。しかし、どのように高調波の振幅を得ることができますか?Unity3Dのオーディオ信号の高調波の振幅

おかげで、あなたの基本周波数がどのFFTビン把握する必要があり

答えて

1

まず。それは第二高調波がビンになりますので、高調波がそのビンの整数倍に存在しますビン#10に存在すると言います20、ビン30の3番目のように。これらのハーモニックビンのそれぞれについて、振幅を計算する必要があります。 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
  • ハン - 3
関連する問題