Unity3D中音频信号谐波的幅度

时间:2017-03-03 18:02:15

标签: audio unity3d signal-processing pitch-tracking pitch-detection

我设法使用GetSpectrumData函数计算麦克风输入音频的音高。但现在我需要获得前7个音频谐波的幅度(项目要求) 我对Audio dsp知之甚少。我唯一理解的是谐波是基频的倍数。但是我如何获得谐波的幅度。

由于

1 个答案:

答案 0 :(得分:1)

首先你要弄清楚你的基频是哪个FFT bin。假设它位于bin#10中。谐波将位于该bin的整数倍中,因此二次谐波将在bin 20中,3rd在bin 30中等等。对于每个谐波箱,您需要计算振幅。根据您在FFT中使用的窗口函数,您需要在计算中包含少量的二进制位(如果您感兴趣,可以使用谷歌频谱泄漏)。

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);
}

正如我所提到的,窗户的长度取决于窗户。一些常见的是:

  • blackman-harris 3 - 3
  • blackman-harris 4 - 4
  • 平顶 - 5
  • hann - 3