Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Распознавание образа сигнала real-time
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
voicek
Условие.
На входе имеем сигнал звуковой частоты (музыкальный инструмент).
Задача.
Требуется определить частоту сигнала (извлекаемую ноту) и отправить команду исполняющему устройству. Задержка между звукоизвлечением и реакцией исп. устройства должна быть минимально заметной на слух (~10мс). Попытаться всунуть алгоритм в ARM.

Предполагаю несколько вариантов решений.
1.Корреляционный анализ. Сначала "обучаем" систему, записываем образцы сэмплов каждой ноты, а потом сравниваем входной сигнал с библиотекой образцов, т.е. определяем коэфф. корреляции. Вероятно размер образца не должен быть слишком большим (фронт сигнала), иначе задержка будет заметна. Не помешает ли это устойчивости распознавания?

2.Нейронные сети. Тут темный лес, мало знаком с этой темой.

Господа опытные товарищи поделитесь соображениями, "включите свет". С какой стороны копать огород.
subver
Посчитать АКФ куска в 10мс и определить основной тон? Или еще какие нибудь алгоритмы выделения основного тона из вокодеров подсмотреть.
Andron_
если нужно определить лишь ноту - зачем корреляционный анализ. Фурье, и определяем гармонику максимального уровня.
Fast
если сигнал простой, т.е. нота состоит из одного тона,
то можно алгоритм Герцеля (Goertzel) на 7 частот
если сигнал сложный, - аккорд, полутоны, - то Фурье, а после Фурье распознавать
ataradov
QUOTE (Andron_ @ Dec 15 2010, 06:29) *
если нужно определить лишь ноту - зачем корреляционный анализ. Фурье, и определяем гармонику максимального уровня.

Не работает фурье на настоящих музыкальных инструментах. Очень часто обертоны имеют сравнимый и больший уровень.

Можно посмотреть тут поднятую мной тему об определении частоты гитарной струны, там и матлабовские модели есть. Единственный медот который нормально работает - это АКФ.
alex_os
Цитата(voicek @ Dec 15 2010, 03:46) *
Условие.
Предполагаю несколько вариантов решений.
1.Корреляционный анализ. Сначала "обучаем" систему, записываем образцы сэмплов каждой ноты, а потом сравниваем входной сигнал с библиотекой образцов, т.е. определяем коэфф. корреляции. Вероятно размер образца не должен быть слишком большим (фронт сигнала), иначе задержка будет заметна. Не помешает ли это устойчивости распознавания?

2.Нейронные сети. Тут темный лес, мало знаком с этой темой.

Господа опытные товарищи поделитесь соображениями, "включите свет". С какой стороны копать огород.


Вариант 1 однозначно, еще попробовать автокорреляцию (как тут советовали). Хотя 10 мс маловато будет для автокорреляционного
анализа да и для корреляционного наверное тоже.
DRUID3
Да, йа тоже за автокорреляцию... Но и "Фурье" попробовать можно...
Цитата(Taradov Alexander @ Dec 15 2010, 08:05) *
Не работает фурье на настоящих музыкальных инструментах. Очень часто обертоны имеют сравнимый и больший уровень.

Больший, то больший, но нужна ведь 1-ая...

Цитата(voicek @ Dec 15 2010, 02:46) *
2.Нейронные сети. Тут темный лес, мало знаком с этой темой.

...забудьте. Оптимальным решением будет тот же автокоррелятор, но спроецированный на структуру нейронной сети... Каша из топора - эти нейронные сети... wink.gif
Fast
Цитата(Taradov Alexander @ Dec 15 2010, 09:05) *
Не работает фурье на настоящих музыкальных инструментах. Очень часто обертоны имеют сравнимый и больший уровень.
сам Фурье и не должен работать, это всего лишь получение спектральных составляющих сигнала. Спектральные или кепстральные коэф-ты выступают в качестве признаков в разпознавании образа звука (с помощью нейронной сети, перцептрон с одним слоем).

с практической реализацией АКФ тоже не все будет гладко, если звуки произвольной длительности
SPACUM
Цитата(Fast @ Dec 15 2010, 10:02) *
Герцеля (Goertzel) на 7 частот

1. Если внимательно посмотреть на музыкальную клавиатуру, то в каждой октаве 7 белых клавиш и 5 черных,
итого 12. А октавы еще различать нужно?
2. Если хотя бы 2 периода поместить в 10мс это частота будет 200Гц, а для надежности надо бы побольше, частоты очень мало отличаются. Думаю 12 периодов как минимум для надежного корреляционного разделения частот. Это частоты 1200Гц и более.
3. Можно оцифровывать 12-ю каналами синхронными с нотами, наверное будет лучше.
4. Можно несколько раз продифференцировать сигнал и находить мгновенный спектр считая что он содержит не более 3-4 частот. Однако требования по отношению сигнал/шум могут быть невыполнимыми.
voicek
На Фурье и Герцеле вполне успешно строят тюнеры (прибор для настройки муз. инструмента), но там времени вагон, музыкант ноту дал и ждем пока система обработает. Соответственно и точек можно побольше взять. А вот в real-time... Года два назад пытался реализовать распознавание на Герцеле. На чистом синусе вроде бы все хорошо, а если гармоник добавить, то их уровни спектров начинали забивать основной тон. Если брать больше точек, чтобы разнести спектры, получаем неприемлемую реакцию системы. Так что Фурье и т.п. наверное не подойдет.

