Analiza și clasifica rea sunetelor [603114]

Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Analiza și clasifica rea sunetelor
produse de instrumente muzicale

Proiect de diplomă

prezentat ca cerin ță parțială pentru ob ținerea titlului de Inginer în
domeniul Electronică, Telecomunicații și Tehnologia Informației
programul de studii de licen ță Tehnologii și Sisteme de Telecomunicație

Conducător științific Absolvent: [anonimizat]. Radu Mihnea UDREA Alexandru -Vasile DAVID

Anul
2019

CUPRINS

LISTA FIGURILOR
LISTA TABELELOR
LISTA ACRONIMELOR
INTRODUCERE 15
CAPITOLUL 1 . NOȚIUNI TEORETICE 17
1.1. TRECERE ÎN REVI STĂ A REZ ULTATELOR ANTERIOARE ÎN DOMENIU 17
1.2. METODE DE CLASI FICARE A SEMNALULUI AUDIO 18
1.3. RECUNOAȘTEREA I NSTRUMENT ULUI 19
1.3.1. Inteligența artificială și Machine Learning 19
1.3.2. The K -Nearest Neighbour classifier 21
1.3.3. Rețele neuronale convoluționale 22
1.4. EXTRAGEREA SETULUI DE CARACTERI STICI 25
1.4.1. Caracteristici în domeniul timp 26
1.4.2. Caracteristici în domeniul frecvență 26
1.4.3. Hibrid – MFCC 27
CAPITOLUL 2. STRUCTURA IMPLEMENTĂ RII PROPRI I 31
2.1. PREGĂ TIREA DATELOR UTILIZ ATE 31
2.2. OBȚ INEREA DATELOR PENTRU RECUNOAȘTERE 33
2.3. UT ILIZAREA DATELOR PEN TRU RECUNOAȘ TERE 33
CAPITOLUL 3 . IMPLEMENTAREA PROGRAMULUI 35
3.1. PROGRAMUL DE RE CUNOAȘTERE 35
3.2. REZULTATE 40
3.3. DEZVOLTARE ULTE RIOARĂ 42
BIBLIOGRAFIE 45
ANEXA 1. soundsplitter.m 47
ANEXA 2. DCT_mfcc.m 49
ANEXA 3. extragere.m 53
ANEXA 4. process_file_names.m 55
ANEXA 5. process_training_data.m 57
ANEXA 6. process_test_data .m 59
ANEXA 7. normalization_data.m 61
ANEXA 8. neural_network.m 63

LISTA FIGURILOR

Figura Pag
Figura 1.1. Neuron McCulloch -Pitts. 20
Figura 1. 2. Tipurile de inteligență artificială și relațiile dintre ele. 20
Figura 1.3. Diferite tehnici folosite în ”Machine Learning” î n func ție de tipurile de date folosite. 21
Figura 1.4. Exem plu de algoritm KNN cu K=5. 22
Figura 1.5. Reprezentarea arhitecturală a unui perceptron multistrat cu două straturi ascunse. 23
Figura 1.6. a) Curbe de antrenare și de eroare de generaliza re și b) Curba reală a erorii de
generalizare.
24
Figura 1.7. Diagrama bloc a extractorului de caracteristici MFCC . 27
Figura 1. 8. Scala frecvențelor Mel în raport cu scala Hertz . 28
Figura 1 .9. Bancul de filtre utilizat. 28
Figura 2.1. Informa ția dintr -un fișier WAV vs. MP3. 32
Figura 2.2. O parte dintr -un semnal al unei melodii din domeniul timp. 32
Figura 3.1. Etapele de implementare a programului și fișierele necesare. 36
Figura 3.2. Exemplu de fișier soundsplitter. 36
Figura 3.3. Exemplu de grafic al coeficienților MFCC î n domeniul tim p. 37
Figura 3.4. Caracteristica de testare din prelucrarea coeficienților MFCC. 37
Figura 3.5. Matricea de mapare: repreze ntarea instrumentelor folosite în sampleurile 396 -410. 38
Figura 3. 6. Schema bloc a codului. 39
Figura 3. 7. Acuratețea medie a 10 rețele antrenate. 40
Figura 3. 8. Matricea de confuzie. 41
Figura 3. 9. Afișarea în cazul recunoașterilor nereușite. 41
Figura 3. 10. Afișarea în cazul recunoașterii corecte. 42

LISTA TABELELOR

Tabelul Pag
Tabelul 2.1. Seturile de d ate utilizate în realizarea programului . 31

LISTA ACRONIMELOR

GA – Genetic Algorithm (Algoritm genetic)
GP – Genetic Programming (Programare genetică)
IA – Inteligența Artificială
KNN – K-Nearest Neighbour
LPC – Linear Predictive Coding,
MFCC – Mel Frequency Cepstral Coefficients
MLP – Multilayer Perceptron (Perceptron multistrat)
RMS – Root Mean Square (Media pătratică)
RNC – Rețele Neuronale de tip Convoluțional
RPROP – Resilient Back Propagation
PCA – Principal Component Analysis (Analiza după componente principale)
SC – Spectral Centroid
ZCR – Zero Crossing Ratio ( Treceri prin zeo)

INTRODUCERE

Muzica este un element des întâlnit în viața fiecă rui om. Ea este considerat ă de mulț i o art ă dar
și o necesitate de a satisfice sim țul auditiv uman, astfel c ă dezvoltarea ei a început, î n mod primitiv ce-i
drept, î ncă de la începuturile existenței omenirii . De-a lungul vremurilor , instrumentele utilizate s-au
dezvoltat și au devenit din ce î n ce mai diversificate și mai performante, în zilele noastre existâ nd o
mare varietate a lor.
Ideea acestei teme a apărut în urma discuției cu niște prieten i pasiona ți de muzic ă. În timp ce
vorbeam, unul din tre ei a menționat că existenț a unui program care să redacteze partitura unei melodii
în mod automat ar fi extrem de util ă, mai ales pentru cei ce au muzica mai mult ca un hobby. O astfel
de problem ă trebuie împărțită în două părți distincte: recunoaș terea instrumentului și scrie rea notelor pe
portativ în funcție de tonuri și durata acestora. P rima parte a rezolvă rii acestei probleme reprezintă și
punctul de plecare al acestei lucră ri.
Un program de recunoaș tere a i nstrumentelor este foarte util î n zilele noastre. De exemplu, orice
DJ de la evenimente de avengur ă are nevoie de un as tfel de program pentru a putea ș tii modul î n care
trebuie mixate me lodiile. Alte exemple de aplicaț ii întâlnite frecvent sunt analiza scenelor auditive , în
care recunoa șterea este puntul de plecare al analizei sau playerele digitale portabile de muzică .
Partea de analiză a semnalelor este utilă și în alte domenii , în afara muzic ii, cum ar fi de
exemplu supravegherea audio cu aplicații în monitorizarea securității (fie într-o încăpere sau în
transportul public ) sau monitorizarea persoanelor în vârstă, denumită și telemonitorizare medical ă
[Sharan, 2016] . Recunoașterea vocii este o aplicație des întâ lnită a acestui concept. Com oditatea
folosirii comenz ilor vocale este un atuu în diverse situaț ii din viața cotidiană modernă : debloca rea
telefoanelor, deschiderea uș ilor sau garajelor , etc.
Alt concept utilizat în aceast ă lucrare este cel de inteligență artificială ( IA). Acest domen iu este
în continu ă dezvoltare de aproximativ un secol , iar utilitatea lui este cu atât mai vizibilă în prezent.
Aplicaț iile ei sunt foarte diverse , de la programe care pot recunoaș te scene de ac țiune din filme, feț ele
oamenilor sau sunete și până la crear ea unor ma șini ce pot î nvinge și cei mai experimentaț i oameni la
jocuri complexe ce dateaz ă de secole. De exemplu, î n ultimii ani, cei de la Google au dezvoltat două
programe bazate pe Reț ele Neuronale , care au î nvins campionii mondiali la GO și șah, lu cru care, pe
baza altor metode , părea extrem de dificil, dacă nu imposibil. Cei ce au creat programele au afirmant că
acestea s unt doar niș te prototipuri care au ca ro l demonstrarea eficienț ei unei astfel de metode. Ca scop

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

16
final ei au crearea uno r programe c e pot fi utilizate î n discipline mult mai variate cum ar fi medicina
sau ingineria.

