Diyfactory Forum

Основные форумы => Гитарное оборудование => Тема начата: Diz от Января 12, 2010, 05:47:26 pm

Название: Подавление гармоник
Отправлено: Diz от Января 12, 2010, 05:47:26 pm
Уважаемые дисторшностроители и мастера нелинейной обработки !

Как бы ослабить гармоники в гитарном сигнале и сделать более
значимым основной тон ? Возможно, фильтрация + ограничение либо
наоборот, ограничение с фильтрацией в несколько каскадов,
логарифмический усилитель или что-то еще в таком духе.

Реализовал неплохой и весьма шустрый алгоритм для детектирования
питча и применил его в стробоскопическом тюнере.

Работает замечательно, не считая варианта 'открытые струны + бриджевый датчик', где амплитуда третьей гармоники не меньше, чем у основного тона.Прямо как у Дональда Тиллмана (http://www.till.com/articles/PickupResponseDemo/index.html)

Алгоритм с радостью ее детектирует и выдает B4 вместо E2. Если удастся уменьшить третью гармонику на 3-6 дБ, то все будет работать корректно.

Видео в действии (http://www.youtube.com/watch?v=jncl7mu0k2U)
Название: Подавление гармоник
Отправлено: Tuvalu от Января 12, 2010, 10:02:34 pm
Выделение основного тона - самая фундаментальная проблема для всех гитаросинтезаторных строителей. Идеального решения нет, сразу скажу.
Приближено к идеалу (и, дествительно, хорошо работает) - схема выделения основного тона в октавере Босс (то же самое - в гитарном синтезаторе Электро Гармоникс), часть схемы от входа до первого триггера (тот, что RS). Цена вопроса - 6 шт. ОУ + триггер. Рекомендую TL062(TL064) как малопотребляющие и отлично работающие в этой схеме. В сети есть эти схемы, только в самдельно-нарисованной схеме BOSS OC-2 - принципиальная ошибка, поэтому лучше скачать их фирменный сервис мануал - там всё правильно. Cкажу честно, могут быть ошибки на открытых 6 и 3(если она сильно тонкая) струнах, но не в ноте, а в октаве - из-за очень большого содержания 2-ой гармоники могут быть кратковременные чередования тон--октава выше.
Другие схемы хоть и проще (часто - намного проще), но работают непропорционально хуже, так что их не рекомендую. Хотя, может для тюнера и сойдёт, в таком случае посмотрите схему октавера KORG.

По поводу фильтрации. Можно, конечно, но фильтр должен быть следящим, т.к. для пассивного фильтра диапазон слишком широк, и высокие ноты будут подавляться и/или низкие не очень хорошо фильтроваться от гармоник. Следящий фильтр - довольно сложная штука. Я бы сказал, неоправданно сложная, как для тюнера.
Ну, а ограничение создаст больше гармоник, а значит, - и больше проблем. Т.е. в октавере, например, сигнал, конечно же, ограничен (триггер), но это уже "после"...
 
Цитировать
Реализовал неплохой и весьма шустрый алгоритм для детектирования
питча
А можно подробней, очень интересно!! Может, схемку, если только не на МП...

ПС. Вспомнил, где схема:
http://www.godiksennet.com/images/sch/Boss_OC2_Oktave.jpg (http://www.godiksennet.com/images/sch/Boss_OC2_Oktave.jpg)
Название: Подавление гармоник
Отправлено: vilager от Января 12, 2010, 11:13:25 pm
можно подойти к проблеме выделения базового тона и с другой стороны - со стороны чисто железа. но это сильно усложняет всё. если убрать "перекатывание" гармоник вследствие колебания струны в двух плоскостях, то работать с сигналом будет уже легче. вобщем, надо снимать полный сигнал, а не только его одноосную составляющую. или дополнительный съём на 90 градусов, или струна внутри кольцевого съёмника, или ещё как... есть над чем подумать ;)
да, и на каждую струну своя линейка съёма-обработки.
   
Название: Подавление гармоник
Отправлено: Tuvalu от Января 13, 2010, 12:18:41 am
Цитировать
можно подойти к проблеме выделения базового тона и с другой стороны - со стороны чисто железа.
Гранды так и делают. Отдельный датчик на струну, отдельный же канал обработки. И всё равно, всунули следящий фильтр (Roland GR300). В более поздней модели обошлись без него, но схема тоже не детская.
Цитировать
вобщем, надо снимать полный сигнал, а не только его одноосную составляющую. или дополнительный съём на 90 градусов,
Думал об этом, даже искал патенты на эту тему. Нашёл интересную конструкцию оптического датчика, снимающего колебания с двух фотодиодов под углом 90 град. Те, в свою очередь, стоят под углом 45 град к деке, хотя это, наверное, уже несущественно.
Цитировать
или струна внутри кольцевого съёмника
Именно так и было, Вы как в воду глядели.
Но это мы уже оффтопим, т.к., по понятным причинам, к теме тюнера это вряд ли относится.
Название: Подавление гармоник
Отправлено: Diz от Января 13, 2010, 12:32:27 am
Спасибо за ответы.

Со схемой Boss OC-2 знаком (и имею бехровский клон), действительно, выдает ошибки на самых низких нотах (этакие скачки между нотами).  
Выдает и ошибки на гармониках в тех же местах, но за счет самого характера звука (отфильтрованный меандр после делителя) это не столь заметно.

Мой вариант детектора (можно видеть на видео, работает весьма корректно)
полностью софтовый и похож на алгоритм выделения DTMF-сигналов в телефонии.  Интересно как раз немного улучшить сигнал в аналоге  перед оцифровкой, дабы облегчить детектирование.
Сам алгоритм в первом приближении - банк из 48 полосовых фильтров, текущая нота определяется по фильтру с максимальной амплитудой.

PS Тюнер - это только начало :-)
Название: Подавление гармоник
Отправлено: Tuvalu от Января 13, 2010, 12:50:16 am
Цитировать
Мой вариант детектора... полностью софтовый
Цитировать
Тюнер - это только начало
Вот бы Вам, в таком случае, наверное, интересно бы было узнать, как определяют базовый тон в разных гармонайзерах, ведь там надо безошибочно выстраивать нужный интервал согласно заданного лада. Притом, не так, как в питч-шифтере - в нём всё просто сдвигается, например, на малую терцию (что несложно), а именно на малую или большую терцию - где как надо по гармонии.
Кстати, а в патентах описываются подобные вещи (алгоритмы), т.е. то, что потом зашивается в кристалл? Или просто секретят - и все дела.
Цитировать
Сам алгоритм в первом приближении - банк из 48 полосовых фильтров, текущая нота определяется по фильтру с максимальной амплитудой.
В хорошей статье из ж.Радио за 1981г описана эта проблема, там решалось следящим фильтром, который "пытался" настроится на самую низкую частоту, т.к. гармоники иногда имели даже большую амплитуду, чем основной тон. Так что, я бы немного усовершенствовал Ваш алгоритм (если бы умел программировать) - видимо, надо настраиваться на самую низкую частоту с некоторой пороговой "значимой" амплитудой, а не просто на ноту с максимальной амплитудой.
Название: Подавление гармоник
Отправлено: Jansen от Января 13, 2010, 09:47:05 am
Цитировать
Гранды так и делают. Отдельный датчик на струну, отдельный же канал обработки. И всё равно, всунули следящий фильтр (Roland GR300). В более поздней модели обошлись без него, но схема тоже не детская.
Схема не детская, но выделить основной тон так легче всего, несмотря на кажущуюся сложность звукоснимателя.  
http://www.rmcpickup.com/products.html (http://www.rmcpickup.com/products.html)
Правда при этом значительно упрощается выделение основного тона, потому, что в каждом канале звучит всего один голос - одна струна - одна  основная частота.  Более того, при таком способе съема появляется огромное поле для экспериментов, несравненно больше, чем при традиционном , одноканальном съеме.
(пробовал, поэтому и говорю) Вот во что это выливается: http://i96.photobucket.com/albums/l173/Valery_011/5.jpg (http://i96.photobucket.com/albums/l173/Valery_011/5.jpg)
Название: Подавление гармоник
Отправлено: Diz от Января 13, 2010, 11:47:12 am
В гармонайзерах-питч шифтерах для детектирования F0 часто используют автокорреляцию - многократное умножение сигнала самого на себя со сдвигом по фазе.  Первый максимум на  графике АКФ (автокорреляционной функции) указывает на F0. Очень ресурсоемкий алгоритм, плюс надо накопить окно из N сэмплов для обработки (как с FFT), что ведет к задержке. Второй вариант - FFT и cepstrum, менее ресурсоемко но и менее точно. Возможно, где-то используют алгоритмы, придуманные для обработки речи (там тоже важно знать F0).

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

