SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI FORMA DE ÎNVĂȚĂMÂNT IF PROIECT DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC dr. ing. VANCEA FLORIN ABSOLVENT BRÎNDUȘ RAUL… [622022]
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI TEHNOLOGIA INFORMAȚIEI
SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT IF
PROIECT DE DIPLOMĂ
COORDONATOR ȘTIINȚIFIC
dr. ing. VANCEA FLORIN
ABSOLVENT: [anonimizat]
2017
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI TEHNOLOGIA INFORMAȚIEI
SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT IF
MĂSURAREA CAPABILITĂȚILOR DE
RECEPȚIE A SEMNALELOR AUDIO
PENTRU TELEFOANE MOBILE CU
SISTEM DE OPERARE ANDROID
COORDONATOR ȘTIINȚIFIC
dr. ing. VANCEA FLORIN
ABSOLVENT: [anonimizat]
2017
Cuprins
Introducere …………………………………………………………………………. ……………. ……… …… 1
Capitolul I. – Aspecte generale ale sunetului …………….. ………. …………….. ……………… 2
I.1. Sunetul ………………………………….. ………………………………………………….. 2
I.2. Percepția umană a frecvenței . ………………………………………………………. 2
I.3. Eșantionarea în procesarea digitală a sunetului ……………. ………………. 3
Capitolul I I. – Tehnologii software utilizate ………………………. …………….. ……………… 5
II.1. Sistemul de operare Android ………………………… ……………………………. 5
II.2. Mediul de dezvoltare Android Studio ……………. …………………………….. 7
II.3. Mediul de dezvoltare Matlab …………………… …………………………………. 8
Capitolul II I. – Implementarea aplica ției Android …………. ………………………. ……….. 9
III.1. Crearea unui proiect în Android Studio ………….. ………………………… 9
III.2. Citirea valorilor și generarea unui fișier ………………………………….. 13
III.3. Afișarea valorilor citite în timp real …………………………………………. 23
Capitolul I V – Colectarea datelor ……. ………………… …………….. …………………………… 27
IV.1. Echipamente utilizate ……………………………………………………………… 27
IV.2. Desfășurarea testelor ……………… ………………………………………………. 28
IV.3. Observații ………………….. ……………. ……………………………………………. 38
Concluzii ……………………………… …………………………… …………………………………………. 41
Bibliografie ……………………………………………………… …………………………………………… 42
1
Introducere
Prezenta lucrare reprezint ă un studiu asupra capabilităților telefoanelor mobile cu sistem
de operare Android de a recepționa semnale sonore.
Dispozitivele de tip smartphone, sau “telefoanele inteligente”, au cunoscut în ultimii ani o
impresionant ă creștere din punctul de vedere al popularității și este foarte probabil ca această
creștere să persiste și în viitor.
Principalul motiv îl reprezintă progresele tehnologice, care permit introducerea unui număr
din ce în ce mai mare de senzori în construcția telefoanelor cu scopul de a le lărgi utilitatea. În ziua
de astăzi telefoanele nu mai reprezintă doar un mijloc de a comunica, ci un adevărat instrument
multifuncțional. Având o conexiune la internet aproape la nivel cu un calculator obișnuit, o cameră
foto integrată, sistem de localizare GPS, opțiuni pentru comenzi vocale, senzori pentru colectarea
de da te biometrice, etc., un smartphone oferă utilizatorului o gamă largă de facilități pe ntru viața
de zi cu zi.
Ideea proiectului provine din pasiunea mea pentru aceste dispozitive și pentru
experimentele practice. Prin această lucrare am în cercat să determin capacitatea unui astfel de
dispozitiv de a recepționa semnale sonore.
La baza proiectului stă o aplicație scrisă în mediul de dezvoltare Android Studio. Aplicația
are o funcționalitate simplă : porne ște microfonul telefonului , citește în timp real amplitud inea
semna lului pe care îl recepționează și afișează valoarea amplitudinii pe ecran. Datele obținute de
la aplicație au fost introduse apoi în programul Matlab pentru generarea unor grafice de
sensibilitate.
2 Capitolul I – Aspecte generale ale sunetului
1. Sunetul
Sunetul, din punct de vedere fiziologic, reprezintă senzația perceput ă prin intermediul
organului auditiv de c ătre oscila țiile mecanice ale corpurilor și transmise ca unde acustice (unde
mecanice , longitudinale , de compresi e și rarefiere). [1]
Din punct de vedere fizic, sunetul are o definiție larg ă, el nefiind legat de senzația auditiv ă
și reprezint ă orice oscila ție (vi brație) mecanică care se propagă printr‐un mediu material sub forma
unei unde. Vibrațiile pot fi în domeniul audibil cu frecven ța între 20 și 20000 Hz sau în afara
domeniului de sensibilitate al urechii: infrasunete cu frecven ța sub 20 Hz și ultrasunete peste 20000
Hz. Urechea uman ă are un maxim de sensibilitate pentru sunete cu frecven ța de aproximativ 3500
Hz. [1]
Sunetul este o entitate caracterizată de patru atribute: înălțime, intensitate, durat ă și timbru:
frecven ței sau tonului muzical îi corespunde înălțimea (m ăsurat ă în Hz), i ntensit ății sau
amplitudinii muzicale îi corespunde nivelul de intensitate sonor ă (măsurat în dB), dura ta se
calculeaz ă din momentul impactului p ână la dispari ția ultimei vibra ții percepute , iar t imbrul sau
culoarea este carateristica unui sunet muzical de a se deosebi de alte sunete de aceea și înălțime,
durat ă și intensitate. [1]
2. Percepția umană a frecvenței
Urechea uman ă este sensibil ă la frecven țe ale sunetului între 20 și 20000 Hz. Acest interval
depinde de energia undei sonore (amplitudinea vibrației) precum și de v ârsta și starea de s ănătate
a individului. [1]
3 Intensitatea sunetului regleaz ă intervalul de frecven țe pe care o persoan ă tânără le poate
percepe. La o intensitate a sunetului de -70 dB doar sunetele cu frecven ța de 3000 Hz pot fi
percepute. C ând intesitatea sunetului cre ște la -60 decibeli intervalul de frecven țe percepute se
mărește fiind situat între 500 și 5000 Hz. Cre șterea intensit ății sunetului m ărește intervalul de
frecven țe audibile. Numai sunetele intense pot fi percepute în intervalul complet de 20 ‐2000 Hz.
[1]
3. Eșantionarea în procesarea digitală a sunetului
Majoritatea semnalelor din natură sunt cu variație continuă în timp. Spunem că ne găsim
în domeniul analogic. Acestea reprezintă variația unei mărimi fizice (de ex. modificarea
temperaturii într -un interval de timp) și sunt materializate cel mai des sub forma unei tensiuni
continui sau alternative, cel mai des periodice. Semnalele vehiculate în calculatoare sunt sub formă
numerică sau digitală și se obțin din cele analogice prin eșantionare și conversie analog – numerică.
[2]
Reprezentarea semnalelor în mod discret este singura posibilitate de prelucrare a acestora
cu ajutorul calculatorului. In consecință, un semnal discret este reprezentat în interiorul
calculatorului ca o secvență sau un șir de numere; poziția fiecărui num ăr (eșantion) în secvență
este dată de momentul de timp la care acesta a fost preluat din sistem, iar valoarea lui este
amplitudinea tensi unii purtătoare de informație. [2]
Pentru a putea fi stocate în memoria calculatorului, care este finită, semnalul tr ebuie
eșantionat. Eșantionarea se realizează prin prelevarea de "bucăți" din semnal la intervale de timp
egale. Între două eșantioane adiacente, nu se poate cunoaște nimic din evoluția mărimii măsurate.
Pentru a nu se pierde informația conținută în semnal, trebuie luate măsuri speciale. Dacă x(t) este
evoluția semnalului în timp, și perioada de eșantionare este T0, atunci reprezentarea semnalului
discretizat în calculator este sub forma unui șir de numere [2]:
x(kT0) = x(k) = {x(0), x(T0), x(2T0), …x(nT0) } = {x(0), x(1), x(2),… x(n)}
4 Lungimea șirului este dată de numărul de eșantioane, care este la rândul său dictat de
intervalul de observare a semnalului denumit fereastră. Pentru o fereastră de lungime fixă, numărul
de eșantioane este invers proporțional cu perioada de eșantionare [2]:
n = T / T 0 , unde T este lungimea ferestrei
Parametrul cel mai important în eșantionare este frecvența cu care se realizează aceasta.
Aceasta este inversa perioadei de eșantionare [2]:
f0 = 1 / T 0
Frecvență ridicată înseamnă un număr mai mare de puncte achiziționate într -o perioadă de
timp dată, deci o mai bună reprezentare a semnalului original, dar un consum mai mare de memorie
și un timp mai îndelungat de procesare. f0 nu poate fi crescută oricât , deoarece este limitată de
timpii necesari prelucrării semnalului de la traductor până la depunerea acestuia în memoria
calculatorului. [2]
Eșantionarea cu frecvență redusă poate duce la pierderea de informație din semnalul
original, iar efectele ei se manifestă prin aceea că semnalul eșantionat apare ca și cum ar avea altă
frecvență decât cea a semnalului original. Acest efect se numește "alias". [2]
Pentru evitarea aliasului, conform teoriei lui Nyquist, frecvența de eșantionare trebuie să
fie de cel p uțin două ori mai mare decât frecvența celei mai mari armonici a semnalului original,
adică să se preleveze cel puțin două eșantioane pe perioada cea mai mică. Neîndeplinirea acestei
condiții conduce la nedeterminare la reconstrucția semnalului din eșantio anele sale, în sensul că
prin aceleași eșantioane poate trece mai mult decât o sinusoidă . Pentru o frecvență de eșantionare
dată, cea mai mare frecvență care poate fi reprezentată cu precizie, fără alias, se numește frecvență
Nyquist . [2]
1Open Handset Alliance – o colaborare între 48 de companii de hardware, software și
telecomunicații ce au ca scop standardizarea dezvoltării d e dispozitive mobile
5 Capitolul I I – Tehnologii software utilizate
1. Sistemul de operare Android
Android a apărut ca o platformă revoluționară pentru comunitatea dezvoltatoare de mobile.
O platformă inovatoare și deschisă, Android este bine îndreptat spre satisfacerea nevoilor în
creștere a pieței telefoanelor mobile. [3]
Andy Rubin este considerat ca fiind tatăl platformei Android. Compania sa, Android Inc.,
a fost cumpărată de Google în 2005. Lucrând împreună, membrii Open Handset All iance1,
incluzând compania Google, au început dezvoltarea unei platforme deschise bazate pe o tehnologie
a companiei Android Inc. ce avea ca scop rezolvarea unor probleme a comunității mobile.
Rezultatul este proiectul Android. Cea mai mare parte a dezvoltării platformei este derulată de
echip a lui Rubin de la Google, unde acesta este administrator. [3]
Implicarea Google în proiectul Android este atât de amplă încât e greu de spus cine este
responsabil pentru platformă. Google furnizează codul inițial și documentații online, unelte,
forumuri, ș i kit -ul de dezvoltare software (SDK) pentru dezvoltatori. Majoritatea știrilor
importante legate de Android provin de la Google, însă nu se poate spune că aceștia sunt singurii
implicați. [3]
Android vine cu o platformă de aplicații sub forma unui magazin online, denumită Magazin
Play. Aceasta permite utilizatorilor să caute și să descarce aplicații dezvoltate de terți. [4]
Aplicațiile Android sunt scrise în limbajul de programare Java. Codul sursă este disponibil
pentru toți utilizatorii pentru ca aceștia să poată crea aplicații pe care mai apoi să le vândă mai
departe prin intermediul Magazinului Play. [4]
6
Android are la bază sistemul de operare Linux. Nucleul sistemului de operare este un
nucleu Linux utilizat pentru serviciile de bază cum ar fi securitatea, gestionarea memoriei,
gestionarea proceselor, etc. [4]
O aplicație Android este compusă din mai multe componente : activit ăți, servicii, furnizori
de conținut, etc. Fiecare componentă are un rol bine stabilit în contextul aplicației și fiecare poate
fi activată individual, chiar și de alte aplicații. Fișierul “manifest” este un fi șier ce conține
declarațiile tuturor componentelor aplicației. De asemenea, mai conține toate specificațiile
necesare pentru rularea aplicației, de exemplu versiunea minimă de Android necesară sau chiar
configurații de natură hardware. [4]
Fig. 2 .1.1 – Arhitectura Android [5]
7 2. Mediul de dezvoltare Android Studio
Până în luna mai a anului 2013, aplicațiile Android se puteau realiza prin intermediul
mediului de dezvoltare Eclipse, împreună cu plugin -ul ADT (Android Development Tools) –
dezvoltat de Google. Mai apoi, Google a propus un nou IDE – Android Studio, care are același
scop(de a permite dezvoltarea de aplicații mobile), dar oferă mai multe facilități în ceea ce privește
instalarea mediului de lucru, performanța, “code completion and refactoring” la nivel avansat, etc.
[6]
Android Studio a fost în etapa de acc es timpuriu pentru previzualizare începând de la
versiunea 0.1, în mai 2013, apoi a intrat etapa beta pornind de la versiunea 0.8, care a fost lansată
în iunie 2014. Prima versiune stabilă a fost lansată în decembrie 2014, începând de la versiunea
1.0. [7]
Android Studio se bazează pe IntelliJ IDEA. În plus față de puternicele instrumente de
editare de cod și dezvoltatore IntelliJ, Android Studio oferă chiar mai multe caracteristici care
sporesc productivitatea atunci când se dez voltă aplicații Android, pre cum: u n sistem de dezvoltare
flexibil bazat pe Gradle , un emulator rapid și cu foarte multe caracteristici , rulare instantanee
pentru a face modificări la aplicația în funcțiune fără a construi un nou pachet de aplicații Android
(APK) , template -uri de cod și integrarea , instrumente extinse de testare și cadre de lucru ,
instrumente pentru a verifica și măsura performanța, ușurința în utilizare, compatibilitatea
versiunii, și alte probleme , suport C++ și NDK , suport încorporat pentru Google Cloud Platform,
făcându -l ușor de integrat cu Google Cloud Messaging și App Engine . [7]
Android Studio este disponibil pentru descărcare pe Windows, Mac OS X și Linux, și a
înlocuit Eclipse Android Development Tools (ADT) ca IDE primar folosit de Google pentru
dezvoltarea de aplicații Android native. [7]
8 3. Mediul de dezvoltare Matlab
Numele acestui mediu de dezvoltare, Matlab , înseamnă MATrix LABoratory. Matlab a
fost scris inițial pentru a oferi un acces facil la software -ul dezvoltat de LINPACK (pachet de
sisteme liniare) pentru calcul cu matrici ș i EISPACK (pachetul de sistem Eigen). [8]
Matlab este un limbaj de înaltă performanță pentru tehnica de calcul. Acesta integrează
tehnici de calcul, de vizualizare și de programare în același mediu de d ezvoltare . Mai mult, Matlab
este un m ediu de programare modern: are structuri sofisticate de date, conține instrumente de
editare și depanare integrate și suportă elemente de programare orientată pe obiecte. Aceste aspecte
fac din Matlab un instrument exce lent pentru predare și cercetare. [8]
Fig. 2.3.1 – Interfața Matlab
9
Matlab are multe avantaje față de limbajele de programare convenționale (de exemplu, C,
FORTRAN) pentru rezolvarea problemelor tehnice. Matlab este un sistem interactiv al cărui
element de bază de date este o matrice care nu necesită dimensionare. Pachetul software a fost
comercial disponibil începând cu 1984 și este considerat acum un instrument standard în multe
universități și industrii din toată lume a. [8]
Matlab are rutine incorporate puternice care permit o varietate foarte mare de calcule. De
asemenea, acesta are integrate comenzi grafice ușor de folosit care permit vizualizarea imediată a
rezultatelor. Aplicații specifice sunt colectate în pachete denumite set uri de instrumente. Există
seturi de instrumente pentru prelucrarea semnalelor, calcule simbolice, teoria controlului,
simulare, optimizare și încă alte câteva domenii ale ingineriei și științelor aplicate. [8]
Capitolul I II – Implementarea aplicației Android
1. Crearea unui proiect în Android Studio
În momentul creării unui proiect nou în mediul de dezvoltare Android Studio este necesară
parcurgerea anumitor pași. Voi descrie în continuare etapele necesare pentru crearea unui proiect
nou și configurarea acestuia. Pentru crearea aplicației am utilizat Android Studio versiunea 2.3.2.
În momentul pornirii programului va apărea interfața de pornire (Fig. 3.1.1), prin
intermediul căreia se pot alege mai multe opțiuni : crearea unui proiect nou, des chiderea unui
proiect deja existent, conversia și deschiderea de proiecte create în alte medii de dezvoltare, etc.
10
Fig. 3.1.1 – Interfața de pornire Android Studio
Pentru crearea unui proiect nou se selectează “Start a new Android Studio project”. Se va
deschide o nouă fereastră (Fig. 3.1.2) unde putem introduce numele viitoarei aplicații.
Fig. 3.1.2 – Numele aplicației și calea unde va fi salvat proiectul
2 API – Application Programming Interface – interfa ță de programare a aplica țiilor
11
Pe lângă numele aplicației s e poate introduce și un nu me de domeniu, care împreună cu cel
dintâi va constitui numele pachetului java corespunzător aplicației.
La apăsarea butonului Next va apărea o altă fereastră unde se configurează versiunea de
API2. Aceasta trebuie aleasă în funcție de scopul final al aplicației. Astfel, un nivel de API mai
redus asigură compatibilitate pe o gamă mai largă de dispozitive. Pe de -altă parte, un API mai
ridicat permite utilizarea de funcții noi recent introduse, însă c are nu vor putea rula pe dispozitivele
cu un API mai redus.
Fig. 3.1.3 – Alegerea versiunii de API
De asemenea, viitoare aplicație poate fi proiectată să ruleze pe dispozitive portabile de tip
Wear sau sisteme Android integrate pentru automobile. În proiectul de față am ales un API de
nivel 15 corespunzător versiunii 4.0.3 de Android.
Următorul pas oferă posibilitatea alegerii unui design pentru prima fereastră a aplicației
(Fig. 3.1.4). Se poate alege astfel dintre un design de bază fără niciun element, un design special
12 pentru hărți Google Maps, un design cu o bară de navigație plasa tă în partea de jos a ecranului, un
design de tip Application Drawer, etc.
Fig. 3.1.4 – Alegerea unui design pentru prima fereastră a aplicației
Fig. 3.1.5 – Introducerea numelui ferestrei inițiale și titlul aplicației
13 Cel din urmă pas este numirea ferestrei de start a aplicației și adăugarea unui titlu care să
fie afișat în partea de sus a aplicației. Apăsarea butonului Finish creează proiectul cu configur ările
făcute în pașii precedenți. Pe ecran va apărea acum interfața principală a mediului de dezvoltare.
Aceasta conține printre altele o fereastră unde se scrie codul, un panou de navigare a proiectului,
o bară cu instrumente, o consolă pentru eventualele erori, etc.
Fig. 3.1.6 – Interfața principală Android Studio
Dezvoltarea aplicației Android s -a desfășurat în mai multe etape pe care le voi descrie în
continuare.
2. Citirea valorilor și generarea unui fișier
Un prim pas în dezvoltarea aplicației a fost determinarea modului în care sistemul de
operare Android gestionează funcționarea microfonului. Documentația oficială a Google [6] relevă
existența unui API1 specializat în vederea înregistrării de semnale sonore.
3 buffer – registru tampon, utilizat la stocarea temporară de date
14 API-ul furnizează clasa AudioRecord pentru recepția semnalelor sonore , iar constructorul
este definit să primească parametri cum ar fi sursa sunetului, rata de eșantionare, numărul de
canale, formatul pentru codificarea sunetului și dimensiunea unui registru de t ip buffer3 (Fig.
3.2.1).
Fig. 3.2.1 – inițializarea obiectului de tip AudioRecord
Sursa sunetului nu se referă strict la componenta hardware ci și la filtrele utilizate în
procesarea sunetului. Acestea pot să varieze în funcție de formatul în care se d orește înregistrarea
dar și în funcție de scopul în care va fi folosită înregistrarea. De exemplu, în cazul
MediaRecorder.AudioSource.VOICE_COMMUNICATION se utilizează filtre pentru anularea
zgomotului și a ecourilor. În cazul de față am ales sursa MIC.
Rata de eșantionare se referă la transformarea semnalului analogic în semnal digital.
Semnalul captat de microfon este în formă analogică. Pentru ca acesta să poată fi procesat în format
digital, se u tilizează tehnica eșantionării (Fig. 3.2.2).
Fig 3.2.2 – Tehnica de eșantionare [9]
4 PCM – Pulse -Code Modulation – formatul standard pentru salvarea fișierelor rezultate
în urma eșantionării unui semnal analogic
15
Această tehnică constă în citirea unor valori (eșantioane) la un anumit interval de timp.
Valori comune pentru ratele de eșantionare sunt 22050 Hz, 44100 Hz, 48000 Hz, etc. Practic, la o
rata de 44100 Hz (44.1 KHz) se vor citi 44100 eșantioane pe secundă. Cu toate acestea, conform
teoremei Nyquist -Shannon, frecvența maximă înregistrabilă cu o anumită rată de eșantionare este
jumătate din valoarea acesteia (la o rată de 44.1 KHz frecvența maximă detectabilă este de 22.05
KHz). Astfel, cu cât rata de eșantion are este mai ridicată cu atât mai largă este gama de frecvențe
ce se pot eșantiona.
În cazul aplicației de față, am ales o rată de eșantionare de 44100 Hz întrucât, conform
documentației Google [10], este singura rată de eșantionare care funcționează garantat pe
majoritatea dispozitivelor Android.
Numărul de canale (RECORDER_CHANNELS) oferă posibilitatea de a comuta între
modul stereo și modul mono. Pentru aplicația de față am optat pentru modul mono.
Formatul pentru codificarea sunetului reprezintă în esență adâncimea în biți a semnalului.
API-ul Android oferă 3 formate : PCM4 pe 8 biți, PCM pe 16 biți și PCM în format float. Formatul
PCM reprezintă modalitatea de reprezentare în format digital a unui semnal analogic. Practic, în
urma eșantionării unu i semnal analogic rezultă un fișier în format PCM. Cu cât adâncimea biților
este mai ridicată, cu atât formatul este mai eficient, permițând detectarea unor variații mai fine de
amplitudine. Pentru aplicația de față am ales formatul PCM pe 16 biți.
Dimens iunea buffer -ului reprezintă dimensiunea registrului în care se stochează semnalul
eșantionat. API -ul Android conține o funcție getMinBufferSize() ce poate fi utilizată în
determinarea dimensiunii minime necesare a buffer -ului în funcție de rata de eșantio nare, formatul
pentru codificare audio și numărul de canale utilizate.
16
Fig 3.2.3 – Variabilele utilizate în inițializarea obiectului de tip AudioRecord
În cadrul unei aplicații Android pot să existe una sau mai multe ferestre. Aceste ferestre au
câte un ciclu de viață propriu și se numesc convențional “activități”.
Activitatea este una dintre cele mai importante componente (al ături de servicii și broadcast
receivers) ale unei aplica ții Android deoarece este str âns legat ă de interfa ța cu utilizatorul. O
activitate este utilizat ă pentru a gestiona interfa ța cu utilizatorul și este echivalent ă cu fereastra sau
formularul din aplica țiile desktop. [11]
Ciclul de via ță al unei activit ăți descrie starea în care o activitate poate fi la un moment dat :
Running – activitatea a fost creat ă, pornit ă și este afi șată pe ecranul aparatului; în cazul în
care activitatea a mai fost utilizat ă și aplica ția a salvat starea acesteia , activitatea este reluat ă din
acel punct . În aceast ă stare utilizatorul interac ționeaz ă cu activitatea prin intermediul interfe ței
dispozitivului (tastatur ă, touchscreen, display) . [11]
Paused – activitatea pierde prim -planul, deoarece o alt ă activitate este executat ă, cum ar fi
o fereastra de dialog; de asemenea, în cazul în care aparatul intra în modul sleep, activitatea este
oprit ă temporar; activitatea își poate relua execuți a și este plasat ă inapoi în prim -plan. [11]
Stopped – activitatea nu mai este în uz și pentru c ă este oprit ă nu este vizibil ă; pentru a fi
reactivat ă (ea deja exist ă), activitatea trebuie s ă fie repornit ă și reluat ă. [11]
17 Destroyed – activitatea este distrus ă (onDestroy()) și memoria s -a eliberat, deoarece nu mai
este necesar ă sau sistemul are nevoie de memorie suplimentar ă pentru rutinele proprii sau pentru
alte activit ăți; deoarece managementul memoriei este un aspect important pentru sistemul de
operare Linux al dispozitivului mobil, procesul care g ăzduie ște o activitate întrerupt ă, oprit ă sau
distrus ă, poate fi terminat pentru a elibera memorie pentru noi activit ăți; doar procesele ce
gestioneaz ă activit ăți ce ruleaz ă sunt protejate . [11]
Fig. 3.2.4 – Ciclul de viață al unei activități [12]
18
Fig 3.2.5 – Interfața aplicației
Pentru a rula anumite instrucțiuni la schimbarea stării unei activități, limbajul Android pune
la dispoziție un set de funcții “handler” care se pot supradefini. În aplicația de față am supradefinit
funcția onCreate() : în momentul creării activității princ ipale, aceasta aduce interfața la o stare
inițială: butonul de STOP dezactivat și valoarea amplitudinii citite este 0 ( Fig. 3.2.5).
19
Fig 3.2.6 – Func ția de inițializare și declanșare a microfonului
Funcția startRecording() este cea care creează obiectul de tip AudioRecord și pornește
înregistrarea (Fig. 3.2.6). Variabila isRecording de tip boolean indică faptul că microfonul este
activ. Funcția saveAudioToFile() este cea care creează fișierul în form at PCM și îl salvează în
memoria internă a telefonului atunci când înregistrarea s -a încheiat (variabila isRecording are
valoarea false).
Pentru salvarea fișierului este necesară precizarea căii unde urmează să se facă scrierea.
Variabila filePath se iniți alizează cu calea rădăcin ii memoriei interne a dispozitivului, creând un
fișier cu numele “record.pcm”. Scrierea în fișier se va executa pe un alt fir de execuție. Atâta vreme
cât microfonul este activ, acesta va citi valori care mai apoi vor fi scrise în fișier.
Citirea valorilor va avea loc în condițiile în care variabila isRecording are valoarea true.
Vectorul sData [] reprezintă registrul buffer în care se stochează temporar valorile citite de
microfon. Câ nd acest buffer se umple, informa ția este scrisă în fișier iar buffer -ul este golit (Fig.
3.2.7).
20
Fig. 3.2.7 – Func ția de salvare în fișier
Oprirea înregistrării se realizează cu metoda
stopRecording(). Variabila isRecording primește valoarea false,
iar obiectul recorder este reinițializat și memoria este eliberată.
De asemenea, firul de execuție pentru salvarea fișierului este
întrerupt iar obiectul se reinițializează (Fig. 3.2.8).
Fig. 3.2.8 – Oprirea înregistrării
21 Procesele descrise mai sus se execută la apăsarea butonului de start, motiv pen tru care
funcțiile pentru pornirea și oprirea înregistrării se apelează în cadrul unor metode ha ndler pentru
butoane.
În plus, începând cu Android 6.0, aplicațiile solicită permisiuni în momentul lansării în
execuție. Pentru ca o aplicație să poată scrie un fișier este necesar ca aceasta să ceară permisiunea
de a accesa mediul de stocare și cererea să fie aprobată de către utilizator. Ulterior, în meniul de
setări se pot revoca permisiunile acordate pentru fiecare aplicație, oferind utilizatorilor un mijlo c
eficient de administrare a accesului aplicațiilor la facilitățile dispozitivului (mediul de stocare,
senzori, date mobile, etc).
În acest sens, în cadrul aplicației există și funcții pentru cererea permisiunilor necesare,
pentru accesul la memoria inter nă, respectiv pentru accesul la microfon (Fig. 3.2.9).
Fig. 3.2.9 – Cererea permisiunilor pentru stocare și înregistrare audio
22 Aplicația astfel construită a fost încărcată pe un telefon mobil LG Nexus 5X. În urma
înregistrării a rezultat fișierul “record.pcm” pe care l -am încărcat apoi în mediul de dezvoltare
Matlab în vederea generării unui grafic. Rezultatul a confirmat funcțion area corectă a aplicației
(Fig. 3.2.10).
Fig. 3.2.10 – Reprezentarea grafică a f ișierului “record.pcm”
Pentru a obține graficul din Fig. 3.2.10 am executat succesiv următoarele comenzi Matlab:
fid = fopen('record.pcm', 'r') – deschiderea fișierului
c=fread(fid, inf, 'int16') – încărcarea conținutului fișierului în vectorul c
plot(c) – generarea graficului
23
Pentru deschiderea fișierului am utilizat funcția fopen care primește ca parametri numele
fișierului și caracterul “r” reprezentând faptul că fișierul se dorește a fi deschis pentru citire.
Funcția fread citește conținutul fișierului și primește ca parametri identificatorul fișierului
deschis (fid), numărul de octeți ce urmează a fi citiți din fișier (în cazul de față se citește integral
fișierul) și tipul de date necesar în interpretarea datelor din fișier (int16 întrucât valorile citite de
microfon sunt salvate într -un array de tip short).
3. Afișarea valorilor citite în timp real
Având un mecanism funcțional de captare a semnalelor audio, pasul următor a constat în
preluarea valorilor de la microfon și afișarea acestora direct pe ecran ul dispozitivului. Marea
majoritate a modificărilor au survenit în cadrul funcției de salvare a fișierului.
Am redenumit această metodă î n displayRecValue() întrucât aceasta nu se mai ocupă de
crearea unui fișier ci execută operațiile necesare pentru transformarea valorilor într -un format ce
poate fi afișat pe ecran și scrierea valorilor într -o căsuță de text.
La pornirea microfonului, primul pas este de a umple cel puțin jumătate din buffer -ul
utilizat la stocarea temporară a valorilor citite.
24
Fig. 3.3.1 – Afișarea valorilor pe ecranul dispozitivului
Valorile citite sunt parcurse și se calculează valoarea minimă și valoarea maximă dintre
cele existente în buffer.
25 Este de menționat faptul că valorile citite pot fi și negative, după cum s -a putut observa în
Fig. 3.2.10. Astfel , minimul va reprezenta o v aloare mai mică decât 0, însă care în modul ar putea
depăși maximul. Din acest motiv am calculat mai departe valoarea maximă dintre modulele celor
două valori semnificative (Fig. 3.3.2).
Fig. 3.3.2 – Calculul amplitudinii maxime
Variabilele counter ș i valSum au rolul unei optimizări a măsurătorilor. După primele teste
am putut observa faptul că valorile afișate pe ecran variază prea repede pentru a putea fi citite. Din
acest motiv, secvența următoare de cod realizează o mediere a valorilor. Astfel, me toda va citi un
număr de 20 de valori după care va calcula media aritmetică a valorilor citite și va afișa rezultatul
pe ecran.
Apelarea metodei de afișare se va realiza printr -un apel explicit la firul de execuție al
interfeței utilizator (runOnUiThread( )). Acest lucru este necesar întrucât orice schimbare asupra
interfeței (în acest caz actualizarea continuă a textului) trebuie să se execute pe firul de execuție al
acesteia (Fig. 3.3.3). În caz contrar, interfața nu va suferi nicio schimbare iar datele n u se vor afișa.
Fig. 3.3.3 – Medierea rezultatelor și afișarea pe ecran
26
Apelarea metodei setText() este cea care scrie rezultatul într -o căsuță de text de pe ecranul
dispozitivului.
Întrucât aplicația nu mai realizează o scriere în fișier, aceasta nu mai accesează mediul de
stocare. Astfel, funcția de cerere a permisiunilor se modifică astfel încât să ceară permisiune doar
pentru înregistrarea audio (Fig. 3.3.4).
Fig. 3.3.4 – Cererea permisiunilor pentru înregistrare audio
27 Capitolul IV – Colectarea datelor
Testarea propriu -zisă a capacităților de captare a semnalelor audio s -a desfășurat de
asemenea în mai multe etape.
1. Echipamente utilizate
Așa cum am menționat mai sus, dispozitivul pe care s -au realizat majoritatea testelor a fost
un telefon mobil LG Nexus 5X. Prima serie de teste s -a realizat și pe un Samsung Galaxy A5 2016,
pentru a testa compatibilitatea cu mai multe modele de telefoane c u versiuni diferite de Android
(7.1.2, respectiv 6.0.1).
Pentru emiterea semnalelor am folosit o aplica ție de pe magazinul Google Play [14].
Această aplicație constituie un generator de semnale audio cu frecvențe de până la 22 KHz.
Aplicația a fost instalată pe un Samsung Galaxy S2 conectat prin Bluetooth la o boxă portabilă
JBL GO (Fig. 4.1).
Fig. 4.1.1 – Boxa por tabilă JBL GO [13]
28 Am ales să folosesc un alt telefon exclusiv pentru generarea sunetelor pentru ca sursa
semnalului să nu se modifice. De asemenea, am considerat că o boxa portabilă este mai eficientă
în emiterea semnalului decât difuzorul telefonului. Este de menționat faptul că boxa are o putere
de 3W și o gamă de frecvențe 180 – 20000 KHz.
2. Desfășurarea testelor
Primul dispozitiv testat a fost cel de la Samsung. Receptorul (telefonul) și emițătorul (boxa
portabilă) au fost plasați pe o masă în centr ul unei încăperi, la o distanță de 50 cm unul față de
celălalt (Fig. 4.2.1). Primul set de teste s -a realizat prin rotirea telefonului cu câte 45 de grade. La
fiecare rotire am citit valoarea afișată pe ecran, inițial pentru frecvența de 5 KHz.
Fig. 4 .2.1 – Amplasarea receptorului și a emițătorului
29 După ce am înregistrat valorile corespunzătoare pentru fiecare unghi la frecvența de 5 KHz,
am crescut frecvența semnalului pe rând la 10 KHz iar apoi 15 KHz și am reluat măsurătorile. În
plus, am citit valoarea furnizată de aplicație și în condiții de liniște (emițătorul oprit) și am încercat
să determin frecvența maximă înregistrabilă, crescând treptat până la 22 KHz (frecvența maximă
pe care emițătorul este capabil să o genereze).
Toate măsurătorile au fost reluate mai apoi cu telefonul meu (LG Nexus 5X). La fel ca
pentru telefonul anterior, pentru Nexus am înregistrat valori și pentru frecvențe mai mari de 15
KHz : 16 KHz, 17 KHz, p ână la 22 KHz.
Rezultatele acestor prime teste au fost după cum urmează :
Fig. 4.2.2 – Valorile citite cu Samsung Galaxy A5
Un lucru de menționat este că la frecvența de 22 KHz (limita maximă a emițătorului)
valoarea citită de aplicație fost de 59, deci ajuns să scadă sub valoarea în condiții d e liniște .
30
Fig. 4.2.3 – Valorile citite cu LG Nexus 5X
Un lucru important de menționat este că toate măsurătorile realizate pâ nă în acest punct s –
au făcut având sursa sunetului în aplicație setată pe MIC. Rezultatele nerealiste obținute sunt
probabil efectul unor algoritmi de filtrare a semnalului recepționat, motiv pentru care am schimbat
sursa sunetului în UNPROCESSED. Conform documentației Google [10], aceasta este singura
sursă de sunet care furnizează valori reale și nemodificate, însă nu toate dispozitivele sunt capabile
să capteze semnal în această formă.
După schimbarea sursei am reluat măsurătorile, însă de această dată am citit valori din 15
în 15 grade. Valorile obținute le -am introdus în Matlab și am generat grafice de sensibilitate (Fig.
4.2.4, 4.2.5 și 4.2.6 ) pentru 5 KHz, 10 KHz și respectiv 15 KHz.
31 Pentru încărcarea valorilor în Matlab și generarea graficelor, am executat pe rând
următoarele comenzi :
theta = [0 pi/12 pi/6 p i/4 pi/3 5*pi/12 pi/2 7*pi/12 2*pi/3 3*pi/4 5*pi/6 11*pi/12 pi
13*pi/12 7*pi/6 5*pi/4 4*pi/3 17*pi/12 3*pi/2 19*pi/12 5*pi /3 7*pi/4 11*pi/6 23*pi/12 2*pi]
rho = [50 48 45 43 41 37 34 31 25 28 27 21 21 21 27 28 25 31 34 37 41 43 45 48 50]
polarplot(theta,rho)
theta – reprezintă un vector conținând unghiurile corespunzătoare fiecărei valori
rho – reprezintă un vector conținând valorile corespunzătoare fiecărui unghi
polarplot(theta,rho) – funcție Matlab care generează un grafic în coordo nate polare;
primește ca argumente 2 vectori, primul conținând valorile unghiurilor iar al doilea conținând
valorile efective.
Fig 4 .2.4 – Diagrama de sensibilitate pentru 5 KHz
32
Fig. 4.2.5 – Diagrama de sensibilitate pentru 10 KHz
Figura 4.2.6 – Diagrama de sensibilitate pentru 15 KHz
33 În ultimă instață, am încercat să optimizez rezultatele prin modificarea condițiilor de test.
Receptorul și emițătorul, plasați direct pe masă, pot fi influențați de eventuale vibrații de frecvență
joasă generate de factori externi. Din acest motiv, sub fiecare dintre cei doi am pus câte o bucată
de polistiren cu scopul de a izola împotriva acelor eventuale vibrații.
În plus, am utilizat un patefon elec tric pentru poziționarea și rotirea receptorului. Pe
platanul acestuia am pus o foaie cu marcaje radiale cu ajutorul căreia să pot poziționa telefonul cu
precizie la o gamă mai largă de unghiuri. Peste foaia cu marcaje am pus apoi o bucată de polistiren
pe care am plasat apoi și receptorul (Fig. 4.2.7 ).
Am reluat măsurătorile pentru fiecare din cele 3 frecvențe și am măsurat valorile citite din
7.5 în 7.5 grade. De asemenea, în cazul primelor măsurători telefonul a fost culcat pe masă. De
această dată am considerat și alte două situații : cu telefonul plasat vertical și cu microfonul în sus,
și cu telefonul plasat în mod landscape. Practic, sensibilitatea telefonului a fost testată pe fiecare
din cele 3 axe.
Fig. 4.2.7 – Patefonul electric și izolarea em ițătorului și a receptorului cu polistiren
34 În urma măsurătorilor au rezultat 9 diagrame de sensibilitate, pentru 5 KHz, 10KHz și
respectiv 15 KHz, cu telefonul poziționat pe rând în cele 3 poziții.
Fig. 4.2.8 – Diagram ă de sensibilitate, 5 KHz, receptorul poziționat orizontal
Fig. 4.2.9 – Diagram ă de sensibilitate, 10 KHz, receptorul poziționat orizontal
35
Fig. 4.2.10 – Diagram ă de sensibilitate, 15 KHz, receptorul poziționat orizontal
Fig. 4.2.1 1 – Diagramă de sensibilitate, 5 KHz, receptorul poziționat vertical
36
Fig. 4.2.1 2 – Diagramă de sensibilitate, 10 KHz, receptorul poziționat vertical
Fig. 4.2.1 3 – Diagramă de sensibilitate, 15 KHz, receptorul poziționat vertical
37
Fig. 4.2.14 – Diagramă de sensibilitate, 5 KHz, receptorul poziționat “landscape”
Fig. 4.2.15 – Diagramă de sensibilitate, 10 KHz, receptorul poziționat “landscape”
38
Fig. 4.2.16 – Diagramă de sensibilitate, 5 KHz, receptorul poziționat “landscape”
3. Observații
Rezultatele obținute cu Samsung Galaxy A5 sunt destul de interesante. Pe măsură ce am
crescut frecvența am observat și o creșter e semnificativă a ampl itudinii, contrar asteptărilor.
La frecvența de 21.6 KHz telefonul înregistra o valoare de 66, practic cu doar câteva unități
peste valoarea obținută în condiții d e liniște.
Un alt aspect interesant de menționat este faptul că la frecvența maximă a emițătorului (22
KHz), telefonul înregistra o valoare mai mică decât cea în condiții de liniște. Cauza acestei
anomalii și a creșterii neobișnuite a amplitudinii ar putea fi de natură software. Majoritatea
telefoanelor scoase pe piață în ultimii ani conțin pe lângă microfonul implicit și un microfon
utilizat în special pentru anularea zgomotului. Cu alte cuvinte, semnalul captat este procesat în
timp real pentru a îmbunătă ți calitatea sunetului, fapt ce duce la detectarea unor valori nereale.
39 În cazul Nexus, valorile obținute au fost ceva mai predictibile în gama de frecvențe uzuale
(5 KHz – 15 KHz). Astfel, amplitudinea semnalului la frecvența de 10 KHz este considerabil m ai
mică decât la 5 KHz, aplicația înregistrând 1150 față de 1900.
Totuși, la frecvențele de depășesc valoarea de 15 KHz apar și aici neregularități . La 16
KHz am văzut o creștere a amplitudinii de la 1170 (valoare obținută la frecvența de 15 KHz) la
1400. La 17 KHz, valoarea citită a scăzut brusc la 965. La 18 KHz, am înregistrat o valoare de
2230, peste cea înregistrată chiar și la 5 KHz. La frecvențele mai mari însă, amplitudinea a început
din nou să scadă.
În cazul acestor variații neobișnuite, problema nu mai stă doar în filtrele de preprocesare
ci și rata maximă de eșantionare suportată. O rată de 44100 Hz permite detectarea semnalelor cu
o frecvență maximă de 22050 Hz. Este foarte probabil ca pe măsură ce frecvența se apropie de
limita maximă înregistr abilă, capacitatea telefonului de a detecta undele sonore să scadă,
influențând semnificativ autenticitatea valorilor obținute.
Interesantă este în schimb valoarea înregistrată la frecvența de 22 KHz. Amplitudinea de
130 este aproape dublă față de cea înre gistrată de modelul Samsung la aceeași frecvență. O
posibilitate ar putea fi faptul că algoritmii de preprocesare consideră semnalul emis de boxă ca
fiind zgomot de fond, anulându -l. Acest fapt este plauzibil cu atât mai mult cu cât la Samsung
algoritmii d e preprocesare par să acționeze într -un mod mult mai pronunțat, date fiind valorile
semnificativ mai mari față de cele înregistrate cu Nexus.
În ceea ce privește experimentul realizat după ce sursa sunetului a fost schimbată din MIC
în UNPROCESSED, rezulta tele sunt ușor de remarcat. Diagramele de sensibilitate relevă un prim
fapt interesant, și anume că amplitudinea este semnificativ mai redusă. Valorile obținute sunt acum
de ordinul zecilor.
În cazul frecvenței de 5 KHz, amplitudinea scade relativ constant pe măsură ce am
modificat unghiul telefonul ui, până la 120 de grade. Totuși, între 120 și 150 de grade semnalul se
amplifică ușor. Această creștere ușoară a amplitudinii poate fi pusă pe seama reflexiei sunetului.
La ung hiuri de peste 90 de grade telefonul nu mai detectează doar sursa principală a sunetului, ci
și ecourile. Din acest motiv, un astfel de experiment ar fi ideal să se desfășoare într-o cameră
izolată fonic pentru a elimina influența undelor reflectate.
40 La fr ecvența de 10 KHz am obținut o amplitudine maximă cu cel puțin 50% mai mare decât
la frecvența de 5 KHz. În rest, variația amplitudinii este în limitele așteptate. Mai mult, se observă
același fenomen între 120 și 150 de grade, însă în acest caz amplitudin ea nu scade ci rămâne
constantă.
La frecvența de 15 KHz sensibilit atea microfonului scade considerabil la unghiuri mai mari
de 90 de grade. Creșterea de amplitudine observată anterior între 120 și 150 de grade este mult
diminuată și se produce acum între 1 50 și 165 de grade.
În cazul experimentului final, când telefonul a fost poziționat culcat pe masă s -a observat
scăderea sensibilității pe măsură ce microfon ul se a propia de unghiul de 180 grade, fapt demonstrat
și în experimentele anterioare. Poziționarea telefonului în formă verticală a generat o diagramă
puțin mai ordonată : valorile prezint ă variații mai puțin pronunțate, iar conturul diagramei este
poziționat mult mai central față de celelalte situații.
Așezarea receptorului în poziția landscape a generat diagrame asemănătoare cu cele
rezultate din așezarea acestuia în poziție orizontală, dat fiind faptul că unghiul de 0 grade
corespunde cu microfonul fiind poziționat direct spre emițător. Totuși, la unghiul de 90 de grade,
corespunzător telefonului poziționat cu camera înspre sursa de sunet, s -a observat o creștere a
sensibilității în cazul frecvenței de 5 KHz.
41 Concluzii
Luând în considerare circumstanțele și rezultatele obținute, pot spune că experimentele au
demonstrat cu succes faptul că dispozitivele smartphone sunt destul de capabile în recepționarea
semnalelor audio.
Testele nu s -au desfășurat în condiții ideale. Un astfel de experiment necesită utilizarea
unei încăperi bine izolate din punct de vedere fonic. În timpul experimentulu i am observat că
valoarea afișată era influențată chiar și de locul unde stăteam în încăpere. Mai mult decât atât,
încăperea în care am colectat datele conținea diferite obiecte de mobilier, acestea putând cu
ușurință să devieze traiectoria undelor sau să genereze ecouri, influențând puternic rezultatele.
Cu toate acestea, cu ambele dispozitive am reușit să obțin valori pe o gamă la rgă de semnale
sonore. Chiar și la frecvențe ridicate ce depășesc spectrul uman (peste 20 KHz) s -au înregistrat
anumite valori. Acest lucru sugerează faptul că, în condiții ideale și poate chiar cu anumite
optimizări software în cadrul aplicației, un telefon mobil este capabil să recepționeze semnale
sonore din afara spectrului uman, oferind oportunități reale de aplicații într-un domeniu puțin
explorat până acum.
42 Bibliografie
[1] http://www.fiziologie.ro/didactic/2015 –
2016/cursuri/s1c5%20Analizatorul%20auditiv%20si%20vestibular.pdf , consultat la 22.06.2017
[2] http://iota.ee.tuias i.ro/~sam/pdf/Curs%20pierdut%20 –
%20CAD,%20alias,%20esantionare.pdf , consultat 22.06.2017
[3] Lauren Darcey, Shane Conder: Android Wireless Application Development Volume I:
Android E ssentials, Addison -Wesley, 2012
[4] https://www.engineersgarage.com/articles/what -is-android -introduction
[5] http://pics.c4learn.com/2014/08/architectu re-android -operating -system.png
[6] http://android.rosedu.org/2015/laborator -01-introducere -git-structura -generala -android ,
consultat la 1 1.06.2017
[7] https://www.setthings.com/ro/instalarea -android -studio -pentru -dezvoltarea -de-aplicatii –
mobile/ , consultat la 11 .06.2017
[8] David Houcque: Intr oduction to Matlab for Engineering Students, Northwestern University,
2005
[9] https://upload.wikimedia.org/wikipedia/commons/5/50/Signal_Sampling.png
[10] https://developer.android.com/reference/android/media/AudioRecord.html , consultat la
27.05.2017
[11] http://www.itcsolutions.eu/2011/09/08/android -tutorial -concepte -activitati -si-resurse -ale-
unei-aplicatii -android/ , consultat la 17.06.2017
[12] https://developer.android.com/guide/components/images/activity_lifecycle.png
[13] http://demandware.edgesuite.net/aauj_prd/on/demandware.static/ -/Sites –
masterCatalog_Harman/default/dw6a01e82c/Go -Black -Hero_dvHAMaster.png
[14] https://play.google.com/store/apps/details?id=com.boedec.hoel.frequencygenerator&hl=en
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: SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI FORMA DE ÎNVĂȚĂMÂNT IF PROIECT DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC dr. ing. VANCEA FLORIN ABSOLVENT BRÎNDUȘ RAUL… [622022] (ID: 622022)
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.
