Анализатор спектра – прибор для наблюдения и измерения относительного распределения энергии электрических (электромагнитных) колебаний в полосе частот.
Анализатор спектра позволяет определить амплитуду и частоту спектральных компонентов, входящих в состав анализируемого процесса. Важнейшей его характеристикой является разрешающая способность: наименьший интервал по частоте между двумя спектральными линиями, которые ещё разделяются анализатором спектра. Анализатор спектра может дать истинный спектр только тогда, когда анализируемое колебание x(t) периодично, либо существует только в пределах интервала T. При анализе длительностей процессов анализатор спектра даёт не истинный спектр S(ω), а его оценку ST(t1, ω):
зависящую от времени включения t1 и времени анализа T. Так как спектр колебания может в общем случае изменяться во времени, то оценка ST(t1, ω) даёт т. н. текущий спектр.
Цифровые анализаторы могут быть построены двумя способами. В первом случае это обычный анализатор последовательного типа, в котором измерительная информация, полученная методом сканирования полосы частот с помощью гетеродина, оцифровывается с помощью АЦП и, далее, обрабатывается цифровым методом. Во втором случае реализуется цифровой эквивалент параллельного типа в виде ДПФ-анализатора, который вычисляет спектр с помощью алгоритмов дискретного преобразования Фурье (ДПФ). По сравнению с последовательными цифровые параллельные ДПФ-анализаторы обладают определёнными преимуществами: более высоким разрешением и скоростью работы, возможностью анализа импульсных и однократных сигналов. Они способны вычислять не только амплитудный, но и фазовый спектры, а также одновременно представлять сигналы во временной и частотной областях. К сожалению, параллельные ДПФ-анализаторы из-за ограниченных возможностей аналого-цифровых преобразователей (АЦП) работают только на относительно низких частотах.
1. ОБЗОР СУЩЕСТВУЮЩИХ РЕШЕНИЙ
1.1 TM10PA, Светодиодный 5-ти полосный анализатор спектра.
Анализатор спектра TM10PA
Это – анализатор спектра звука. Теперь вы можете самостоятельно собрать анализатор спектра на светодиодах. Наш модуль TM10P управляется микроконтроллером STM32F030F4P6. В нем и происходит обработка звукового сигнала поступающего на АЦП. Мы условно разделили звуковой диапазон на пять полос. И с помощью быстрого преобразования Фурье формируем каждую из полос, вычисляем и показываем на светодиодных столбиках средний уровень сигнала в каждой полосе. Получился некий пятиполосный цифровой фильтр НЧ.
Схема TM10PA
Технические характеристики: Светодиодная матрица: 5х7 Каналов АЦП: 1 Частота дискретизации: 40 кГц Количество выборок для преобразования Фурье: 128 Количество полос: 5 Отображение диапазонов: 1) от 625 Гц до 937.5 Гц; 2) от 1250 Гц до 1562.5 Гц; 3) от 1875 Гц до 3125 Гц; 4) от 3437.5 Гц до 6250 Гц; 5) от 6562.5 Гц до 19687.5 Гц. Максимальный уровень входного сигнала: 3В Напряжение питания: 5В Размер печатной платы: 50.8 х 25.4 мм Модуль разработан в дизайне Troyka-модулей Дополнительно в модуле имеется разъем I2C, для запроса данных с АЦП.
Недостатки данного устройства - это высокая цена, малый диапазон отображаемых частот.
1.2 LINK1 16Level LED indicator Audio Music spectrum.
Анализатор спектра LINK1
16-ти уровневый светодиодный индикатор аудио спектра .
Особенности:
1. 16-сегмент аудио отображения спектра PCB размер 176*50 мм, светодио дный размером 167*41 мм.
2. Толщина печатной платы 14 мм уплощение, толщина светодиодного модуля 8 мм, общая толщина 22 мм.
3. модуль зеленый, источник питания DC 5 В в/600 мА, максимальная яркость под всей платой тока не превышает 600 мА, используйте выходной ток более 600 мА питания USB.
· Разрешение 16X16.
· Поддержка 32 Гц-16 кГц частоты развертки, чтобы обеспечить точность каждого диапазона
· Скорость падения светового бара, время удержания и скорость падения пика можно регулировать отдельно.
· Реальный выход и плавный выбор выхода
· Яркость спектра можно регулировать 15 уровней
· Программное обеспечение AGC + настраиваемая Выходная кривая заказ, чтобы гарантировать, что входной сигнал в большом диапазоне выходного эффекта идеально.
· Настраиваемый дисплей диапазона частот, чтобы гарантировать, что даже 16 сегментов, может полностью отображать диапазон частот аудио
Достоинства данного устройства: большой функционал. Недостатки: высокая стоимость(~30$).
1.3 Aiyima Singlechip LED Music Spectrum Analyzer Audio.
Музыкальный спектр SMD .
С размером корпуса: длина мм: 130 мм Высота: мм 55 мм Толщина: 24 мм
Рабочее напряжение: 5 В (или зарядное устройство для сотового телефона, зарядное устройство, usb-порт питания).
Одночиповая микрокомпьютерная программа: хорошо горит, устанавливается непосредственно для использования.
Анализатор спектра Aiyima Singlechip
Схема анализатора спектра Aiyima Singlechip
Недостаток данного устройства - высокая цена.
2. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ
Основным структурным звеном является плата Arduino NANO. Входной сигнал подается на аналоговый вход Arduino. При помощи Быстрого преобразования Хартли FHT (аналог Быстрого преобразования Фурье) происходит разложение входного сигнала на спектр частот.
Обработав полученные после преобразования данные, он выводит их на дисплей LCD1602 в виде столбиков, высота которых зависит от амплитуды сигнала, а положение от частоты.
Структурная схема устройства
3. РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ
Для разработки принципиальной схемы я воспользовался программой Proteus 8, что бы убедиться в том, что устройство работает правильно.
Мне понадобилось:
1) Дисплей LCD1602;
2) Плата Arduino UNO;
3) Генератор входного аудиосигнала;
4) Соединительные провода;
5) USB для прошивки платы .
Принципиальная схема устройства
3.1 Плата Arduino NANO.
Вместо микроконтроллера я выбрал плату Arduino NANO. У платы есть все необходимые компоненты для обеспечения работы микроконтроллера. Достаточно подключить USB кабель к компьютеру и подать питание.
Arduino — это электронный конструктор и удобная платформа быстрой разработки электронных устройств, для новичков и профессионалов. Платформа пользуется огромной популярностью во всем мире благодаря удобству и простоте языка программирования, а также открытой архитектуре и программному коду. Устройство программируется через USB без использования программаторов.
Arduino Nano - это полнофункциональное миниатюрное устройство на базе микроконтроллера ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), адаптированное для использования с макетными платами. По функциональности устройство похоже на Arduino Duemilanove, и отличается от него размерами, отсутствием разъема питания, а также другим типом (Mini-B) USB-кабеля. Arduino Nano разработано и выпускается фирмой Gravitech.
Рассылаемые в настоящее время версии могут быть заказаны уже распаянными. Информация об устройстве платы (рисунок печатной платы) находится в открытом доступе и может быть использована теми, кто предпочитает собирать платы самостоятельно. Микроконтроллеры ATmega328 дёшевы и стоят около 200 рублей.
Характеристики:
Микроконтроллер Atmel ATmega168 или ATmega328
Рабочее напряжение (логический уровень) 5В
Напряжение питания (рекомендуемое) 7-12В
Напряжение питания (предельное) 6-20В
Цифровые входы/выходы 14 (из которых 6 могут использоваться как ШИМ-выходы)
Аналоговые входы 8
Максимальный ток одного вывода 40 мА
Flash-память 16 КБ (ATmega168) или 32 КБ (ATmega328) из которых 2 КБ используются загрузчиком
SRAM 1 КБ (ATmega168) или 2 КБ (ATmega328)
EEPROM 512 байт (ATmega168) или 1 КБ (ATmega328)
Тактовая частота 16 МГц
Размеры платы 1.85 см х 4.3 см
3.2 Дисплей LCD1602.
Жидкокристаллический дисплей (Liquid Crystal Display) сокращенно LCD построен на технологии жидких кристаллов . При проектировании электронных устройства, нам нужно недорогое устройство для отображения информации и второй не менее важный фактор, наличии готовых библиотек для Arduino.
Из всех доступных LCD дисплеев на рынке, наиболее часто используемой является LCD 1602, который может отображать ASCII символа в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей. Существует огромное количество разновидностей данного ЖК модуля, он может быть 1, 2, 4–ех строчный с различным числом символов на строке.
LCD 1602 представляет собой электронный модуль основанный на драйвере HD44780 от Hitachi. LCD1602 имеет 16 контактов и может работать в 4-битном режиме (с использованием только 4 линии данных) или 8-битном режиме (с использованием всех 8 строк данных).
4. РАЗРАБОТКА ПРОГРАММНОЙ ЧАСТИ
4.1 Разработка алгоритма работы устройства.
4.2 Разработка программы устройства.
Код программы:
#define AUTO_GAIN 1 // автонастройка по громкости
#define VOL_THR 35 // порог тишины (ниже него отображения на матрице не будет)
#define LOW_PASS 30 // нижний порог чувствительности шумов (нет скачков при отсутствии звука)
#define DEF_GAIN 80 // максимальный порог по умолчанию (при GAIN_CONTROL игнорируется)
#define FHT_N 256 // ширина спектра х2
// вручную забитый массив тонов, сначала плавно, потом круче
byte posOffset[16] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 20, 25, 30, 35, 60, 80, 100};
#define LOG_OUT 1
#include <FHT.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
//задаем массивы с данными о пикселях для создания символов уровня столбцов
byte v1[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111};
byte v2[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111};
byte v4[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111};
byte v5[8] = {0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte v6[8] = {0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte v7[8] = {0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte v8[8] = {0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte gain = DEF_GAIN;
unsigned long gainTimer;
byte maxValue, maxValue_f;
float k = 0.1;
void setup() {
lcd.begin(16, 2);// LCD 1602
// поднимаем частоту опроса аналогового порта до 38.4 кГц, по теореме
// Котельникова (Найквиста) частота дискретизации будет 19 кГц
sbi(ADCSRA, ADPS2);
cbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
analogReference(INTERNAL);
//cоздаем символы уровня столбцов для LCD экрана на основе заданных массивов
lcd.createChar(0, v1);
lcd.createChar(1, v2);
lcd.createChar(2, v3);
lcd.createChar(3, v4);
lcd.createChar(4, v5);
lcd.createChar(5, v6);
lcd.createChar(6, v7);
lcd.createChar(7, v8);
}
void loop() {
analyzeAudio(); // функция FHT, забивает массив fht_log_out[] величинами по спектру
for (int pos = 0; pos < 16; pos++) { // для окошек дисплея с 0 по 15
// найти максимум из пачки тонов
if (fht_log_out[posOffset[pos]] > maxValue) maxValue = fht_log_out[posOffset[pos]];
lcd.setCursor(pos, 0);
// преобразовать значение величины спектра в диапазон 0..15 с учётом настроек
int posLevel = map(fht_log_out[posOffset[pos]], LOW_PASS, gain, 0, 15);
posLevel = constrain(posLevel, 0, 15);
if (posLevel > 7) { // если значение больше 7 (значит нижний квадратик будет полный)
lcd.write((uint8_t)posLevel - 8); // верхний квадратик залить тем что осталось
lcd.setCursor(pos, 1); // перейти на нижний квадратик
lcd.write((uint8_t)7); // залить его полностью
}
else { // если значение меньше 8
lcd.print(" "); // верхний квадратик пустой
lcd.setCursor(pos, 1); // нижний квадратик
lcd.write((uint8_t)posLevel); // залить полосками
}
}
if (AUTO_GAIN) {
maxValue_f = maxValue * k + maxValue_f * (1 - k);
if (millis() - gainTimer > 1500) { // каждые 1500 мс
// если максимальное значение больше порога, взять его как максимум для отображения
if (maxValue_f > VOL_THR) gain = maxValue_f;
// если нет, то взять порог побольше, чтобы шумы вообще не проходили
else gain = 100;
gainTimer = millis();
}
}
}
void analyzeAudio() {
for (int i = 0 ; i < FHT_N ; i++) {
int sample = analogRead(A0);
fht_input[i] = sample; // записать данные в массив sample
}
fht_window(); // окно данных для улучшения частотной характеристики
fht_reorder(); // изменение порядка данных перед выполнением FHT
fht_run(); // обрабатывание данных в FHT
fht_mag_log(); // считывание выходных данных FHT
}
4.2.1 Выбор среды программирования.
Основа языка программирования модуля Arduino — это язык Си (скорее Си++) [9], [10].
Любая программа — это последовательность двоичных чисел. А программирование — это умение правильно записывать правильные последовательности двоичных чисел. Достаточно давно для записи программ стали использовать специальные средства, которые называются языками программирования.
Ближе всего к записи программы с помощью двоичных чисел, язык ассемблер. Для него характерно соответствие команд языка двоичным командам, понятным процессору. Но кодирование программ на ассемблере требует больших усилий и ближе к искусству, чем к формальным операциям. Более универсальны и легче в применении языки высокого уровня, как Бэйсик или Си.
В языке программирования СИ++ легко найти нужную библиотеку.
4.3 Моделирование рабочего устройства.
Устройство я смоделировал в программе Proteus, что бы проверить работу.
Proteus — пакет программ для автоматизированного проектирования электронных схем [6].
Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов, принятых в PSpice. Отличительной чертой пакета PROTEUS является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессоров, DSP и проч. Библиотека компонентов содержит справочные данные. Дополнительно в пакет PROTEUS входит система проектирования печатных плат. Пакет Proteus состоит из двух частей, двух подпрограмм: ISIS — программа синтеза и моделирования непосредственно электронных схем и ARES — программа разработки печатных плат. Вместе с программой устанавливается набор демонстрационных проектов для ознакомления.
Работа устройства в Proteus
ЗАКЛЮЧЕНИЕ
В данной работе мне было предложено разработать цифровой анализатор спектра. Устройство было собрано на Arduino NANO.
Анализатор спектра включает в себя Arduino NANO, в котором происходит разложение входного сигнала, поданного на аналоговый вход Arduino, на спектр частот при помощи библиотек FHT (Быстрое преобразование Хартли). Обработанные данные спектра частот передаются на дисплей LCD1602 в форме столбцов уровней громкости на определенной частоте.
Устройство собрано в среде Proteus. Программа для устройства написана на языке СИ++. Все работает согласно техническому заданию.