Lucrarea de fa ță prezint ă conceptele enumerate, modul de implementare și rezultatele unui
program creat pentru recunoa șterea instrumentului muzical dintr -o melodie. Totoda tă, la sfâ rșitul
lucrării este prezentat modul î n care am antrenat re țeaua neuronală și rezultatele folosirii acesteia.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

17

CAPITOLUL 1

NOȚIUNI TEORETICE

1.1. TRECERE ÎN REVISTĂ A REZ ULTATELOR ANTERIOARE ÎN DOMENIU

Clasificarea instrumentelor muzicale cu ajutorul unor modele computaționale se poate realiza
trecând principalele trăsături acustice produse de un instrument printr -un anumit algoritm pentru a
obține un model reprezentativ pentru fiecare clasă de instrumente [McKay, 2 009].
Cercetările inițiale în domeniul recunoașterii instrumentelor s -au bazat pe clasificarea tonurilor
muzicale individuale luate din baze de date de specialitate, dar recunoașterea unui instrument în
reprezentații solo este mult mai complexă deoarece fi ecare sunet nu este bine delimitat de alte sunete
concurente, el depinde de tehnica de interpretare, iar evoluția sa în timp nu este mereu bine definită
[Livshin, 2004] .
Ulterior mai mulți cercetători în domeniu au reușit, folosind diferiți clasificatori (de exemplu,
MLP -perceptroni multistrat sau KNN -primii K vecini) și algoritmi, să clasifice și să recunoască cu
anumite rate, diferite instrumente din diverse combinații. O serie de clasif icatori pentru instrumente au
fost dezvoltați având ca insp irație un ele trăsături umane (de exemplu procesarea neuronală) și folosind
inteligența artificială și machine learning. Metodele de machine learning au fost aplicate la
recunoașterea instrumentelor încă de la mijlocul anilor 1990 [ Loughran, 2009] .
Kaminskyj și Ma terka [Kaminskyi, 2005] au folosit caracteristici derivate din media pătratică
(RMS) a anvelopei peste o bandă de o octavă a patru instrumente (chitară, pian, marimba și acordeon).
Pentru a clasifica tonurile au aplicat analiza după componente principale (PCA) și au utilizat o rețea
neuronală (MLP – perceptron multistrat) sau un clasificator KNN ( cei mai apropiați K vecini ) obținând
rezultate similare folosind cei doi clasificatori (98,1% cu KNN și 97,7% cu MLP). Deoarece s -a utilizat
un singur exemplu din fiecare instrument (foarte diferite între ele), intervalul de note a fost mic, iar
datele de antrenare și de testare au fost din aceeași sesiune de înregistrare, concluziile nu au putut fi
generalizate.
Livshin și Rodet [Livshin, 2004] au prezentat pe scur t trei studii care au clasificat între 4 și 8
instrumente cu rate de recunoaștere cupr inse între 70% și 82,3% și au dezvoltat un proces de
recunoaștere cu o rată de 88,13% a unui set de 7 instrumente (fagot, clarinet, flaut, chitară, violoncel ,
vioară și pian) folosind o bază de date solo mare și variată (108 reprezentații solo, realizate de diferiți
muzicieni), care oferă o bună generalizare a sunetelor pe care fiecare instrument le poate produce în

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

18
diferite înregistrări. Folosind un set mai mic de caract eristici, mai potrivit pentru recunoașterea solo în
timp real, autorii au obținut o mică scădere a ratei de recunoaștere (85,24%) în comparație cu setul
complet de caracteristici și au demonst rat că tehnicile și caracteristicile folosite pentru recunoașter ea
solo în timp real pot ajuta și la realizarea recunoașterii instrumentului în duete.
Li [Li, 2008] a enumerat sistemele (care implicau validarea încrucișată cu eliminarea unuia,
caracteristici referitoare la modificarea dinamică a anvelopei spectrale, și viteza și variația sa,
neregularitate a spectrală și caracteristici tristimulus) utilizate de unii autori pentru recunoașterea izolată
a notelor provenite de la 23 de instrumente , cu rate de recunoaștere cuprinse între 50% și 68%.
Conform lui Li [Li, 2008 ] folosind divizări de 70% / 30% între datele de antrenare și testare și aplicând
clasificatorul KNN cuplat cu analiza discriminantă Fisher pentru reducerea dimensiunii datelor și a
arhitecturii de clasificare ierarhică, pentru prima recunoașterea a 14 fam ilii de instrumente s -a obținut o
rată de recunoaștere de 72% pentru instrument individual și, după aplicarea setului de 10 caracteristici
cu cea mai bună performanță medie, precizia în clasificarea între cinci familii de instrumente a crescut
la 93%.
Folosind drept clasificator o rețea neuronală avansată cu două straturi, Kostek [Kostek, 1999] a
raport at procente de recunoaștere de 9 7 % pentru patru instrumente (trombonul bas, trombonul, cornul
englez și contrabasul ). Pentru recunoașterea instrumentelor m uzicale s -au utilizat și caracteristici bazate
pe analiza de tip Wavelet [Kostek, 2001].
Pentru recunoașterea instrumentelor a fost descri s un model predictiv liniar ce folosește
informații legate de evoluția în timp a semnalului cu ajutorul coeficienților delta (viteza) și delta -delta
(accelerație) din analiza LPC [Chetry, 2006]. De asemnea , pentru descrierea sunetelor s -a folosit un
model bazat pe anvelopa constantă a spectrului , calculată din MFCC și un model bazat pe relația
constantă dintre amplitudine a armonicelor, primul model furnizând rezultate mai bune [Nielson, 2007].
Li [Li, 2008] a prezentat în lucrarea sa de dizertație un program , folosind Matlab , pentru
separarea și identificarea sunetelo r dintr -o înregistare .
În teza sa de doctorat Loughran [ Loughran, 2009] a comparat un algoritm genetic (GA) cu o
nouă funcție de adecvare a grupului de instrumente bazată pe analiza după componente principale
(PCA) pentru clasificarea cu un MLP cu programarea genetică (GP). Deși nu are o rată de recunoaștere
așa bună ca MLP sau GA-MLP, GP realizează o alegere mai bună a caracterist icilor, oferind posibile
inform ații despre timbrul și natura de recunoaștere a sunetului. S -a observat că , deși ambele metode
identifică cu exactitate probe generale nevăzute, urechea umană funcționează mai bine dec ât ambele
metode în caz ul probelor mai complicate.
Spectrul de frecvență a unui semnal audio și o rețea neuronală artificială s -au utilizat pentru a
compara diferite caracteristici ale unor instrumente muzicale și pentru a re cunoaște o serie de
instrumente [ Toghiani -Rizi, 2017] .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

19

1.2. METODE DE CLASIFICAR E A SEMNALULUI AUDIO

o Pentru recunoaș terea unui instrument muzical dintr -o melodie se poate porni de la ni ște
întreb ări simple:
o Ce diferențe există între diferitele ti puri de instrumente care redau aceeași notă?
 Principalele diferențe sunt frecvențele armonice și overtone (tonurile „majoritar”)
produse.
 Alte caracteristici ar fi lățimea benzii, media pătratică , etc.
o Cum p oate un program să facă recunoa șterea pe baza caracteristicilor instrumentelor?
 Programul trebuie să cunoasc ă caracteristicile fiecărui instrument și apoi, pe baza
acestora, să creeze criterii de recunoaștere .
Din aceste observații au rezultat două etape necesare, și anume:
i) RECUNOAȘ TEREA INSTRUMENT ELOR PE BAZA CARACTE RISTICILOR .
ii) EXTRAGEREA UNUI SET D E CARACTERISTICI PEN TRU FIECARE INSTRUME NT. Pentru ca aceste
două etape să fie eficiente este necesar ca toate semnalele folosite să aibă o structur ă similară . Astfel ,
putem deduce și a treia etapă de implementare:
iii) PREPROCESAREA DATELOR .

1.3. RECUNOA ȘTEREA INSTRUMENTULUI

Pentru recunoa șterea unui instrument nu există o formulă sau o metodă directă . Astfel, a vem
nevoie de un program care să î nvețe singur s ă sorteze instrumentele în funcț ie de anumite caracteristici
alese. De aceea, pentru problemele ce țin de recunoa șterea sun etelor sau imaginilor se foloseș te, în
general , conceptul de inteligință articifială, mai exact, o subramu ră a acestuia, Machine Learning
[Smola, 2008] .

1.3.1. Inteligența arti ficială ș i Machine Learning

