Цифровые сигнальные процессоры (DSP) давно стали неотъемлемой частью современной аудиотехники. Они используются в студийном оборудовании, бытовой электронике, автомобильных аудиосистемах и даже в профессиональных концертных решениях. Благодаря высокой гибкости, энергоэффективности и широким возможностям цифровой обработки звука, DSP позволяют реализовывать сложные фильтры, эквалайзеры, реверберацию, динамическую обработку и многие другие алгоритмы, недоступные аналоговым схемам.
Одним из популярных и доступных решений является Analog Devices ADAU1701 – мощный и удобный в использовании DSP с встроенным АЦП и ЦАП, который не требует внешнего процессора для работы и умеет самостоятельно загружать прошивку из EEPROM. Он отлично подходит для создания цифровых кроссоверов, звуковых процессоров и других аудиоприложений. В этой статье мы рассмотрим его основные возможности и пример применения для решения конкретных прикладных задач.
В нашем случае основной задачей для DSP будет корректировка АЧХ акустической системы в неидеальных, бытовых условиях (обычная жилая комната). Стоит сразу оговориться, что корректировка АЧХ не является панацеей, и если нужно получить хороший звук высокого уровня, то это требует комплексного подхода, а именно: акустического оформления помещения, подбора усилителя и акустических систем, расстановки оборудования, поиска оптимальной точки прослушивания. Однако в реальной жизни, музыкантам, звукорежиссерам и продюсерам часто приходиться мириться с неидеальной акустикой помещения, как-то приспосабливаться и работать с этим. Именно в таких ситуациях на помощь может прийти рассматриваемое устройство – и, если и не полностью исправить, то как минимум серьезно улучшить ситуацию со звуком в комнате.
Сама идея корректировки АЧХ аудиосигнала для компенсации акустики помещения не нова. На сегодняшний день существует много как программных, так и программно-аппаратных решений от известных производителей, таких как Sonarworks, Realphones, ARC Studio и других. Однако цены на них довольно высоки, или просто есть проблемы с приобретением. В свою очередь, рассматриваемый в статье DSP, позволяет добиться такого же результата, плюс есть возможность изменения конфигурации всей системы под различные задачи и требования в каждой конкретной ситуации.
Для того чтобы выполнить корректировку АЧХ, необходимо сначала провести измерения текущей звуковой картины в помещении, затем произвести рассчеты, и скорректировать частотную характеристику источника звука, чтобы скомпенсировать неровности в графике спектра. Непосредственно расчет фильтров для коррекции АЧХ удобнее всего делать в программе REW (RoomEQ_Wizard). Хотя и в родном программном обеспечении SigmaStudio тоже есть возможность загрузить файл измерений и автоматически сгенерировать фильтры для коррекции, но, на мой взгляд, в REW все же для этого больше возможностей и лучше итоговый результат. Вообще методика замеров и коррекции – это отдельная большая тема, есть много разных подходов к этому вопросу и методов, поэтому подробно на этом останавливаться мы здесь не будем, разберем лишь прикладные аспекты. Кстати, вот реальный пример, каких результатов можно добиться с помощью корректировки АЧХ акустики в условиях квартиры, было/стало и waterfall:
В целом, конфигурации могут быть самыми разнообразными, тут все зависит только от вашей фантазии и потребностей: от простого регулятора громкости и тембра, до многополосного эквалайзера корректора АЧХ, как в данном случае, ну или кроссовера – в сети есть масса различных примеров. К статье я прикладываю исходный файл проекта тестовой прошивки, который можно изменить под свои нужды или просто использовать как отправную точку для другого проекта.
Основой для данного устройства будет выступать отладочная плата ADAU1701 от чип дипа:
Так же есть еще варианты и от китайцев (раз, два), что выбрать – вопрос вкуса и удобства пользования:
Для подключения к ПК, настройки и программирования используется USBi интерфейс, который с успехом заменяет отладочная плата микроконтроллера Cypress CY7C68013A (ссылка), которую можно найти в продаже как логический анализатор:
Коммутация, внешние органы управления и индикации, корпус устройства, все зависит от выбранной конфигурации и требований к итоговому прибору.
Основные характеристики и возможности микросхемы ADAU1701:
- АЦП 2х Σ-Δ до 96 кГц 24 бита
- ЦАП 4х Σ-Δ до 96 кГц 24 бита
- Универсальные пины общего назначения для внешнего управления - 12 шт. (MP0–MP11)
- Вспомогательные АЦП для внешних потенциометров и пр. - 4 шт. 8 бит. (MP0–MP3)
- Цифровые входы/выходы по 4 канала или 8 с TDM (I²S, TDM)
Расскажу кратко о программировании этого DSP. Первым делом необходимо установить программное обеспечение SigmaStudio, оно распространяется бесплатно, можно скачать с сайта производителя или на сторонних ресурсах. А также установить драйвер для микроконтроллера CY7C68013, который будет выступать у нас в качестве USBi программатора. После установки драйверов и подключения к ПК микроконтроллер должен определяться в системе таким образом:
Далее необходимо установить программное обеспечение CySuiteUSB, это пакет утилит, из которого мы будем использовать только CyConsole для запуска скрипта. Несколько слов про микроконтроллер CY7C68013. Данный МК может работать как переходник-адаптер с различных протоколов передачи данных на USB, использоваться в логических анализаторах, платах видеозахвата и пр. ситуациях, где требуется высокая скорость передачи данных. Т.к. данный МК программируемый, существуют разные способы превратить его в необходимый нам USBi программатор. В данном случае я использовал загрузку и запуск скрипта через CyConsole , но можно также залить прошивку на установленную на плате EEPROM память, либо через тот же CyConsole, либо просто запрограммировав EEPROM напрямую. Однако из тех нескольких программаторов, с которыми я имел дело, не все подхватывали прошивку из памяти EEPROM, некоторые не видели ее ни после прошивки ее через CyConsole, ни после заливки напрямую через внешний программатор. В связи с этим, рекомендовать эти методы я не могу, а вот метод с загрузкой скрипта всегда работает хорошо.
Теперь собственно процесс программирования. Подключаем плату CY7C68013 к DSP по шине I2C (пины на платах обычно выведены отдельно) и компьютеру стандартным USB кабелем. Запускаем CyConsole, плата должна определиться так же, как и в диспетчере устройств:
После нажимаем иконку папки для того чтобы выбрать скрипт, (если SigmaStudio уже установлен, то его можно найти по пути C:\Program Files\Analog Devices\SigmaStudio 4.7\USB drivers\x64 на всякий случай также приложу и его в архиве) и после нажимаем кнопку запустить. Теперь устройство должно определиться как USBi интерфейс:
Сворачиваем окно консоли и переходим к SigmaStudio. Проще всего для начала открыть прилагаемый проект, если все хорошо, то во вкладке Hardware Configuration надпись USB будет на зеленом фоне, можно приступать к программированию и созданию своей цепочки обработок.
Изначально ТЗ было следующее: на выходе необходимо два стерео канала (для подключения двух пар мониторов). Для основного канала необходима возможность корректировки АЧХ (отдельно для левого и правого канала точная, и общая для работы, так сказать, широкими мазками). Еще необходим режим моно суммирования с обрезкой самых низких и высоких частот (т.н. sheet control, или просто примерная эмуляция низкокачественной акустики), а также кнопка Mute для возможности отключения мониторов. Для второго канала, требования меньше, там просто общая коррекция АЧХ (на два канала сразу) и тоже Mute. Также было решено добавить индикатор клиппинга входного сигнала, для того чтобы избежать искажений.
Согласно требованиям, из внешних элементов нам потребуется пять кнопок и один светодиод для индикатора клиппинга. Схема всего проекта:
Светодиод, сигнализирующий о клиппинге, будет управляться через транзистор с вывода MP1, кнопки будут подключены к выводам MP2 - MP6 нашего DSP.
Весь проект в программе SigmaStudio выглядит следующим образом.
Общий вид:
Основной канал:
И дополнительный:
Кратко опишу используемые модули и логику работы.
- Первым элементом в цепи сигнала у нас является детектор клиппинга, реализованный следующим образом. Два сигнала из левого и правого каналов складываются модулем Merger (без увеличения громкости), далее модуль Abs (абсолютное значение, модуль числа, модуль модуля – такой вот каламбур), далее модуль AB in CD out Condition, который сравнивает значения A и B и выдает на выходе С если больше А и D если больше В. Т.е. модуль проверяет, если сигнал больше 0 Дб (0 дБ = 8 388 608 в формате 28.0.), то выдает на выход 1 (максимальное значение в формате 28.0 = 134 217 727), если меньше – то 0.
- Далее схема и сигнал разделяется на две части – для удобства работы и отображения. Первая часть – это основной канал Main Line. Первым модулем там стоит Single Volume, он позволяет уменьшить уровень входного сигнала, если он повышается в модуле эквалайзера. Т.е. если, например, у нас есть полоса эквалайзера с гейном +5дБ, то на эти пять дБ и уменьшаем уровень. Тут все логично, модуль стоит перед эквалайзером, но можно поставить и после. Перегруза не будет в любом случает, т.к. все вычисления осуществляются с повышенной битностью.
- Далее идут три параметрических эквалайзера по 15 полос каждый, по одному на канал отдельно и один общий на два канала. Существуют разные подходы к коррекции АЧХ, но такой набор позволяет удовлетворить любому из них, например, настроить точно коррекцию для каждой колонки отдельно, а потом широкими мазками отрегулировать общую картину.
- Включать и отключать коррекцию позволяет модуль Index Selectable Multiplexer, который управляется кнопкой, подключенной к выводу MP2(GPIO_2), как видно из схемы, он переключает или прямой сигнал без обработки, или сигнал пропущенный через эквалайзер.
- Далее идет моно сумматор, выполненный на похожих элементах, а именно сигнал разделяется на прямой и обработанный. Обработанный подвергается суммированию, проходит через ФВЧ и ФНЧ и приходит на левую колонку через переключатель, управляемый через пин MP3(GPIO_3) (на правую подается 0, т.е. тишина).
- И последняя часть данной цепи отвечает за глушение сигнала (Mute). Тут все реализовано просто, переключатель, управляемый MP4(GPIO_4), подает на выход либо прямой аудиосигнал, либо логический ноль, т.е. ничего.
- На этом обработка первого канала заканчивается, и сигнал идет на выходные ЦАПы (DAC_0 и DAC_1).
- Набор обработок во втором дополнительном канале проще. Он состоит всего из одного модуля параметрического эквалайзера, общего для двух каналов, который включается и отключается через MP5(GPIO_5), и мьюта, управляемого MP6(GPIO_6). Второй канал выводится через DAC_2 и DAC_3.
После того как маршрутизация и обработки настроены, нажимаем кнопку собрать и загрузить проект:
И если все хорошо, в правом нижнем углу видим сообщение:
Проект компилируется и загружается довольно быстро. Кроме того, он работает интерактивно, т.е. если вы меняете какие то параметры в программе, то эти изменения сразу передаются на устройство, что очень удобно для отладки работы схемы.
Логику работы кнопок можно скорректировать на вкладке Register Control,
Если поставить галку в чекбоксе Inv, то логика работы кнопки, подключенной к пину, будет инвертирована, т.е. если она срабатывала при низком уровне на пине, то будет срабатывать при высоком и наоборот.
Следует помнить, что сейчас все изменения и настройки программы находятся в ОЗУ микроконтроллера и в Sigma Studio, запущенной на компьютере, т.е. если перезагрузить устройство, изменения не сохранятся. Для автономной работы устройства необходимо записать прошивку в память EEPROM. Для этого переходим во вкладку Config в левом нижнем углу:
Щелкаем правой кнопкой по модулю нашего DSP и выбираем "Write Lastest Compilation to E2PROM":
Откроется окно записи прошивки, единственное, что здесь нужно изменить, это объем памяти EEPROM:
На моей отладочной плате (как и на большинстве остальных) установлена EEPROM ATMLH120 64DM на 64 Кбит, следовательно указываем значение 65536 и выбираем подключение по I2C, если указано другое, остальные параметры оставляем без изменения. После записи прошивки необходимо перезапустить устройство: отключить питание, установить переключатель в режим, когда питание подается только на DSP, и подать внешнее питание. DSP должен загрузить прошивку самостоятельно из EEPROM.
Пару слов о схемотехнике проекта. В целом она довольно проста. Вход аудиосигнала ОДИН (ADC_0 и ADC_1), но он дублирован на стереоджек 3,5мм и на два моно джека 6,3мм, т.е. можно включить ЛИБО стандартным кабелем 3,5мм (для обычной или встроенной звуковой карты) ЛИБО двумя моно джеками 6,3мм (для профессиональной внешней звуковой карты). А вот выхода два (DAC_0, DAC_1, DAC_2, DAC_3), основной идет на моноджеки 6,3мм, а второй дополнительный на стереоджек 3,5мм.
Переключатель USB Switch подключает и отключает программатор. Если программатор активен, то ADAU ждет данных от него и не грузится с EEPROM, если же он выключен, то ADAU загружает прошивку из EEPROM самостоятельно.
Блок подключения кнопок и светодиода в комментариях не нуждается, разве что можно увеличить резистор, ограничивающий ток светодиода, т.к. современные светодиоды очень яркие.
Питание устройства осуществляется через изолированный DCDC преобразователь для устранения наводок и земляных петель, далее – фильтры и линейный стабилизатор на 3,3 вольта. Печатную плату не разводил, плата питания собрана на макетке. Также в схеме можно заметить два реле по две контактных группы в каждом, эти реле позволяют избавиться от щелчков при включении и отключении устройства. Они подключены к основному питанию USB, в отключенном состоянии реле все выходы устройства подключены к нормально замкнутым контактам и через них посажены на землю через резистор R20. При подаче питания включение реле происходит с задержкой (R19, C4), а при отключении питания реле выключаются сразу, в то время как DSP еще продолжает работать от энергии, запасённой в конденсаторах фильтра. Это и позволяет избежать щелчков. Питать устройство можно от любого USB разъема, потребление всего около 160 мА:
На этом, пожалуй, все. Добавлю несколько фотографий готового устройства:
Прикрепленные файлы:
- DSP.zip (607 Кб)
Автор: AMatroskin