Pull to refresh

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

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

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

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



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


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

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


Надеемся, что данной статьёй мы поможем людям, начинающим разработку собственных гитарных эффектов, избежать тех граблей, на которые наступили мы.
Tags:
Hubs:
Total votes 11: ↑10 and ↓1+9
Comments17

Articles