Cu trecerea timpului, problemele ce trebuiesc rezolvat e prin programare devin din ce în ce mai
diversificate și complexe. De aceea, implementă rile folosite ca soluț ii trebuie mereu să se dezvolte
pentru a ține pasul cu cerinț ele societății , care se află în contin uă dezvoltare și transformare . O idee în
această direcție a fost crearea unui pro gram care să procedeze similar cu modul în care ființa umană
gândește. Arta acestui concept, inteligența arti ficială ( IA), are la bază transformarea unei game de
probleme ce par e imposibil de rezolvat într -un set î ngust de prototipuri .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

20
Conceptul de IA a luat naștere î n anul 1943 când neurologul Warren McCulloch și logicianul
Walte r Pitts au definit un model mat ematic pentru neuron (figura 1.1.). Intră rile neuronului sunt
formate din “excitatoare” (ax) sau “inhi batoare” (by) pe baza cărora neuronul își schimbă starea.

Figura 1.1. Neuron McCulloch -Pitts.
Sursa: [WWW 01]

În 1962, Arthur Samuel a reuș it să dezvolte conceptul de IA și să creeze un program de joc de
dame pe calculator. S copul lui a fost ca programul să î l poată depăș i ca nivel de joc , lucru imposibil de
programat î n mod explicit. Rezultatul muncii sale a fos t victoria într -o partidă î mportiva campionului
din Connecticut, Americ a. Tot Arthur Samuel a definit conceptu l de IA ca "ramură a științei ce oferă
calculatoarelor abilitatea de a învăța fără a fi progrmate în mod explicit ". [WWW 05]
Cele mai utilizate subramuri ale IA sunt: " deep learning " și " machine learning " (figura 1.2 .).

Figura 1. 2. Tipurile de inteligență artificială și relațiile dintre ele .
Sursa: [WWW 02]

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

21
Machine Learning reprezint ă o învățare automatizată , bazată pe algoritmi ce proceseaz ă datele
și învață să le prelucreze î n mod treptate. Ace astă etapă de înv ățare este structurat ă pe bazele teoriei
probabilit ății, dar algoritmul diferă de la un tip la altul. Pasul comun în crearea unui astfel de program
este caracteriza rea datelor ce vor fi folosite , întruc ât deseori probleme ce par diferite pot f i rezolvate î n
mod similar dacă au acela și tip de date ( de exemplu procesar ea limbii natale dintr -un text și secvenț ele
ADN) [Smola, 2008] .
Există mai multe tipuri de a lgoritmi pentru Machine Learnin g așa cum este prezentat schematic
în figura 1.3 .

Figura 1. 3. Diferite tehnici f olosite în ”Machine Learning” în funcț ie de tipurile de date folosite .

În continuare vom pre zenta doi algoritmi des utilizați î n rezolvarea problemei prezentate î n
aeastă lucrare de licență .

1.3.2. The K -Nearest Neighbour classifier

KNN este un algoritm supervizat , des utilizat î n recunoaș terea instrumente lor întrucâ t acesta are
rezultate bune. El are nevoie de informaț ii preliminare despre caracteristicile datelor de recu noaștere
pentru a ș tii cum s ă grupeze datele pentru partea de tra ining.
În prima fază, algoritmul asociază, într -un spatiu bidimensional, un punct fiecărei informații pe
care a primit -o. Astfel se obțin grupuri de punct e, fiecare semnific ând tipurile de clase existente.
Etapa de recunoaș tere se bazeaz ă pe determinarea c ărei clase aparț ine un nou punct. Folosind
formula distanței euclidiene se calculează primii K vecini ai acestui punct conform relației:

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

22

𝑑𝑝,𝑞 = 𝑞𝑖−𝑝𝑖 2𝑛
𝑖=1 (1.1)
Tipul de date va aparț ine clasei care are num ărul majo ritar de vecini din cei K calculaț i
conform figurii .

Figura 1 .4. Exem plu de algoritm KNN cu K = 5.
Sursa: [Li, 2008 ]

1.3.3 . Rețele neuronale convoluționale

Rețelele neuron ale de tip convoluțional (RNC) sunt folosite într -o gamă largă de necesităț i din
ziua de azi , cum ar fi detectarea de obiecte în imagini, precum și de a recunoaște obiecte, sunete sau
scene.
Orice rețea neuronală este formată din două părț i distincte:
 partea de extragere a caracteristicilor ș i
 partea de clasifica re a obiectelor, lucru realizat cu unul sau mai multe straturi.
Clasificare se face pe baza cara cteristicilor extrase, cele două etape îmbinându -se astfel.
Un exemplu de rețea neuronală utilizat ă pentru recunoaș terea audio este cea ce se bazează pe
straturi de tip MLP cu oprire timpurie ș i care folose ște RP ROP (Resilient Back Propagation) ca metodă
de învăț are.
Rețelele MLP au trei caracteristici definitorii , care însumate le diferenț iază de celela lte tipuri de
rețele neuronale.
(i) În primul rând, pe lângă straturile de intrare și ieș ire ac estea conț in și un set de straturi
intermediare , MLP , ce conțin “neuroni ascun și”. Cu c ât num ărul neuronilor este mai

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

23
mare , cu atât rețeaua va putea prelucra mai bi ne informa ția din datele de intrare pentru a
recunoa ște datele de ieș ire.
(ii) Cea de -a doua caracteristică este dată de tipul neuronilor. Funcț ia de activare a
neuronilor este una neliniar ă, dar nu ș i dificil de descris sau de implementat, un exemplu
fiind fo rmula :

𝑦𝑗=1
1+𝑒𝑥𝑝−𝑣𝑗
(1.2)
unde 𝑣𝑗 este câmpul local indus (adică suma ponderată a tuturor input -urilor de sinapsă plus baza) al
neuronului j iar 𝑦𝑗 este output -ul neuronului j [Haykin, 1998] .
Neliniaritatea este important ă, întrucât fără ea straturile ascunse nu ar avea nicio relevanță,
rețeaua putând fi formată doar din intrare ș i ieșire, rezultatele fiind aceleași . Formulele de tip logistic
sunt folosite pentru a reproduce cât mai exact modul î n care neuronii umani func ționeaz ă.
(iii) Ultima caracteristică esen țială este conectivitatea ridicată din interiorul unei astfel de
rețele. Pentru a putea modifica conectivitatea unui astfel de sistem este nevoie de
modificarea întregii structuri de sinapse.
Un exemplu de structur ă de acest fel , numită perceptron multistrat , este prezentat în figura 1.5.
Aceasta con ține un strat de intrare, unul de ieșire și două ascunse și este de tipul “cone ctată complet”
întruc ât fiecare neuron din reț ea interaction ează cu celă lalt.

Figura 1.5. Reprezentarea arhitecturală a unui perceptron multistrat cu două straturi ascunse.
Sursa: [WWW 03]

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

24

Prin rețelele neuronale convoluț ionale trec dou ă tipuri de sem nale:
 semnalul de funcționalitate ș i
 semnalul de eroare .
Primul din acestea, reprezintă semnalul de intrare , care este modificat d e fiecare neuron în parte
și ajunge într -o formă prelucrată la ieșire
Cel de -al doilea tip , provine din i eșirea neuronilor și parcurge reț eaua de la ie șire spre int rare.
Numele acestuia provine de la faptul că fiecare neuron care computează acest semnal obține semnalul
cu ajutorul unei formule ce descrie un tip de eroare [Haykin, 1998] .
Termenul de reț ea cu oprire timpurie es te destul de edificator asupra proprietăț ilor sale. Acest
concept a fost introdus pentru evitarea supraîncărcării rețelei cu informații. Inițial, cu creș terea timpului
de computare a rețelei și eficienț a cre ște în mod constant. După un interval de timp, ef icienț a cre ște din
ce în ce mai greu pentru ca mai apoi s ă apară fenomenul de supraî ncărcare, moment în care eficiența
rețelei nu numai că nu mai cre ște, dar și scade î n mod semnficativ după cum se poate vedea î n figura
1.6. Alegerea timpului de oprire est e un lucru care poate fi făcut de om, dar care poate fi și implementat
prin mai multe metode.

a) b)

Figura 1.6. a) Curbe de antrenare și de eroare de generaliza re și b) Curba reală a erorii de generalizare .
Sursa: [Prechelt, 1998]

