Алгоритм Инь (определение высоты тона) - альтернатива разностной функции - PullRequest
0 голосов
/ 30 мая 2018

Я реализовал Алгоритм Инь для определения высоты звука.

Моя проблема связана с производительностью разностной функции (уравнение 6)

РазницаФункция:

static std::vector<double> difference(const std::vector<double> &data)
{
    int index, tau;
    double delta;
    int yin_buffer_size = signed(data.size() / 2);
    std::vector<double> yin_buffer(yin_buffer_size, 0.0);

    for (tau = 1; tau < yin_buffer_size; tau++) {
        for (index = 0; index < yin_buffer_size; index++) {
            delta = data[index] - data[index + tau];
            yin_buffer[tau] += delta * delta;
        }
    }
    return yin_buffer;
}

, где data содержит аудиоданные для определенного размера окна.

Как видите, эта функция замедляется при увеличении данныхразмер (размер окна).

Пожалуйста, дайте мне знать, если есть альтернатива разностной функции, которая быстрее.Я хочу двигаться в правильном направлении.

Я новичок в обработке сигналов, Ваша помощь очень важна.

1 Ответ

0 голосов
/ 06 июня 2018

Хорошо, в статье Инь говорится, что мы можем использовать Уравнение 7 вместо Уравнения 6. Уравнение 7 может быть получено с использованием БПФ, что намного быстрее.

Простой поиск в Интернете предоставил множество примеров реализации для достиженияthis.

Реализация в JAVA может быть найдена здесь , выполненной пользователем по имени JorenSix.JorenSix, если вы это читаете, спасибо.

...