|
Распознавание образа сигнала real-time |
|
|
|
Dec 17 2010, 13:09
|
Группа: Участник
Сообщений: 14
Регистрация: 10-10-10
Из: Королёв Моск.обл.
Пользователь №: 60 052

|
Цитата(phantom @ Dec 16 2010, 21:27)  Я поверхностно касался музыкального программирования... Поэтому могу сказать, что вы очень недооцениваете способности западных (в частности германских)разработчиков. Там софт пишут не программирующие музыканты, а музыцирующие математики и аудиоинженеры весьма высокого уровня. Прям как при Петре 1, куда нам дуракам до немцев да англичан  . Возможно я не совсем понятно выразился. Я предположил, (предчувствуя, что злые дядьки fontp и DRUID3, начнут брыкаться и храпеть заслышав о "НС") что термин "нейронные сети" использован больше как маркетинговый ход, дабы усладить слух музыканта (обычного, не программирующего). А музыцирующие математики и аудиоинженеры весьма высокого уровня могут спать спокойно, главное результат, а прибор у немцев получился лучший в своем классе, как говорится "по плодам судите...". А мы всего лишь, пытались "дедуктивным методом" отсеять "плевелы от зерен" и предположить методы осуществления данной задачи, за что и Вам спасибо. Цитата(phantom @ Dec 17 2010, 17:05)  Не стану. Если инструменты изначально точно настроены, то конечно попадет туда куда надо.  есть правда инструменты (особенно электронные звуки) которые очень сильно плывут по частоте со временем (ну типа глиссандо). Такое может быть и в электрогитаре, когда тянут рычаг подтяжки струн и частоты синхронно плывут. Там весь фокус в том, что надо анализируя по фронту, пропустить переходной процесс и выделить основной тон, а следующий плывущий "хвост" опустить. А вообще я так понимаю, что этот прибор для того, чтобы аудио с гитары в midi переделывать? Уточним задачу. Необходимо преобразовать аудио сигнал, поступающий с датчика электрогитары или бас-гитары, в сигнал midi-протокола. Т.е. в простейшем случае нужно получить номер ноты, а хорошо бы еще velocity (силу нажатия, уровень сигнала т.е.) и величину pitch shift (степень расстройки от основного тона) в центах. При игре на гитаре всегда возникают нюансы звукоизвлечения, исполнитель может пережать струну и тон уйдет вверх, или прижать слабо, тогда струна будет дребезжать и даст кучу гармоник. От рычагов подтяжки и т.п. пока абстрагируемся. Поэтому сигнал на входе всегда будет отличаться от образца, в той или иной степени... А детектирование по фронту нужно для низкозвучащих струн, т.к. на верхних частоту можно спокойно высчитать по периоду без всяких НС и корреляций, что и делают успешно американские и прочие европейские друзья.
Сообщение отредактировал voicek - Dec 17 2010, 13:12
|
|
|
|
|
Dec 17 2010, 13:49
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(voicek @ Dec 17 2010, 19:09)  ... Необходимо преобразовать аудио сигнал, поступающий с датчика электрогитары или бас-гитары, в сигнал midi-протокола. ... Я правильно понимаю что на каждую струну стоит свой датчик?
--------------------
ну не художники мы...
|
|
|
|
|
Dec 17 2010, 15:03
|
Группа: Участник
Сообщений: 14
Регистрация: 10-10-10
Из: Королёв Моск.обл.
Пользователь №: 60 052

|
Цитата(alex_os @ Dec 17 2010, 19:49)  Я правильно понимаю что на каждую струну стоит свой датчик? Ограничимся пока условием, что звучит только одна нота, и нам нужно ее распознать. Цитата(blackfin @ Dec 17 2010, 20:24)  Тогда зачем Вам real-time? Или в Германии есть гитаристы способные выдать 100 различных нот в секунду?..  Задержка между звукоизвлечением и звучанием ноты должна быть минимальной (>10мс на слух уже заметно). Т.е. время обработки не должно превышать 10мс.
|
|
|
|
|
Dec 18 2010, 08:48
|

Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986

|
Цитата(GetSmart @ Dec 18 2010, 12:41)  А для чего нужен такой преобразователь midi особенно в рилтайме? Наверное для того, чтобы тот, кто умеет играть только на гитаре, мог играть на синтезаторах на концертах.  В противном случае можно записать трек и перевести его в миди немного подождав.
--------------------
О сколько нам открытий чудных ...
|
|
|
|
|
Dec 21 2010, 04:55
|

Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406

|
Цитата(voicek @ Dec 15 2010, 03:46)  2.Нейронные сети. Я вопросом не владею, посему интересуюсь: чем нейронные сети отличаются от адаптивного фильтра?
|
|
|
|
|
Jan 1 2011, 03:43
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(voicek @ Dec 17 2010, 19:09)  на верхних частоту можно спокойно высчитать по периоду без всяких НС и корреляций, что и делают успешно американские и прочие европейские друзья. Решаю задачу, сходную по сути. Не подскажет ли кто оптимальный алгоритм, по которому "прочие друзья" "спокойного высчитывают по периоду"? Учитывая, что сигнал, в частности с муз инструмента, может иметь более двух экстремумов по времени за период, максимум в одном периоде может отличаться от максимума в другом периоде и т.п., задача не так уж тривиальна, как кажется на первый взгляд. Первое, что приходит в голову, - куча сравнений со взятыми от балды порогами (в % от размаха сигнала). Но, думаю, есть что-то получше
Сообщение отредактировал Diusha - Jan 1 2011, 03:45
|
|
|
|
|
Jan 3 2011, 19:44
|

Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 3-01-11
Пользователь №: 62 000

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

Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986

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