Со раздельными звукоснимателями все становится сильно проще, да. Точно известен диапазон нот для каждой струны - значит, можно применить полосовой фильтр, точно настроенный на нужные частоты. Все третьи гармоники уже будут лежить вне полосы фильтра. Со вторыми сложнее :-)
Название: Подавление гармоник
Отправлено: Tuvalu от Января 13, 2010, 03:13:01 pm
Diz, спасибо за описание алгоритма.
Про раздельные звукосниматели спору нет, действительно все интересней и, даже, проще в конечном итоге получится. Правда, это уже будет не примочка, а целый комплекс, обычно даже со специальной гитарой (точнее, гитара с развитой коммутацией/управлением, канальными преампами... +монструозным разъёмом на выходе).
Цитировать
Вот во что это выливается: http://i96.photobucket.com/albums/l173/Valery_011/5.jpg (http://i96.photobucket.com/albums/l173/Valery_011/5.jpg)
Jansen, не понял, на рисунке в рэке, ведь, просто компрессоры? Не думаю, что полифоническую гитару стОило затевать только ради этого, гитара отлично работает и с одноканальным компрессором.  
Название: Подавление гармоник
Отправлено: Jansen от Января 13, 2010, 05:42:55 pm
Цитировать
не понял, на рисунке в рэке, ведь, просто компрессоры?
На самом деле, там не только компрессоры. Выбран PICO компрессор в качестве лимитера для записи. там же собраны шесть преампов, далее сигнал записывается на комп, чистятся треки (очень поучительно прослушивание треков пострунно, незаглушенные струны живут своей жизнью, и добавляют много грязи) и выводятся обратно на любое устройство оборудованием разъемом Gexaphonic , Roland VG88, мидиконвертер, и т.д.
 
