0

我已經設法使用GetSpectrumData函數計算麥克風音頻輸入的音高。但現在我需要得到前7個音頻諧波的幅度(項目要求) 我對Audio dsp的瞭解非常少。我所理解的只是諧波是基頻的倍數。但是,我將如何獲得諧波的振幅。Unity3D中音頻信號諧波的幅度

感謝

回答

1

首先,你需要找出哪些FFT斌你的基本頻率是的,說:它位於濱#10的諧波會駐留在倉的整數倍,因此二次諧波將在斌20,第三個在垃圾箱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
  • 漢恩 - 3