Все сигналы, независимо от того, вы их придумали или наблюдали во Вселенной, на самом деле просто сумма простых синусоид различных частот.
Я сделал небольшой аудио анализатор спектра (0 — 10 кГц) из ЖК-дисплея 16×2 и микроконтроллера ATmega32. Я начал с простых ДПФ (Дискретное Преобразование Фурье). БПФ (Быстрое Преобразование Фурье) отличается от ДПФ лишь большей скоростью и немного более сложным алгоритмом, я не стал его использовать, возможно я добавлю его позже.
ДПФ медленный по сравнению с БПФ. Мой ЖК анализатор спектра не требует большой скорости, которую может обеспечить БПФ, и если изображение на экране будет меняться с частотой около 30 кадров / сек, то это более чем достаточно для визуализации звукового спектра. Но я итак могу достичь частоты около 100 кадров / сек, однако для ЖК-дисплея не рекомендуется слишком высокая частота обновления. Звук с частотой дискретизации 20 кГц даёт 32 точки ДПФ. Поскольку результат преобразования симметричен, мне нужно использовать лишь первые 16 результатов. Соответственно максимальная частота 10 кГц. Таким образом, 10кГц/16 = 625Гц.
Я пытался увеличить скорость вычисления ДПФ. Если есть точка N ДПФ, то необходимо найти синус и косинус (N ^ 2) / 2. Для 32-точечного ДПФ, необходимо найти синус и косинус 512. Прежде чем искать синус и косинус, нам нужно найти угол (градусы), который занимает некоторое время процессора. Для этого я сделал таблицы для синуса и косинуса. Я сделал синус и косинус 16-битными переменными, умножив значения синуса и косинуса на 10000. После преобразования я должен разделить каждый результат на 10000. Теперь я могу рассчитать 120 32-точечных ДПФ в секунду, что более чем достаточно для анализатора спектра.
Дисплей
Я использовал пользовательские символы для ЖК-дисплея загруженные в 64 Байт встроенной памяти ЖК-дисплея. В интернете я увидел видео, где ЖК-дисплей 16х2 используется в качестве дисплея анализатора спектра и использовал эту идею.
Аудио вход
Одной из наиболее важных частей анализатора спектра является получение сигнала с электретного микрофона. Особое внимание должно быть уделено разработке предварительного усилителя для микрофона. Нам нужно установить нулевой уровень на входе АЦП и максимальный уровень равный половине напряжения питания, т.е. 2,5В. На него может подаваться напряжение от -2,5В до +2,5В. Предусилитель должен быть настроен так, чтобы не превышать этих границ. Я использовал операционный усилитель LM324 в качестве предварительного усилителя для микрофона.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Дисплей
МК AVR 8-битATmega321
Конденсатор22 пФ2
Конденсатор0.1 мкФ1
Электролитический конденсатор100 мкФ1
Резистор100 Ом1
Подстроечный резистор4.7 кОм1
Кварцевый резонатор16 МГц1
LCD-дисплей16х21
Блок питания5 В1
Аудио входU1
Операционный усилительLM3241
С1
Конденсатор1 мкФ1
С8
Конденсатор0.01 мкФ1
R1
Резистор220 кОм1
R2, R3
Резистор10 кОм2
R4, R9
Резистор1 кОм2
R5
Резистор1.5 кОм1
MIC
Микрофон1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- atmega32_spectr.rar (3 Кб)