Сравните две спектограммы, чтобы найти смещение, в котором они соответствуют алгоритму

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

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

Я уже запустил приложение C #, в котором я декодирую данные из MP3 в PCM и конвертирую данные PCM в спектрограмму на основе http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx

Я попытался использовать алгоритм кросс-корреляции для данных PCM, но алгоритм очень медленный, около 6 минут с шагом 10 мс, и в некоторых случаях он не может найти время начала джингла.

Любые идеи алгоритмов для сравнения две спектрограммы на совпадение? Или лучший способ узнать время начала джингла?

Спасибо,

Обновление, извините за задержку

Во-первых, спасибо за все ответы, большинство из которых были актуальными или интересными.

Я пробовал для реализации алгоритма Shazam, предложенного fonzo. Но обнаружить пики на спектрограмме не удалось. Вот три спектрограммы стартового джингла с трех разных записей. Я попробовал AForge.NET с фильтром blob (но он не смог идентифицировать пики), чтобы размыть изображение и проверить разницу в высоте, свертку Лапласа, анализ наклона, чтобы обнаружить серию вертикальных полос (но было слишком много ложных положительный) ...

Тем временем я попробовал алгоритм Хафа, предложенный Дэйвом Аароном Смитом. Где я вычисляю RMS каждого столбца. Да, да, каждый столбец, это O (N * M), но M

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

FFT Start Jingle 1

FFT Start Jingle 2

FFT Start Jingle 3

Новое обновление

Наконец, я пошел с алгоритмом, описанным выше, я попытался реализовать алгоритм Shazam, но не смог найти правильные пики на спектрограмме, идентифицированные точки не были постоянными от единицы звуковой файл в другой. Теоретически алгоритм Shazam является решением такой проблемы. Алгоритм Хафа, предложенный Дэйвом Аароном Смитом, оказался более стабильным и эффективным. Я разбил около 400 файлов, и только 20 из них не разбиваются должным образом. Дисковое пространство при увеличении с 8 ГБ до 1 ГБ.

Спасибо за вашу помощь.

5
задан Dominik Délisle-Ong 26 May 2011 в 15:10
поделиться