Una dintre aceste meto de reprezintă împărț irea datasetului în date de antrenare, validare și
testare. Primul tip de date es te folosit pentru utilizarea rețelei și î mbun ătățirii acesteia. Folosin du-se de
datele de validare, reț eaua observ ă când apare fenomenul de supraîncă rcare , moment î n care se alege
versiunea de p ână atunci a rețelei, care a avut cel mai mare randament. Î n final, datele de test are sunt
utilizate pentru a verifica și a obține performanț ele acestei re țele [Prechel t, 1998] .
Algoritmul RPROP are rolul de a obț ine o variantă a sinapsei î ntre neuroni care să aducă
rezultate câ t mai bune. Parametrii de intrare ai acestui algoritm sunt 0 si max. Primul din tre aceștia

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

25
reprezintă ponderea neuronilor la început și poate fi ales arbitrar întrucât acesta reprezintă doar o
valoare de start , care în cazul unui antrenament cor ect va ajunge mereu î n jurul unei acelea și valori. Cel
de-al doilea reprezint ă ponderea maxim ă a unui neuron într -o reț ea. Acest algoritm se împarte în doi
pași:
 determina rea, dacă este nevoie de increm entare a sau decrementare a ponderii ș i apoi
 calculul acest ei modifică ri.
Pentru realizar ea primei etape, se ia in consideraț ie doar semn ul primei derivate în funcț ie de
caracteristi cile utilizate , conform relatiei:

∆𝑤𝑖𝑗𝑡 =
{ −∆𝑖𝑗𝑡 ,dacă 𝜕𝐸𝑡
𝜕𝑤𝑖𝑗>0
+∆𝑖𝑗𝑡 ,dacă 𝜕𝐸𝑡
𝜕𝑤𝑖𝑗<0
0,altceva (1.3)

Calculul valorii se bazează tot pe modul în care evoluează în timp derivata par țială.

∆𝑖𝑗𝑡 =
{ 𝜂+∗∆𝑖𝑗𝑡−1 ,dacă 𝜕𝐸𝑡−1
𝜕𝑤𝑖𝑗∗𝜕𝐸𝑡
𝜕𝑤𝑖𝑗>0
𝜂−∗∆𝑖𝑗𝑡−1 ,dacă 𝜕𝐸𝑡−1
𝜕𝑤𝑖𝑗∗𝜕𝐸𝑡
𝜕𝑤𝑖𝑗<0
∆𝑖𝑗𝑡−1 ,altceva (1.4)
unde 0<𝜂−<1<𝜂+

Dacă s e observă că algoritmul a trecut peste un minim, valoarea trebuie adaptată conform
primei ecua ții din acoladă. 𝜂− reprezintă un factor care specific ă cu cât la sut ă este necesar să se reduc ă
ponderea . Acesta este ales de c ătre utilizator, dar experimen tal s -a demonstrat că o valoare
corespunz ătoare acestuia este de 𝜂− = 0,5. Dacă este vorba de un maxim, se folose ște cea de -a doua
ecuaț ie din acolad ă. Și de ace astă dat ă s-a demonstrat experimental că factorul de modificare cu
rezultate ridicate este 1,2. În urma acestor etape , la ponderea actual ă a neuronilor se adaug ă ∆𝑤𝑖𝑗𝑡
calculat anterior [Riedmiller, 1994] .

1.4. EXTRAGEREA SETULUI D E CARACTERISTICI

Procedeele de extragere a caracteristicilor sunt metodele ce selecteaz ă și/sau combin ă
variabilele în caracteristici ce descriu în mod precis și complet datele de intrare, minimiz ând astfel
informaț ia necesar ă pentru procesare. Alte a vantaje sunt eliminarea informației redundante și
îmbun ătățirea procesului de clasificare

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

26
Pentru semna le audio se pot diferenț ia trei tipuri de caracteristici ce pot descrie instrumentele:
 caracteristici î n domeniul timp,
 caracteristici în domeniul frec vență și
 caracteristici ce folosesc atât domeniul timp cât și cel al frecvenț ei, numite hibrid .

1.4.1. Caracteristici în domeniu l timp

I) Media p ătratic ă (RMS)
Media p ătratic ă este o unitate de m ăsură a intensit ății semnalului acustic, iar formula ei este
dată de ecuaț ia:

𝑃=√∑𝑥2𝑡 𝑁
𝑡=1 (1.5)

Aceast ă caracteristic ă a fost des utilizat ă întruc ât permite determinarea nivelului mediu al
intensit ății, iar pe baza acestuia se poate face o clasificare facil ă, mai ales între instrumente din clase
diferite.

II) Treceri prin zeo (ZCR)
Trecerile prin zero calculeaz ă de câte ori a par schimb ări de semn de -a lungul unui semnal
audio. Nu este o caracteristic ă complex ă, dar este util ă în estimarea con ținutului frecven ței.

𝑍𝑚=∑|𝑠𝑖𝑔𝑛[𝑥𝑛 ]−𝑠𝑖𝑔𝑛[𝑥𝑛−1 ]|𝑛 𝑤𝑚−𝑛 (1.6)

1.4.2. Caracteristici în domeniul frecvență

I) Spectral Centroid (SC)
Această caracteristică este una simplă , dar care e ste în corela ție cu modul de distribuț ie a
frecven țelor î nalte dintr -o melodie. Ea este legat ă de modul în care oamenii percep câ t de “ascu țit” este
un semnal a custic. Pentru determinarea ei se foloseș te formula (1.7):

𝑓𝑆𝐶=∑𝑃𝑘 𝑓𝑘 𝐵
𝑘=1
∑𝑃𝑘 𝐵
𝑘=1
(1.7)

unde k este indexul filtrului căruia îi corespunde o putere RMS de P(k), iar B este numărul tot al de
filtre din bancul de filter. [Li, 2008]

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

27
II) Spectral rolloff
Această mărime determină intervalul de frecvenț e sub care se află un anumit procent din
energia total ă a semnalului. Ea este utilă la determinarea benzii de frecvență în care se află o po ndere
ridicată din informa ția neredun dantă.

1.4.3. Hibrid – MFCC

MFCC -ul este o caracteristică des utilizat ă în sistemele de recunoaș tere automat ă a sun etelelor
și este fo rmată dintr -un un set de coeficienț i. Prima oar ă, acesta a fost folosit cu rezultat e foarte bune
pentru programe bazate pe recunoa ștere vocal ă, pentru ca mai apoi să fie utilizat și în domeniul
muzicii.
Motivul rezul tatelor bune obținute cu acest ă metodă este bancul de filtre de scalare de tip mel
(mel-scaling filterbank) care atenueaz ă semnalul pe baza modul ui în care urechea uman ă percepe
sunetele. Structura acestei metode este ilustrată î n figura 1.7.

Figura 1. 7. Diagrama bloc a extractorului de caracteristici MFCC .
Sursa: [Li, 2008 ]

Primul bloc din figura 1.7. are rolul de a preg ăti semnalul elimin ând zgomotul și altă informaț ie
redund antă. Spectrul obț inut este filtrat în cel de -al treilea bloc cu ajutorul bancului obținând formula
(1.8) care reprezintă scara de scalare a filtrului (figura 1.8) . [De Poli, 2013]

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

28

mel (f)=f if f 1 kHz
2595 log10 1+f
700 if f >1 kHz (1.8)

Figura 1. 8. Scala frecvențelor Mel în raport cu scala Hertz .
Sursa: [Li, 2008 ]

Bancul (figura 1.9.) este alcătuit dintr -un banc de 27 de filtre în care fiecare se extinde pe un
domeniu de frecvență de 8 kHz.

Figura 1.9. Bancul de filtre utilizat .
Sursa: [De Poli, 2013]

Calculul coeficienț ilor din fiecare cadru se face cu ajutorul unei ferestre Hamming de 3 2ms care
shiftează î n timp 4ms pe baza formulei (1.9):

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

29

Ci= Ykcos i k-1
2 π
N N
k=1, i=1, 2, …., M (1.9)

Pentru reconstituirea anvelopei spectrului s -au utilizat doar primii 6 coeficienți. Aceștia sunt
suficienți pentru a putea determina anvelopa și permit o reducere de 95% a datelor.
Utiliz ând ultimul bloc din figura 1.7. se readuce analiza î n domeni ul timp și se obține o
anvelopă a spectrului , care este apropiată de cea percepută de urechea uman ă. MFCC se obțin folosind
formula coeficienț ilor delta cep trali pe anvelopa spectrului obț inut. [De Poli, 2013]

