Например TDA7294

РадиоКот > Схемы > Аудио > Фильтры, эквалайзеры

Цифровой 8 канальный процессор обработки звука

Автор: AntoxaZ18
Опубликовано 19.09.2016.
Создано при помощи КотоРед.

Всем привет, хочу поделиться с вами своим небольшим проектом. Я люблю слушать музыку в машине и дома, поэтому задумался о переходе на схему с поканальным усилением. От обычной схемы заключается в том, что отсутствуют пассивные кроссоверы на выходе усилителя, и на каждый динамик приходится отдельный канал. В чём преимущество такой схемы? Помимо увеличения мощности, улучшается и разрешение акустики за счёт того, что каждый диапазон усиливается своим усилителем. Так же это позволяет более точно настроить акустическую систему, так как каналы независимы друг от друга. Так как акустическая система обычно состоит из нескольких полос НЧ/СЧ/ВЧ, то необходимо разделить сигнал на отдельные полосы для каждого динамика:

Где НЧ - частотная область работы сабвуфера СЧ - область работы среднечастотных динамиков
ВЧ - область работы пищалок (твитеров).

Такую задачу можно решить с помощью перестраиваемых фильтров на операционных усилителях (кроссоверы линквица-райли). Но у этого решения есть недостатки:
большое количество элементов при большом количестве каналов:
1. сложность настройки
2. нет возможности сохранить параметры настроек
3. высокие требования к разводке платы
Плюс ко всему динамики установлены на разном расстоянии, и для выравнивания было бы неплохо ввести разные временные задержки. В связи с этим было принято решение делать обработку в цифровом виде, за одним избавится от крутилок и получить возможность управлять с компьютера/смартфона и сохранять конфигурацию, а также расширять возможности обработки звука: лимиттеры мощности выходного сигнала/эквалайзер, фазолинейные фильтры (КИХ).

Исходя из задач были выдвинуты следующие требования:
12В, гальванически развязанное, чтобы не было земляной петли между источником звука и процессором. Вход REM чтобы в выключенном состоянии не высаживать аккумулятор. Количество выходных каналов: минимум 7 (2 мидбаса, 2СЧ, 2ВЧ, сабвуфер). Качество АЦП/ЦАП желательно такое, чтобы не слышно было присутствие процессора в тракте. Вход: Стерео сигнал с тюльпанов с магнитолы, либо цифровой вход SPDIF или TOSLINK. Подключение к ПК с помощью USB.

 

Схема

Следующим этапом стало создание схемы устройства и выбор компонентов. В качестве выходного ЦАП я выбрал 8 канальный ЦАП
PCM1861
Dynamic Range: 105 dB
SNR: 105 dB
THD+N: 0.002%

А в качестве источника входного сигнала
АЦП PCM1808
PCM1808: 2 канала 24 бита
THD+N: –93 dB
SNR: 99 dB
Dynamic Range: 99 dB

Компоненты выбирал не очень дорогие, так как это большей степени экспериментальный проект. Сердцем системы стал процессор STM32F745. Почему именно это процессор? Он имеет маленький, легкий для пайки корпус, а также достаточно серьезные возможности в области обработки сигналов. Имеет на борту все что нужно для работы со звуком: 7 каналов I2S + поддержка расширенных аудио протоколов типа TDM, 4 входа SPDIF, i2c, spi, ШИМ, аппаратное вычисление чисел с плавающей точкой и еще куча всего. Очень интересно было проверить его возможности на реальных задачах.

Теперь пройдемся по получившейся схеме устройства:

Она получилось достаточно гармоничной и лаконичной. Полная версия в формате Pcad и картинкой есть в приложении к статье.

Схема подключения процессора: Процессор тактируется от внешнего кварца 8 МГц. 

Схема питания: Развязанный DC/DC преобразователь Ирбис. Максимальный ток модуля - 0,5А. Работает от 9 до 18 вольт. Выдает стабилизированное напряжение 6В и имеет вход Remote. Отдельные линейные стабилизаторы-отдельные для процессора, ацп, цап, аналоговой части свыходами 3,3 и 5В. К каждому подключены фильтрующие конденсаторы и ферритовые бусинки-фильтры. 


Поключение АЦП/ЦАП: АЦП и ЦАП подключены по шине I2S, в которой есть следующие линии:
SCK - Тактовый сигнал битовой синхронизации
LRCLK - Тактовый сигнал фреймовой синхронизации,
DATA - данные для левого канала (когда LRCLK имеет высокий уровень) и правого канала (LRCLK имеет низкий уровень)
Для ЦАП соответственно 4 линии DATA. АЦП и ЦАП имеют разрешение 24бита, поэтому длина фрейма должна быть минимум 24 такта SCK. Так как процессор 32-битный длину фрейма выбрал 32 бита. Формат данных I2S предусматривает сдвиг данных на 1 такт относительно сигнала LRCLK, но я решил использовать режим синхронной передачи для упрощения отладки. Отладку таких цифровых интерфейсов удобно проводить с помощью китайской копии логического анализатора SALEAE. У него удобный софт с встроенным анализатором практически всех распространенных протоколов.
Для включения и настройки режимов для АЦП необходимо подать высокий и низкий уровень на входы FMT. Так же для работы АЦП/ЦАП необходим сигнал MCLK - тактовая частота для тактирования внутренних цепей АЦП/ЦАП, в том числе i2c. Долго не мог понять почему ЦАП не отвечает по шине I2c =) MCLK в 256 раз больше сигнала SCK. Тактовую частоту генерирует сам процессор, для этого у него есть отдельный генератор с ФАПЧ и выходом на внешние устройства.

 Преобразователь USB->UART выполнен на базе микросхемы CP2103. Также с помощью нее осуществляется обновление программы процессора. Для сброса процессора и управления режимом загрузки (вывод BOOT0 процессора) необходимо настроить дополнительные выводы микросхемы.

 

 SPDIF. Импульсы у него двуполярные, поэтому напрямую нельзя подавать на вход процессора. Для преобразования двуполярного в однополярный с помощью инвертора по схеме, которую рекомендует производитель чипов. Так же на входе стоит согласующий резистор 75 Ом.

