Gtlab Forum

Тематический => Негитарная электроника => Тема начата: tvar от Января 22, 2008, 03:54:44 pm

Название: Гитарный МИДИ контроллер
Отправлено: tvar от Января 22, 2008, 03:54:44 pm
Решил значить попробывать сделать такой девайс. Просто для интереса. Принцип действия:
1 оцифровка гитраного сигнала,
2 решиние быстрого преобразование Фурье,
3 формирование МИДИ сообщений об взятых нотах их громкости.
Для чего это нужно? Многим музыкантам-любителям творящим музыку на домашнем компе пригодилось бы, не нужно с гитары преучиваться на клавиши.
По приблизительным расчетам. Ресурсов AVR контроллера Atmega 16  должно хватить. Но опыта в сотворении таких девайсов у меня нет. Прошу поддержать советами.
PS: сильно не пинать.
Название: Re: Гитарный МИДИ контроллер
Отправлено: AlKoR от Января 22, 2008, 04:21:20 pm
Не думаю, что такое под силу написать для меги16, - обработка огибающей сигнала, вычисление частоты, преобразование в ноты, да еще и передача по миди ... Даже комп толком не сможет преобразовать просто сигнал в ноты . В конце концов, есть миди датчики для гитары
Название: Re: Гитарный МИДИ контроллер
Отправлено: tvar от Января 22, 2008, 07:19:34 pm
МИДИ датчики то конечно в природе есть, ни кто не спорит. Но вопрос сколько они стоят. А вот если такое же замутить буквально на коленке. А опыт программирования PIC и AVR у меня довольно обширный. Единственное кто-нибудь помог бы разобраться с преобразованием Фурье и хватило вычислительных мощей у AVR.
Название: Re: Гитарный МИДИ контроллер
Отправлено: AlKoR от Января 22, 2008, 08:15:58 pm
Тогда - вперед и с песней ! У меня опыта программирования мало, около года - учебы в основном, пока набираю практический опыт.
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 22, 2008, 10:03:07 pm
tvar, я этим вопросом себе уже 2 года голову морочу. Фурье не покатит. Сейчас объясню вкратце почему.
1) БПФ (быстрое дискретное преобр. Фурье) дает только спектр с кратными частотами. В целом это не проблема, если ты оцифруешь сигнал с частотой допустим 44.1 кГц, то БПФ даст тебе надежный спектр до 11 кГц. Вроде как неплохо. Но МК не потянет такое преобразование - не всякий комп тянет, не говоря уж о МК.
Хорошо, есть вариант - уменьшить частоту преобразования. В конце концов, казалось бы, нам лишь ноту нужно выделить, а не частоту ее измерять с точностью до герца, и не спектр весь нужен, а только нота, не так ли? Но тут проблема в том, чтобы получить достаточную разрешающую способность. И тут повторюсь, что Фурье дает спектр с кратными частотами, а это означает, что минимальная частота преобразования должна быть порядка 1 Гц (а то и меньше!), чтобы отчетливо отличать, например, ноту ми от ми-диез на басовой струне. Если вспомнить, что диапазон нот гитары от 80 Гц до 1280 Гц (от ми на открытой шестой струне, до 24 лада на первой), то частота дискретизации ограничена снизу 2*1280 = 2560 Гц. Конечно, не 44.1 кГц, но все равно - это весьма много.
Но это не главный недостаток Фурье... а главный ниже.

2) Фурье-анализ дает "усредненный" спектр за какое-то время. Иными словами, тут действует "соотношение неопределенностей Гайзенберга" :-), а именно - чем меньше время, по которому берется БПФ, тем "размазаннее" будет спектр, и тем больше вероятность ошибки в определении ноты. А если увеличивать время - будет расти и задержка между игрой на инструменте и сигналом.
Приведу пример. Если хочется получить спектр с точностью до 2 Гц, то интегрирование в БПФ нужно производить по интервалу времени 1/(2 Гц) = 0.5 секунды! (это оценочно) Сами понимаете, такая задержка в сигнале никому не понравится.

Так что БПФ непригодно для таких целей, необходимы другие алгоритмы.

У меня есть идеи (корреляционный анализ в основном), но они тоже завязаны на интегрировании, так что дадут задержку. Но есть надежды иметь задержку порядка 15 мс, что уже лучше, но тоже не фонтан.

