Mihai-Cristian COŞĂREANU - Analizor Spectral

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Analizorul spectral este o unealta pentru a descompune un spectru in mai multe benzi de frecventa. Acest proiect este un analizor spectral audio, analizeaza spectrul audio ce provine de la un microfon condensator, si afiseaza amplitudinea celor 16 benzi de frecventa pe LCD. Analizorul spectral este foarte util si foarte folosit in industria audio (desigur nu la calitatea pur experimentala a proiectului), atat in sunet live, pentru a detecta frecventa unei microfonii sau pentru a corecta o incinta astfel incat sa se obtina fidelitate prin sistemul audio (difuzoarele si tot circuitul audio sa denatureze cat mai putin sunetul care intra in sistem), cat si in studio pentru a compara diverse echipamente audio sau pentru a observa defectiuni si frecvente nedorite intr-o inregistrare.

Descriere generală

Acest proiect foloseste un microfon condensator pentru a prelua sunetul, preamplificat printr-un circuit simplu. Sunetul este convertit din analog in digital folosind convertorul din microcontroller. Folosind un algoritm DFT (Discrete Fourier Transform), se obtin amplitudinile fiecarei benzi de frecventa in parte, care sunt afisate pe un LCD folosind caractere speciale.

Hardware Design

Intrarea audio

Foarte importanta in schema amplificarii este componenta continua de 2,5V, pe care o va contine iesirea, pentru a putea fi folosita cu tensiunea de referinta de 2,5 din microcontroller. Amplificatorul operational folosit este LM324N. In reactia negativa am mai adaugat un potentiometru pentru a putea regla gain-ul.

Schema de amplificare :

Schema generala

Iesirea de la amplificatorul de microfon este conectata la pinul ADC0 al microcontroller-ului, pentru LCD folosesc doar modul de comunicare cu 4 biti pentru mai putine fire, am adaugat un semireglabil pentru contrast si un condensator de filtrare pentru tensiunea de alimentare a LCD-ului.

Software Design

Mediul de dezvoltare folosit : WinAVR. Nu am folosit nici o alta librarie 3rd-party.

Important in rapiditatea acestui algoritm este prezenta unui lookup table pentru sin si cos care nu sta in RAM-ul microcontroller-ului ci in Flash (este declarat si utilizat folosind PROGMEM).

O scurta descriere a ce executa programul :

  1. Initializeaza registrii ADC
  2. Initializeaza LCD-ul
  3. Construieste caracterele custom ce vor fi afisate pe LCD (barele verticale)
  4. Se initializeaza un timer folosit pentru a prelua 32 de sample-uri de la ADC intr-un vector
  5. Se aplica algoritmul DFT de unde rezulta o matrice cu 16 linii si 2 coloane cu ajutorul careia se calculeaza amplitudinea unei benzi de frecventa.
  6. Intr-un buffer pentru LCD care contine cele 2×16 caractere ce trebuie afisate, se pun caracterele ce corespund amplitudinii fiecarei benzi in parte
  7. Se transmite buffer-ul catre LCD pentru a fi afisat
  8. Se repeta tot de la a prelua un nou rand de sample-uri

Rezultate Obţinute

Aici este un filmulet cu proiectul. Am obtinut un analizor spectral functional, insa cu o fidelitate proasta in principal din cauza microfonului utilizat, dar se poate inlocui. Pentru inalte este foarte directional microfonul, de aceea in filmulet se observa preponderent joasele.

Concluzii

Lucrul la proiect a fost foarte interesant si educativ, ma bucur ca am reusit sa-l si termin ca sa vad si un rezultat, desi e drept ca nici nu a fost foarte complex nici din punct de vedere electric si nici din punctul de vedere al programarii…

Download

Arhiva cu codul proiectului : analizor_spectral.zip

Bibliografie/Resurse

Resurse Software

Resurse Hardware

Implementing Discrete Fourier Transform using ATmega16 and 2×16 LCD : http://blog.vinu.co.in/2012/05/implementing-discrete-fourier-transform.html

pm/prj2013/rdobre/analizor-spectral.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0