Автор Тема: Подавление гармоник  (Прочитано 9523 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Diz

  • Гость
Подавление гармоник
« : Января 12, 2010, 05:47:26 pm »
Уважаемые дисторшностроители и мастера нелинейной обработки !

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

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

Работает замечательно, не считая варианта 'открытые струны + бриджевый датчик', где амплитуда третьей гармоники не меньше, чем у основного тона.Прямо как у Дональда Тиллмана

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

Видео в действии
« Последнее редактирование: Января 12, 2010, 05:50:27 pm от Diz »

Tuvalu

  • Гость
Подавление гармоник
« Ответ #1 : Января 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
« Последнее редактирование: Января 13, 2010, 12:28:23 am от Tuvalu »

vilager

  • Гость
Подавление гармоник
« Ответ #2 : Января 12, 2010, 11:13:25 pm »
можно подойти к проблеме выделения базового тона и с другой стороны - со стороны чисто железа. но это сильно усложняет всё. если убрать "перекатывание" гармоник вследствие колебания струны в двух плоскостях, то работать с сигналом будет уже легче. вобщем, надо снимать полный сигнал, а не только его одноосную составляющую. или дополнительный съём на 90 градусов, или струна внутри кольцевого съёмника, или ещё как... есть над чем подумать ;)
да, и на каждую струну своя линейка съёма-обработки.
   

Tuvalu

  • Гость
Подавление гармоник
« Ответ #3 : Января 13, 2010, 12:18:41 am »
Цитировать
можно подойти к проблеме выделения базового тона и с другой стороны - со стороны чисто железа.
Гранды так и делают. Отдельный датчик на струну, отдельный же канал обработки. И всё равно, всунули следящий фильтр (Roland GR300). В более поздней модели обошлись без него, но схема тоже не детская.
Цитировать
вобщем, надо снимать полный сигнал, а не только его одноосную составляющую. или дополнительный съём на 90 градусов,
Думал об этом, даже искал патенты на эту тему. Нашёл интересную конструкцию оптического датчика, снимающего колебания с двух фотодиодов под углом 90 град. Те, в свою очередь, стоят под углом 45 град к деке, хотя это, наверное, уже несущественно.
Цитировать
или струна внутри кольцевого съёмника
Именно так и было, Вы как в воду глядели.
Но это мы уже оффтопим, т.к., по понятным причинам, к теме тюнера это вряд ли относится.
« Последнее редактирование: Января 13, 2010, 12:31:39 am от Tuvalu »

Diz

  • Гость
Подавление гармоник
« Ответ #4 : Января 13, 2010, 12:32:27 am »
Спасибо за ответы.

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

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

PS Тюнер - это только начало :-)
« Последнее редактирование: Января 13, 2010, 12:40:48 am от Diz »

Tuvalu

  • Гость
Подавление гармоник
« Ответ #5 : Января 13, 2010, 12:50:16 am »
Цитировать
Мой вариант детектора... полностью софтовый
Цитировать
Тюнер - это только начало
Вот бы Вам, в таком случае, наверное, интересно бы было узнать, как определяют базовый тон в разных гармонайзерах, ведь там надо безошибочно выстраивать нужный интервал согласно заданного лада. Притом, не так, как в питч-шифтере - в нём всё просто сдвигается, например, на малую терцию (что несложно), а именно на малую или большую терцию - где как надо по гармонии.
Кстати, а в патентах описываются подобные вещи (алгоритмы), т.е. то, что потом зашивается в кристалл? Или просто секретят - и все дела.
Цитировать
Сам алгоритм в первом приближении - банк из 48 полосовых фильтров, текущая нота определяется по фильтру с максимальной амплитудой.
В хорошей статье из ж.Радио за 1981г описана эта проблема, там решалось следящим фильтром, который "пытался" настроится на самую низкую частоту, т.к. гармоники иногда имели даже большую амплитуду, чем основной тон. Так что, я бы немного усовершенствовал Ваш алгоритм (если бы умел программировать) - видимо, надо настраиваться на самую низкую частоту с некоторой пороговой "значимой" амплитудой, а не просто на ноту с максимальной амплитудой.
« Последнее редактирование: Января 13, 2010, 01:28:03 am от Tuvalu »

Jansen

  • Гость
Подавление гармоник
« Ответ #6 : Января 13, 2010, 09:47:05 am »
Цитировать
Гранды так и делают. Отдельный датчик на струну, отдельный же канал обработки. И всё равно, всунули следящий фильтр (Roland GR300). В более поздней модели обошлись без него, но схема тоже не детская.
Схема не детская, но выделить основной тон так легче всего, несмотря на кажущуюся сложность звукоснимателя.  
http://www.rmcpickup.com/products.html
Правда при этом значительно упрощается выделение основного тона, потому, что в каждом канале звучит всего один голос - одна струна - одна  основная частота.  Более того, при таком способе съема появляется огромное поле для экспериментов, несравненно больше, чем при традиционном , одноканальном съеме.
(пробовал, поэтому и говорю) Вот во что это выливается: http://i96.photobucket.com/albums/l173/Valery_011/5.jpg
« Последнее редактирование: Января 13, 2010, 09:50:27 am от Jansen »

Diz

  • Гость
