SQ Система в CS55 Plus. Проект DSP в SigmaStudio для ADAU1701
Для управления и настройки DSP ADAU1701 используется программное обеспечение SigmaStudio. В данном приложении можно создавать проекты и цепочки обработки сигнала для всех чипов DSP, АЦП/ЦАП и цифровых УНЧ от Analog Devices.
Данный программный пакет достаточно известный. На форумах Analog Devices «ADI EngineerZone» (ez.analog.com/dsp/) очень активное обсуждение примеров различных решений, помогают с решением проблем, детально разъясняют как выполнить те, или иные действия. В настоящий момент доступ возможен только под VPN.
Скачать дистрибутив SigmaStudio можно на сайте Analog Devices, либо во ссылке ниже:
Для подключения, настройки в реальном времени через программный комплекс Sigmastudio и заливки программы в EEPROM модуля DSP ADAU1701 используется модуль USBi от AD.
Но это дорогое и редкое устройство, поэтому все успешно используют для данных целей плату на чипе CY7C68013A, которых много в свободной продаже на Ali
EZ-USB FX2LP CY7C68013A USB logic analyzer core board

Плата на базе микросхемы CY7C68013A от Cypress Semiconductor умеет «прикидываться» стандартным интерфейсом USBi от AD для подключения к DSP по USB, c возможностью внесение изменений в on-line режиме и записи проекта в EEPROM, для последующей загрузки при запуске DSP.
Как я реализовал оформление данной платы и её подключение к готовому DIY процессору представлено в предыдущем посте SQ Система в CS55 Plus. Часть 6: DIY процессор (DSP)
Для использования данной платы необходимо поставить драйвер и пакет утилит от Cypress. Необходимый архив с драйверами и пакет утилит разместил по ссылке ниже:
Drivers CY7C68013A
CySuiteUSB 3.4.7_B204.exe
При первом подключении плата определяется как неизвестное устройство:

Скармливаем драйвер «неизвестному устройству» и оно стало определяться как «Cypress FX2LP No EEPROM Device», именно так как и нужно.


Далее, из пакета программного обеспечения для платы Cypress, необходимо запустить утилиту «CyConsole»

В Cypress USB Console мы видим наше устройство.

Теперь в данной программе необходимо нашему устройству скормить скрипт, который размещен по пути C://Program Files/Analog Devices/SigmaStudio 4.2/USB drivers/x64/ADI_USBi.spt и нажав кнопку «Play script» запустить скрипт.

В системе пропадет наше устройство, и появится новое, под названием «Analog Devices USBi (programmed)»

Подключение платы CY7C68013A и DSP ADAU1701:
Обе платы будут общаться по шине I2C, и обращение и запись в EEPROM платы DSP также осуществляется по I2C.
Подключается всё это следующим образом (используем пины SDA, SCL, GND):

При подключении платы CY7C68013A к ПК, запускаем снова скрипт в Cypress USB Console, и видим статус подключения интерфейса USBi в программе и SigmaStudio, блок USB Interface загорелся зеленным цветом, значит связь есть.


Также в сети есть статья, описывающая разные способы запуска данный платы в качестве интерфейса USBi, одним из которых является установка модифицированного драйвера, который сразу позволит определить плату как устройство USBi без манипуляций с Cypress USB Console и подгрузкой скрипта:
USB интерфейс для программирования DSP аудиопроцессоров Analog Devices в среде Sigma Studio
— модифицированный драйвер USBiDriver.zip
Данный драйвер не имеет цифровой подписи, поэтому при установки надо дать соответствующее разрешение на установку без подписи.
Также есть возможность загрузить модифицированную прошивку на саму плату CY7C68013A, без необходимости установки модифицированного драйвера, но мой экземпляр платы не хотел прошиваться, из-за другого типа EEPROM, китайцы иногда ставят то, что есть у них на складе ))
Проект в SigmaStudio:
Для начала работы с DSP в SigmaStudio надо подготовить проект.
Проект в SigmaStudio имеет блочную структуру, необходимые блоки как для организации аппаратной части, так схемы обработки сигналов выбираются из дерева блоков «Tree Toolbox», и соединяются связями в рабочем поле блоков.
Для начала работы с платой DSP ADAU1701, на вкладке «Hardware configuration» рабочей области необходимо добавить блоки USB Interface, IC1 ADAU1701, и блок IC2 E2PROM, для последующей записи нашего проекта в EEPROM на плате.

