Найти аудиосэмпл в аудиофайле (спектрограмма уже существует) - PullRequest
4 голосов
/ 30 апреля 2011

Я пытаюсь добиться следующего:

  • Используя Skype, позвоните в мой почтовый ящик (работает)
  • Введите пароль и сообщите почтовому ящику, что я хочу записать новое приветственное сообщение(работает)
  • Теперь мой почтовый ящик говорит мне записать новое приветственное сообщение после звукового сигнала
  • Я хочу дождаться звукового сигнала и затем воспроизвести новое сообщение (не работает)

Как я пытался достичь последнего пункта:

  • Создать спектрограмму, используя БПФ и скользящие окна (работает)
  • Создать «отпечаток пальца» длязвуковой сигнал
  • Поиск этого отпечатка пальца в аудио, исходящем из Skype

Проблема, с которой я сталкиваюсь, заключается в следующем:
Результат FFT на аудио из Skypeи опорный звуковой сигнал не является одинаковым в цифровом смысле, то есть они похожи, но не одинаковы, хотя звуковой сигнал был извлечен из аудиофайла с записью звука в формате Skype.На следующем рисунке показана спектрограмма звукового сигнала от аудиозаписи Skype с левой стороны и спектрограмма контрольного звукового сигнала с правой стороны.Как видите, они очень похожи, но не одинаковы ...
загрузил картинку http://img27.imageshack.us/img27/6717/spectrogram.png

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

Любые подсказки накак поступить?

Ответы [ 2 ]

4 голосов
/ 30 апреля 2011

Вы должны определить пиковую частоту и длительность (возможно, минимальную мощность за эту длительность для частоты ( RMS - простейшая мера)

Это должно быть достаточно легко измерить.чтобы сделать вещи еще более умными (но, вероятно, совершенно ненужными для этой простой задачи сопоставления), вы можете утверждать о несуществовании других пиков в окне звукового сигнала.

Обновление

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

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

Википедия перечисляет http://freeverb3.sourceforge.net в качестве кандидата с открытым кодом

Редактировать Добавлена ​​ссылка на страницу учебника API: http://freeverb3.sourceforge.net/tutorial_lib.shtml

Дополнительные ресурсы:

http://en.wikipedia.org/wiki/Finite_impulse_response

http://dspguru.com/dsp/faqs/fir

Существующиепакеты с соответствующими инструментами в Debian:

[brutefir - a software convolution engine][3]
jconvolver - Convolution reverb Engine for JACK

libzita-convolver2 - C++ library implementing a real-time convolution matrix
teem-apps - Tools to process and visualize scientific data and images - command line tools
teem-doc - Tools to process and visualize scientific data and images - documentation
libteem1 - Tools to process and visualize scientific data and images - runtime

yorick-yeti - utility plugin for the Yorick language
1 голос
/ 30 апреля 2011

Сначала я бы немного сгладил его по частоте, чтобы небольшие вариации частоты стали менее значимыми.Затем просто возьмите каждую частоту и вычтите две амплитуды.Выровняйте различия и сложите их.Возможно, сначала нормализуйте сигналы, чтобы различия в общей амплитуде не имели значения.А затем сравните разницу с порогом.

...