Название: Подавление гармоник
Отправлено: vilager от Января 14, 2010, 12:13:54 am
а, ну да, разговор о тюнере... а я увлёкся)) но, кстати, можно и в отдельный сабж вынести - тема интересная.
Название: Подавление гармоник
Отправлено: Diz от Января 14, 2010, 01:54:03 am
И обязательно обсудить полифонический дисторшн ! :-)
Название: Подавление гармоник
Отправлено: Jansen от Января 14, 2010, 08:58:26 am
Цитировать
И обязательно обсудить полифонический дисторшн !
Так пробовали, именно на этом  и предыдущем деваайсе http://i96.photobucket.com/albums/l173/Valery_011/13Pin.jpg (http://i96.photobucket.com/albums/l173/Valery_011/13Pin.jpg)
Сделанном из магнитофона TASCAM, с использованием его усилителей, индикатора и куска системы шумопонижения DBX , его компрессорной части.
Обсуждать устройство с такими широкими возможностями бессмысленно, надо его пробовать.
Название: Подавление гармоник
Отправлено: Diz от Февраля 07, 2010, 08:51:23 pm
Победил-таки. Переделал алгоритм, теперь использую автокорреляцию.
Распознает ноту за два периода минимальной частоты (~30 мс) и довольно
уверенно. Надо бы вывести ноту наружу по миди и получить подобие гитарного синта :-)
Название: Подавление гармоник
Отправлено: Medved от Февраля 08, 2010, 01:47:48 pm
Diz
30мс - ощутимая задержка, для полноценного риалтайм синта не покатит :rolleyes: Собственно, как и один период в 12мс на 82гц.
Название: Подавление гармоник
Отправлено: Diz от Февраля 08, 2010, 03:33:05 pm
На полноценный я и не претендую хотя бы из-за отсутствия полифонии :-)
Можно сократить задержку до одного периода (меньше никак), но при этом резко возрастает вероятность ошибки.