Для справки. Немецкие инженеры решили таки эту задачу. Декларируют свои приборы, как работающие на принципе нейронных сетей. Хотя есть подозрение, что это рекламный ход. Музыканты, в большинстве своем, с математикой мало знакомые, нейронные сети для них как заклинание sm.gif.
Тем не менее, на сегодняшний момент это самый эффективный в своем классе прибор.

Попробую, как советуют уважаемые форумчане, корреляцию. И в этом разрезе вопроса, не подскажет ли кто алгоритмов для встроенных систем, поскольку вы люди хожалые по энтим тропам, а мы как говорится не местные...
Oldring
Цитата(voicek @ Dec 15 2010, 13:07) *
Для справки. Немецкие инженеры решили таки эту задачу. Декларируют свои приборы, как работающие на принципе нейронных сетей.


Кто вам мешает так же рассказывать?

Сколько нот одновременно может звучать?
alex_os
Цитата(voicek @ Dec 15 2010, 13:07) *
Для справки. Немецкие инженеры решили таки эту задачу. Декларируют свои приборы, как работающие на принципе нейронных сетей..

Лет 50 назад думали что вот-вот кто-нибудь сделает искусственный разум на перцептронах, но что-то никак sm.gif.
По теме, т.к. время анализа требуется маленькое наверное стоит попытаться работать на верхних гармониках. Типа пропускаем через
ФВЧ и далее автокоррелятор, но если у музыканта больше одного пальца работать скорее всего не будет...

voicek
Цитата(SPACUM @ Dec 15 2010, 12:17) *
А октавы еще различать нужно?

Применительно допустим к бас-гитаре и обычной гитаре, это диапазон частот от 41.203 Гц (Ми контроктавы) до 1318.5 Гц (Ми третьей октавы).

Цитата(SPACUM @ Dec 15 2010, 12:17) *
2. Если хотя бы 2 периода поместить в 10мс это частота будет 200Гц, а для надежности надо бы побольше, частоты очень мало отличаются. Думаю 12 периодов как минимум для надежного корреляционного разделения частот. Это частоты 1200Гц и более.

10мс на все про все. Сигнал принять, обработать, +попутные сервисы и выдать упр. сигнал.
Об эти ворота уже немало рогов поломано. Если верхние частоты еще нормально детектируются, то на низких уже задержка ощутимая получается. Так что басисты до недавнего времени скромно в сторонке курили. Может и не врут немцы-то? Может и впрямь на сетях реализовали?

Цитата(Oldring @ Dec 15 2010, 13:12) *
Сколько нот одновременно может звучать?

Пока с одной попробуем. Ну а на текущий момент играют аккордами, т.е. шесть нот (для гитары применительно). Хотя для этих целей датчики специальные ставятся, каждая струна отдельно снимается.
DRUID3
Цитата(Fast @ Dec 15 2010, 10:39) *
с помощью нейронной сети, перцептрон с одним слоем

...а нельзя построить распознающую структуру без таких вот умных слов? Вопрос риторический конечно.

Цитата(voicek @ Dec 15 2010, 13:00) *
Может и не врут немцы-то? Может и впрямь на сетях реализовали?

А как, простите, это Ваше предположение связано с требованиями?
Цитата(voicek @ Dec 15 2010, 13:00) *
Применительно допустим к бас-гитаре и обычной гитаре, это диапазон частот от 41.203 Гц (Ми контроктавы) до 1318.5 Гц (Ми третьей октавы).
...
10мс на все про все. Сигнал принять, обработать, +попутные сервисы и выдать упр. сигнал.
Об эти ворота уже немало рогов поломано. Если верхние частоты еще нормально детектируются, то на низких уже задержка ощутимая получается. Так что басисты до недавнего времени скромно в сторонке курили.

Внутри нейросейтей вдруг откуда ни возьмись возникнет новая параллельная математика? Или ортогональная? Или где-то под углом? biggrin.gif
fontp
QUOTE (voicek @ Dec 15 2010, 14:00) *
Применительно допустим к бас-гитаре и обычной гитаре, это диапазон частот от 41.203 Гц (Ми контроктавы) до 1318.5 Гц (Ми третьей октавы).