𝐷[𝑛]=𝐶[𝑛+𝑚]−𝐶[𝑛−𝑚] (1.10)

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

30

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

31

CAPITOLUL 2

STRUCTURA IMPLEMENT ĂRII PROPRI I

2.1. PREGĂ TIREA DATELOR UTILIZ ATE

Ca dataset pentru programul nostru am folosit melodii solo ce con țin unul din urm ătoarele 6
instrumente: chitară , flaut, pian, saxofon, tobă și vioar ă (Tabelul 2.1). Alegerea a fost făcută astfel încât
să existe o varietate mare între instrumente, dar și pentru ca din diferite tipuri de familii de instrumente
să regăsim dou ă. Num ărul melodiilor u tilizate pentru antrenare c ât și pentru testare este de asemenea
indicat în tabelul 2.1.

Tabelul 2.1. Seturile de d ate utilizate în realizarea programului .

Date de antrenare Date de test are
Instrument Număr melodii Instrument Număr melodii
chitară 10 chitară 4
flaut 9 flaut 3
pian 10 pian 3
saxofon 8 saxofon 3
tobă 7 tobă 2
vioară 9 vioară 3

Am ales s ă folosim partea de preprocesare doar pentru melodiile folosite ca antrena ment pentru
a încerca simularea situa țiilor reale. Am ales să folosim un format comun pentru fiș ierele utilizate . Cele
două tipuri de fi șiere des utilizate în zilele noastre sunt cele MP3 și WAV (figura 2.1) . Formatul MP3
este unul comprimat și cu pierderi, care duce deci la o scădere a calit ății. Lipsa unei compresii și a
pierderilor ofer ă fișierelor de tip WAV o calitate superioară, dar ș i o cantitate mai mare de informați e
(figura 2.1) . Un alt aspect al calităț ii superi oare oferite de acest tip de fișiere este domeniul de frecvenț e
acoperit , el fiind asemănă tor cu ce l al auzului uman . Întrucâ t cantitate a datelor nu este decisivă am ales
să folosim formatul care oferă calitatea superioară .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

32

Figura 2.1. Informația dintr -un fiș ier WAV vs. MP3.
Sursa: [WWW 04]

Ultimul pas al preprocesării a fost împă rțirea fiecărei me lodii î n sample -uri de 5 secunde. Am
considerat necesar acest lucru pentru a p utea elimina perioadele de liniș te din melodie , care au loc la
începutul unei melodii sau pe parcurs , când artistul ia o pauză de câ teva secunde între note (de exemplu
între 12 si 15 secunde cum este ilustrat î n figura 2.2.)

Figura 2.2. O parte dintr -un semnal al unei melodii din domeniul timp.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

33

2.2. OBȚ INEREA DATELOR PENTRU RECUNOAȘ TERE

În subcapitolul 1.4. au fost enumerate câ teva din tre caracteristicile ce pot fi uti lizate pentru
diferenț ierea tipurilor de instrumente. De -a lungul timp ului s -au ales diferite combinaț ii de
caracteristici , care pot duce la rezultate c ât mai bune. Pentru lucrarea de fa ță am ales o singură
caracteristică, MFCC -ul. Utilizarea acestei c aracteristici î n mod singular a adu s rezultate net superioare
orică rei alte caracteristici folosite individual.
Pentru date de intrare am folosit două matrici bidimensonale . Coeficienții MFCC sunt calculați
în mod continuu , la momente diferite de timp din melo die, iar apoi sunt prelucra ți obtinand un vector.
Având în vedere faptul că am folosit mai multe sample -uri de melodii , am concatenat vectorii ob ținând
o matrice bidimensionala . Valo rile din matrice au fost normalizate conform formulei ( 2.1), reduc ând
astfel datele din interiorul reț elei, dar p ăstrâ nd caracteristicile dintre informa ții intacte.

𝑋𝑛𝑜𝑟𝑚=𝑋−𝑋𝑚𝑖𝑛
𝑋𝑚𝑎𝑥−𝑋𝑚𝑖𝑛
(2.1)

Cea de -a doua este o matrice de 1 și 0 ș i are ro l de mapare a datelor pentru rețeaua neuronală.
Ea este vitală pentru partea de antrenare a rețelei întrucâ t arată cărui instrument îi aparț in
caracteristicile ce ur mează să fie procesate.

2.3. UT ILIZAREA DATELOR PEN TRU RECUNOAȘ TERE

După cum s -a specificat și mai înainte, pentru recunoașterea instrumentelor s -a folosi t atât
algoritmul KNN cât și RNC. Din punct de vedere al rezultatelor obținute, cei doi algoritmi au avut
procentaje foarte ridicate. Motivel e alegerii metodei bazate pe rețea este acela că algoritmul este mult
mai apropiat de modul uman de abordare al pro blemei ș i ca algoritmul KNN are un timp de procesare
nesatisf ăcător o dată cu dep ășirea unui anumit volum de date de intrare.
Rețeaua folosită este cea descrisă în par tea teoretică în subcapitolul 1.3.3 . Structura rețelei este
urmă toarea: avem doi neuroni pentru intrare , fiecare semnifică una din matricile prezentate la part ea de
date, 30 de neuroni ascunși ș i 6 neuroni pentru ie șire, unul pentru fiecare instrument. Justificarea
alegerii numărului de neuroni ascunș i este urm ătoarea : riscul de supraî ncărcare al reț elei este mic
pentru că datele au fost normalizate, multe valori sunt apropiate de 0 , iar alegând un numă r cât mai
mare avem o eficien ță superioară .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

34

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

35

CAPITOLUL 3

IMPLEMENTAREA PROGRAMULUI

Sotware -ul folosit pentru implementarea programului este Matlab, limbaj des utilizat pentru
probleme tehnice. El permite procesarea, vizualizarea și analiza semnalelor într -un mod facil, fiind
astfel foarte eficient pentru realizarea etapelor specificate anterior. Principal ul avantaj față de alte
limbaje de programare este faptul că poate opera cu matrici indiferent de dimensionarea acestora.
Astfel, probleme ce sunt dificil de implementat în C sau C++ devin ușor de rezolvat în Matlab.
Pe lângă funcțiile descrise anterior, a cest software are la îndemână și un set de toolboxuri care
pot rezolva diferite probleme. În cazul lucrării de față am utilizat toolboxurile ma care conțin funcții
necesare pentru extragerea coeficienților MFCC și cele pentru machine learning, care permit crearea
unor RNC -uri în mod facil.

3.1. PROGRAMUL DE RECUNOA ȘTERE

Pentru a realiza etapele prezentate în capitolul 2, avem 8 fișiere, și anume:
 soundsplitter.m,
 DCT_mfcc.m,
 extragere.m,
 normalize_data.m,
 process _file_names.m,
 process_training_d ata.m,
 process_file_test.m, și
 neural_network.m
care îndeplinesc funcțiile conform figurii 3.1.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

36

Figura 3.1. Etapele de implementare a programului și fișierele necesare.

 Soundsplitter.m : este fisierul folosit pentru partea de preprocesare a semnalel or de antrenare.
Inițial cu ajutorul func țiilor input și mfkdir el cere ut ilizatorului un nume de folder și îl crează .
Funcția uigetfile cere fișierul ce urmează a fi î mpărțit, iar apoi cu ajutorul unui ciclu for care este
incrementat din 5 în 5 secunde se scriu fi șierele de tip WAV î n folder cu ajutorul func ției
audiowrite. Un exemplu de semnal ce este ob ținut în urma acest ui proces este cel din figura 3.2 .

Figura 3.2. Exemplu de fișier soundsplitter.

 Fisierul DCT_mfcc.m : este un derivat al fișierului ma_mfcc din toolboxul ma, acesta fiind
modificat astfel încât să nu afișeze grafice. Acesta este fișierul de bază al programului întrucât el
calculează coeficienții MFCC dintr -un fișier wav. Un exemplu de coeficienț i ce se pot ob ține sunt
reprezenta ți în figura 3.3. [WWW 07 ]

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

37

Figura 3.3. Exemplu de grafic al coeficienților MFCC î n domeniul tim p.

 extragere.m: apeleaz ă funcția DCT_mfcc și crează un vector cu valori le medii ale coeficienț ilor
pentru a reduce informa ția necesară pentru reț ea.

 normalize_data .m: află minimul și maximul unui fișier pentru a normaliza datele păstrâ nd
