Амплитуда гармоник звукового сигнала в Unity3D

Мне удалось рассчитать высоту звука, поступающего с микрофона, с помощью функции GetSpectrumData. Но теперь мне нужно получить амплитуды первых 7 гармоник звука (требование проекта). У меня очень мало знаний о звуковом процессоре. Единственное, что я понял, это то, что гармоники кратны основной частоте. Но как я получу амплитуды гармоник.

Спасибо


person TUSHAR KHAVALE    schedule 03.03.2017    source источник


Ответы (1)


Сначала вам нужно выяснить, в каком ячейке БПФ находится ваша основная частота. Скажем, она находится в ячейке № 10. Гармоники будут находиться в целых числах, кратных этому ячейке, поэтому 2-я гармоника будет в ячейке 20, 3-я в ячейке 30 и так далее. . Для каждого из этих гармонических интервалов необходимо вычислить амплитуду. В зависимости от оконной функции, которую вы использовали в БПФ, вам нужно будет включить в расчет небольшое количество бинов (спектральная утечка 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
person jaket    schedule 03.03.2017