Цветомузыка в FPGA

Поздравляем с Новым Годом! Новый Год 2019 стучится в двери и мы к нему уже готовы: FPGA проект "цветомузыка" готов и можно звать гостей на дискотеку. На этих видео смотрите, как оно работает:

Вот еще такое видео записал:

Проект довольно сложный, но я рад, что он заработал. Далее, читайте немного описания и комментариев..

Исходники проекта можно взять вот здесь, на гитхабе: https://github.com/marsohod4you/light-music

Топ модуль проекта выполнен в виде вот такой схемы:

Quartus Prime Top Module Schematics of Light-Music Project

Схема выглядит мелковатой, но думаю если откроете ее в отдельной вкладке браузера, то кое-что сможете рассмотреть. Красным цветом я добавил подписи к модулям. На схеме есть модуль АЦП 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.

В результате у меня получились вот такие частотные характеристики для низких частот. Первый фильтр:

frequency response 800Hz Low pass filter for color music

Второй каскад низкой частоты, выход которого и есть красный канал на цветомузыке:

frequency response band pass filter for color music

Для фильтра средних частот (зеленый канал) я выбрал дапазон 700-2700Гц:

frequency response mid pass filter for color music, green channel

Для высоких частот (синий канал) выбрал 3000-15000Гц.

frequency response high band filter for color music, blue channel

Мне остается только добавить, что этот проект выкатился уже в четыре статьи на нашем сайте, эта статья и плюс вот эти:

1) изготовление платы микрофонного усилителя для платы марсоход3bis в домашних условиях методом ЛУТ

2) построение цифрового КИХ фильтра с большим числом звеньев (у меня до 512), модуль на Verilog, и симуляция фильтра в icarus verilog

3) управление светодиодной лентой.

 


Добавить комментарий