Подавление гармоник
« Ответ #7 : Января 13, 2010, 11:47:12 am »
В гармонайзерах-питч шифтерах для детектирования F0 часто используют автокорреляцию - многократное умножение сигнала самого на себя со сдвигом по фазе.  Первый максимум на  графике АКФ (автокорреляционной функции) указывает на F0. Очень ресурсоемкий алгоритм, плюс надо накопить окно из N сэмплов для обработки (как с FFT), что ведет к задержке. Второй вариант - FFT и cepstrum, менее ресурсоемко но и менее точно. Возможно, где-то используют алгоритмы, придуманные для обработки речи (там тоже важно знать F0).

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

Со раздельными звукоснимателями все становится сильно проще, да. Точно известен диапазон нот для каждой струны - значит, можно применить полосовой фильтр, точно настроенный на нужные частоты. Все третьи гармоники уже будут лежить вне полосы фильтра. Со вторыми сложнее :-)
« Последнее редактирование: Января 13, 2010, 11:48:46 am от Diz »

Tuvalu

  • Гость
Подавление гармоник
« Ответ #8 : Января 13, 2010, 03:13:01 pm »
Diz, спасибо за описание алгоритма.
Про раздельные звукосниматели спору нет, действительно все интересней и, даже, проще в конечном итоге получится. Правда, это уже будет не примочка, а целый комплекс, обычно даже со специальной гитарой (точнее, гитара с развитой коммутацией/управлением, канальными преампами... +монструозным разъёмом на выходе).
Цитировать
Вот во что это выливается: http://i96.photobucket.com/albums/l173/Valery_011/5.jpg
Jansen, не понял, на рисунке в рэке, ведь, просто компрессоры? Не думаю, что полифоническую гитару стОило затевать только ради этого, гитара отлично работает и с одноканальным компрессором.  

Jansen

  • Гость
Подавление гармоник
« Ответ #9 : Января 13, 2010, 05:42:55 pm »
Цитировать
не понял, на рисунке в рэке, ведь, просто компрессоры?
На самом деле, там не только компрессоры. Выбран PICO компрессор в качестве лимитера для записи. там же собраны шесть преампов, далее сигнал записывается на комп, чистятся треки (очень поучительно прослушивание треков пострунно, незаглушенные струны живут своей жизнью, и добавляют много грязи) и выводятся обратно на любое устройство оборудованием разъемом Gexaphonic , Roland VG88, мидиконвертер, и т.д.
 

vilager

  • Гость
Подавление гармоник
« Ответ #10 : Января 14, 2010, 12:13:54 am »
а, ну да, разговор о тюнере... а я увлёкся)) но, кстати, можно и в отдельный сабж вынести - тема интересная.

Diz

  • Гость
Подавление гармоник
« Ответ #11 : Января 14, 2010, 01:54:03 am »
И обязательно обсудить полифонический дисторшн ! :-)
« Последнее редактирование: Января 14, 2010, 01:54:12 am от Diz »

Jansen

  • Гость
Подавление гармоник
« Ответ #12 : Января 14, 2010, 08:58:26 am »
Цитировать
И обязательно обсудить полифонический дисторшн !
Так пробовали, именно на этом  и предыдущем деваайсе http://i96.photobucket.com/albums/l173/Valery_011/13Pin.jpg
Сделанном из магнитофона TASCAM, с использованием его усилителей, индикатора и куска системы шумопонижения DBX , его компрессорной части.
Обсуждать устройство с такими широкими возможностями бессмысленно, надо его пробовать.

Diz

  • Гость
Подавление гармоник
« Ответ #13 : Февраля 07, 2010, 08:51:23 pm »
Победил-таки. Переделал алгоритм, теперь использую автокорреляцию.
Распознает ноту за два периода минимальной частоты (~30 мс) и довольно
уверенно. Надо бы вывести ноту наружу по миди и получить подобие гитарного синта :-)

Medved

  • Гость
Подавление гармоник
« Ответ #14 : Февраля 08, 2010, 01:47:48 pm »
Diz
30мс - ощутимая задержка, для полноценного риалтайм синта не покатит :rolleyes: Собственно, как и один период в 12мс на 82гц.

Diz

  • Гость
Подавление гармоник
« Ответ #15 : Февраля 08, 2010, 03:33:05 pm »
На полноценный я и не претендую хотя бы из-за отсутствия полифонии :-)
Можно сократить задержку до одного периода (меньше никак), но при этом резко возрастает вероятность ошибки.

В принципе, к задержке такого порядка адаптируешься и начинаешь играть
чуть вперед (ощущал давным-давно на звуковушке без asio).

Diz

  • Гость
Подавление гармоник
« Ответ #16 : Марта 05, 2010, 12:58:00 pm »
Тюнеры получаются, ура !:

[img width=\\\'500\\\' src=\\\'http://diyfactory.ru/forum/uploads/img-1510-4970c1dfd5.jpg[/img]

Diz

  • Гость
Подавление гармоник
« Ответ #17 : Марта 06, 2010, 07:00:27 am »
А вот что получается, если детектированную ноту вывести по MIDI (без динамики, лишь номер ноты). Как-бы гитарный синт. Запись атонально-лажовая, но все равно любопытно.
gs_demo.mp3

Medved

  • Гость
Подавление гармоник
« Ответ #18 : Марта 06, 2010, 07:00:05 pm »
С ЛФО прикольно. Вроде стабильненько, не ошибается. Как задержка на басовых ощущается?  

Diz

  • Гость
Подавление гармоник
« Ответ #19 : Марта 07, 2010, 10:44:32 am »
У меня по алгоритму получается одинаковая задержка (и для баса и высоких). Ощущается, но подстроиться можно.

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

Сейчас постобработка простая - наружу выдается нота, продержавшаяся без изменения 3 окна сэмплирования подряд. Соответственно, имеем задержку :-)