На вкладке «Schematic» уже непосредственно размещаем блоки «ввода» (АЦП) Input 1, и «вывода» Output 1 (DAC1), Output 2 (DAC2) и так далее. А уже между блоками ввода и вывода размещаются блоки с различными алгоритмами обработки.

Для того, чтобы у нас заработал внешний DAC PCM5102 по шине I2S, в SigmaStudio на вкладке «Hardware Configuration» и нижней вкладке «IC 1-170x\140x Register Control» необходимо выставить и проверить следующие пункты как на скриншоте ниже:
— в блоке «Serial Output 1 (channels 0-7)» поставить галочку на Master Mode, и проверить LRCLK polarity и BCLK polarity
— в блоке «GPIO» выставить:
MP6 — Output Sdata_out0;
MP10 — In Lrclk_out;
MP11 — In Bclk_out

В ходе настройки систем на разных своих автомобилях я пришел следующему проекту:

У каждого динамика есть свой отдельный параметрический эквалайзер, регулятор уровня, переключатель MUTE, а также есть дополнительный побортный переключатель MUTE (левая/правая сторона, для удобства замеров и настройки), а также блоки задержки сигнала.
Файл проекта у меня получился в двух вариантах, и различается они только способом задания задержки сигнала для канала сабвуфера.
В случае, когда расстояние от правого мида до точки прослушивания больше, чем расстояние от сабвуфера до точки прослушивания, правый мид становится опорным элементом, и все сигнал от остальных динамиков, в том числе сабвуфер задерживаются, относительно мида.
В случае, когда сабвуфер является самым дальним излучателем, или когда он расположен в багажнике, или направлен в сторону двери/крышки багажника, необходимо задать большую задержку. И чтобы в ходе настройки и процесса «вытягивания» сабвуфера из багажника не требовалось бы постоянно корректировать задержку всех остальных динамиков, то мы ставим блок задержки сабвуфера до всех остальных каналов. Значением задержки сабвуфера у нас станет разница расстояния между сабвуфером и правым мидом, а задержку остальных динамиков мы уже выставляем относительно правого мида.
Получается, что мы можем выставить задержку правого/левого твитера и левого мида относительно правого мида, зафиксировать данный результат, и уже впоследствии корректировать задержку сабвуфера для точного согласования саба и мидбасов.
В связи с этим, у меня получилось две версии проекта:
— для ближнего размещения сабвуфера (car_dsp_v3_sub_close.dspproj);

— для дальнего размещения сабвуфера (car_dsp_v3_sub_far.dspproj);

Задержки в SigmaStudio задаются сэмплами, поэтому я подготовил таблицу для перевода расстояния до динамиков из точки прослушивания в сэмплы, которые вносятся в соответствующие блоки для каждого излучателя. В таблице сделал соответствующие комментарии по выбору проектов.
Расчет временных задержек (Time alignment) .XLS

Немного информации по используемым блокам в проекте:
Основные блоки:
— Уровень сигнала на входе (IN_GAIN): с помощью этого блока можно повысить уровень входного сигнала в случае необходимости;
— Общий параметрический эквалайзер на входе (INPUT_EQ): в данном блоке можно задать отдельный фильтр (разных типов) с указанием частоты, уровня, добротности и отклонение общего гейна. Всего в данном блоке можно добавить 15 отдельных фильтров, если требуется больше, то добавляем последовательно еще один такой блок, и добавляем там новые фильтры;

