PRELUCRARE SEMNALE SONORE CU ARDUINO Alexandru PETREUȘ , anul I V, Inginerie Electronică Aplicată Coordonator: Șl. Dr. Ing . Sebastian SABOU Cuvinte… [628529]
NORD Tech 2019
1
PRELUCRARE SEMNALE SONORE CU ARDUINO
Alexandru PETREUȘ , anul I V, Inginerie Electronică Aplicată
Coordonator: Șl. Dr. Ing . Sebastian SABOU
Cuvinte cheie : Transformata Fourier rapidă ,Transformata Hartley rapidă , arduino
Rezumat : Lucrarea prezintă studiul teoretic și experimental al prelucră rii unui semnal audio
cu ajutorul unui microcontroler arduino uno, utilizând Transformata Fourier rapidă (FFT), si
Transformata Hartley rapidă (FHT ).
1. INTRODUC ERE
Această lucrare are ca scop prelucrarea și vizualizarea unui semnal sonor cu ajutorul
unui microfon cu amplificare , Arduino UNO și o matrice de leduri 8×32 . Semnalul este
receptat de microfon, amplificat și apoi prelucrat cu ajutorul unui microcontro ler Arduino
UNO, utilizând pe râ nd, Transformata Fourier rapidă și Transformata Hartley rapidă. La final
semnalul analizat este afișat vizual cu ajutorul unei matrice de led -uri cu 32 de canale , după
care se compar ă cele două transformate folosite , pentru a determina car e dintre acestea este
mai rapidă .
2. FFT ȘI FHT
2.1. Transformata Fourier rapidă (FFT)
Transformata Fourier rapidă sau Fast Furier Transform (FFT) este numele generic
pentru o clasă de algoritmi rapizi de calcul al transformatei Fourier discrete sau Discrete
Fourier Transform (DFT) , pentru semnale cu suport finit , folosită la descompunerea unui
semnal în frecvențele constituente . Semnalele por t fi recon struite cu acuratețe adunând
semnale sinusoidale cu frecvenț e și amplitudini diferite. Cu cât numă rul de semnale
sinusoidale adunate este mai mare, cu atât semnalul reconstruit va ară ta mai asemanător cu
semnalul original. Teoretic, dacă am avea un număr infinit de semnale sinusoidale, semnalul
reconstruit obținut ar fi identic cu originalul.
Când vorbim despre Transformata Fourier rapidă (FFT) ,de fapt, este vorba despre o
metodă de calcul pentru o transformată Fourier discretă cu N=2n eșantioan e (n este numărul
de iterații al algoritmului), care folosește proprietațile funcț iilor pe riodice pentru reducerea
numărului de operaț ii aritmetice . Se obțin N/2 eșantioane , N fiin d dimensiunea transformatei.
Cu fiecare iterație se dublează numărul de transformate Fourier rapide și se în jumatățește
dimensiunea lor.
NORD Tech 2019
2 2.2. Transformata Hartley rapidă (FHT )
Transformata Hartley rapidă sau Fast Hartley Transform (FHT ) este un algoritm rapid
de calcul al transformatei Hartley discrete sau Dicrete Hartley Transform (DHT) și este o
tranformată unitara cu valori reale. Spre deosebire de transformata Fourier discretă (DFT),
care transformă N numere reale în N numere complexe cu simetrie conjugată, transformata
Hartley disc retă produce N numere reale. Ea este strâns legată de transformata Fourier
discretă (DFT), fiind pur și simplu diferența dintre partea reală și partea imaginară a
transformatei Fourier corespondente.
3. DESCRIEREA SISTEMULUI
Componentele folosite pentru realizarea practică ( Fig.1 ) sunt: modul 1713 Adafruit
(microfon și amplificator), Arduino UNO, și modul cu matrice de LED -uri HW -692.
Fig.1. Schema analizator/vizualizator semnale audio
NORD Tech 2019
3 4. IMPLEMENTARE ȘI MĂSURĂTORI
Pentru a putea măsura viteza celor doi algoritmi rapizi de calcul am împărțit codul în
următoarele rutine :
a) Achiziție semnal
b) Afișarerea eșantioanelor
c) Masurare FFT
d) Masurare FHT
4.1. Achiziție semnal
Determinarea timpului rutinei de achiziție a semnalului: Teorema de eș antionare a lui
Nyquist -Shannon ne spune că pentru a face eșantionarea unui semnal avem nevoie de cel
puțin dublul frecvenței de eșantionare. Dar la un Arduino, frecvența de eșantionare este
destul de limitată. Folosind funcția analogRead() , îi ia aproximativ 100µs convertorului
analog -digital ADC să convertească un eșantion , și alte operațuini sunt relativ î ncete datorită
frecvenței de clock. Setăm convertorul an alog-digital ADC în modul free runnin g mode , în
setup: ADCSRA = 0 b11100101; și set ăm prescalar -ul la 32 , asftel configurând frecvența de
clock al convertorului ADC la 38,46 kHz . La această frecvență eșantioanele digitale pot
reproduce frecvențe de intrare de până la 19,32kHz (teorema lui Nyquist -Shannon), suficient
pentru semnale audio. Folosim pin -ul A0 al arduino -ului ca intrare și tensiune externă de
referință de 3,3V: ADMUX = 0b00000000; și lasăm un timp de delay de 50 milisecunde:
delay(50); pentru ca tensiunea de referință să se stabilizeze. Se citesc va lorile de la ADC și se
copiază î n linii spectrale, după ce sunt comprimate (imparțind la 8). Va rezulta un vReal si
vImaginar.
Am folosit un osciloscop digital cu funcție de generator de semnal pentru masurători.
Rezultatele sunt trecute î n (Tabelul 1 ).
Tabelu l 1. Timp achiziție semnal intrare funcție de numărul de eșantioane/perioadă
Eșantioane 8 16 32 64 128
Timp 415.89 µs 831.77 µs 1.66365 ms 3.32716 ms 6.65428 ms
4.2. Afișarerea eșantioanelor
Am folosit funcția de generator de semnal al osciloscopului pentru a genera un semnal
sinusoidal cu frecvența de 100Hz și amplitudine 4V, offset 0. La finalul rutinei de achiziție
semnal, am făcut o rutina separa tă pentru a afișa și a putea citi valorile eșantioanelor.
Exmeplu de valori obț inute:
16 Eșantioane : -17.00, -20.00, -23.00, -25.00, -27.00, -29.00, -32.00, -35.00, -37.00, -40.00, –
42.00, -44.00, -47.00, -50.00, -52.00, -55.00
32 Eșantioane : 0.00, -2.00, -4.00, -6.00, -8.00, -11.00, -13.00, -16.00, -18.00, -21.00, -23.00, –
25.00, -28.00, -30.00, -33.00, -35.00, -37.00, -40.00, -42.00, -45.00, -46.00, -50.00, -52.00, –
54.00, -57.00, -60.00, -62.00, -64.00, -64.00, -64.00, -64.00, -64.00
NORD Tech 2019
4 4.3. Măsurare FFT
Folosind valorile obținute de la eșantionare am introdus individual valorile de intrare
la fiecare m ăsurare a duratei de timp necesare pentru procesarea eșantioanelor cu FFT, pentru
a ne asigura ca datele de intrare sunt identice pentru cele doua transformate, și pentru a evita
eventualele fluctuații sau iregularități ale valorilor rezultate în urma achi ziției semnalului.
Pentru calculul t ransformatei Fourier rapidă (FFT) trebuie să înmulțim variabilele de
intrare cu constante fixe sinus și cosinus. Aceste înmulțiri ocupă cel mai mult din timpul
necesar microcontroler -ului ATmega328P pentru a termina calculele. De exemplu 16b x 16b
durează aproximat iv 18 cicluri de clock. Dar dacă am aduna 16b + 16b ar dura aproximativ 2
cicluri de clock. În același timp o mare parte a constantelor sinus și cosinus folosite de FFT
sunt 0 sau 1, astfel nefiind necesar sa mai înmulțim acele variabilele specifice de intrare,
putând doar să le adunam. Transformata Fourier rapidă (FFT) verifica condițiile de 0 sau 1 si
le adună pe cele care corespund condițiilor și le inmulțeste pe cele care nu corespund . A doua
metoda prin care transformata Fourier rapidă (FFT) reduce din timpul total necesar calculelor
este folosin d tabele look-u pentru calculul rădă cinilor magnitudinii. Maparea intr ărilor pentru
tabelele look-up ocupă mai multă memorie decât tabelele în s ine. Pentru a evita irosirea
memoriei , se comprimă valorile de intrare cu o acuratețe a valorilor returnate de +/ – 0,5% .
Dupa ce funcția fft_run() este apelată și valorile sunt returnate are loc ordonarea
eșantioanelor de frecvență utilizând funcția fft_reorder() , care ia prima cifră binară din
fiecare număr și o așează la sfârșitul numărului . Astfel se ob țin două transformate Fourier
rapide (FFT) de dimesiune N/2. Apoi primele 3 cifre binare din numarul anterior devin
indexul variabilei intermediare care intră în transformata Fourier rapidă (FFT) de dimensiune
N/2. După aceea se ia prima cifră din grupul anterior de 3 cifre binare și se așează in ultima
poziție a grupului. Dupa doua iteraț ii se ob țin patru transformate Fourier rapide (FFT) de
dimens iune N/4. Primele 2 cifre binare din numărul anterior devin indexul variabilei
intermediare care intră în transformata Fourier rapidă (FFT) de dimensiune N/4. După trei
iterații ultimul număr are cifrele binare ale numărului inițial așezate in ordine inver să. Asfel
dacă numerele se scriu cu cifre binare, atunci poziția finală a eșantionului se află inversând
ordinea cifrelor binare.
După rearanjare se folosește funcția fft_window() pentru a mari rezoluția de frec vență
a datelor. Valorile sunt calculate și apoi se determină magnitudinea numerelor complexe,
punând rezultatel e în linii spectrale , fiecare element a l matricii rezultate fiind o linie
spectrală . Aceasta este rezoluția FFT, fiecare în line spectrală reprezentând un interval de
frecvență, numărul a cestora fiind jumatate din numărul de eșantioane.
Introduc ănd datel e manual , am putut măsura cu ajutorul osciloscopului timpul necesar
pentru ca transformata Fourier rapidă (FFT) sa analizeze semnalul, la eșantioane de diferite
marimi respectiv: 16 și 32 (Fig.2), 64 și 128 (Fig.3) eșantioane.
Fig.2. Măsurare timp necesar analiză cu FFT a unui semnal cu 16 și 32 eșantioane
NORD Tech 2019
5
Fig.3. Măsurare timp necesar analiză cu FFT a unui semnal cu 64 și 128 eșantioane
4.4. Măsurare FHT
Pentru calculul transformatei Hartle y rapide (FHT) am introdus, ca și la FFT ,
individual valorile de intrare rezultate de la eșantionare, identice cu cele folosite la FFT, la
fiecare măsurare a duratei de timp necesare pentru procesarea eșantioanelor cu FHT.
Transformata Hartley rapide (FHT) are avantajul că normala și inversa transformatei
sunt identice (este invesa sa), se evită lucrul cu numere complexe , și face mai puține operații .
Secvența de lungimea N a transformatei Hartley discretă (DHT) calculeaza același numar de
operatții reale cu numărul de operții complexe realizat de transformata Fourier discretă (DFT),
ceea ce rezultă în înjumă tățirea memoriei necesare pentru calculul cu numere reale versus
numere complexe. Transformata Hartley discretă (DHT) conține a ceeaș i cantitate de
informație î n cele N valori reale, cu cele N valori complexe ale transformata Fourier discretă
(DFT), în total 2N valori reale. Conform proprietății lui Hermann (1) DFT este redundant cu
un factor de 2.
) (k*F ) F(-k (1)
Astfel cele N/2 numere reale necesare pentru transformata sinus și cele N/2 numere reale
necesare pentru transformata cosinus luate împreună formează un total de N coeficienți DHT,
care nu este degenerat, datorită simetriei.
Am măsurat cu ajutorul oscilo scopului timpul nece sar transformatei Hartley rapide (FHT) să
analizeze semnalul la eșantioane de diferite mă rimi, respectiv: 16 și 32 (Fig.4), 64 și 128
(Fig.5) eșantioane.
Fig.4. Măsurare timp necesar analiză cu FHT a unui semnal cu 16 și 32 eșantioane
NORD Tech 2019
6
Fig.5. Măsurare timp necesar analiză cu FHT a unui semnal cu 64 și 128 eșantioane
5. REZULTATE
Timpii de execuție a rutinelor transformat ei Fourier rapid e (FFT) și a t ransformat ei
Hartley rapid e (FHT) funcție de numarul de eșantioane sunt prezentați în Tabelul 2.
Reprezentarea grafiă a timpilor de execuție a rutinelor sunt prezentate în figura Fig.6, pentru a
evidenția diferența dintre cele doua metode de analiză a semnalelor.
Tabelul 2. Comparație timp necesar analiză semnal cu FFT vs FHT
EȘANTIOANE TIMP FFT [µS] TIMP FHT [µS]
16 10504.7 309.924
32 23093.6 721.834
64 50331 1708.35
128 109197 3955.1
Fig.6. Diagram a I: comparație timp necesar analiză semnal cu FFT vs FHT
După cum se poate observa din rezultatele mă surătorilor obținute algoritmul FHT este
mult mai rapid decat FFT la un numar N relativ mic de numere reale .
0.0020000.0040000.0060000.0080000.00100000.00120000.00
16 32 64 128Timp în µs EȘANTIOANEFFT
FHT
NORD Tech 2019
7
6. CONCLUZII
Transformata Hartley rapidă (FHT) este o opțiune mai bună din punct de vedere al
implementării pe arduino , în comparație cu transformat a Fourier rapidă (FFT) , când analiza
semnalului trebuie făcută în timp real , datorită reducerii semn ificative a volumului de calcul și
implici t a timpului de calcul necesar . Asfel a vem nevoie doar de jumate din puterea de calcul
și de memorie și se evită lucru l cu numere complexe. Datorită avantajului computațional care
rezultă , fie datorită faptului că folosim cantități reale, fie simetriei spectrului , trebuie luată în
considerare ca și o alternativa viabilă la transformata Fourier rapidă (FFT) în analiza în
domeniul frecvență.
Dezavantajul Transformat ei Hartley rapid e (FHT) este că informația de fază și
amplitudine Fourier nu este direct inte rpretată (utilizată) , dar nu este o problemă așa de mare,
deoarece în multe aplicații aceste informații sunt folosit e ca și un pas intermediar spre un scop
final. Unde este nevoie de numere complexe, acestea pot fi construire la final folosind ecuația:
vvojH vHe F )]( )([)( (2)
.
NORD Tech 2019
8
BIBLIOGRAFIE
[1] https://apps.dtic.mil/dtic/tr/fulltext/u2/a212493.pdf
[2] http://dsp -book.narod.ru/TAH/ch04.pdf
[3] http://www.schur.pub.ro/download/ps/P5_fft.pdf
[4] http://www.qreferat.com/referate/matematica/Algoritmul -FFT812.php
[5] http://wiki.openmusiclabs.com/wiki/ArduinoFFT
[6] http://wiki.openmusiclabs.com/wiki/FFTFunctions
[7] http://wiki.openmusiclabs.com/wiki/ArduinoFHT
[8] http://wiki.openmusiclabs.com/wiki/FHTFunctions
[9] http://mathworld.wolfram.com/FastFourierTransform.html
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: PRELUCRARE SEMNALE SONORE CU ARDUINO Alexandru PETREUȘ , anul I V, Inginerie Electronică Aplicată Coordonator: Șl. Dr. Ing . Sebastian SABOU Cuvinte… [628529] (ID: 628529)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
