Гитарные эффекты: алгоритмы, первый опыт аппаратной реализации

Электрогитара давно стала неотъемлемым атрибутом едва ли не каждой музыкальной группы. Вместе с тем, активное развитие получил и рынок устройств, основной функцией которых является обработка гитарного звука. Как Вы могли догадаться, речь в статье пойдёт о гитарных эффектах.

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

Что такое гитарные эффекты? Для чего они нужны? Пусть следующее видео ответит за нас:



Звуковые эффекты


Ниже приведена классификация эффектов в зависимости от особенностей их реализации:

1) Фильтры – ФНЧ, ФВЧ, полосовой фильтр, эквалайзер
2) Параметрические фильтры – wah-wah (квакушка), фейзер
3) Эффекты над линией задержки – vibrato, flanger, chorus, echo
4) Модуляторы – tremolo, vibrato
5) Нелинейные эффекты – overdrive, distortion, fuzz
6) Пространственные эффекты – reverb

Фильтры


Фильтры, по определению, удаляют часть спектра выше или ниже частоты среза. Для многих ситуаций это слишком грубое вмешательство.
Эквалайзер, с другой стороны, усиливает или ослабляет определенные частотные полосы, не меняя остаток спектра. Эквалайзеры строятся на сериях shelving- и peak-фильтров.

Cписок часто используемых фильтров
Lowpass filter


Highpass filter


Bandpass filter


Bandreject filter


Shelving filter


Peak filter



Параметрические фильтры


Некоротые эффекты можно реализовать, меняя параметры простых фильтров с течением времени.

Эффект «Wah-wah» – это узкий bandpass-фильтр, в котором центральная (резонансная) частота перемещается со временем. Фильтрованный звук смешивается с оригинальным. Демо.


Эффекты над линией задержки


Все эффекты этого класса объединяет один принцип работы. Входной сигнал сохраняется в участке памяти, которая здесь назыается линией задержки (delay line). На выход же подается сумма входной выборки и выборки откуда-то из линии задержки. Количество и места выборок из линии задержки определяют уникальное звучание эффекта.

Эффекты, которые не сохраняют результат своей работы в линию задержки (т. е. там содержится только чистый входной сигнал) описываются фильтрами с конечной импульсной характеристикой. Эффекты, изменяющие линию задержки, описываются фильтрами с бесконечной импульсной характеристикой.

Эффект «Flanger» – выборка из линии задержки происходит в районе от 0 до 15 мс, причем точное место определяется по низкочастотному (около 1 Гц) синусоидальному закону. Использование низкочастотных синусоид – популярная техника при создании эффектов и имеет собственное название – Low Frequency Oscillator или просто LFO. Демо.

Эффект «Echo» – одна или несколько выборок на одинаковом расстоянии, более 50 мс. Вариант с одной выборкой позволяет фактически удвоить количество сыгранных нот. При помощи нескольих выборок можно имитировать игру в просторном помещении. Аналогичной цели достигает так же эффект «Reverb». Демо.

Эффект «Chorus» – имитация игры нескольких инструментов. Несколько выборок (по количеству инструментов) на случайном расстоянии в 10-25 мс. Демо.

Модуляция


Модуляция – это процесс, при котором параметры синусоидального сигнала (амплитуда, частота и фаза) меняются на основе аудиосигнала.
Амплитудная модуляция определяется как y(n) = (1 + a LFO(n)) x(n), где а – глубина модуляции, число от 0 до 1.

Эффект «Tremolo» – амплитудная модуляция звука с LFO до 20 Гц. Демо.

Нелинейные эффекты


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

Однако, такие фильтры не входят в рамки статьи, поэтому в этом разделе мы сосредоточимся на линейке из трех схожих, очень гитарных, очень эффектных эффектов – overdrive, distortion, fuzz. По сути, это один эффект с разной силой и разными целями.

Овердрайв Вы могли услышать в начале статьи. Как звучит его старший брат, король металла – дисторшн, можно узнать под спойлером.

Пример звучания дисторшна


