Помогите с использованием БПФ для определения частоты аудиосэмпла - PullRequest
2 голосов
/ 20 декабря 2010

В настоящее время я занимаюсь разработкой учебной программы по перкуссии.Программа требует, чтобы я мог определить, какой барабан воспроизводится, для этого я собирался проанализировать частоту записи барабана и посмотреть, находится ли частота в заданном диапазоне.

До сих пор я использовал математическую реализацию Apache для БПФ (http://commons.apache.org/math/), но мой вопрос заключается в том, как после преобразования БПФ как использовать массив результатов для вычисления частот, содержащихся в сигнале?

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

Любая помощь или альтернативные предложения о том, как определить, чтоУдар по барабану был бы очень признателен

Редактировать: С момента написания этого я нашел отличный онлайн-урок по реализации FFT в java для преобразования времени / частоты Анализ спектра в Java

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

В области поиска музыкальной информации люди часто используют связанную метрику, известную как кепстральные коэффициенты низкой частоты (MFCC).

Для любого N-выборочного сегмента вашего сигнала возьмите БПФ.Эти результирующие N выборок преобразуются в набор MFCC, содержащих, скажем, 12 элементов (то есть коэффициентов).Этот 12-элементный вектор используется для классификации инструмента, включая используемый барабан.

Для выполнения контролируемой классификации вы можете использовать что-то вроде машины опорных векторов (SVM). LIBSVM - это широко используемая библиотека, совместимая с Java (и многими другими языками).Вы обучаете SVM с этими MFCC и их соответствующими метками инструментов.Затем вы проверяете его, подавая вектор запроса MFCC, и он сообщает вам, какой это инструмент.

Итак, основная процедура, в итоге:

  1. Get FFT.
  2. Получить MFCC из FFT.
  3. Обучить SVM с помощью MFCC и меток приборов.
  4. Запросить SVM с помощью MFCCs сигнала запроса.

Проверить дляПакеты Java, которые делают эти вещи.(Они должны существовать. Я просто не знаю их.) Относительно, барабанная транскрипция проще, чем в большинстве других групп инструментов, поэтому я настроен оптимистично, что это сработает.

Для дальнейшего чтения есть целая куча статей о транскрипции барабанов .

0 голосов
/ 08 февраля 2017

Когда я создавал программу с использованием DFT, он создавал массив частот и амплитуд для каждой частоты. Затем я мог бы найти самые большие амплитуды и сравнить их с музыкальными нотами, чтобы получить хорошее представление о том, что играли. Если вам известна приблизительная частота барабана, вы сможете это сделать.

...