Ты не думай, я не к тому, чтобы идею и желание отбить, просто думай... не все так просто :-)
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 22, 2008, 10:08:22 pm
Сорри, в терминологии выше ошибся. Когда я считал "частоту дискретизации в 2560 Гц", я имел ввиду, конечно, общее число семплов. Но поскольку в расчете берется минимальная частота в 1Гц, то эти цифры совпадают :-)
Название: Re: Гитарный МИДИ контроллер
Отправлено: Alex_SG от Января 23, 2008, 04:40:24 am
БПФ на современном контроллере не проблема. даже старенькие филлипсы LPC21xx справляются. если взять ядро ARM7 или 9 то вообще без проблем.
но вот на счет алгоритма - вопрос спорный.
или иметь очень большую частоту сэмплирования, чтобы иметь достаточно данных для БПФ (нам же надо все 6 звучащих струн обрабатывать - не по одной струне дергаем), либо думать над алгоритмом...
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 23, 2008, 07:39:49 am
Цитировать
но вот на счет алгоритма - вопрос спорный.
или иметь очень большую частоту сэмплирования, чтобы иметь достаточно данных для БПФ (нам же надо все 6 звучащих струн обрабатывать - не по одной струне дергаем), либо думать над алгоритмом...

В том-то и дело, что большая частота семплирования не поможет. У нас фиксированные частоты спектра (ноты определенных октав), а потому и период времени, по которому нужно выполнять БПФ, фиксирован. Число семплов на этом периоде задаст лишь верхнюю граничную частоту спектра. Ну будет она 44.1 кГц.. да хоть все 192 кГц, от этого не легче.

А то, что современные МК потянут (ARM7) - я не сильно компетентен в этом вопросе на данный момент :-), поэтому это было ИМХО. ARM7 (эх... лежат у меня второй год уже, ждут своей участи 4 МК от Аналогов...) может и потянет.
Название: Re: Гитарный МИДИ контроллер
Отправлено: Alex_SG от Января 23, 2008, 07:56:49 am
если МК от Аналогов это ADUC, то по мнению наших програмеров это сильно неудачный проц.
мы пользуем Atmel sam7s
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 23, 2008, 08:09:10 am
Да, именно он :-)
Да мне они нахаляву достались, просто заказал Samples от "нефиг делать".
Все хочу сделать "что-нибудь серьезное", а, как хорошо известно, пока четкой задачи не поставишь, ничего и не сделаешь. Потому и валяются теперь без дела.
Мне все знакомые рекомендуют Atmel. У меня вопрос (сорри за офф-топ) - чем их шить?
Название: Re: Гитарный МИДИ контроллер
Отправлено: Alex_SG от Января 23, 2008, 09:24:41 am
есть куча програматоров. поищи например WIGLER. работает как из под IAR так и с другими прогами-програматорами.
Название: Re: Гитарный МИДИ контроллер
Отправлено: kholonkin от Января 23, 2008, 12:51:10 pm
Тут еще вроде есть и такой ньюансик, для получения более детального спектра необходимо увеличивать время снятия сигнала.
Т.е. что бы получить разрешение в 1 Гц, сигнал надо цифровать 1 сек. + обработка всего этого дела.

Что то мне кажется, что фигня получается.

ПС. Если не прав, поправьте.
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 23, 2008, 02:43:05 pm
kholonkin, все правильно, читай выше ;-)

Цитировать
2) Фурье-анализ дает "усредненный" спектр за какое-то время. Иными словами, тут действует "соотношение неопределенностей Гайзенберга" :-), а именно - чем меньше время, по которому берется БПФ, тем "размазаннее" будет спектр, и тем больше вероятность ошибки в определении ноты. А если увеличивать время - будет расти и задержка между игрой на инструменте и сигналом.
Приведу пример. Если хочется получить спектр с точностью до 2 Гц, то интегрирование в БПФ нужно производить по интервалу времени 1/(2 Гц) = 0.5 секунды! (это оценочно) Сами понимаете, такая задержка в сигнале никому не понравится.
Название: Re: Гитарный МИДИ контроллер
Отправлено: tvar от Января 23, 2008, 03:39:36 pm
Сегодня наточил нужную софтину. Пока весь проект будет существовать виртуально в Протеусе 7 версии, она у меня самая продвинутая. Писать буду на С. Заюзаю компилятор ICC. Сегодня два часа убил на то что бы обе проги понимали друг друга. В итоге добился того чего хотел: Протеус позволяет вести отладку по шагам, того что родит ICC.
Если все это кому-то интерсно могу объяснить подробнее.
На сегодня пока все.
Название: Re: Гитарный МИДИ контроллер
Отправлено: jager от Января 23, 2008, 10:00:51 pm
Я, окнечно, не большой дока в мидях и програмировании, но может мои мысли вам помогут, сам как-то парился над этим вопросом.
Первая такова: Зачем парится над FFT и прочими сложными ужасами, если нам всего-лишь надо мерять частоту с какой-то разрешающей способностью по времени и частоте? Самый простой метод - как в радиолокации, измерение скорости по Доплеру  - куча полосовых фильтров ) кто зазвенел, тот и нота ))
Вторая мысля: измерить численное значение частоты, а потом уже представить его как ноту можно так: Считаем количество пересечений нуля(или другого порогового значения) за единицу времени, которую надо выбрать такой, чтобы не было большой задержки, желательно уместиться в 1 мс. Пока писал , понял что таким образом можно померять только не ниже 500 Гц...
Короче говоря, вот... Может, мои блуждания по этому вопросу кого-нить натолкнут на правильный путь )
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 24, 2008, 02:28:09 pm
2 Jager.
Первая мысль имеет право на существование, но она тоже приведет к задержкам - чем выше добротность контура (а для того, чтобы различать ноты, нужна добротность фильтров порядка 50-100), тем дольше в ней растут колебания (линейно).
Вторая мысля - не выйдет. Если бы гитарный сигнал был хоть как-то похож на синус или подобное :-)... А так - количество пересечений нуля гораздо больше, чем один раз в полпериода.

