【问题标题】:Amplitude of audio signal harmonics in Unity3DUnity3D中音频信号谐波的幅度
【发布时间】:2017-03-03 18:02:15
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    首先,您需要确定您的基频在哪个 FFT bin 中。假设它位于 bin#10 中。谐波将驻留在该 bin 的整数倍中,因此第二次谐波将在 bin 20 中,第三次在 bin 30 中等等。对于这些谐波箱中的每一个,您都需要计算幅度。根据您在 FFT 中使用的窗口函数,您需要在计算中包含少量 bin(如果您有兴趣,请使用谷歌光谱泄漏)。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多