Поздравляем с Новым Годом! Новый Год 2019 стучится в двери и мы к нему уже готовы: FPGA проект "цветомузыка" готов и можно звать гостей на дискотеку. На этих видео смотрите, как оно работает:
Вот еще такое видео записал:
Проект довольно сложный, но я рад, что он заработал. Далее, читайте немного описания и комментариев..
Исходники проекта можно взять вот здесь, на гитхабе: https://github.com/marsohod4you/light-music
Топ модуль проекта выполнен в виде вот такой схемы:
Схема выглядит мелковатой, но думаю если откроете ее в отдельной вкладке браузера, то кое-что сможете рассмотреть. Красным цветом я добавил подписи к модулям. На схеме есть модуль АЦП FPGA MAX10 под названием fiftyfivenm_adcblock_top_wrapper. От него оцифрованный сигнал идет на три цифровых КИХ фильтра: низкие частоты (LOW PASS1), средние (MID PASS) и высокие (HIGH PASS). Границы частот я подбирал экспериментальным путем. Я прочитал довольно много статей про цветомузыку и смотрю, каждый инженер выбирает границы фильтров, как ему больше нравится, четких правил нет. Конечно это понятно: сколько людей - столько и мнений. В моем случае дело еще осложняется тем, что я принимаю аудио сигнал на микрофон, через самодельный микрофонный шилд к плате Марсоход3bis. Естественно, что я не знаю амплитудно частотную характеристику своего микрофонного усилителя на шилде. Да и микрофон может вносить изменения в спектр сигнала. С цифровых фильтров сигнал поступает на широтно-импульсные модуляторы PWM (Pulse Width Modulation). С модулей PWM сигналы выводятся на светодиоды платы Марсоход2bis, правда они там все желтые, но для отладки - пойдет. Главный же эффект делается на интеллектуальной светодиодной RGB ленте и этой лентой управляет модуль colorsRGB.
Модули colorsRGB, pwm, fir_filter и некоторые другие написаны на Verilog HDL.
Должен сказать, что канал низких частот был пожалуй самым не простым в этом проекте. Я сперва думал, что можно будет поставить просто фильтр низких частот, однако, что-то пошло не так: я заметил, что красный цвет у меня всегда сильно "гудит" от низких частот, похоже 50Гц. тогда я пытался сделать цифровой полосовой фильтр, чтобы отсечь все частоты ниже 50Гц. Эта задача оказалась очень не простой при частоте дискретизации около 50кГц требуется очень много звеньев КИХ фильтра. В результате многочисленных экспериментов я сделал двухступенчатый фильтр. Сперва сделал фильтр низких частот на 800Гц, потом после него сделал ресамплер - то есть понизил частоту дискретизации в 16 раз. И уже потом на более низкой частоте дискретизации делал полосовой фильтр низких частот.
Расчет фильтров я делал в онлайн калькуляторе t-filter.
В результате у меня получились вот такие частотные характеристики для низких частот. Первый фильтр:
Второй каскад низкой частоты, выход которого и есть красный канал на цветомузыке:
Для фильтра средних частот (зеленый канал) я выбрал дапазон 700-2700Гц:
Для высоких частот (синий канал) выбрал 3000-15000Гц.
Мне остается только добавить, что этот проект выкатился уже в четыре статьи на нашем сайте, эта статья и плюс вот эти:
1) изготовление платы микрофонного усилителя для платы марсоход3bis в домашних условиях методом ЛУТ
3) управление светодиодной лентой.
Подробнее...