Реализция этого эффекта проста, и в то же время полна хитростей, что делает создание хорошего дисторшна своего рода искусством. В основе эффекта лежит простая идея – звуки слишком высокой амплитуды должны быть обрезаны. Поначалу это был нежелательный эффект от выхода электронных компонентов в нелинейные режимы работы, но со временем музыканты начали использовать это в своих интересах.

Аппаратная реализация: теория


В общем случае архитектуру гитарного процессора можно изобразить так:



Гитарный процессор – это цифровое устроство. Это значит, что входящий аналоговый сигнал (звук) должен быть преобразован в цифровой сигнал. Этим занимается специальная микросхема ADC. После обработки необходимо вернуть сигналу аналоговую форму. Этим занимается DAC. DAC и ADC могут быть выполнены в одной микросхеме – в таком случае это называется Codec. Ко всем трем микросхемам предъявляются, очевидно, одинаковые требования:

  • Частота дискретизации: 44,1 кГц или 48 кГц. Это следует из теоремы Котельникова и того факта, что при работе со звуком нас интересуют частоты от 20 Гц до 20 кГц. Существуют кодеки для работы со звуком и частотой дискретизации 96 кГц и 192 кГц. Их тоже можно использовать, но они создают повышенную вычислительную нагрузку на DSP, что нежелательно, если разработчик хочет обойтись бюджетными компонентами. Меньшая частота дискретизации будет вырезать из сигнала ощущаемые человеком гармоники, искажая сигнал.
  • Битность: 24 бита. Таков, по наблюдениям, стандарт для звуковых кодеков. Слишком низкая битность вырезает полезную информацию. Слишком высокая битность бесполезна, если речь идет не о прецезионном или малошумящем устройстве. В противном случае в младшие биты цифрового сигнала будет попадать один лишь шум.


Гитарный процессор – это устройство, работающее в реальном времени. Музыкант не должен чувствовать задержку между ударом по струнам и звуком из колонок. В первом приближении это же означает, что блок наложения эффектов должен получить 24-битную выборку из ADC, обработать ее, и передать результат на DAC до того, как на ADC появится новая выборка. Попробуем сейчас обобщить требования к такому – пока нарочно абстрактному – обработчику.
  • Несложные вычисления показывают, что при частоте дискретизации 48 кГц, у обработчика есть 21 микросекунда на выборку.
  • Если кодек не встроен в обработчик, то к кодеку придется подключаться по одному из общепринятых протоколов. Чаще всего это протоколы SPI или I2C. Шины SPI и I2C – последовательные, передают по биту за такт. Это означает, что частота работы ввода-вывода должен быть в хотя бы в 24 раза выше частоты дискретизации АЦП. Для 48 кГц это как минимум 1,152 МГц.



Типичное соединение по SPI

Как показывает практика, микроконтроллеры с обработкой звука в реальном времени не справляются. Здесь на помощь приходят специализированные процессоры, называющиеся DSP (digital signal processor). Как и в случае с кодеками, сущесвтуют DSP общего назначения и специализированные DSP.

DSP общего назначения:
  • Просты в программировании. Скорее всего, для такого DSP есть компилятор С.
  • Вычислительные мощностьи от скромных до «на грани возможного» + большое количество интерфейсов. Например, топовый DSP от Texas Instruments содержит в себе 12 ядер (8 ядер DSP и 4 ядра архитекруты ARM). Бюджетные DSP как правило ядер ARM не содержат.
  • Мощные DSP предъявляют высокие требования к окружающей схемотехнике, их невозможно использовать «на коленке».


DSP, специализирующиеся на звуке:
  • Предоставляют гарантированное количество инструкций на выборку. Как правило, пользователю дается от 256 до 6000 инструкций. Эта простая гарантия удовлетворяет два требования к обработчику, указанные выше.
  • Низкая стоимость – до $30.
  • Простая установка на плату.
  • Не программирование, а цирк какой-то. DSP строятся по отличным от х86 и ARM архитектурам – часто это VLIW. Архитектура звукового DSP может быть настолько другой, что написание компилятора С теряет всякий смысл. Поэтому здесь часто в ходу использование ассемблера или языков графического программирования.
  • Скорее всего нет интерфейса для внешнего RAM.



Типичная прошивка DSP семейства ADAU.

