Цветомузыка или разработка трехполосного анализатора спектра реального времени с использованием вейвлет-анализа на базе FPGA. Однажды мой отец показал мне созданную им аналоговую цветную музыку.
Три прожектора весело, четко в такт музыке мигали, настроенные каждый на свой диапазон частот, а четвертый зажигался только тогда, когда какой-либо из прожекторов гас, чтобы в комнате не было темно во время затишья.
Потом что-то в нем сломалось, и оно пролежало пылиться на полке добрых десять лет. Поскольку я очень люблю слушать музыку, а о цветной музыке у меня остались яркие воспоминания, мне очень хотелось воскресить ее и насладиться миганием прожекторов под любимые ритмы.
И, конечно же, использовать высокие технологии для реализации задуманного.
Поскольку я работаю в компании, которая занимается обработкой цифровых и аналоговых сигналов на базе ПЛИС, то идея возникла сама собой.
Я решил создать «числовую дробилку», которая пропускала бы аудиосигнал в реальном времени через три фильтра, настроенные на три частотных диапазона.
Покопавшись в Интернете, какие диапазоны частот используются для создания цветомузыки (ведь тема эта достаточно старая), я нашел следующее: НЧ: 40 – 110 Гц СЧ: 1000 – 5000 Гц ВЧ: 10000 – 18000 Гц В качестве фильтров я изучил вейвлет-преобразование, которым занимается компания, и получил три набора коэффициентов, с помощью которых свернул данные с помощью АЦП с частотой дискретизации 3 МГц.
Частотная характеристика фильтров представлена на рисунке:
Итоговый проект выглядит следующим образом:
В качестве процессора я использовал Четвертый процессор , созданный той же компанией, поэтому я прекрасно умею с ним работать.
Аппаратно созданы блоки памяти с коэффициентами фильтра, блок чтения данных с АЦП, реализована свертка данных АЦП и коэффициентов фильтра, а также блок с ШИМ для светодиодов.
Все это было подключено к процессору, скомпилировано и зашито в Spartan-3 XC3S400. Далее я начал писать программу для процессора, которая выполняла бы нужную мне задачу — считывала результаты свертки (амплитуда сигнала на определенных частотах) и подавала полученные значения на светодиоды ШИМ.
Результаты свертки были правильными, но светодиоды почему-то горели постоянно и гасли только тогда, когда музыка почти утихала.
Начал разбираться и понял, что яркость светодиода зависит от порога ШИМ не линейно, а логарифмически.
То есть, если у меня 1024-битный ШИМ, то чтобы плавно менять яркость светодиода от самого тусклого к самому яркому, мне пришлось последовательно брать следующие пороговые числа ШИМ: 0, 15, 31, 63, 127. , 255, 511, 1023. Таким образом, я получил 8 разных степеней свечения светодиодов, и этого мне вполне хватило.
И после корректировки результатов свертки под эти пороговые значения цветомузыка работала так, как я хотел.
Далее я написал логику для пассивного канала.
Его примерная работа такова, что при затухании любого из каналов этот пассивный светодиод начинает набирать яркость.
Таким образом, в комнате никогда не будет совсем темно.
Еще я написал автоматическую регулировку чувствительности - при изменении громкости музыки программа сама увеличивает или уменьшает коэффициент, который умножается на результат свертки из фильтров.
Также я написал программу на Delphi, которая общается с платой через COM-порт RS-232 и умеет строить графики по всем каналам в реальном времени, а также в порядке тонкой настройки изменять значения некоторых внутренних переменных.
Все эти настройки можно записать на флешку EEPROM 93C86, которая была распаяна на подаренной мне плате.
Внешний вид программы:
Когда все это заработало, нужно было создать силовой агрегат. В качестве перехода к силовой части я использовал оптотиристоры Т0125-12,5:
Эти элементы имеют 4 вывода: 2 из них — обычные светодиоды, а два других — силовые выключатели.
Вы можете догадаться, что когда светодиод горит, две клеммы питания замкнуты, и наоборот. Я продублировал каналы ШИМ в аппаратной части своего проекта и подключил их к выходам оптотиристоров (правда, ШИМ для этих каналов пришлось инвертировать из-за обратной логики работы оптотиристоров), и выложил небольшую полоску по силовой части для подключения точечных светильников.
Все заработало с первого раза и работает до сих пор.
В качестве точечных светильников используются обычные лампочки на 220В.
В дальнейшем я решил добавить на цветно-музыкальную панель два аналоговых измерителя на два канала, дал им красивую зеленую подсветку, и в результате получилась вот такая коробочка:
Ну а внутри все это выглядит так:
Можно посмотреть видео работы цветомузыки, но учтите, что там все мигает гораздо реже, чем в реальности.
Файл прошивки для Spartan-3 XC3S400-4tq144 а также программа Delphi с исходниками здесь .
Печатные платы выложу чуть позже.
Этого комплекта хватит тем, кто серьезно хочет собрать себе такую же систему.
"=" Теги: #Сделай сам или сделай сам #плайс #FPGA #плайс #фильтр #цветомузыка #анализатор спектра
-
Лосев Алексей Федорович.
19 Oct, 24 -
Этот Подозрительный Скайп
19 Oct, 24 -
Временная Капсула
19 Oct, 24 -
Ноутбук От Intel: Тонкий, Легкий, Кожаный
19 Oct, 24