Arduino audio spectrum

DIY FFT Audio Spectrum Analyzer © GPL3+

FFT spectrum analyzer is a test equipment that uses Fourier analysis and digital signal processing techniques to provide spectrum analysis.

Arduino Nano R3
× 1
ST7920 128×64 LCD dispaly
× 1
Resistor 10k ohm
× 2
Capacitor 10 µF
× 1
Single Turn Potentiometer- 10k ohms
× 1
Soldering iron (generic)

FFT spectrum analyzer is a test equipment that uses Fourier analysis and digital signal processing techniques to provide spectrum analysis. Using Fourier analysis it is possible for one value in, for example, the continuous time domain to be converted into the continuous frequency domain, in which both magnitude and phase information are included.

The described device is exactly such a Spectral Analyzer that is made with the help of an Arduino microcontroller. Аs you can see the device is very simple and contains only a few components :

— LCD display with a resolution of 128 by 64 pixels (ST7920 128×64 LCD)

— Two resistors (10KOhm)

— Potentiometer (10KOhm) and

— Capacitor (1 microF)

The audio input to the Arduino is on A0, with bias at the mid point by 10K to Ground and 10K to +5V. At the input we can also set a potentiometer to control the amplitude of the input signal.

Code is also simple and it uses «fix_fft» libray which was created for this purpose

The video describes several cases where different types of signals have been analyzed:

When analyzing a sinusoidal input signal, the carrier is clearly visible and By changing the frequency of the signal generator, the position of the carrier also changes.

If we bring a rectangular signal to the input, on the spectral analyzer is clearly visible the fundamental signal, as well as the three odd harmonics x3, x5 & x7.

If we bring an audio music signal to the input, this device is actually a graphics audio analyzer that can be found in more expensive audio equipments

Finally, the entire assembly is housed in a suitable box. This is not a professional tool because it has low resolution and frequency range, but can serve as a great educational tool.

Источник

Анализатор-визуализатор спектра аудио сигнала на базе Arduino

Как вы думаете, что делают девушки, когда собираются вместе? Идут по магазинам, фотографируются, ходят по салонам красоты? Да, так и есть, но так делают далеко не все. В данной статье пойдёт речь о том, как две девушки решили собрать радиоэлектронное устройство своими руками.

Почему именно анализатор-визуализатор спектра?

Разработка устройства

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

В качестве дисплея выбрали светодиодную матрицу 8х32. Можно было использоваться готовые led-матрицы 8х8 и собирать из них, но мы решили не отказывать себе в удовольствии посидеть вечерком с паяльником, и поэтому собирали дисплей сами из светодиодов.

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

Включение той или иной строки в столбце осуществляется с помощью открытия соответствующего ключа. Для уменьшения количества выходных пинов контроллера, выбор столбца происходит через дешифраторы (таким образом, мы можем сократить количество управляющих линий до 5).

В качестве интерфейса подключения к компьютеру (или другому устройству, способному передавать аудио сигнал) был выбран разъём TRS (mini-jack 3.5 mm).

Сборка устройства

Сборку устройства начинаем с того, что делаем макет лицевой панели устройства.

Материалом для лицевой панели был выбран чёрный пластик толщиной 5мм (т.к. диаметр линзы диода также 5мм). По разработанному макету размечаем, вырезаем лицевую панель под необходимый размер и просверливаем отверстия в пластике под светодиоды.

Таким образом получаем готовую лицевую панель, на которой можно уже собирать дисплей.

В качестве светодиодов для матрицы были использованы двухцветные (красный-зелёный) с общим катодом GNL-5019UEUGC. Перед началом сборки матрицы, руководствуясь правилом “лишний контроль не повредит” все светодиоды, а именно 270 шт. (брали с запасом на всякий случай), были проверены на работоспособность (для этого было собрано тестирующее устройство, включающее в себя разъём, резистор 200Ом и источник питания на 5В).

Дальше разгибаем светодиоды следующим образом. Аноды красного и зеленого диодов отгибаем в одну сторону (вправо), катод отгибаем в другую сторону, при этом следим, чтобы катод был ниже чем аноды. И затем под 90° загибаем катод вниз.

Сборку матрицы начинаем с правого нижнего угла, сборку производим по столбцам.

Вспоминая про правило “лишний контроль не повредит”, после одного-двух спаянных столбцов, проверяем работоспособность.

Готовая матрица выглядит следующим образом.

По разработанной схеме паяем схему управления строками и столбцами, распаиваем шлейфы и место под Arduino.

Было решено так же выводить не только амплитудно-частотны, но и фазо-частотный спектр, а также выбирать количества отсчетов для отображения (32,16,8,4). Для этого были добавлены 4 переключателя: один на выбор типа спектра, два на выбор количества отсчётов, и один на включение и выключение устройства.

Написание программы

В очередной раз руководствуемся нашим правилом и убеждаемся, что наш дисплей полностью в рабочем состоянии. Для этого пишем простую программу, которая полностью зажигает все светодиоды на дисплее. Естественно, по закону Мёрфи, нескольким светодиодам не хватало тока, и их необходимо было заменить.

Удостоверившись, что всё работает, мы приступили к написанию основного программного кода. Он состоит из трёх частей: инициализация необходимых переменных и считывание данных, получение спектра сигнала при помощи быстрого преобразования Фурье, вывод полученного спектра с необходимым форматированием на дисплей.

Сборка конечного устройства

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

Дело оставалось за малым, разметить отверстия под разъёмы, кабели и переключатели, а также вырезать две боковые панели из пластика.

В итоге, собрав всё воедино, подключив устройство к компьютеру мы получили следующее:

Амплитудно-частотный спектр (32 отсчёта):

Амплитудно-частотный спектр (16 отсчётов):

Амплитудно-частотный спектр (8 отсчётов):

Амплитудно-частотный спектр (4 отсчёта):

Вид задней панели:

Видео работы устройства

Для большей наглядности видео снималось в темноте. На видео устройство выводит амплитудно-частотный спектр, а затем на 7 секунде переключаем его в режим фазо-частотного спектра.

Источник

32-Band Audio Spectrum Visualizer Analyzer © GPL3+

This project is for making a 32-band audio (music) frequency spectrum analyzer / visualizer using Arduino.

Soldering iron (generic)

This project is for making a 32-band audio (music) frequency spectrum analyzer / visualizer using Arduino. Expected audience of this project is any audio enthusiast, student or a beginner who has basic understanding of electronic components, Arduino and C programming. Components used in this project are low cost items and are easy to assemble.

Main features of this frequency spectrum analyzer

  • Uses easily installable libraries “arduinoFFT” and “MD_MAX72xx”
  • Five different display modes are supported which can be switched with the push button
  • Both left and right channels of audio signal are mixed so that you don’t miss any beat
  • Prototype use 32×8 LED matrix display, this can be changed and easily modified
  • Audio can be fed from headphone output or Line-out of music system / amplifier
  • Arduino Nano or Uno (I tried with Nano and Uno, must work with other models as well)
  • 32 x 8 LED matrix display — 1 no
  • Push button switch — 1 no (normally comes with Arduino kit)
  • 100nf capacitor — 2 nos
  • 5 kilo ohms resistor — 3 nos
  • 10 kilo ohms resistor — 1 no
  • 100 kilo ohms resistor — 2 nons
  • 5 volt power supply (usb supply will do)

Resistor values are not very strict, you may choose any closest value. Please make sure R1 & R2 (refer schematic) are of same value.

Program flow chart

Description of the system

Arduino board (ATmega328P) has built in Analog To Digital converter (ADC) which is being used here for converting input audio signal into digital samples. ADC is configured to sample input signal with the clock frequency of 38.46khz. This is achieved by configuring ADC prescaler to 32. Sampling frequency of 38.64Khz means that digital samples can reproduce input frequency of upto 19.32Kz (Nyquist’s theorem) which is good enough for audio signals.

As I mentioned in the beginning, the intended purpose of this project is to display frequency spectrum of audio music signal. Hence left and right audio channels are mixed together and fed into the A0 analog input of the ADC. You may use a audio splitter cable so that you can feed same music simultaneously into spectrum analyzer and into another amplifier ( if needed ).

ADC is configured to use external reference voltage. In this project reference voltage for is derived from the 3.3v stabilized voltage source on the Arduino board. As analog signal oscillates above and below zero voltage level we need a DC bias at the analog input of the ADC. This ensure that ADC output doesn’t clip on the negative cycles of the input signal. Same 3.3v stabilized voltage is divided with two resistors R1 & R2 and then fed into the analog input for DC bias. With this DC bias ADC will produce 512 in the output even if the input signal is disconnected. Later in the code this 512 which is caused by DC bias is being subtracted so that the reading represent the actual input signal variation.

ArduinoFFT library is the heart of the code which does translation of input analog signal into frequency spectrum. I found this library is easy to use and produced best accurate output for this project. Prototype is configured to make 64 samples and does FFT with those samples. ArduinoFFT library can do FFT of samples between 16 to 128, this can be configured in the program. But arduinoFFT library is slow for calculation with 128 samples hence I stick to the best highest of 64 samples.

Display used in this project is 32 columns x 8 rows LED matrix. MD_MAX72xx library made the display controlling part very easy. This library provides function to turn on/off any number of LEDs in a column which is being used in this program. Amplitude of every frequency band is mapped between 0 to 8, depending upon the amplitude corresponding number of LEDs in each column get turned ON.

Five display modes are available in this program which is basically achieved by turning on/off LEDs at different positions in every column. You can modify / create different pattern easily. A push button is used here for changing the display mode. With every press display pattern moved to the next one and finally resets back to default mode. Push button is connected to one of the digital input and that input is scanned after every one round of display refresh.

Frequency response of the system was tested by feeding sine wave generated by one of the online signal generator website. It is verified that system is able to respond for frequencies up to 18.6Khz.

Источник

Adblock
detector