Цветомузыка на базе ПЛИС

Цветомузыка или разработка трехполосного спектроанализатора реального времени с применением вейвлет-анализа на базе ПЛИС.


Однажды папа показал мне созданную им аналоговую цветомузыку. Три прожектора весело мигали четко под музыку, каждый настроен на свой диапазон частот, и четвертый прожектор загорался только тогда, когда какой-либо из прожекторов погасал, чтобы в комнате не было темно в затишье. Потом что-то в ней сломалось, и лежала она пылилась добрый десяток лет на полке. Поскольку я очень люблю слушать музыку, и у меня остались яркие воспоминания о цветомузыке, мне очень хотелось ее воскресить и насладиться миганием прожекторов под любимые ритмы. Ну и, разумеется, использовать высокие технологии для реализации задуманного…




Так как я работаю в фирме занимающейся обработкой цифровых и аналоговых сигналов на базе ПЛИС, идея возникла сама собой. Я решил создать «числомолотилку», которая бы в реальном времени гоняла аудио сигнал по трем фильтрам, настроенным на три диапазона частот. Поискав в интернете какие диапазоны частот используют в создании цветомузыки (ибо тема эта довольно-таки старая), я нашел следующее:
НЧ: 40 – 110 Гц
СЧ: 1000 – 5000 Гц
ВЧ: 10000 – 18000 Гц
В качестве фильтров мной было изучено вейвлет-преобразование, которым занимается фирма, и я получил три набора коэффициентов, с которыми производил свертку данных с АЦП с частотой дискретизации 3 МГц. АЧХ фильтров показаны на рисунке:



Схема получившегося проекта следующая:



В качестве процессора я использовал Forth-процессор, созданный в этой же фирме, поэтому я прекрасно умею с ним работать. В аппаратной части были созданы блоки памяти с коэффициентами фильтров, блок чтения данных с АЦП, реализована свертка данных АЦП и коэффициентов фильтров, а так же блок с ШИМом для светодиодов. Все это дело было подключено к процессору, откомпилировано и зашито в 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В.



Впоследствии я решил еще добавить на панель цветомузыки два analog meter’а на два канала, сделал им красивую зеленую подсветку и в результате получилась такая вот коробочка:



Ну а внутри все это выглядит так:



Можете посмотреть видео работы цветомузыки, но учтите, что там все мигает гораздо реже, нежели на самом деле.