caracteristicile lor asemănă tor. Datele ob ținute după această operaț ie sunt folosite pentru antrenare
sau testare, un exemplu de date folosite la testare este ilustrat î n figura 3.4.

Figura 3.4. Caracteristica de t estare din prelucrare a coeficienț ilor MFCC .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

38
 process_file_names.m : crează un vector ce con ține numele instrumentului și numele fi șierului în
formatul folder \nume_fiș ier.wav.
Programul folose ște ini țial func ția dir car e creaz ă un vector cu informațiile fiș ierelor dintr -un
folder. Apoi creă m un for care parcurge toate informa țiile obținute pe baza că ruia alegem doar pe
cele ce reprezint ă numele fișierelor. Instrumentul se ob ține din nume , de ace ea fișierele sunt de
forma instrument_nume.wav, iar la numele deja ob ținut se adaug ă directorul. [Toghiani -Rizi, 2017 ]

 process_training_data.m : funcția apelează process_file_names.m pentru a obț ine informa țiile
necesare pentru prelucrare. Extrage ini țial din vector structurile de folder \nume pentru a fi apelate
de func ția audioread ș i apoi pentru a prelucra datele cu ajutorul DCCT_mfcc.m, extragere.m ș i
normal ize_data.m. Pentru partea de obț inere a vectorului de mapare, se crează o matrice de zerouri
unde liniile reprezint ă instrum entele și coloanele numele fișierelor. C u ajutorul unui for se inserează
valorile de 1 care semnifică instrumentul folosit din melodia respective (figura 3.5.). Valorile celor
două matrici sunt salvate într-un fi șier de tip mat pentru ca partea de obținere a datelor pentru
antrenament să nu fie apelată mereu atâ t timp c ât nu dorim să adăugăm instrumente sau fiș iere.
[Toghiani -Rizi, 2017 ]

Figura 3.5 . Matricea de mapare: repreze ntarea instrumentelor folosite în sampleurile 396 -410.

 process_file_test.m : cere utilizatorului s ă aleagă un fi șier din calculator pentru care să se realizeze
extragerea caracteristicilor ce vor fi folosite pentru testarea reț elei antrenate. Totodată , fun cția
returneaz ă și numele fișierului, lucru util pentru afiș area rezultatelo r.

 neural_network.m : fișierul încarcă datele de antrenare care au fost obț inute de func ția
process_training_data. m. Apoi se crează rețeaua cu ajutorul funcției newff unde specificăm modul
de învățare RPROP și specifică m utilizarea algoritmului de oprire t impurie. Apoi, introduc ând
datele de antrenare , are loc antrenarea re țelei, la sfârșit afișându -se performanța reț elei. Acest
procedeu de creare a unei re țele este inclus î ntr-un ciclu for pentru a putea ca lcula o valoare medie a
acurateții pe care o prezi ntă reț eaua noastr ă. După acest pas, folosim funcția plotconfusion care ne
afișează matricea de confuzie a ultimei rețele creat e, iar apoi să calculeze acuratețea medie a
rețelelor obț inute. Dup ă obținerea reț elei antrenate creăm un ciclu for care ruleaz ă de 6 ori și
execută următoarele etape: mai întâ i apelă m func ția process_file_test.m pentru a obț ine
caracteristicile unei melodii. Folosin du-le ca date de intrare vom obține o matrice care exprimă

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

39
procentual ce instrumente sunt detectate î n melodie, ia r apoi cu ajutorul unor if -uri, în cazul î n care
procentul dep ășește 80%, afișăm un text în care se menționează instrumentul folosit.

Forma de bază a modului de operare al rețelei este exprimat în figura 3. 6.

Figura 3. 6. Schema bloc a codului .

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

40
3.2. REZULTATE

În urma antrenării rețelei, obținem o acuratețe î n jurul valorii de 90.5% conform figurii 3.7.

Figura 3. 7. Acurate țea medie a 10 re țele antrenate .

Desigur, nu este cel mai mare procentaj de acuratețe posibil, dar având în vedere că am folosit
pentru date de antrenament înregistrări de pe youtube din concerte live, rezultatul este unul satisfăcător.

Un alt indice care arată performanțele rețelei antrenate este matricea de confuzie (figura 3. 8.).
Aceasta exprimă procentual care sunt șan sele ca rețeaua să recunoască corect datele de intrare
dacă sunt folosite ca test. Fiecare linie specifică câte fișiere de antrenament au fost folosite pentru
instrumentul respectiv și câte dintre ele sunt recunoscute ca unul din instrumentele folosite pen tru
antrenare.
Din analiza matricii se observă că cea mai mare rată de “încurcare” are loc între pian și saxofon.
Personal, mi se pare un lucru de înțeles întrucât ambele instrumente au des fluctuații bruște în sunet
pentru a creea sunete plăcute urechii.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

41

(1-chitară, 2 -flaut, 3 -pian, 4 -saxofon, 5 -tobă, 6 -vioară)

Figura 3. 8. Matricea de confuzie.

În urma testării reț elei antrenate cu cele 18 melodii am o bținut o recunoa ștere corectă î n 16 din
cazuri. Pentru cele doua cazuri rezultatele rețelei sunt a fișate în figur a 3.9.

Figura 3. 9. Afișarea î n cazul rec unoaș terilor nereu șite.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

42

Primul rezultat eronat se datoreaz ă faptului c ă melodia este una live, în concluzie programul
neputând să recunoasc ă întotdeauna înregistr ările de ac est tip. Al doilea, poate fi explicat cu aj utorul
matricii de confuzie. Reț eaua av ând dificult ăți la recunoașterea tobelor, încurcâ ndu-le cu pianul, nu se
poate hotări pentru alegerea clară a unuia din tre instrumente. Chiar dacă instrumentul cu ponderea cea
mai mare este ș i cel folosit , am ales s ă tratăm ca o eroare întrucâ t nu dep ășește pragul ales de noi ca
fiind unul semnificativ, cel de 80%. O afiș are a unui rezultat corect se poate vedea î n figura 3.10.

Figura 3. 10. Afișarea în cazul recunoaș terii corecte .

În acest caz, avâ nd un procentaj cu mult peste 8 0% rețeaua afișează instrumentul reg ăsit.

3.3. DEZVOLTARE ULTE RIOARĂ

Pentru a îmbunătăți varianta pe care o avem acum, prima posibilitate ar fi introducerea unor
caracteristici de semnal în pl us. Desigur, aducerea unor caracteristici noi crește timpul de procesare,
deci scad performanțele programului. Dac ă acuratețea nu este îmbunătățită în mod semnificativ ,
aducerea unui set de caracteristici noi ar putea duce doar la înrăutățirea programului.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

43
Dar pentru conceptul de recunoaștere a instrumentelor ar fi interesant de implementat un
program care să recunoască mai multe instrumente din ace eași melodie. Un astfel de lucru s -ar putea
realiza:
(i) cu ajutorul unei mixări, astfel încât să obținem un set de semnale cu un singur
instrument și apoi să fie analizate asemănător cu cele din lucrarea de față. O metodă
încercată pentru implementarea acestei idei este algoritmul DUET, dar dezavantajul lui
este numărul limitat de canale pe care le are mixerul.
(ii) o altă metodă de rezolvarea a acestui lucru ar fi implementarea unei rețele neuronale
nesupervizate pentru că a crea o mapare cu mai multe melodii ar fi dificilă.
(iii) o ultimă modalitate de realizare a acestui lucru ar fi crearea unei baze de date cu
concerte mu zicale, iar datele pentru mapare s ă fie hardcodate de că tre om.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

44

BIBLIOGRAFIE

 [Chetry, 2006] Chetry, N., Sandler, M. ”Linear predicative models for musical instrument
identification.” în ICASSP , Toulouse, France, 5/2006, pp. 225 -228.
 [De Poli, 2013] De Poli, G., Prandoni, P. „Sonological models for timbre characterization” în
Journal of New Music Research nr. 26/1997, pp. 170 -197.
 [Hayking,1998] Haykin, S. , Neural Networks: A Comprehensive Foundation , 2nd ed. Prentice
Hall PTR, 1 998.
 [Kostek, 1999] Kostek. B., Soft Computing in Acoustics: Applications of Neural Networks,
Fuzzy Logic and Rough Sets to Musical Acoustics . Physica -Verlag, 1999.
 [Kostek, 2001] Kostek, B., Czyzewski. A., “Automatic Recognition of Musical Instrument
Soun ds – Further Developments”. în Proc. 110th Audio Eng. Soc. Convention, Amsterdam,
Netherlands, May 2001.
 [Kaminskyj, 2005] Kaminskyj, I., Materka, A., ”Automatic source identification of monophonic
musical instrument sounds.” în IEEE International Conferen ce on Neural Networks , 1995, p p.
189-194.
 [Li, 2008 ] Li, X ., Musical Instruments Identification System , Master of Science Project, Queen
Mary University of London, 2008.
http://www.eecs.qmul.ac.uk/legacy/easaier/files/technical/identification/Report.pdf accesat
15.08.2019
 [Lishvin, 2004] Livshin, A., Rodet, X., Musical instrument identification in continuous
recordings. Digital AudioEffects 2004, Aug 2004, Naples, Italie. pp.1 -1. hal -01156882
 [Loughran, 2009] Loughran, R., Musical Instrument Identification with Feature Selection Using
Evolutionary Methods , Teză de doctorat, The University of Limerick, 2009.
 [McKay, 2009] McKay, J., Gainza, M., Barry, D., Eva luating Ground Truth for ADRess as
aPreprocess for Automatic Musical Instrument Identification, Audio Engineering
SocietyConvention Paper, Presented at the 126th Convention2009 May 7 –10 Munich,
Germany.
 [Nielson, 2007] Nielson, A., Sigurdsson, S., Hansen, L., Arenas -Garcia, J., ”On the relevance of
spectral features for instrument classification.” în ICASSP , Honolulu, Hawaii, 2007, pp. 485 –
488.
 [L.Prechelt, 1998] Prechelt, L. “Automatic early stopping using cross validation: quantifying
the criteria,” în Neural Networks , nr. 11/1998 , pp. 761 –767.

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

45
 [Riedmiller, 1994] Riedmiller, M. , Rprop -Descrip tion and Implementation Details, Technical
Report , 1994
 [Sharan, 2016] Sharan, R. V., Moir, T. J. ”An overview of applications and advancements in
automatic sound re cognition” în Neurocomputing nr. 200/2016, pp. 22 –34.
 [Smola, 2008] Smola, A. , Vishwanathan , S.V.N. , Introduction to Machine Learning ,
Cambridge University Press , 2008 .
 [Toghiani -Rizi, 2017] Toghiani -Rizi, B., Windmark, M., ”Musical Instrument Recognition
Using Their Distinctive Characteristics in Artificial Neural Networks.” în ArXiv , 2017.
https://arxiv.org/pdf/1705.04971.pdf accesat 15.08.2019
 [WWW 01] Neuron McCulloch -Pitts, http://osp.mans.edu.eg/rehan/ann/McCulloch –
Pitts%20Neuron%20Applet.htm accesat la data: 28.08.2019
 [WWW 02] Care este diferența dintre Inteligența Artificială, Machine L earning și Deep
Learning?
 https://blog.webland.ro/2017/04/care -este-diferenta -dintre -inteligenta -artificiala -machine –
learni ng-si-deep -learning/ accesat la data: 29.08.2019
 [WWW 03] http://trmaestrochang.blogspot.com/2015/07/perceptron.html accesat la 31.08.2019
 [WWW 04] https://steemit.com/music/@cardboard/wav -vs-mp3-can-you-hear-the-difference –
interactive -quiz/ accesat la 31.08.2019
 [WWW 05] https://skymind.ai/wiki/ai -vs-machine -learning -vs-deep -learning accesat la
03.09.2019
 [WWW 06]
http://www.eecs.qmul.ac.uk/legacy/easaier/files/technical/identification/MatlabCode.txt
accesat la data de 04.09.2019
 [WWW 07] http://www.ofai.at/~elias.pampalk/ma/about.html accesat l a 04.09.2019

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

46

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

47

ANEXA 1. soundsplitter.m

%Fisier utilizat pentru preprocesarea datelor de antrenare
fname=input( 'Alegeti fisierul utilizat pentru impartire' ,'s');
mkdir(fname) %creaza folderul
a=0;
b=1;
while (a<9)
[p n]=uigetfile( 'Alegeti fisierul ce doriti a fi impartit' );%functie de alegere a
unui fisier

[x fs]=audioread(fullfile(n,p)); %citirea fisierului

%dur=input('Alegeti durata');%alegerea duratei pentru fisiere
dur=5;

for i=1:fs*dur+1:length(x) %un for ce c reaza fisiere din secunda pe care o dorim
pana la secunda+ durata
audiowrite(strcat(fname, '/',fname,'_',num2str(kk), '.wav'),x(i:i+fs*dur),fs); %creare
a unui fisier wav de forma
%nume_folder/nume_b.wav
b=b+1;
end
a= a+1;
end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

48

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

49

ANEXA 2. DCT_mfcc.m

function mfcc = DCT_mfcc(wav)
%% Obtinerea Mel -Frequency Cepstral Coefficient (MFCC)
%% Functie derivata din functia ma_mfcc ( In cazul de fata avem nevoie de mai
putine inputuri)

if nargin == 0, %% test mode
disp('testing: ma_mfcc' )

p.type = 'mfcc';
p.visu = 1;
p.fft_size = 512*2;
p.hopsize = 256;
p.num_ceps_coeffs = 20;
p.use_first_coe ff = 1;
p.fs = 22050*2;
p.mel_filt_bank = [20 20000 40]; %% {'auditory -toolbox' | [f_min f_max
num_bands]}
%% e.g. [20 16000 40]
wav = ma_test_create_wav(p.fs);

%sound(wav,p.fs );

mfcc = DCT_mfcc(wav, p);

mfcc = 'done'; %% dont flood command window with mfcc numbers
return
end

%% defaults
p.type = 'mfcc';
p.visu = 0;
p.fft_size = 512*2;
p.hopsize = 2 56;
p.num_ceps_coeffs = 20;
p.use_first_coeff = 1;
p.fs = 22050*2;
p.mel_filt_bank = [20 20000 40];
if ~isfield(p, 'type'), p.type = 'sone'; end
if ~isfield(p, 'fs'), error( 'sampling frequency (p.fs) not spe cified'); end
if ~isfield(p, 'mel_filt_bank' ), p.mel_filt_bank = [20 16000 40]; end
if ~isfield(p, 'dB_max' ), p.dB_max = 96; end
if ~isfield(p, 'do_visu' ), p.do_visu = 0; end
if ~isfield(p, 'fft_size' ), p.fft_size = p.fs/1102 5*256; end
if ~isfield(p, 'overlap' ), p.overlap = p.fs/11025*128; end
if ~isfield(p, 'num_ceps_coeffs' ), p.num_ceps_coeffs = 40; end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

50
if ~isfield(p, 'use_first_coeff' ), p.use_first_coeff = 40; end
c.fft_freq = linspace(0,p.fs/2,p.fft_size/2+1);

if strcmp(p.mel_filt_bank, 'auditory -toolbox' ),
%% frequency scale parameters (filterbank, auditory toolbox, Malcolm Slaney)
%% comment: center frequency of first critical band is located at about 200Hz!!
c.low_freq = 400/3;
c.num_lin_filt = 13;
c.num_log_filt = 27;
c.num_filt = c.num_lin_filt + c.num_log_filt;
c.lin_spacing = 200/3;
c.log_spacing = 1.0711703;

c.freqs = c.low_freq + (0:c.num_lin_filt -1)*c.lin_spacing;
c.freqs(c.num_lin_filt+1:c.num_filt+2) = …
c.freqs(c.num_lin_filt) * c.log_spacing.^(1:c.num_log_filt+2);
else
c.num_filt = p.mel_filt_bank(3);
tmp.f = p.mel_filt_bank(1):p.mel_filt_bank(2); %% use same spectrum as for bark
(according to zwicker & fastl)
tmp.mel = log(1+tmp.f/700)*1127.01 048;

tmp.m_idx = linspace(1,max(tmp.mel),c.num_filt+2);

tmp.f_idx = (1:c.num_filt+2)*0;
for i=1:c.num_filt+2,
[tmp.dummy tmp.f_idx(i)] = min(abs(tmp.mel – tmp.m_idx(i)));
end
c.freqs = tmp.f(tmp.f_idx);
end

c.lower = c.freqs(1:c.num_filt);
c.center = c.freqs(2:c.num_filt+1);
c.upper = c.freqs(3:c.num_filt+2);

