Unity3D中音频信号谐波的幅度

Amplitude of audio signal harmonics in Unity3D

我已经成功地使用 GetSpectrumData 函数计算了从麦克风输入的音频的音调。但现在我需要得到音频的前 7 个谐波的振幅(项目要求) 我对音频 dsp 的了解很少。我唯一理解的是谐波是基频的倍数。但是我将如何获得谐波的幅度。

谢谢

首先您需要弄清楚您的基频在哪个 FFT bin 中。假设它位于 bin# 10 中。谐波将位于该 bin 的整数倍中,因此二次谐波将在 bin 20 中,第三次谐波在bin 30 等等。对于这些谐波箱中的每一个,您都需要计算振幅。根据您在 FFT 中使用的 window 函数,您需要在计算中包含少量的 bin(如果您感兴趣,则为 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);
}

正如我提到的 window 半长取决于 window。一些常见的是:

  • 布莱克曼-哈里斯 3 - 3
  • 布莱克曼-哈里斯 4 - 4
  • 平顶 - 5
  • 汉 - 3