Отключаемые счетчики электроэнергии на пульте. Все с документами пломбами, гарантией и без посредников!

Визуализация аудио на LCD

Визуализация аудио на LCD

Целью данного проекта является создание аудио визуализации на LCD-дисплее от Nokia 3310. В проекте используется алгоритм быстрого преобразования Фурье с фиксированной точкой. Это позволяет отображать бары (столбики) на дисплее для каждой частоты при воспроизведении музыки. Другими словами, каждый бар будет отвечать за свою частоту: низкие, средние, высокие частоты и т.д.

В качестве микрофона мы использовали электретный микрофон: BOB-09964 от sparkfun. Данные с микрофона поступают на ножку аналогово-цифрового преобразователя микроконтроллера Atmel AVR atmega8 работающего на частоте 8 МГц (для этого не забудьте выставить соответствующий фьюз). Связь с LCD Nokia 3310 осуществляется через SPI-интерфейс. Наш контроллер atmega не имеет блока вычислений для работы с плавающей точкой. Для получения хорошего быстродействия и без нагромождения кода, мы будем использовать алгоритм быстрого преобразования Фурье (БПФ) с фиксированной точкой. Конечно, алгоритм БПФ с плавающей точкой более точный, но в нашем случае это не столь принципиально.

Популярный алгоритм БПФ (FFT) с фиксированной точкой был написан Тим Робертом в 1989 году (http://www.jjj.de/fft/fix_fft.tar.gz) Вначале, я портировал данный код для avr и avr libc для использования в данном проекте. Код работал, но быстродействие было не очень высоким. Затем, я наткнулся на оптимизированную под AVR библиотеку FFT: http://elm-chan.org/works/akilcd/report_e.html который работал в 4 раза быстрее моего!

Весь процесс представлен на диаграмме ниже. Сначала происходит захват сэмплов (выборок) с частотой дискретизации 16 кГц. Берется 64 сэмпла. С БПФ чем больше сэмплов, тем больше будет детализация. Для нашего проекта можно было бы использовать и меньшее число сэмплов, однако библиотека поддерживает минимум 64. Следующим шагом необходимо преобразовать сэмплы в частоту, и в конечном итоге вывести отображение на дисплей. Здесь небольшое примечание – т.к. LCD-дисплей подключен через SPI, то полное обновление дисплея происходит менее, чем за 4 мс, что дает нам возможность очень частого обновления дисплея.

Т.е. чем большее будет число выборок и быстрее обработка за определенный промежуток времени, тем более точным будет преобразование. Частота дискретизации будет зависеть от нужного нам диапазона частот, для нашего случая 16 кГц более, чем достаточно. Тем более, что в качестве источника аудио сигнала у нас используется электретный микрофон с ограниченным диапазоном частот. В заключении, хотелось бы отметить, что на низких частотах мы немного расширили столбики (бары), чтобы визуально лучше смотрелось.

Распиновка LCD Nokia 3310:

Для работы AVR на 8 МГц при прошивке через uisp, я использовал команду: uisp -dprog=stk200 –wr_fuse_l=0xe4

Скачать прошивку и проект с исходниками

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)


Категория: Микроконтроллеры
Метки:

Написать коментарий

*
= 3 + 0

Добавить изображение

Последние статьи