У статті розглядається конструкція простого аналізатора спектра (0 – 10 кГц) на мікроконтролері Atmel AVR ATmega32. В якості пристрою відображення використовується дворядковий символьний ЖК індикатор. Основним моментом при реалізації даного проекту є не апаратна частина, а програмна, точніше реалізація дискретного перетворення Фур’є (ДПФ) на 8-розрядному мікроконтролері. Відразу слід зазначити, що автор не є експертом в цій галузі і тому почав з основ – з простого дискретного перетворення Фур’є. Алгоритм швидкого перетворення Фур’є є не тільки швидким, але і досить складним.

Дискретне перетворення Фур’є (в англомовній літературі DFT, Discrete Fourier Transform) – це одне з перетворень Фур’є, широко застосовуваних в алгоритмах цифрової обробки сигналів (його модифікації застосовуються в стиску звуку в MP3, стиску зображень в JPEG та ін), а також в інших областях, пов’язаних з аналізом частот в дискретно (наприклад, оцифрованому аналоговому) сигналі. Дискретне перетворення Фур’є вимагає в якості входу дискретну функцію. Такі функції часто створюються шляхом дискретизації (вибірки значень з безперервних функцій).

Принципова схема аналізатора спектра звукового сигналу дуже проста і умовно її можна розділити на цифрову частину і аналогову.

Цифрова частина утворена мікро і підключеним до нього РК індикатором. Мікроконтролер тактується від кварцового резонатора 16 МГц, в якості опорної напруги для АЦП мікроконтролера використовується напруга живлення +5 В.
Шина даних РК індикатора підключена до порту C мікроконтролера (лінії введення / виведення PC0-PC3), шина управління підключена до порту D (PD5, PD6) мікроконтролера. Індикатор працює в 4-бітному режимі. Змінний резистор номіналом 4.7 кОм використовується для регулювання контрастності. Для роботи з індикатором були створені користувальницькі символи для відображення 8 горизонтальних стовпчиків аналізатора, ці користувацькі символи займають всі 64 Байта ОЗУ РК індикатора.

Мікроконтролер працює від зовнішнього кварцового резонатора 16 МГц.

Аналогова частина пристрою – це найважливіша частина і являє собою попередній підсилювач сигналу електретного мікрофона, вихід якого підключається до каналу ADC0 вбудованого в мікроконтроллер АЦП. Рівень нуля на вході АЦП нам необхідно встановити рівним точно половині опорного напруги, тобто 2.5 В. У цьому випадку ми зможемо використовувати позитивну і негативну півхвилю сигналу, але його амплітуда не повинна перевищувати встановлену межу, тобто коефіцієнт посилення повинен бути точно налаштований для запобігання перевантаження. Всім вищевказаним умовам відповідає поширена мікросхема низькоспоживаючі операційного підсилювача LM324.

Алгоритм ДПФ дещо повільніше у порівнянні з швидким перетворенням Фур’є. Але наш аналізатор спектру не вимагає високої швидкості, і якщо він здатний забезпечити швидкість оновлення близько 30 кадрів в секунду, цього буде більш ніж достатньо для візуалізації спектру звукового сигналу. У кожному разі, в нашому варіанті можливо досягти швидкості 100 кадрів в секунду, але це вже занадто високе значення параметра для дворядкового символьного РК індикатора і воно не рекомендується. Частота дискретизації дорівнює 20 кГц для 32 точкового дискретного перетворення Фур’є і оскільки результат перетворення симетричний, нам потрібно використовувати тільки першу половину, тобто перші 16 результатів. Отже, ми можемо відображати частотний спектр в діапазоні до 10 кГц і дозвіл аналізатора становить 10 кГц/16 = 625 Гц.

Автором конструкції були зроблені спроби збільшення швидкості обчислення ДПФ. Якщо це перетворення має N точок, то ми повинні знайти N2 / 2 значень синуса і косинуса. Для нашого 32 точкового перетворення необхідно знайти 512 значень синуса і косинуса. Але, перш ніж знайти їх нам необхідно обчислити кут (градуси), що забере некторих процесорний час, тому було вирішено використовувати для цих обчислень таблиці значень. При розрахунках у програмі мікроконтролера не використовуються обчислення з плаваючою точкою і числа подвійної точності (double), так як це займе більше часу на обробку на 8-розрядному мікроконтролері. Замість цього значення в таблицях пошуку використовуються 16-розрядні дані цілочисельного типу (integer), помножені на 10000. Потім після виконання перетворення результати діляться на 10000. При такому підході є можливість виконувати 120 32-точкових перетворень в секунду, що більш ніж достатньо для нашого пристрою.

Демонстрація роботи аналізатора спектра на мікроконтролері ATmega32

Завантаження

Вихідний код (програма мікроконтролера, таблиці даних синуса, косинуса і кута) – скачати

blog.vinu.co.in