Файл прошивки для Spartan-3 XC3S400-4tq144 а так же программа на Delphi с исходниками тут. Печатные платы выложу чуть позже. Этого комплекта хватит тем, кто всерьез захочет собрать себе такую же систему. =)
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 31

    +31
    Папа, наверное, в шоке. То, что он сделал при помощи горстки деталей — потребовало адской числодробилки, программы, настроек и всего остального. :)
      +5
      И результат не на много круче, хотя с число дробилкой можно было бы реально развлечься.

      Например, кого волнует абсолютное значение сигнала в полосе частот, гораздо эффектней рулить фонарями от скорости его изменения! И никакая подстройка не требуется, и на любой музыке, светит интересно.
      Далее можно определить пороговые значения (может быть даже и адаптивно), таким образом три фильтра дадут нам три бита, которые дадут восемь возможных комбинаций, для управления восемью лампами.
      Это смотрится эффектно ибо сами по себе лампы накаливания достаточно инертны, и эффектно моргают только под простую и медленную музыку, а такой дешифратор позволяет избежать каши из включенных ламп…
        +2
        Поскольку папа является директором этой фирмы, и это с его подсказки я начал создавать цветомузыку, думаю он врят ли будет в шоке =)
        +1
        Круто!

        И выглядит очень брутально ))
          +2
          Респект за отличную поделку! Сам до сих пор поддерживаю в рабочем состоянии советскую светомузыкальную установку (видео), но её приходится перенастраивать под каждую следующую песню, так что тоже вынашиваю идею перехода на цифровые рельсы, но про ШИМ раньше даже не думал.
            0
            Спасибо. =)
            0
            я использовал оптотиристоры

            У этих элементов 4 вывода: 2 из них это обычный светодиод, а другие два являются силовым тумблером.

            Простите, но звучит бредово. Какой еще тумблер в тиристоре? Силовой ключ Вы хотели сказать?
              0
              Исправил.
              0
              Плата со спартаном дорого стоила?
                0
                Плата взята попользоваться на неопределенный срок =) Ну а так стоимость этой платы около 100$
                +1
                Неплохо, хоть и выглядит как стрельба из пушки по воробьям.
                  +5
                  Разработка роботизированной руки для забивания гвоздей микроскопом
                    0
                    Спасибо, поностальгировал. У меня в далеком детстве на старой квартире стояла заводская советская установка «Искра», я долго не мог вкурить алгоритм, по которому она моргает, теперь вразумел.

                    image
                      +4
                      Долго ностальгировал… КД213, родные ставропольские оптроны…
                      Единственная практическая польза — практика работы с ПЛИС, программирование, DSP. В остальном аналогичного результата можно добиться, собрав цветомузыку в аналоговом варианте, еще и дешевле выйдет.

                      Чтобы не приходилось подстраивать под каждую композицию и вообще не паритсья с уровнями, на вход достаточно поставить обычный аналоговый компрессор, например, на ОУ с регулируемым делителем на полевике.

                      Попробуйте заменить лампы накаливания на импульсные газоразрядные (типа ИФК-120) с соответствующим обвесом. Очень интересно получится!
                        0
                        Спасибо за совет, подумаю над реализацией =)
                        А так, Вы абсолютно правы. Все это создавалось мной с первичной целью именно практика работы с ПЛИС, ибо этот проект можно перетранслировать на другой более мощный кристалл и уже создать реальный спектроанализатор с большим количеством каналов, который уже можно использовать для научных целей. Причем изменение проекта не займет много времени =)
                        0
                        Дискотека!
                          0
                          Ага, а можно и просто посидеть насладиться любимой музыкой с цветовым сопровождением =)
                          0
                          Огромная просьба: расшифровывайте аббревиатуры: ПЛИС, ШИМ. А лучше кратенько объясняйте что-это.

                          Мне было интересно почитать, но я споткнулся об аббревиатуры и превед. В тоже время много статей которые легко читаются даже с моим «школьным» уровнем радиотехники. Спасбо ;)
                            +2
                            ПЛИС (она же, FPGA) и ШИМ (он же, PWM)

                            Объяснение «что такое ПЛИС» без проблем может вылиться в статью.
                            0
                            А где схема, исходники и бинарники программ? Где ссылки на связанные материалы, применяемую среду разработки, документацию?
                              0
                              Исходники, схемы и бинарники являются коммерческой разработкой. За опорный материал можно считать книжку Разработка систем цифровой обработки сигналов на базе ПЛИС. Среда разработки — Xilinx ISE. Документацию на цветомузыку я не писал.
                                0
                                ИМХО, в блоге DIY (Do-It-Yourself) не стоит появляться без исходников. Этот пост я бы опуликовал в блог «Я пиарюсь».

                                А проект, конечно, здоровский. Особенно интересно смотрится, как подружили старые советские детали с новыми западными.
                                  0
                                  Выложил исходники, которых хватит для того, чтобы собрать такую же систему (правда печатные платы чуть позже выложу).
                              +6
                              image

                              :)
                                0
                                На пассивных фильтрах она мигает как ей хочется. Собравшие первую версию, обычно потом собирают и вторую, вот такую примерно:
                                image
                                Эх, а тиристоры раньше красивее были:
                                image
                                  0
                                  А-ааа! Далёкие 80-е, детство… Правда в том варианте, что я помню, там было четыре канала. Откуда у Вас эта схема?
                                  Не подскажите, где можно найти хоть какое-то описание этой схемы в интернете.
                                    0
                                    Нвсколько я помню — то был журнал «Юный Техник» (возможно и Радио, либо «В помощь радиолюбителю», либо «Моделист-Конструктор»). Я уж не помню. Я собирал её, а лампы ставил в ящик (примерно метр на метр) с передней стенкой из матового стекла. Была ещё доп статья про канал подсветки в паузах.
                                    Описание в данный момент есть вот тут: meanders.ru/svetomuzyka_1.shtml
                                    Но это ведь прошлый век уже. Один только трансформатор гальванической развязки замучаетесь искать или мотать. Нынче элементная база шагнула далеко вперёд, можно не заморачиваться с аналоговыми фильтрами. На данном этапе развития конечно лучше сделать свой анализатор спектра — можно получить эффекты куда как круче. ПЛИС — это, конечно экстрим, Raspberry, пожалуй, будет достаточно. Да даже ардуинки вроде как хватит — поищите в ютьюбе. Опять же свет можно на светодиодных лентах сделать, либо RGB лампы взять.
                                      0
                                      Огромное спасибо за ссылку!

                                      То, что это прошлый век — спору нет. Просто увидев эту схему, нахлынули детские воспоминания :-). У меня была собрана схема на пассивных элементах, а у одноклассника как раз эта. Разница чувствовалась визуально. Эта схема работала более динамичней. У него еще компрессор был по схеме Ануфриева собран. Я тогда завидовал белой завистью ему :-).

                                      А так да, сейчас проще на микроконтроллере всё собрать. Именно сейчас этим на STM32 и занимаюсь. Пока прототип: STM32 + светодиодная лента. Работает как плагин к AIMP плееру и напрямую от аудиовхода. С микроконтроллером можно много чего «наваротить» в отношении всяких эффектом и прочего.
                                +1
                                А еще если взять MATLAB FDAtool и нагенерировать HDL не три, а N (нет N — мало, M!) M — цифровых фильтров с полосой в несколько сотен (десятков) герц, и зажигать цвета в зависимости от звучащего инструмента.
                                тогда схема RC цепочками обойдется в некислый бюджет)

                                ЗЫ, автору спасибо за статью, иногда жаль, что рабочим ремеслом «не можется» заниматься по кайфу.
                                  0
                                  Что за песня в видео??
                                    0
                                    АРИЯ — Дух войны

                                  Only users with full accounts can post comments. Log in, please.