Аппаратная реализация: практика


Перейдем теперь к схеме конкретной реализации гитарного процессора:



Проект состоит из трех основных блоков – FreeDSP, Arduino, LCD. Здесь сразу же стоит сделать важное замечание – проект FreeDSP едва ли можно назвать удачным выбором для создания гитарного процессора. Почему так – ниже, но в целом любому неискушенному в электронике разработчику рекомендуется заменить FreeDSP на другой evaluation board со специализированным DSP.

Ключевое достоинство проекта – его простота; от разработчика не требуются умение разводить платы. На уровне электроники требуются базовые знания и немного здравого смысла. Так же разработчик избавлен от работы с ADC/DAC – оба встроены в ADAU1701.

Здесь мы не будем останавливаться на рассмотрении Arduino и дисплея. Что хотелось бы отметить – Arduino Due здесь предпочтительнее других опций из-за того, что уровень логической единицы здесь равняется 3,3 В, а не 5 В. Это важно, поскольку многие современные DSP пять вольт уже не выдерживают. LCD можно использовать любой, но рекомендуется модель с драйвером SSD1305 – во-первых, с таким драйвером выпускаются прекрасные OLED дисплеи, а во-вторых, для Arduino доступна соответствующая высокоуровневая библиотека.

FreeDSP


image
FreeDSP — недорогое решение для цифровой обработки сигналов в режиме реального времени, предназначенное для исследователей и DIY сообщества. Плата базируется на ADAU1701. Программирование ADAU1701 осуществляется в SigmaStudio IDE. Более подробную информацию о проекте можно найти по адресу www.freedsp.cc.

Создатели проекта предлагают за скромную сумму приобрести у них все комплектующие для сборки. Однако мы решили сделать всё самостоятельно. Благо на сайте проекта присутствуют все необходимые схемы, а также списки комплектующих.

Ниже приведен список подводных камней при работе с FreeDSP:
  1. Прошивка для ADAU1701 хранится в чипе EEPROM 24LC256. Для записи данных в этот чип можно использовать Arduino Nano (для нее в проекте предусмотрен слот) либо записывать самостоятельно. Для самостоятельной прошивки подойдет программатор PICKit v2 либо его клон. При использовании PICKit: SigmaStudio компилирует проект в файл с расширением .hex. Это неправда. Это не файл в формате Intel Hex, это текстовый файл с перечислением шестнадцатеричных чисел через запятую. Для преобразования Sigma Hex в Intel Hex используется специальная утилита.
  2. У ADAU1701 очень низкие возможности ввода-вывода. Вкупе с непривычным графическим языком программирования это доставляет много головной боли при попытке создать гитарный процессор с по-настоящему настраиваемыми эффектами.
  3. У ADAU1701 очень мало внутренней памяти – всего 21 миллисекунда. Ничего кроме эффекта Chorus с такой линией задержки не сделать. ADAU1701 предназначена для работы с сигналом в частотном диапазоне (фильтры и тому подобное). Обойти этот недостаток можно, заменив ADAU1701 на ADAU1452 (старший чип в линейке имеет линию задержки в 800 миллисекунд, что очень много). Плата при этом должна претерпеть серьезные изменения.


Аппаратная реализация: работа над ошибками


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



Здесь показано, как избежать проблем с короткой линей задержки и IO. ADAU1701 мы предлагаем заменить на что-нибудь из семейства ADAU14xx, поскольку у этих чипов достаточно внутренней памяти (до 800 мс). Поскольку оказалось, что в одном ADAU все опции и настройки гитарного процессора не вместить, их здесь несколько. При настройке эффектов микроконтроллер достает прошивки с разными эффектами из NVRAM и записывает их в чипы EEPROM, после чего перезапускает ADAU.

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

Заключение


В конечном итоге нам всё же удалось сделать скромный гитарный процессор, однако финальная версия в корне отличалась от планируемой изначально и заслуживает отдельной статьи. Часть возможностей процессора показана на видео:



Фото процесса разработки
freedsp development

freedsp development

freedsp development

image