10мс на все про все. Сигнал принять, обработать, +попутные сервисы и выдать упр. сигнал.
Об эти ворота уже немало рогов поломано. Если верхние частоты еще нормально детектируются, то на низких уже задержка ощутимая получается. Так что басисты до недавнего времени скромно в сторонке курили. Может и не врут немцы-то? Может и впрямь на сетях реализовали?


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


.Октава - это в 2 раза. расстройка между тонами - корень 12-й степени из 2 = 1.0594630943592952645618252949461, т.е 5%
Понятно что 40 гц с точностью пять процентов (+- гц) за 10 мс измерить невозможно. В общем случае есть принцип неопределённости который запрещает это,
независимо от алгоритма. Это сразу рога обламать.

Но на помощь приходит тот факт, что ноты звучат не на произвольных частотах (ми контрактавы не на любой частоте одинаково полезны), а только на (41.203)**(n/12). Можно пытаться соорудить банк фильтров на все ноты музыкального строя. И хотя Ми контроктавы от Фа контрактавы не отличить за 10 мс, но их высшие гармоники - возможно. Так что возможно немцы и не врут. По мощности определить в какой октаве, а по высшим гармоникам - какая нота строя. Решающая логика может быть довольно простая, нейтронной сетью называют её чтобы поважничать))

ЗЫ. Если немцы утверждают, что могут различать ноты на расстроеном инструменте, то можно смело плюнуть им в морду
voicek
Если произвести информационную разведку у тех же немецких друзей, то видно следующее:

1.Прибор отрабатывает по фрону сигнала (отсюда малая латентность системы).
2.Распознавание производиться на основе встроенной базы данных образов, содержащей множество возможных вариантов звукоизвлечения каждой ноты. А не проще было бы сделать динамическую БД? Т.е. попросить музыканта проиграть все ноты с разным звукоизвлечением и занести в БД. Тут можно и память с пресетами организовать, поменял инструмент, прогнал по нотам, "обучил" прибор, запомнил в пресет.
3.Прибор обучается в процессе игры, улучшает распознавание, как они выражаются "приспосабливается к манере игры музыканта". Возможно ли такое проделать с системой на основе корреляции? И позволит-ли время? Хотя если у нас динамическая БД, зачем нам приспосабливаться? Мы и так максимально приближены к оригиналу...
DRUID3
Цитата(fontp @ Dec 15 2010, 13:36) *
И хотя Ми контроктавы от Фа контрактавы не отличить за 10 мс, но их высшие гармоники - возможно. Так что возможно немцы и не врут

biggrin.gif ??? епс... А н.с. то тут причем? biggrin.gif Или это Вы в том смысле что "немцы и сами не догадываются как..." ?
fontp
QUOTE (DRUID3 @ Dec 15 2010, 14:41) *
biggrin.gif ??? епс... А н.с. то тут причем? biggrin.gif Или это Вы в том смысле что "немцы и сами не догадываются как..." ?


Вы что-то хотели сказать?

У любого музыкального инструмента существуют высшие гармоники основного тона - шестые-десятые.... У рояля - 20-е
Что такое нс?


ЗЫ. Темпери́рованный строй — строй, при котором каждая октава делится на набор одинаковых ступеней. Чаще всего деление происходит на двенадцать ступеней, отстоящих друг от друга на расстоянии хроматического полутона (). Такой строй господствует в западной музыке с XIX века.
Если немцы утверждают что могут различать также ноты пифагорейского строя - то это враньё))
DRUID3
Цитата(voicek @ Dec 15 2010, 13:40) *
Если произвести информационную разведку у тех же немецких друзей, то видно следующее:

1.Прибор отрабатывает по фрону сигнала (отсюда малая латентность системы).

аха... вот оно значит как... wink.gif ...надо взять на заметку... слоган для хомячков...

Цитата(voicek @ Dec 15 2010, 13:40) *
3.Прибор обучается в процессе игры, улучшает распознавание, как они выражаются "приспосабливается к манере игры музыканта". Возможно ли такое проделать с системой на основе корреляции?

Возможно... Любая система с обратной связью "самообучается". Вопрос в "пространстве" возможных состояний такой системы и целевой функции(правилу по которому она обучается)... Кстати - думаю очевидно, что любая задача обучения сводится к адаптивной фильтрации(вот ее основной кернел!) а не каким-то там нейросетям... Надо статью на здешний WiKi забабахать... А то достали эти нейронщики... wink.gif

Цитата(voicek @ Dec 15 2010, 13:40) *
И позволит-ли время?

Время позволит (если максимальной мощностью процессора пренебречь). Вопрос в том, позволит ли математика...

Цитата(voicek @ Dec 15 2010, 13:40) *
Хотя если у нас динамическая БД, зачем нам приспосабливаться? Мы и так максимально приближены к оригиналу...

К оригиналу чего? Нота - все-таки не идеальная синусоида из школьного учебника... А та или иная статистическая функция. Нужно отделить то, что случайно и то, что детерминировано и "вуаля" - мы научимся ее распознавать на той или иной выборке...