Да, и еще мысля моя - какие бы ни были ухищрения, задержки все равно не избежать. Более того, минимальная величина задержки - период (может быть, полпериода) самого длинноволнового сигнала, т.е. 1/80 с для гитары.
На вопрос "почему" отвечу: понятие "нота", или, другими словами, "частота" не имеет никакого смысла в какой-то изолированной точке, либо малой ее окрестности. Иными словами, нота только тогда будет нотой, когда она прозвучит какое-то время (несколько периодов). Человеческое ухо именно так воспринимает сигнал. Не буду вдаваться в подробности, как и почему, приведу лишь пример: в момент извлечения ноты (атаки) вы слышите только щелчок, а ноту мозг определяет только спустя некоторое время. И дело тут не только в том, что "у атаки спектр насыщенный" (что тоже надо понимать с оговоркой), а в том, что мозг не может определить высоту ноты сразу. Более того, у людей с нетренированным слухом 100%-но возникают проблемы при определении нот в скоростном соло (особенно с теппингом), для них такое соло - просто "пиликание", "запил", в котором они не слышат нот.

Такова природа и физика, против нее не попрешь. Это я к тому, что в принципе нереально построить какое-либо устройство, которое будет определять ноту сразу. Задержка будет обязательно. Если вам это не нравится - ищите другие пути, например, миди-датчики.
Название: Re: Гитарный МИДИ контроллер
Отправлено: VAT от Января 26, 2008, 03:19:17 pm
Немного оффтоп. А кто нибудь юзал фирменный миди-контроллер? Тема навеяла идею о подарке такой штуки. Конечно реальные инструменты она не заменяет, но может помочь для экспресс подбора правильного инструмента. Если покупать - то надо максимум завтра.
Интересно как работают фирменные устройства в реальном времени.. задача и правда нетривиальная. Взять самую низкую струну - ~80 Гц = 12мс период. Но есть куча гармоник в первый момент.. Может если просчитать частоты гармоник, то можно вычислить породившую их исходную частоту? Например если в спектре есть частоты 1000,1100,1200,1300 Гц - то исходная частота понятно - 100Гц. Однако разобраться с гармониками можно за меньший период времени.
Какая вообще задержка допустима? Я вот прикинул если два музыканта находятся на расстоянии 1,5м то сыграться они могут с точностью 10мс.
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 26, 2008, 07:44:55 pm
10 мс - вполне допустимо.

А насчет двух музыкантов - все-таки не 10 мс, а чуть меньше 5 :-). Но это теоретический предел, реально расходимость выше. Если, правда, дирижера нет :-)

А насчет анализа по высшим гармоникам - есть рациональное зерно... Надо подумать в эту сторону.
Название: Re: Гитарный МИДИ контроллер
Отправлено: VAT от Января 27, 2008, 08:15:16 am
shn:
если 1й издает звук, то второй через 5мс его слышит и синхронно издает свой звук, звук 2го летит к 1му еще 5мс. В итоге 1й музыкант слышит что 2й отстает на 10мс, а второму кажется что все абсолютно синхронно.
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 27, 2008, 08:40:14 am
Цитировать
shn:
если 1й издает звук, то второй через 5мс его слышит и синхронно издает свой звук, звук 2го летит к 1му еще 5мс. В итоге 1й музыкант слышит что 2й отстает на 10мс, а второму кажется что все абсолютно синхронно.

Ну это только первому кажется, что 10 мс :-). На самом деле два музыканта играют с задержкой в 5 мс (и третий зритель, стоящий в x метрах от обоих, будет слышать, что один остает от другого на 5 мс, а не 10).

Ну да ладно, это офф-топ пошел.

