Сравнение аудиозаписей - PullRequest
       20

Сравнение аудиозаписей

8 голосов
/ 16 августа 2011

У меня есть 5 записанных файлов WAV.Я хочу сравнить новые входящие записи с этими файлами и определить, какой из них больше всего похож.

В конечном продукте мне нужно реализовать его на C ++ в Linux, но сейчас я экспериментирую с Matlab.Я могу видеть FFT-графики очень легко.Но я не знаю, как их сравнить.

Как вычислить сходство двух графиков БПФ?

Редактировать: В записях присутствует только речь.На самом деле я пытаюсь определить реакцию автоответчиков нескольких телекоммуникационных компаний.Достаточно выделить два сообщения: «этот человек не может быть достигнут в данный момент» и «этот номер больше не используется»

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

Это во многом зависит от вашего определения «больше всего похоже».В зависимости от вашего варианта использования это может быть много вещей.Если вы просто хотите сравнить голые спектры всего файла, вы можете просто сопоставить значения, возвращаемые двумя БПФ.

Однако спектры, как правило, сильно меняются, когда файлы деформируются во времени.Чтобы выяснить разницу с этим, вам нужно сделать FFT с окнами и сравнить спектры для каждого окна.Затем определяется ваша разностная функция, которую вы можете использовать в Динамическом алгоритме деформации времени .

Если вам нужно подобие восприятия, БПФ, вероятно, не даст вам того, что вам нужно. MFCC записей, скорее всего, гораздо ближе к этой проблеме.Опять же, вам может потребоваться рассчитать оконные MFCC вместо MFCC для всей записи.

Если у вас снова есть музыкальные записи, вам нужны совершенно другие подходы.В блоге описывается, как работает Shazam, поэтому вы можете найти его в Google.Или, если вы хотите настоящего музыкального сходства, взгляните на эту книгу

РЕДАКТИРОВАТЬ :

Лучшим решением для указанной выше проблемы будетодин из них описал здесь («алгоритм Shazam», как упомянуто выше). Однако это немного сложнее в реализации, и более простое решение может быть достаточно хорошим.

1 голос
/ 16 августа 2011

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

Редактировать: Таким образом, при разных возможных запусках попробуйте выполнить автокорреляцию и посмотрите, какой файл имеет более высокий пик.

0 голосов
/ 16 августа 2011

Я предлагаю вам вычислить простой параметр звука, такой как основная частота. Есть несколько способов получить это значение - я пробовал автокорреляцию и кепстр, и для голосовых сигналов они работали нормально. Работая с такой функцией, вы можете проводить анализ времени и сравнивать два сигнала (базовый - с которым вы сравниваете, с - который вы хотите сопоставить) на заданной частоте интервала. Сравнение нескольких интервалов, основанных на таких критериях, может сказать вам, какой базовый образец соответствует лучше всего.

Конечно, все зависит от того, что вы имеете в виду напоминает большинство . Для сравнения функции вы можете ввести другие параметры, такие как громкость, шум, щелчки, высоты звука ...

...