Цитата(fontp @ Dec 15 2010, 13:44) *
Вы что-то хотели сказать?

Я хотел спросить - ну а прием нут Н.Н.? Просто Вы так построили свой ответ, что он между строк зучит а-ля "ах да, здесь помогли нейронные сети"...
fontp
QUOTE (DRUID3 @ Dec 15 2010, 14:55) *
Я хотел спросить - ну а прием нут Н.Н.? Просто Вы так построили свой ответ, что он между строк зучит а-ля "ах да, здесь помогли нейронные сети"...


Я же сразу сказал, что н.с. -это больше для важности cool.gif
По большому счету и в обнаружителе dtmf - крутая н.с.

Есть 4 5 октав по 12 нот, всего 48 60 фильтров известных частот. Вот их выходы друг друга как-то должны заблокировать, чтобы выдать ноту+октаву.
Наличие высших гармоник позволяет определять ноту по верхней октаве. Это в общем то тривиально за 10 мс по спектру Фурьеbiggrin.gif
60 фильтров второго порядка (типа LC) ARM потянет? Их энергетический выход - это и есть оценка спектра Фурье.
А вот определить октаву за 10 мс - это уже нужно крепко подумать, особенно в самой нижней октаве (25 мс период!)/ Да, возможно по фронту давления, типа сдувает прибор - то это взята нота нижней октавы. На уровне сигнала наличие фронта - это мощная постоянная составляющая, доминирующая в энергии сигнала.
А основной тон следующих октав уже практически укладывается периодом в 10 мс и грубо может быть измерен полосовым фильтром шириною в соответствующую октаву. Получается практически dtmf на гармониках

А может немцы хотели сказать, что у них н.с. адаптирующаяся к музыкальному строю или к фальшивому ненастроеному инструменту?
Его обучают, сыграв ему все ноты, он запоминает спектральные эталоны и потом может по-немецки разпознать и назвать номер ноты :
драйн-цвайн-айн-цвайн-цвай-цвайн.... biggrin.gif

Только если он не знает строя - то он сможет распознавать только звуки того инструмента по которому обучен.
А темперированый наш строй исключительно прост: ля-ля-фа-фа известных частот и одна и та же нота в разных октавах по частоте соотносятся как 2**n, остальные разнесены гармонически
voicek
Цитата(fontp @ Dec 15 2010, 14:44) *
Что такое нс?

Нейронные сети.

Цитата(fontp @ Dec 15 2010, 14:44) *
Если немцы утверждают что могут различать также ноты пифагорейского строя - то это враньё))

Речь идет о равномерной темперизации.

Касаемо немцев. Прибор очень устойчиво распознает ноты в указанном диапазоне частот. Это факт. Более того, они продают лицензии весьма крупным игрокам на этом огороде. Смущает тот факт, что крупные игроки, имея много денюжек, за столько лет не сподобились разработать изделие аналогичное по эффективности. Поэтому и витает в воздухе вопрос - может и в правду там какой-то разум космический смоделировали? sm.gif
DRUID3
.кстати, вопрос очкастым аспирантам и их руководителям - а есть работы в которых те или иные нейросетевые модели сравниваются по эффективности с адаптивным фильтром где четко разделены поля входных/выходных значений, коэффициентов и целевые функции(тоже вобщем-то поля)? И где показано, что все нейросети к таким моделям сводятся теряя избыток который и так не может быть использован в современных ЭВМ - типа устойчивости к потере нейрона. При этом ИИ на АФ обладает очевидным МЕГАпреимуществом - из модели АФ можно(в том смысле, что очевидно как) вычленять целевые функции и значения полей коэффициентов дающих оптимальные выходные результаты. При этом все прозрачно - "познаваемо", "расчленяемо", "визуализируемо" и сводится к обычной классической "радиотехнической" математике - фильтрации, понятию "передаточной функции" и т.д. ... В то же время в нейросетях как-раз вычленение невозможно и мешает этому то, что обученная НС есть не что иное как отображение АФ на конкретную структуру НС... + АФ порождают еще множество эффективных ИИ структур не находящих аналогов в нейросетях(надеюсь я был понят wink.gif )
Fast
а в чем, собственно, беспокойство
н.с. - это подвид нелинейного АФ определенной структуры
DRUID3
Цитата(Fast @ Dec 15 2010, 14:38) *
а в чем, собственно, беспокойство
н.с. - это подвид нелинейного АФ определенной структуры

Беспокойства нет. Нужны работы на которые можно сослаться... Тот же Хайкин прорабатывал обе темы, но что-то так и не объединил их(ну по крайней мере в своих толстенных монографиях)... Да и нужно помнить, что это не просто подвид, а с сильной избыточностью при одном способе построения, слепыми пятнами при другом и т.д. ... Опять же - где работы?