Надеемся, что данной статьёй мы поможем людям, начинающим разработку собственных гитарных эффектов, избежать тех граблей, на которые наступили мы.
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 17
  • –1
    Дааа, с текущем курсом доллара, когда не самый лучший проц стоит 50т.р., их теперь только самому и собирать :D Теперь только не хватает статей про паяния педалек и крафт гитар :)
    • 0
      уже внутри браузера делают:
      http://dashersw.github.io/pedalboard.js/demo/

      даже паять ничего не надо

      • 0
        Это баловство. Из нормальных решений существует peavey revalver на PC, там реально хороший звук в отличие от всяких гитарригов и прочего шлака включая не самые лучшие процы до 50тр, а возможностей, особенно при подключении как vst к какому-н sonar, больше как ни крути чем у большинства «железных» процессоров.
    • 0
      Не понятно, так что в итоге вы использовали?
      • 0
        Используйте лучше это:
        http://www.bdtic.com/adi/ADZS-21375-EZLITE.html
        • 0
          или это:
          https://www.minidsp.com/products/opendrc-series/minisharc-kit
          • 0

            не дешевые игрушки, хоть и очень вкусные)

            • 0
              SHARC конечно хороши по возможностям, но монтаж такого чипа — явно не для новичков: 208 ножек шириной 0.22 миллиметра, 0.28 миллиметра между ножками. Еще есть подозрение, что платы под нее не совсем двухслойные (и совсем не однослойные).
          • 0
            интересно!
            ps у нас валяются ADAU1401, всё никак не добъём проект, плату правда хочу ЛУТом сделать :)
            думаю — пока соберемся, ещё поколение dsp пройдёт:)
            • 0

              Sigma Studio позволяет использовать только готовые компоненты (ручки крутить, ползунки двигать) или можно описать какую-то логику обработки аналогового сигнала, программирование, язык там есть?

              • 0
                Есть готовые блоки высокого уровня (фильтры, хорус, эквалайзер и т. д.), низкого уровня (сложение, умножение, LUT, компаратор, мультиплексор/демультиплексор, запись-чтение регистров). Так что кое-какую логику написать можно, но опять же в виде графической схемы. В логику можно вставлять зависимость от GPIO, но, честно говоря, у нас это получалось с большим трудом.
                • 0
                  Но зачастую полное нежелание Analog Devices дать пользователям работать с ассемблером раздражает. А на первых порах так и вовсе бесит. Не знаю, то ли это забота о людях и глобальные оптимизации, то ли леденящий душу кошмар вместо архитектуры системы команд. Компилятора Си нет.
                  • 0

                    Насколько я понял, есть описание DSP (датащит), там описана вся архитектура и распределение памяти команд/слов, этим всем можно управлять внешним МК (даже в Sigma Studio начало работы с кристаллом, начинается с описания типа взаимодействия SPI-flash или нет).
                    В самой студии код не дают писать (с ваших слов — ну и ладно, хоть что-то есть для "поиграться"), но сама студия видимо можно использовать как посредник для управлением DSP через МК.

                    • 0
                      Да, все так, есть адресное пространство, которое доступно по SPI или I2C. В адресном пространстве размещен (а) RAM с сегментами кода, данных и параметров, и (б) регистры настроек. Можно перепрошивать DSP на ходу, менять параметры фильтров и так далее, но assembly reference к ADAU в свободном доступе нет. Поэтому для получения бинарников, которые можно записывать в DSP, придется использовать сигму.
                • 0

                  Я с звуком пробовал работать через другое семейство AVR — XMega, правда пришлось вешать внешний АЦП (16-бит). Кстати говоря, для моно его вполне хватало на частоте выше 74К, вот для стерео и работу с I2S (т.к. все нормальные звуковые ЦАП-ы работают на ней) — тяжко, пришлось разгонять контроллер. Впрочем я пока этот проект забросил, лежит ждет своего времени. Делал я правда немного другое, не эффекты (более обыденную вещь), но подобным образом для начало поигрался (задержкой).

                    • 0
                      Недавно делал простой overdrive-эффект из нескольких диодов, транзистора и обвязки. Результат довольно неплох. Если кому интересно, могу написать статью про это)

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое
                      Интересные публикации