— Блоки разделительных фильтров/кроссоверов (SubCrossover и FrontCrossover): здесь задаём частоты раздела полос и порядок фильтров, доступны порядки в плоть до 48дб/окт (Linkwitz-Riley);

— Сабсоник фильтр сабвуфера (SubSonic): фильтрация инфранизких частот для снижения искажений на сабвуферном динамике;

— Параметрический эквалайзер на каждый канал (HIGH RIGHT EQ, MID RIGHT EQ, HIGH LEFT EQ, MID LEFT EQ): фильтры для корректировки каждого отдельного динамика;

— Блоки задержек каналов (SUB/FRONT DELAY и HIGH/MID DELAY): один из самых дальних динамиков ставим опорным (обычно правый мид) с задержкой в 1 сэмпл (0 нет принимается), значения для остальных каналов ставим из расчета семплов в таблице, описанной ранее. В блоке задержки два значения: MAX (максимальная задержка) и CUR (текущее требуемое значение задержки). Лучше значение MAX держать ближе к значению CUR, что бы не перерасходывать память ADAU1701;

— Дальше идут блоки уровней каждого канала, с блоками MUTE, которые используются для сведения каналов системы по уровню, и смещению центрального образа;

Дополнительные блоки:
— Компрессор для отключения входа при отсутствии полезного сигнала (HU noise compressor): использую, чтобы убрать цифровые шумы ГУ от Changan, которые присутствуют в сигнале. Во время воспроизведения их не слышно, а в тишине они напрягают. Их слышно, когда музыка выключена, или на паузе. Эти шумы наблюдались еще при работе ГУ со штатной акустикой, похоже косяки при проектировании или реализации ГУ. Я добавил данный блок компрессора, который полностью отключает вход, когда уровень полезного сигнала становится тише -70 дБ. После остановки воспроизведения или паузы всё замолкает;

— Регулируемый Low-Shelf фильтр для нижнего диапазона (Bass Low-Shelf filter): данный фильтр дает мне возможность регулировать уровень нижнего диапазона с помощью потенциометра 10 кОм, который подключается на GPIO ADAU1701. ADAU1701 подключать кнопки, потенциометры и энкодеры на GPIO, которые могут управлять многими блоками в реальном времени. Модуль такой регулировки опишу в другом посте, где я сделал пульт управления басом и отключением задержек для «совместного» прослушивания в автомобиле:

После того как мы подготовили проект, жмем кнопку «Link Compile Connect» для проверки и компиляции нашего проекта, и в правом нижнем углу получим сообщение «Ready: Compiled», значит всё нормально.


Чтобы загрузить наш комплект в оперативную память чипа ADAU1701, нажимаем кнопку «Link Compile Download», получим подтверждение успеха в правом нижнем углу, и теперь у нас запустится наш проект на DSP и мы можем менять параметры, настройки блоков и наблюдать изменения в сигнале в реальном времени при настройке в автомобиле:

После того как мы закончили настройку, необходимо записать проект и параметры в постоянную память (EEPROM) DSP ADAU1701. Для этого нам нужно перейти на вкладку “Hardware configuration”, щелкнуть правой кнопкой мыши по блоку «ADAU1701» и выбрать «Write latest compilation to E2PROM»:

Затем в окне записи выбрать параметры объема памяти (будет зависеть от объема установленного чипа памяти), страницы записи, частоты, и выполнить запись в память (как на изображении):

При следующем запуске DSP ADAU1701 считает записанный проект и параметры из EEPROM, и запустится с заданным проектом и настройками.
На рабочем DSP всегда можно опять подключиться с помощью CY7C68013A, в SigmaStudio в текущем проекте опять нажать «Link Compile Download», продолжить настройку/корректировку, новый результат опять записать в EEPROM.
В следующем посте опишу свой подход к настройке системы, используемые инструменты и программное обеспечение.
К данному посту я также собрал все используемые инструменты и фалы вместе и разместил по следующей ссылке: