Насколько подходит алгоритм Dynamic Time Warping для запроса по гудящей системе? - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь разработать запрос с помощью системы гудения и ищу эффективный алгоритм для сравнения частот гудящих запросов с частотами в базе данных. Похоже, что Dynamic Time Wrapping подойдет, поскольку она может работать с разными скоростями (темпом).

  1. Но можно ли это использовать для сравнения, даже если пользователь напевает в другом аккорде? Другими словами, гудит в другом тоне (например, оригинальная песня в аккорде C… и пользователь поет в аккорде E)
  2. Есть ли пример кода, написанного на c #? (нашел немного matlab кодирования, но, к сожалению, я не знаком с matlab). Или хотя бы учебник, описывающий dtw в связи с этим контекстом?
  3. Если DTW не подходит, есть ли другие алгоритмы, которые подойдут для этой цели? Ваши предложения очень ценятся. Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 15 сентября 2015

1, лучше нормализовать высоту тона, прежде чем сравнивать две мелодии по DTW, я думаю, это называется смещением высоты тона в литературе.

2, я не уверен, есть ли реализация на C #, https://github.com/EmilioMolina/QueryBySingingHumming, вот демонстрационный код для c / c ++.

3, DTW является эффективным алгоритмом в сопоставлении двух временных рядов, но единственная проблема заключается в вычислительных затратах, мы должны найти способ снизить стоимость при работе с реальными системами: а) найти способ сделать DTW-индекс? б) найти более эффективный, но не очень точный алгоритм, чтобы сузить область поиска DTW?

0 голосов
/ 23 февраля 2012

В Равный темперамент настройка (не то, что люди настроены как таковая, а в качестве модели) отношение между смежными нотами (полушагы) составляет 12-й корень из 2, или 1.0595, так что 12 полутонов составляют одну октаву, а каждая октава удваивает частоту. Независимо от того, какой ключ кто-то напевает мелодию, вы должны быть в состоянии определить интервалы , которые они напевают, учитывая соотношения частот нот.

...