Цитата(voicek @ Dec 15 2010, 14:18) *
Поэтому и витает в воздухе вопрос - может и в правду там какой-то разум космический смоделировали? sm.gif

Разум-не разум - вся математика сводится к теории множеств и действий над ними (по крайней мере сейчас biggrin.gif )... А нейросети это прикладная наука(апендикс бионики). По-типу инженерного строительства которое ну никак не может опровергнуть сопромат.

Хотя...

Хотя здесь, конечно, самое время вспомнить Геделя и Вигенштейна rolleyes.gif ... И можно начать спорить... Если собеседники хорошие - то до утра... пятницы следующей недели... Но это опять нужно много читать самому и "ответная компетентность" собеседника, а меня задолбало tongue.gif ... все-равно за это никто не заплатит tongue.gif tongue.gif tongue.gif ... Скажем так нечто мистическое во мне подсказывает, что немцы просто пудрят мозги... Мало того - возможно они сами решили задачу просто огромной выборкой обучения для НС(+повезло с выбраной НС-структурой) но не смогли ее и решение формализировать, при этом задача конечно-же решается так как предложил fontp (а иначе действительно никак) но мы об этом уже не узнаем wink.gif ибо все передаточные функции связывающие мир звуков с миром идицирующих устройств расположены в неизвестном нам пространстве(не Эвклидовом, точно wink.gif ) некоей нейросети...
phantom
Цитата(voicek @ Dec 15 2010, 13:07) *
..... Музыканты, в большинстве своем, с математикой мало знакомые, нейронные сети для них как заклинание sm.gif.
Тем не менее, на сегодняшний момент это самый эффективный в своем классе прибор.////


Я поверхностно касался музыкального программирования... Поэтому могу сказать, что вы очень недооцениваете способности западных (в частности германских)разработчиков. Там софт пишут не программирующие музыканты, а музыцирующие математики и аудиоинженеры весьма высокого уровня. (ну из известных мне "наших" личностей -это например г.Алексей Лукин - преподающий обработку сигналов в МГУ, и одновременно работающий на американскую музыкальную компанию "Izotope".) Можно сказать, в большинстве своем это фанаты. Поэтому не думайте, что вы сможете так просто решить задачу на их уровне. Если они сказали, что это нейросети - значит весьма вероятно так оно и есть. Из своего опыта, могу сказать, что вряд ли один АРМ в реальном времени это потянет... надо юзать DSP. Мы когда-то игрались сетями для распознавания образов - я промучался месяц и добился коэффициента подобия 0.68, перебрав тучу вариантов представления данных, а с коеэффициентом корреляции (который програмится за десять минут) получалось сразу 0.73. Я бросил эти нейросети, но у меня осталось еще несколько мыслей по этому поводу, и их реализовал мой коллега - которому удалось достичь на нейросетях коеффициента 0.76 еще через неделю. Поэтому нейросети и адаптивные фильтры конечно лучше, но надо долго страдать и развить в себе интуицию их выбора, обучения и (самое главное!) правильного представления данных...
fontp
QUOTE (phantom @ Dec 16 2010, 21:27) *
Я поверхностно касался музыкального программирования... Поэтому могу сказать, что вы очень недооцениваете способности западных (в частности германских)разработчиков. Там софт пишут не программирующие музыканты, а музыцирующие математики и аудиоинженеры весьма высокого уровня. (ну из известных мне "наших" личностей -это например г.Алексей Лукин - преподающий обработку сигналов в МГУ, и одновременно работающий на американскую музыкальную компанию "Izotope".) Можно сказать, в большинстве своем это фанаты. Поэтому не думайте, что вы сможете так просто решить задачу на их уровне. Если они сказали, что это нейросети - значит весьма вероятно так оно и есть.


Немцы и кино прямо biggrin.gif Мы здесь все тоже не из балетных профтехучилищ


Если Вы не можете хоть как то плохонько решить задачу сами, то никакие нейросети Вам уже не помогут. Нейросети - это всего лишь адаптация большой логической схемы под изменчивость обстоятельств. Но Вы хотя бы должны понимать с самого начала сами существо задачи, сами выбрать признаки и сами понимать к чему стремиться и какие тенденции. Законы физики одинаковы для всех, да хоть и для немцев)) Так что просто нейронная сеть, подключеная к спектроанализатору работать не будет.

Для начала нужно понимать что вся музыка состоит из 12-и нот на октаву, всего 60 различных звуков, выстроеных жестко (от известной частоты) по частоте в геометрический ряд. Кроме того можно в качестве дополнительных признаков использовать также не кратные 2**n гармоники основных частот нижней октавы внутри пяти октав.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
С
С#
D
D#
E
F
F#
G
G#
A
A#
H

60 основных признаков минимум и 32*12=384 всего по максимуму.