В принципе, к задержке такого порядка адаптируешься и начинаешь играть
чуть вперед (ощущал давным-давно на звуковушке без asio).
Название: Подавление гармоник
Отправлено: Diz от Марта 05, 2010, 12:58:00 pm
Тюнеры получаются, ура !:

[img width=\\\'500\\\' src=\\\'http://diyfactory.ru/forum/uploads/img-1510-4970c1dfd5.jpg[/img]
Название: Подавление гармоник
Отправлено: Diz от Марта 06, 2010, 07:00:27 am
А вот что получается, если детектированную ноту вывести по MIDI (без динамики, лишь номер ноты). Как-бы гитарный синт. Запись атонально-лажовая, но все равно любопытно.
gs_demo.mp3 (http://www.divshare.com/download/10571627-741)
Название: Подавление гармоник
Отправлено: Medved от Марта 06, 2010, 07:00:05 pm
С ЛФО прикольно. Вроде стабильненько, не ошибается. Как задержка на басовых ощущается?  
Название: Подавление гармоник
Отправлено: Diz от Марта 07, 2010, 10:44:32 am
У меня по алгоритму получается одинаковая задержка (и для баса и высоких). Ощущается, но подстроиться можно.

Процент ошибок самого детектора получается небольшой. Так что думаю
оставить его как есть, и исправлять оставшиеся постобработкой.
Считать вероятность перехода от между определенными нотами и
выбирать самый похожий вариант или еще как-то.

Сейчас постобработка простая - наружу выдается нота, продержавшаяся без изменения 3 окна сэмплирования подряд. Соответственно, имеем задержку :-)
Название: Подавление гармоник
Отправлено: Tuvalu от Марта 08, 2010, 01:00:46 am
Цитировать
Процент ошибок самого детектора получается небольшой.
Diz, а если до цифры пропустить сигнал через адаптивный триггер от октавера, не сократится ли этот процент? Кстати, а где больше ошибок, как в октавере - на толстых открытых струнах (ну, или 1-2 лад) или как-то по-другому?
Название: Подавление гармоник
Отправлено: Diz от Марта 08, 2010, 07:43:49 am
Адаптивный компаратор в алгоритме есть, реализован программно - немного уменьшает процент ошибок. Уровни срабатывания примерно в 15% от текущего максимума.

Не скажу, что ошибок больше для какого-то диапазона. Они чаще вылезают на длинном хвосте любой ноты. В самом начале, при атаке и чуть позже
ошибок почти нет.
Название: Подавление гармоник
Отправлено: EternalEngine от Марта 08, 2010, 11:15:42 pm
может имеет смысл тогда поставить компрессор или сустейнер?
Название: Подавление гармоник
Отправлено: Diz от Марта 09, 2010, 05:05:49 am
Хм.  Попробую подключить ради интереса после Orange Squeezer-а.

А вообще нужен постпроцессинг с набором правил. Скажем, если нота
продолжает звучать и не было обнаружено атаки новой ноты (по амплитуде),
то игнорятся все ноты с расстоянием больше +/- 5 полутонов от текущей.
И т.д.