А по теме - нужно изучать процессы, происходящие во время атаки струны. Кому-то может показаться, что "мол, чего там изучать-то", но на самом деле процессы весьма сложные, которые не укладываются в простую (т.е. линейную) теорию струны.
Сдам завтра последний экзамен, и займусь расчетами.

Главное - понять, что происходит со спектром в начальный момент (я имею ввиду не Фурье-спектр, а спектр разложения по собственным функциям струны). Для этого нужно хорошо "промоделировать" границы струны - места крепления на порожках. В нулевом приближении струна фиксирована жестко, и это приводит к известным результатам относительно спектра частот (основной тон и гармоники). Однако такое описание, во-первых, не может никак описать атаку струны, а во-вторых, неправильно описывает затухание струны - в случае линейной модели затухание всех гармоник происходит одинаково, что противоречит опыту: всем известно, что если дернуть басовую "ми", то через некоторое время будет звучать только основной тон с минимум гармоник, а не все гармоники в том же соотношении, что и в "начале" ноты.
Название: Re: Гитарный МИДИ контроллер
Отправлено: jager от Января 28, 2008, 09:35:04 am
С гармониками идея интересная, но.... многие ноты будут иметь одинаковые гармоники...
Вот если разделить датчик по струнам, и с каждой снимать отдельно, можно сузить диапазон поиска...
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 28, 2008, 04:38:57 pm
Jager - не, идея как раз в том, что две ближайшие гармоники отличаются на частоту основного тона.
Хотя все равно проблема не меняется - для этого нужно иметь разрешающую способностью с частотой основных тонов, а это значит, что все равно Фурье нужно делать по большому промежутку, а не по частотам 1 кГц (как в примере выше).
Название: Re: Гитарный МИДИ контроллер
Отправлено: AlKoR от Января 28, 2008, 06:27:10 pm
Мне тут в голову идея пришла - вместо того, чтобы разбирать сигнал по гармоникам, просто находить примерно одинаковые участки сигнала, и считать время между ними. Идея сырая, но, думаю, можно реализовать в случае тюнера, например. Хотя там, скорее всего, просто подсчет времени между двумя фронтами, с подавлением гармоник фильтром, и ограничителем - где-то видел такую схему, на АВР-ке и ОУ
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 29, 2008, 07:16:56 am
Цитировать
Мне тут в голову идея пришла - вместо того, чтобы разбирать сигнал по гармоникам, просто находить примерно одинаковые участки сигнала, и считать время между ними. Идея сырая, но, думаю, можно реализовать в случае тюнера, например. Хотя там, скорее всего, просто подсчет времени между двумя фронтами, с подавлением гармоник фильтром, и ограничителем - где-то видел такую схему, на АВР-ке и ОУ

Вот эту идею и разрабатываю в данный момент... ;-) Автокорреляционную функцию надо считать...
Название: Re: Гитарный МИДИ контроллер
Отправлено: VAT от Января 30, 2008, 05:29:16 pm
Я так думаю надо порыться по патентам тех фирм которые выпускают такие девайсы.
я было метнулся по магазинам, но не тут то было - в наличии ничего нет. А так по прайсам роланд да ямаха.. Что то китая не видать.
У меня такое ощущение что задача не то что сложна, а очень-очень сложна. И для начала хотелось бы послушать-пощупать фирменный девайс - как он в работе. Над каждым из них работал коллектив разрабртчиков - и думаю не в течении одного месяца, сложно представить стоимость разработки такого девайса.. сотни тысяч юсд  - думаю не меньше.
Датчики они тоже используют свои собственные - не стандарный выход гитары. разделение по струнам на шесть каналов - сто пудов обязательно - и так тяжко.
Название: Re: Гитарный МИДИ контроллер
Отправлено: jager от Января 30, 2008, 10:44:21 pm
Ещё один подводный камень: А как быть с динамикой-то? Надо ещё и амплитуду мерять...
А АКФ - это интересно... надо обмусолить...
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 31, 2008, 07:14:00 am
Ну динамика на уровне МИДИ (громкость ноты) - не такая проблема. Измерить огибающую (т.е. амплитуду), а по ней уже судить о динамике.
Название: Re: Гитарный МИДИ контроллер
Отправлено: jager от Января 31, 2008, 10:41:35 am
Цитировать
Ну динамика на уровне МИДИ (громкость ноты) - не такая проблема. Измерить огибающую (т.е. амплитуду), а по ней уже судить о динамике.
Ну, это понятно, что измерить легко. но эту информацию надо подавать вместе с информацией он высоте тона одновременно.
Название: Re: Гитарный МИДИ контроллер
Отправлено: shn от Января 31, 2008, 07:03:38 pm
Пока контроллер определяет высоту тона, успеет и амплитуду измерить :-)