Дальше нужно пробовать группировки откликов с соответствующих фильтров и сравнивать с порогами. Всё что может нейронная сеть - это адаптивно подобрать эти группировки и пороги сравнений для разных инструментов на базе процесса, именуемого обучением
thermit
Цитата
fontp: да хоть и для немцев


Для немцев - в первую очередь...

Если серьезно - задача "инструментонезависимого распознавания нот" по сложности и по сути одного уровня с задачей дикторонезависимого распознавания речи. Ну и методы решения - соответствующие (скрытые марковские модели ).


phantom
"Для начала нужно понимать что вся музыка состоит из 12-и нот на октаву, всего 60 различных звуков, выстроеных жестко.. " Это на первый взгляд так все просто, на практике надо учитывать тучу нюансов. Для фортепиано, например одна нота формируется от одной до трех струн, струны между собой имеют акустическую связь и могут быть слегка расстроенными, и строй будет зависеть от температуры и влажности. Тембр звуков (а значит и динамический спектр во времени) тоже различный, и часто имеет частотную модуляцию (наприм. для металлофонов, челест, и тд.). Есть т.нз. мелодическое восприятие высоты тона, когда удвоение частоты от 500Гц до 10000Гц, т.е. в 20 раз воспринимается как увеличение в 4.8 раза. Для всяких скрипок, терменвоксов, тромбонов, начало звука зависит от музыканта - как быстро он их точно подстроит под необходимый, состояния его губ как части механизма звукоизвлечения и .т.д. Все зависит от задачи - если выделить звук из "каши" - то можно страдать долго...Бегло ознакомится можно в Кузнецов Л.А. "Акустика музыкальных инструментов".
fontp
QUOTE (phantom @ Dec 17 2010, 12:29) *
Это на первый взгляд так все просто, на практике надо учитывать тучу нюансов. Для фортепиано, например одна нота формируется от одной до трех струн, струны между собой имеют акустическую связь и могут быть слегка расстроенными, и строй будет зависеть от температуры и влажности. Тембр звуков (а значит и динамический спектр во времени) тоже различный, и часто имеет частотную модуляцию (наприм. для металлофонов, челест, и тд.). Есть т.нз. мелодическое восприятие высоты тона, когда удвоение частоты от 500Гц до 10000Гц, т.е. в 20 раз воспринимается как увеличение в 4.8 раза. Для всяких скрипок, терменвоксов, тромбонов, начало звука зависит от музыканта - как быстро он их точно подстроит под необходимый, состояния его губ как части механизма звукоизвлечения и .т.д. Все зависит от задачи - если выделить звук из "каши" - то можно страдать долго...Бегло ознакомится можно в Кузнецов Л.А. "Акустика музыкальных инструментов".


"Слегка расстроен" и "иметь модуляцию" означает, что попадает в определённую частотную полосу. Не станете же Вы утверждать, что Фа может быть "слегка расстроено и иметь модуляцию" настолько что попадет скорее в частотную полосу Ля или Соль. Нет, звук останется в частотной полосе Фа. Как бы музыкант не старался извлечь звук, ноты различаются именно по мгновенному спектру. Поскольку ухо слышит в первом приближении именно мгновенные спектры и различает эти ноты однозначно. У меня, например, так ухо слышит))

А нюансов, конечно, полно. Как и у всякой реальной задачи
phantom
Цитата(fontp @ Dec 17 2010, 14:13) *
"Слегка расстроен" и "иметь модуляцию" означает, что попадает в определённую частотную полосу. Не станете же Вы утверждать, что Фа может быть "слегка расстроено и иметь модуляцию" настолько что попадет скорее в частотную полосу Ля или Соль. Нет, звук останется в частотной полосе Фа. Как бы музыкант не старался извлечь звук, ноты различаются именно по мгновенному спектру. Поскольку ухо слышит в первом приближении именно мгновенные спектры и различает эти ноты однозначно. У меня, например, так ухо слышит))

А нюансов, конечно, полно. Как и у всякой реальной задачи

Не стану. Если инструменты изначально точно настроены, то конечно попадет туда куда надо. sm.gif есть правда инструменты (особенно электронные звуки) которые очень сильно плывут по частоте со временем (ну типа глиссандо). Такое может быть и в электрогитаре, когда тянут рычаг подтяжки струн и частоты синхронно плывут. Там весь фокус в том, что надо анализируя по фронту, пропустить переходной процесс и выделить основной тон, а следующий плывущий "хвост" опустить. А вообще я так понимаю, что этот прибор для того, чтобы аудио с гитары в midi переделывать?
voicek
Цитата(phantom @ Dec 16 2010, 21:27) *
Я поверхностно касался музыкального программирования... Поэтому могу сказать, что вы очень недооцениваете способности западных (в частности германских)разработчиков. Там софт пишут не программирующие музыканты, а музыцирующие математики и аудиоинженеры весьма высокого уровня.

