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