Конструкция

Так как это проект экспериментальный и многое зависит от качества платы, я решил сэкономить время и заказал 2 шт на заводе Резонит. Саму плату развел с помощью лайт версии отечественной программы трассировщика TopoR, поэтому трассировка имеет некоторые особенности. Файлы платы буду в приложении. Сама плата на двух слоях и толщиной 2мм. Плату разводил с учетом корпуса, с ними у нас большие проблемы. Хотелось красивый корпус за вменяемые деньги и время. В итоге нашел на Алиэкспрессе достаточно неплохие на вид корпуса из алюминиевого профиля. В Китае можно найти разных типоразмеров. Нарезку пластиковых панелек сделали с другом на его мини чпу станочке, в сборе вышло достаточно симпатично.

Плата в корпусе 

Программная часть

Программа проста и сложна одновременно. Она должна запрашивать данные у АЦП, копировать на 8 каналов, обрабатывать их и отправлять в ЦАП. Особенность обработки состоит в том, что для реализации как эквалайзера так и кроссовера используются одинаковые фильтры, только с разным набором параметров.
Обычно для кроссоверов используются 3 типа фильтров Бесселя, Батерворта и Линквица-Райли. Фильтр второго порядка состоит из одного фильтра с бесконечной импульсной характеристикой (БИХ) 2го порядка и имеет крутизну 6дб/октаву. Для использования вычислений с плавающей точкой лучше всего подходит транспонированная структура II типа:

 

Рассмотрим расчет на примере ФНЧ. Для расчета фильтров нам понадобятся 3 параметра: добротность Q, частота среза Fs, усиление/ослабление в дБ (dBgain).

Переводим дБ в разы
V = pow(10, fabs(dBgain) / 20.0);

Рассчитываем параметры фильтра по следующим формулам:
K = tan(PI * Fs);
PI = 3.14

norm = 1 / (1 + K / Q + K * K);
a0 = K * K * norm;
a1 = 2 * a0;
a2 = a0;
b1 = 2 * (K * K - 1) * norm;
b2 = (1 - K / Q + K * K) * norm;

Формула для расчета выходного сигнала:
y[n] = b0 * x[n] + d1;
d1 = b1 * x[n] - a1 * y[n] + d2;
d2 = b2 * x[n] - a2 * y[n];

Для создания фильтра 4 порядка используют последовательно 2 БИХ фильтра, настроенные на одинаковую частоту. Отличаются они только параметром Q (добротностью). Крутизна в данном случае уже составляет 12дб/октаву, аналогично можно продолжить далее. В таблице указаны параметры фильтров до 8го порядка (48 дБ/октава).

Структура фильтра 8го порядка (фильтры 1 структуры):

Тестирования производительности процессора показало возможность использования 25-30 фильтров на каждый канал на частоте дискретизации 48кГц или 12-15 фильтров на частоте дискретизации 96кГц при использовании библиотеки фильтров CMSIS DSP libarm_cortexM7lfsp_math.a кооторую можно скачать на сайте ARM.com. Параметры фильтров процессор хранит во внутренней энергонезависимой FLASH памяти. Исходники так же будут доступны в архиве, но так как проект немного не закончен то желающему воспроизвести мой опыт придется немного его доработать =) Проект написан в среде ECLIPSE компилятор использовался GCC 5.4.

Измерения
Для измерения качество аудиотракта использовал программу SpectraLab и аудиокарту ASUS XONAR D1 112db/DAC 112db/ADC. SNR получился не очень хороший из-за наводок 50Гц. В целом характеристики получились неплохие для таких бюджетных компонентов. 

Выход ЦАП при подаче на вход АЦП синуса 1кГц

 

АЧХ системы без фильтров (на входе белый шум)

 

АЧХ системы кроссовер линквица-райли 4 порядка, частота среза 500Гц. Благодаря перестраиваемым на лету фильтрам можно задать какую угодно АЧХ.

 

Выводы
Пока проект не закончен, но эксперимент можно считать доказавшим свою жизнеспособность. Новые процессоры на базе ARM CORTEX M7 показали хорошие результаты по производительности. Благодаря ему стало возможным обработка звука в реальном времени по 8 каналам с хорошим качеством. Первая версия устройства больше экспериментальная для отладки программы для процессора, схемотехники и конструкции.Схема позволяет легко заменить в будущем ЦАП/АЦП на более качественные.
Процессор может использоваться не только в автомобиле, но и дома для проектирования акустических систем с биампингом/триампингом. По spdif его легко подключить к цифровому источнику. Звуком я остался доволен, но аппетит приходит во время еды, поэтому я думаю это было только начало.

 


Файлы:
Плата
Архив с схемой
Архив RAR
Программа для прошивки процессора
Двоичный файл прошивки


Все вопросы в Форум.


ID: 2383

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

40 8 7
1
Подробно