Прям как при Петре 1, куда нам дуракам до немцев да англичан sm.gif. Возможно я не совсем понятно выразился. Я предположил, (предчувствуя, что злые дядьки fontp и DRUID3, начнут брыкаться и храпеть заслышав о "НС") что термин "нейронные сети" использован больше как маркетинговый ход, дабы усладить слух музыканта (обычного, не программирующего). А музыцирующие математики и аудиоинженеры весьма высокого уровня могут спать спокойно, главное результат, а прибор у немцев получился лучший в своем классе, как говорится "по плодам судите...". А мы всего лишь, пытались "дедуктивным методом" отсеять "плевелы от зерен" и предположить методы осуществления данной задачи, за что и Вам спасибо.

Цитата(phantom @ Dec 17 2010, 17:05) *
Не стану. Если инструменты изначально точно настроены, то конечно попадет туда куда надо. sm.gif есть правда инструменты (особенно электронные звуки) которые очень сильно плывут по частоте со временем (ну типа глиссандо). Такое может быть и в электрогитаре, когда тянут рычаг подтяжки струн и частоты синхронно плывут. Там весь фокус в том, что надо анализируя по фронту, пропустить переходной процесс и выделить основной тон, а следующий плывущий "хвост" опустить. А вообще я так понимаю, что этот прибор для того, чтобы аудио с гитары в midi переделывать?

Уточним задачу. Необходимо преобразовать аудио сигнал, поступающий с датчика электрогитары или бас-гитары, в сигнал midi-протокола. Т.е. в простейшем случае нужно получить номер ноты, а хорошо бы еще velocity (силу нажатия, уровень сигнала т.е.) и величину pitch shift (степень расстройки от основного тона) в центах.
При игре на гитаре всегда возникают нюансы звукоизвлечения, исполнитель может пережать струну и тон уйдет вверх, или прижать слабо, тогда струна будет дребезжать и даст кучу гармоник. От рычагов подтяжки и т.п. пока абстрагируемся. Поэтому сигнал на входе всегда будет отличаться от образца, в той или иной степени... А детектирование по фронту нужно для низкозвучащих струн, т.к. на верхних частоту можно спокойно высчитать по периоду без всяких НС и корреляций, что и делают успешно американские и прочие европейские друзья.
alex_os
Цитата(voicek @ Dec 17 2010, 19:09) *
...
Необходимо преобразовать аудио сигнал, поступающий с датчика электрогитары или бас-гитары, в сигнал midi-протокола.
...


Я правильно понимаю что на каждую струну стоит свой датчик?
blackfin
Цитата(voicek @ Dec 17 2010, 19:09) *
Уточним задачу. Необходимо преобразовать аудио сигнал, поступающий с датчика электрогитары или бас-гитары, в сигнал midi-протокола.

Тогда зачем Вам real-time? Или в Германии есть гитаристы способные выдать 100 различных нот в секунду?.. biggrin.gif
voicek
Цитата(alex_os @ Dec 17 2010, 19:49) *
Я правильно понимаю что на каждую струну стоит свой датчик?

Ограничимся пока условием, что звучит только одна нота, и нам нужно ее распознать.

Цитата(blackfin @ Dec 17 2010, 20:24) *
Тогда зачем Вам real-time? Или в Германии есть гитаристы способные выдать 100 различных нот в секунду?.. biggrin.gif

Задержка между звукоизвлечением и звучанием ноты должна быть минимальной (>10мс на слух уже заметно).
Т.е. время обработки не должно превышать 10мс.
phantom
Ну тогда все проще. Я то думал что надо любой инструмент анализировать в том числе и акустический. Можно наверное взять АЦП с частотой семплирования побольше (192-384кГц,) получить кучу отсчетов, сделать БПФ в формате 32 бита, и пробовать анализировать восстановленные НЧ составляющие. может быть по принципу периодомера.. Можно попробовать алгоритм на РС и оценить время задержки на обработку, и тогда станет ясно на чем его можно реализовать.
GetSmart
Цитата(voicek @ Dec 17 2010, 23:03) *
Задержка между звукоизвлечением и звучанием ноты должна быть минимальной (>10мс на слух уже заметно).

А для чего нужен такой преобразователь midi особенно в рилтайме?
phantom
Цитата(GetSmart @ Dec 18 2010, 12:41) *
А для чего нужен такой преобразователь midi особенно в рилтайме?

Наверное для того, чтобы тот, кто умеет играть только на гитаре, мог играть на синтезаторах на концертах. sm.gif В противном случае можно записать трек и перевести его в миди немного подождав.
qxov
Цитата(voicek @ Dec 15 2010, 03:46) *
2.Нейронные сети.


Я вопросом не владею, посему интересуюсь: чем нейронные сети отличаются от адаптивного фильтра?
phantom
Как я понял из чтения всяких книжек - адаптивные фильтры - часть нейросетей. Причем та часть, которая получается всегда (без магии и методов научного тыка). Но это вообще больше общефилософский вопрос к прикладным математикам.
Oldring
Цитата(qxov @ Dec 21 2010, 10:55) *
Я вопросом не владею, посему интересуюсь: чем нейронные сети отличаются от адаптивного фильтра?


Нейросети сильно нелинейны, имеют более запутанную структуру, более непредсказуемые алгоритмы обучения и более непредсказуемое поведение.
qxov
Цитата(Oldring @ Dec 21 2010, 14:01) *
Нейросети сильно нелинейны, имеют более запутанную структуру, более непредсказуемые алгоритмы обучения и более непредсказуемое поведение.

Сплошные плюсы biggrin.gif
phantom
Цитата(qxov @ Dec 22 2010, 13:06) *
Сплошные плюсы biggrin.gif

Но зато если повезет, то получится круче (а иногда много круче), чем обычными способами. Но с опытом и интуицией, вероятность благоприятного исхода сильно повышается...то есть уменьшается время успешной реализации прожекта sm.gif
Diusha
Цитата(voicek @ Dec 17 2010, 19:09) *
на верхних частоту можно спокойно высчитать по периоду без всяких НС и корреляций, что и делают успешно американские и прочие европейские друзья.

Решаю задачу, сходную по сути. Не подскажет ли кто оптимальный алгоритм, по которому "прочие друзья" "спокойного высчитывают по периоду"? Учитывая, что сигнал, в частности с муз инструмента, может иметь более двух экстремумов по времени за период, максимум в одном периоде может отличаться от максимума в другом периоде и т.п., задача не так уж тривиальна, как кажется на первый взгляд. Первое, что приходит в голову, - куча сравнений со взятыми от балды порогами (в % от размаха сигнала). Но, думаю, есть что-то получше
Alexey Lukin
Для определения высоты тона в реальном времени с малой задержкой хорошо работает следующий алгоритм "двойного окна". Раз у вас допустима задержка в 10 мс, то берём окно длиной 40 мс: на 10 мс вперёд по времени и на 30 мс назад. Вычисляем автокорреляцию и находим по ней высоту тона (детали — далее). Эта оценка обладает хорошей надёжностью (в т.ч. к октавным прыжкам), но отстаёт по времени от сигнала (т.к. окно сильнее простирается назад во времени). Далее берём более короткое окно, центрированное по времени, длиной 20 мс. Вычисляем автокорреляцию и ищем пик в небольшой окрестности лага, найденного с большим окном. Это и будет ответ. Кстати, во многих задачах небольшое отставание оценок высоты тона от самого сигнала не критично, если высота тона меняется медленно.

Как вычислить высоту тона по автокорреляции? В процессе вычисления автокорреляции из спектра сигнала можно извлечь квадратный корень, чтобы слегка "отбелить" спектр и обострить пики АКФ. На полученной псевдо-АКФ ищется максимум. Для повышения надёжности алгоритма можно искать максимум АКФ, сглаженной небольшим НЧ-фильтром. При поиске максимума учитываются значения АКФ с половинным лагом, чтобы избежать октавных ошибок. Далее по несглаженной АКФ производится параболическая интерполяция пика для уточнения положения максимума. Перед интерполяцией значения АКФ можно возвести в степень < 1 для увеличения точности интерполяции.
phantom
Цитата(Alexey Lukin @ Jan 4 2011, 01:44) *
Для определения высоты тона в реальном времени с малой задержкой хорошо работает следующий алгоритм "двойного окна". Раз у вас допустима задержка в 10 мс, то берём окно длиной 40 мс: на 10 мс вперёд по времени и на 30 мс назад. Вычисляем автокорреляцию и находим по ней высоту тона (детали — далее). Эта оценка обладает хорошей надёжностью (в т.ч. к октавным прыжкам), но отстаёт по времени от сигнала (т.к. окно сильнее простирается назад во времени). Далее берём более короткое окно, центрированное по времени, длиной 20 мс. Вычисляем автокорреляцию и ищем пик в небольшой окрестности лага, найденного с большим окном. Это и будет ответ. Кстати, во многих задачах небольшое отставание оценок высоты тона от самого сигнала не критично, если высота тона меняется медленно.

Как вычислить высоту тона по автокорреляции? В процессе вычисления автокорреляции из спектра сигнала можно извлечь квадратный корень, чтобы слегка "отбелить" спектр и обострить пики АКФ. На полученной псевдо-АКФ ищется максимум. Для повышения надёжности алгоритма можно искать максимум АКФ, сглаженной небольшим НЧ-фильтром. При поиске максимума учитываются значения АКФ с половинным лагом, чтобы избежать октавных ошибок. Далее по несглаженной АКФ производится параболическая интерполяция пика для уточнения положения максимума. Перед интерполяцией значения АКФ можно возвести в степень < 1 для увеличения точности интерполяции.

Ну вот, вроде тяжелая музыкальная артиллерия подтянулась sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.