Ищете идеи для простого алгоритма сопоставления с образцом для запуска на микроконтроллере - PullRequest
2 голосов
/ 29 марта 2010

Я работаю над проектом по распознаванию простых звуковых паттернов. У меня есть два набора данных, каждый из которых состоит от 4 до 32 пар примечание / длительность. Один набор предопределен, другой из входящего потока данных. Длина двух сильно коррелированных наборов данных часто различна, но примерно одинаковой «формы». Моя цель состоит в том, чтобы придумать какое-то ранжирование в отношении того, насколько хорошо эти два набора данных коррелируют / совпадают.

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

http://s2.postimage.org/FVeG0-ee3c23ecc094a55b15e538c3a0d83dd5.gif

(Извините, но я не могу опубликовать изображения как новый пользователь)

Я делаю это на 8-битном микроконтроллере, поэтому ресурсы минимальны. Скорость - это не проблема, секунда или две обработки не являются преградой.

Меня не удивит, если найдется очевидное решение, я просто слишком долго смотрел на проблему. Есть идеи?

Заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 19 июня 2010
Согласование сигналов

1D часто выполняется с использованием функции convolution . Тем не менее, это может быть интенсивным процессором.

Более простой алгоритм, который можно использовать, заключается в том, чтобы сначала проверить, равны ли длительности каждой ноты двум сигналам. Затем, если проверить следующую частотную картину двух сигналов одинаковы. Под паттерном следующей частоты я подразумеваю разложение упорядоченного списка частот на упорядоченный список того, является ли следующая частота выше или ниже. Так что то, что идет от 500 Гц до 1000 Гц от 700 Гц до 400 Гц, просто становится выше-ниже-ниже. Это может быть достаточно хорошо, в зависимости от ваших целей.

0 голосов
/ 29 марта 2010

Невозможно увидеть графику, но ... Разделите спектр на корзины. Вы, вероятно, уже сделали это, но они могут быть слишком хорошими. В зависимости от вашего приложения рассмотрите возможность деления спектра, скажем, на 16 или 32 бина, возможно, логарифмически, поскольку именно так мы и слышим. Затем сравните отношения мощности в каждом бине. Например, сравните соотношение 500 Гц и 1000 Гц в первом образце с тем же соотношением во втором образце. Это избавляет от любой проблемы с неравными амплитудами образцов.

...