Модификация звукового входа для определения частоты
Я работаю над проектом и наткнулся на загадку, которая прошла через мое понимание. Моя цель - создать искусственную нейронную сеть, которая передает информацию из звукового файла, который затем переносится через систему, что приводит к маркировке аккорда. Я надеюсь сделать это, чтобы помочь в транскрипции музыки - не для того, чтобы фактически сделать саму транскрипцию, но чтобы помочь в аспекте гармонизации. Я отвлекся.
Я прочитал как можно больше о функциях Гертцеля и БПФ, но я не уверен, что эти функции - то, что я ищу. Я не ищу какую-то конкретную частоту в звуковом образце, скорее, я надеюсь найти более высокие, средние и низкие частоты диапазона семпла.
Я знаю, что алгоритм Гёртцеля возвращает большое число, если найдена конкретная частота, но вычислительно расточительно запускать алгоритм для всех возможных тонов в данном образце. Любые идеи о том, что использовать?
Или, если это невозможно, я бы тоже хотел это знать, прежде чем тратить слишком много времени на этот проект.
Спасибо за ваше время!
3 ответа
Вероятно, лучше подходит для DSP StackExchange.
Предположим, вы БПФ один тон 110 Гц, чтобы получить спектрограмму; Вы увидите равномерно расположенные пики при 110 220, 330 и т.д. Гц - гармоники. 110 является фундаментальным.
Предположим, у вас есть 3 тона. Уже это будет выглядеть довольно грязно в частотной области. Особенно, если у вас есть аккорд, содержащий, например, A110 и A220.
В связи с этим, я думаю, что нейронная сеть является хорошим подходом.
Подача БПФ на выходе.
Было бы неплохо использовать нейронную сеть, которая принимает комплексные входные значения в качестве выходных данных FFT комплексного числа для каждого частотного элемента.
http://www.eagle.tamut.edu/faculty/igor/PRESENTATIONS/IJCNN-0813_Tutorial.pdf
Может показаться, что вычислительно расточительно извлекать так много частот с помощью БПФ, но алгоритмы БПФ в настоящее время чрезвычайно эффективны. Вероятно, вам следует использовать битовую силу 10, поэтому 2^10 входов -> 2^9 = 512 сложных бинов.
БПФ является правильным решением. По сути, если у вас есть БПФ входного сигнала, который состоит только из синусоидальных волн, вы можете определить аккорд, просто отобразив, какие частоты присутствуют в определенных тонах в зависимости от того, какой музыкальный темперамент вы хотите использовать, а затем найдите аккорд, указанный этими тоны. Если у вас нет синусоидальных волн в качестве входных данных, то использование нейронной сети является действительной попыткой решения проблемы при условии, что у вас достаточно образцов для ее обучения.
БПФ это правильный путь. Гармоники не беспокоят вас, так как они являются целочисленным кратным основной частоты, они просто более высокие "октавы" одной и той же ноты. И чтобы распознать аккорд, транспозиции нот над целыми октавами не имеют значения.