32-полосный анализатор-визуализатор спектра звуковых частот на Arduino

В этой статье мы рассмотрим создание 32-полосного анализатора-визуализатора спектра звуковых частот на основе платы Arduino. Надеемся, что этот проект вызовет интерес у аудио энтузиастов и любителей электроники, увлекающихся программированием Arduino. Компоненты, используемые в данном проекте, сравнительно дешево стоят, поэтому собрать его будет достаточно просто.

Внешний вид анализатора-визуализатора спектра звуковых частот на Arduino

Основные особенности данного анализатора спектра:

  • использует легко устанавливаемые библиотеки “arduinoFFT” и “MD_MAX72xx”;
  • пять различных режимов отображения, переключаемых кнопкой;
  • смешивание правого и левого каналов аудио сигнала, поэтому вы не пропустите ни один звук;
  • использование 32х8 матричного дисплея из светодиодов, вы можете изменить это по своему желанию;
  • аудио сигнал можно подать с выхода наушников или с выхода Line-out звуковой системы или усилителя.

Необходимые компоненты

Плата Arduino Nano (купить на AliExpress) или Uno
Источник питания с напряжением 5 В (можно по кабелю USB от компьютера)
Светодиодный матричный дисплей 32х8
Кнопочный переключатель
Конденсатор 100 нФ (2 шт.)
Резистор 5 кОм (3 шт.)
Резистор 10 кОм (1 шт.)
Резистор 100 кОм (2 шт.)

Значения сопротивлений резисторов не являются «строгими», вы можете варьировать их в небольших пределах по своему желанию. Но значения сопротивлений R1 и R2 (см. схему ниже) должны быть одинаковыми.

Общие принципы работы проекта

Плата Arduino сконструирована на основе микроконтроллера ATmega328P и имеет встроенные аналогово-цифровые преобразователи (в англ. аббревиатуре ADC — Analog To Digital converter), которые в нашем проекте используются для преобразования поступающего аналогового аудио сигнала в цифровую форму. АЦП Arduino производит дискретизацию поступающего входного сигнала с частотой дискретизации 38,46 кГц. Это достигается при помощи установки коэффициента деления предделителя (prescaler) АЦП равным 32. Если частота дискретизации равна 38,46 кГц, то согласно теореме Котельникова это значит что максимальная частота входного аналогового сигнала, который может быть преобразован без потерь в цифровую форму, равна 19,32 кГц – этого вполне достаточно для большинства аудио сигналов.

Главная цель проекта – показать спектр музыкального аудио сигнала. Для этого левый и правый каналы аудио сигнала смешиваются вместе и подаются на аналоговый контакт A0 платы Arduino. При необходимости вы можете использовать сплиттер чтобы подавать аудио сигнал одновременно и на анализатор спектра, и в другое какое-нибудь устройство, например, усилитель.

АЦП в данном проекте конфигурируются на использование внешнего опорного напряжения (reference voltage). В этом проекте в качестве опорного напряжения для АЦП используется стабилизированное напряжение 3.3v с платы Arduino. Поскольку аналоговый сигнал колеблется как выше, так и ниже нуля, мы должны использовать положительное напряжение смещения на входе АЦП – это необходимо для того чтобы АЦП не обрезал отрицательные циклы сигнала. То же самое стабилизированное напряжение разделяется с помощью двух резисторов R1 и R2 и затем подается на вход АЦП для формирования положительного напряжения смещения. С таким напряжением смещения на выходе АЦП будет значение 512 при отсутствии аудио сигнала на входе. В дальнейшем в коде программы это значение 512 вычитается чтобы получить реальные изменения входного сигнала.

«Сердцем» кода программы является библиотека ArduinoFFT – именно она выполняет быстрое преобразование Фурье (БПФ) и вычисляет спектр входного сигнала. Опытный образец данного проекта был сконфигурирован для формирования 64 отсчетов (сэмплов, samples) и выполнения быстрого преобразования Фурье над этими отсчетами. Библиотека ArduinoFFT может выполнять БПФ над числом отсчетов от 16 до 128 – это можно сконфигурировать в программе. Но для 128 отсчетов БПФ выполняется достаточно медленно, поэтому в нашем проекте мы решили ограничиться 128 отсчетами.

Алгоритм работы проекта

В качестве средства отображения спектра в нашем проекте используется светодиодная матрица 32 столбца х 8 строк. Управлять подобной матрицей сравнительно просто с помощью библиотеки MD_MAX72xx, которую мы будем использовать в нашем проекте. С помощью этой библиотеки можно включить/выключить любое число светодиодов в столбце, который в данный момент времени используется в программе. Амплитуда каждого частотного канала (полосы) конвертируется в диапазон от 0 до 8 и в зависимости от этой амплитуды зажигается необходимое количество светодиодов в столбце, то есть чем больше амплитуда, тем больше светодиодов в столбце будут гореть.

В проекте доступны 5 режимов дисплея, которые заключаются в различных вариантах включения светодиодов в столбцах. Каждый из этих режимов вы при необходимости можете перепрограммировать самостоятельно. Для переключения режимов используется кнопка. С каждым нажатием кнопки происходит переход к следующему режиму, при нажатии кнопки на 5-м режиме снова происходит переход к 1-му режиму. Эта кнопка подключена к цифровому контакту платы Arduino и после каждого обновления экрана дисплея производится проверка ее нажатия.

Частотная характеристика

Частотная характеристика проектируемого анализатора спектра была проверена с помощью подачи на вход анализатора синусоидального колебания, сформированной генератором сигналов на одном из веб-сайтов. Было установлено, что частотная характеристика анализатора достигает частоты 18,6 кГц.

Частотная характеристика анализатора спектра на различных частотах

Дополнительные детали

Чтобы узнать более полную информацию о данном проекте, необходимо посетить страницу автора этого проекта на сервисе github — https://github.com/shajeebtm/Arduino-audio-spectrum-visualizer-analyzer/.

Подача входного сигнала на анализатор спектра

Существует несколько способов подачи аудио сигнала на рассматриваемый нами анализатор спектра. Первый способ – взять аудио сигнал с выхода LINE out вашей музыкальной системы/усилителя. Второй способ – взять аудио сигнал с выхода наушников или мобильного телефона.

На следующем рисунке показан пример соединения выхода LINE out усилителя/музыкальной системы с анализатором спектра.

Пример подачи сигнала с выхода звуковой системы

Далее на рисунке показан пример соединения выхода наушников/мобильной системы с анализатором спектра. Когда вы соедините кабель к выходу наушников вы уже не сможете услышать звук с них, поэтому в этом случае, если вы хотите и анализировать спектр сигнала, и слышать сам звук, вам необходимо будет использовать специальный разделитель.

Пример подачи сигнала с выхода наушников

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема анализатора-визуализатора спектра звуковых частот на Arduino

Исходный код программы (скетча)

Видео, демонстрирующее работу схемы

Источник статьи

(Проголосуй первым!)
Загрузка...
61 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *