Целью данного проекта является создание аудио визуализации на 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
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
МК AVR 8-битATmega8A-PU1
С1
Конденсатор10 мкФ1
С2
Конденсатор1 мкФ1
R1
Резистор100 кОм1
LCD-дисплейNokia 33101
MIC
Микрофон1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- avr-fft-3310.tar.gz (36 Кб)