%% ignore filters outside of spectrum
[tmp.dummy, tmp.idx] = max(find(c.center <= p.fs/2));
c.num_filt = min(tmp.idx,c.num_filt);

mfccFilterWeight s = zeros(c.num_filt,p.fft_size/2+1);
c.triangleHeight = 2./(c.upper -c.lower);

for i=1:c.num_filt,
mfccFilterWeights(i,:) = …
(c.fft_freq > c.lower(i) & c.fft_freq <= c.center(i)).* …
c.triangleHeight(i).*(c.fft_freq -c.lower(i))/( c.center(i) -c.lower(i)) + …
(c.fft_freq > c.center(i) & c.fft_freq < c.upper(i)).* …
c.triangleHeight(i).*(c.upper(i) -c.fft_freq)/(c.upper(i) -c.center(i));
end

DCT = 1/sqrt(c.num_filt/2)*cos((1 -p.use_first_coeff:(p.num_ceps_coeffs -1))' *
(2*(0:(c.num_filt -1))+1) * pi/2/c.num_filt);
DCT(1,:) = DCT(1,:) * sqrt(2)/2;

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

51

%% figure out number of frames
frames = 0;
idx = p.fft_size;
while idx<=length(wav),
frames = frames + 1;
idx = idx + p.hopsize;
end

wav = wav * (10^(p.dB_max/ 20)); %% rescale to dB max (default is 96dB = 2^16)

mel = zeros(c.num_filt, frames);
ceps = zeros(p.num_ceps_coeffs -1+p.use_first_coeff, frames);

w = hann(p.fft_size);

idx = 1:p.fft_size;
idx= idx.';
for i=1:frames,
X = abs(fft(wav(idx).*w,p.ff t_size)/sum(w)*2).^2;
mel(:,i) = mfccFilterWeights * X(1:end/2+1);
idx = idx + p.hopsize;
end

mel(mel<1) = 1; %% for dB
mfcc = DCT*10*log10(mel); %% compute dB and compress using DCT

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

52

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

53

ANEXA 3. extragere.m

% Mediaza valorile coeficientilor MFCC
function [vector,frames] = extragere(x,fs)
mfcc = [];
mfcc = DCT_mfcc(x); %obtinerea coeficientilor
mfccVec = [];
for i=1:size(mfcc,1) %medierea
mfcc(i) = mean(mfcc(i, :));
mfccVec = [mfccVec mfcc(i)];
end

vector = [mfccVec];

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

54

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

55

ANEXA 4. process_file_names.m

% Functie ce obtine vector cu instrumentul si director \nume pentru apelare
audioread
function [ file_data ] = process_file_names( directory )
file_names = dir(directory); % structura cu informatiile fisierelor din folder

for k = length(file_names): -1:1 % parcurgere inversa pentru ca primele doua
valori
% din vector nu sunt utile
if file_names(k).isdir
file_names(k) = [ ];
continue
end

fname = file_names(k).name;
if fname(1) == '.'
file_names(k) = [ ]; % obtinem un vector ce contine numele melodiilor
end
end

file_data = cell(length(file_names), 3);

for k = length(file_names): -1:1 % obtinerea instrumentului si a numelui
folder\nume cu conditi a
% ca numele sa fie instrument_nume
name = file_names(k).name;
exploded_file_name = strsplit(name, '_');
instrument = exploded_file_name(1);
tone = exploded_file_name(2);
file_dat a(k, 1) = instrument; %obtinerea instrumentului
file_data(k, 2) = tone;
file_data(k, 3) = {strcat(directory, name)}; %obtinerea structurii
folder\nume
end
end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

56

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

57

ANEXA 5. process_training_ data.m

% Cream vectorul de caracteristici si vectorul de mapare necesar pentru
% antrenament
function [input_data, mapped_label_data] = process_training_data(directory)
file_data = process_file_names(directory);
training_data = cell(length(file_d ata),2);

for n = 1:length(file_data)
fprintf( '%d of %d \n', n, length(file_data));
filename = file_data(n,3);
filename = filename{1}; % citirea numelui pt apelarea audioread din
vectorul
% obtinut de process_file_names \

[y,Fs] = audioread(filename);

feature_vector=extragere(y,Fs);
feature_vector = normalize_data(feature_vector);

training_data(n, 1) = file_data(n,1);
training_ data(n, 2) = {feature_vector}; % obtinerea vectorului de
antrenare
end

input_data = transpose(cell2mat(training_data(:, 2)));
label_data = training_data(:, 1);

instrument_set = unique(label_data);
instrument_value = (1:length(i nstrument_set));
instrumentLabelMap = containers.Map(instrument_set, instrument_value);

mapped_label_data = zeros(length(unique(label_data)),length(label_data));

for N = 1:length(label_data) % cream matricea de mapare
pentru antrenare
instrument = label_data(N);
mapped_label_data(instrumentLabelMap(instrument{1}), N) = 1;
end
save('training_set.mat' ,'input_data' , 'mapped_label_data' ); % valorile sunt
salvate pentru a nu trebui sa
% parcurgem p artea de extragere pentru antrenament din nou pentru ca ea
% consuma timp
end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

58

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

59

ANEXA 6. process_test_data .m

function [input_data,n] = process_test_data

[n p]=uigetfile( 'Selectati melodia pe care o doriti..' );%getting the browse option
to user for file selection

[y, Fs]=audioread(fullfile(p,n));
feature_vector=extragere(y,Fs);
feature_vector = normalize_data(feature_vector);
input_data = transpose(feature_vec tor); %obtinerea datelor pentru test

end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

60

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

61

ANEXA 7. normalization_data.m

% Functie utilizata pentru normalizarea datelor
function [normalized_data] = normaliz e_data( input_data )

max_value = max(input_data(:)); %Aflarea maximului
min_value = min(input_data(:)); %Si minimului
normalized_data = zeros(1, length(input_data));

for n = 1:length(input_data)
normalized_data(n) = ((input_data(n) -min_value)/(max_v alue – min_value));
%Formula normalizarii
end

end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

62

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

63

ANEXA 8. neural_network.m

load 'training_set.mat' % incarcam vectorii pentru antrenare

n_runs = 10;
sum_error = 0;

for n = 1:n_runs % antrenam reteaua de mai multe ori pentru a obtine o medie a
performantelor sale
fprintf( 'Running experiment %d of %d' , n, n_runs);

net = newff(input_data, mapped_label_data, [30], { 'tansig' 'logsig' },
'trainrp' , '', 'mse', {}, {}, 'dividerand' );
% Definirea RNC -ului utilizat: invatare RPROP si Oprire timpurie
net = init(net);

% Parametrii retelei, alesi cat sa obtinem performante cat mai bune
net.trainParam.epochs = 5000;
net.trainParam.lr = 0.35;
net.trainParam.min_grad = 0;
net.trainParam.max_fail = 2000;

% Folosirea datelor de test pentru antrenare
[trained_net, stats] = train(net, input_data, mapped_label_data);

[c, cm] = confusion(mapped_label_data, sim(trained_net, in put_data)); %
sum_error = sum_error + c; % Calculam numarul de erori in cele 10 antrenari
fprintf( ' – %f%% accuracy \n', (1 – c)*100); % Calculam eficienta retelei ca
(1-procent erori)*100

end

plotconfusion(mapped_label_data, sim(trained_net , input_data)) % Crearea matricii
de confuzie
avg_accuracy = (n_runs – sum_error)*100 / n_runs; % Calculul mediei retelelor
fprintf( '\nAverage accuracy: %f%% \n', avg_accuracy);

a=0;
while(a<17)
[u,nume] = process_test_data; % pentru ca datele de test di fera in functie de nevoi
nu le avem salvate
x= trained_net(u) % Folosim datele pentru testare
% conditii pentru afisare
if x(1,1)>=0.8 strcat( num2str(nume) , ' contine o chitara' )
end
if x(2,1)>=0.8 strcat( num2str(nume) , ' contine un flaut' )
end

A.V. DAVID – Analiza și clasificarea sunetelor produse de instrumente muzicale

64
if x(3,1)>=0.8 strcat( num2str(nume), ' contine un pian' )
end
if x(4,1)>=0.8 strcat( num2str(nume), ' contine un saxofon' )
end
if x(5,1)>=0.8 strcat( num2str(nume), ' contine o toba' )
end
if x(6,1)>=0.8 strcat( num2str(nume), ' contine o vioara' )
end
a=a+1;
end

Similar Posts