+ All Categories
Home > Documents > PROIECT DE DISERTAŢIE -...

PROIECT DE DISERTAŢIE -...

Date post: 30-Aug-2019
Category:
Upload: others
View: 25 times
Download: 0 times
Share this document with a friend
52
Universitatea Politehnica București Facultatea de Automatică și Calculatoare Departamentul de Automatică și Ingineria Sistemelor PROIECT DE DISERTAŢIE SISTEM DE EXTRAGERE A PARTITURII DINTR-O SECVENȚĂ MUZICALĂ Coordonator ştiinţific: Conf. Dr.Ing.Petrescu Cătălin Absolvent: Mocănașu Matei BUCUREŞTI,2013
Transcript

Universitatea Politehnica București

Facultatea de Automatică și Calculatoare

Departamentul de Automatică și Ingineria Sistemelor

PROIECT DE DISERTAŢIE

SISTEM DE EXTRAGERE A PARTITURII DINTR-O SECVENȚĂ

MUZICALĂ

Coordonator ştiinţific:

Conf. Dr.Ing.Petrescu Cătălin

Absolvent:

Mocănașu Matei

BUCUREŞTI,2013

CUPRINS

INTRODUCERE .................................................................................................... 1

CAPITOLUL 1.DETECȚIA SEGMENTELOR DE SEMNAL UTIL .................................. 4

1.1.Scurtă introducere ......................................................................................................................................... 4

1.2.Preprocesarea ............................................................................................................................................... 7

1.3.Funcția de detecție ........................................................................................................................................ 9

1.3.Algoritmul de identificare al evenimentelor audio ..................................................................................... 16

CAPITOLUL 2.ANALIZA SEGMENTELOR DE SEMNAL UTIL .................................. 22

2.1.Scurtă introducere ....................................................................................................................................... 22

2.2.Conversia de la spațiul temporal la spațiul frecvențial ............................................................................... 23

2.3.Detecția frecvențelor de interes din spectrul de putere ............................................................................. 28

2.4.Conversia frecvențelor la șiruri de caractere .............................................................................................. 33

CAPITOLUL 3.STRUCTURA APLICAŢIEI ............................................................... 37

CAPITOLUL 4. CONCLUZII. PERSPECTIVE DE CONTINUARE A CERCETĂRII ......... 41

4.1.Concluzii ...................................................................................................................................................... 41

4.2.Perspective de continuare a cercetării ........................................................................................................ 42

ANEXE .............................................................................................................. 43

BIBLIOGRAFIE ................................................................................................... 48

LISTA DE FIGURI

Capitolul 1.

Fig.1.1.Reprezentarea grafică a anvelopei unei note de chitară 4

Fig.1.2.Anvelopele unei note produse de o chitară (a) și o vioară (b) 5

Fig.1.3.Diagrama algoritmului de detecție a evenimentelor de interes

dintr-un semnal audio 6

Fig.1.4.Diagrama Bode a unui filtru trece-sus Butterworth cu frecvența de

tăiere de 30hz 8

Fig.1.5.Semnal dreptunghiular cu raport semnal-zgomot de 10 (a) şi derivata asociată (b) 9

Fig.1.6.Distribuția Gaussiană 13

Fig.1.7.Răspunsul la treaptă a filtrului Gaussian 14

Fig.1.8. Aplicarea funcţiei de detecţie pe un semnal audio cu un filtru de lungime 820 15

Fig.1.9. Aplicarea funcţiei de detecţie pe un semnal audio cu un filtru de lungime 8820 16

Fig.1.10.Exemplu de vîrfuri negative parazite în detecția evenimentelor audio 17

Fig.1.11.Detecția porțiunilor de semnal util 21

Capitolul 2.

Fig.2.1.Spectrul frecvențial al unei ferestre dreptunghiulare de lungime 10 24

Fig.2.2.Distincția între fereastra de intrare și fereastra de transformare

în cadrul algoritmului FFT 25

Fig.2.3.Spectrul în putere al unui semnal format din două sinusoide

(300Hz,respectiv 440Hz) 26

Fig.2.4.Spectrul unui oscilator cu frecvența fundamentală de 440Hz

și a doua armonică de 880Hz 28

Fig.2.5.Subeșantionarea unui spectru 31

Capitolul 3.

Fig.3.1.Diagrama pentru apelurile rutinelor sistemului,în funcţie de flag-urile de control 38

Fig.3.2.Fluxul apelurilor subrutinelor din cadrul funcţiei start_procesare.m 39

LISTA DE ALGORITMI

Capitolul 1.

Alg.1.1.Aplicarea funcției de detecție 13

Alg.1.2. Identificarea eşantioanelor corespunzătoare începutului şi sfîrşitului

unui eveniment audio 18

Capitolul 2.

Alg.2.1.Generarea spectrului în putere a unei ferestre de semnal h(x) 27

Alg.2.2.Extragerea frecvențelor fundamentale dintr-un spectru în putere

generat prin Algoritmul.2.1 31

Alg.2.3.Conversia unei frecvențe de la valoarea sa reală la șirul de caractere

ce caracterizează complet nota aferentă 35

1

INTRODUCERE[1]

Procesarea de semnal a devenit un aspect deosebit în domeniul ingineriei.Ideea de a

manipula semnalele,urmărind anumite caracteristici ale acestora,este un punct de plecare

pentru o multitudine de aplicații.Procesarea poate implica atît aplicarea unor algoritmi

specifici asupra unui semnal pentru a obține un comportament dorit al acestuia,cît și o analiză

riguroasă asupra proprietăților unui semnal.Se caută astfel informații asupra datelor regăsite

într-un semnal dat,în scopul decodificării,compresiei,extragerii automate de informații etc.

Proiectul de față are ca scop realizarea unui sistem de recunoaștere automată a

informațiilor utile dintr-un semnal audio.Această recunoaștere,sau transcripție,este una dintre

cele mai mandatorii operații realizate de către creierul uman,relativ la domeniul audio.O

recunoaștere a informațiilor audio,de exemplu dintr-o înregistrare, realizată doar cu ajutorul

auzului și a capacității mentale,nu este o abilitate ușor de dobîndit pentru marea parte al

amatorilor de muzică.Succesul acestei operații este dependent de un număr de factori,printre

care experiența muzicală,capacitatea auditivă,sensibilitatea auditivă din punctul de vedere

frecvențial,precum și sensibilitatea relativă la timp ș.a. Toți acești factori îngreunează

recunoașterea și identificarea informațiilor audio pentru cei care nu au experiență

suficientă,precum și un suport fizic adecvat (de exemplu auditiv). Astfel,recunoașterea

automată al acestor informații a devenit un lucru cît de se poate de important pentru domeniul

audio,în special datorită suportului tehnologic din zilele curente.Un astfel de sistem ar putea

deservi drept soluție principală pentru analiza unei creații muzicale proprii,dar și un punct

important de plecare pentru alte aplicații mandatorii cum ar fi corecția de pitch (frecvența

fundamentală) al unui instrument (în cele mai multe cazuri acest tip de aplicații fiind generate

pentru vocea umană),alterare de pitch etc.Mai important,o astfel de soluție poate fi de

asemenea aplicată și în medicină,unde anumite semnale pot avea comportament asemănător

cu cele audio (de exemplu,ritmul cardiac),astfel încît recunoașterea informațiilor dintr-un

astfel de semnal este trivială.

Transcripția muzicală constă în extragerea conținutului muzical dintr-un semnal

audio,sub forma unei reprezentări simbolice,denumite partitură (sau scor muzical).Deși există

numeroase reprezentări și forme ale unei parituri,acestea mereu vor conține două informații de

bază : pitch-ul unei note,precum și caracteristicile temporale.În ceea ce privește pitch-

ul,reprezentările uzuale implică fie simboluri vizuale caracteristice fiecărei note,fie șiruri de

caractere care descriu notele în întregime,fie o combinație între cele două variante.În ceea ce

privește componenta temporală,aceasta se poate reprezenta fie prin elemente vizuale,fie prin

valorile reale ale duratelor.

2

Mai mult,se pot distinge două tipuri de transcripții automate,și anume transcripția

monofonică și cea polifonică.În primul caz,cel monofonic,semnalul audio este produs de un

singur instrument,pe cînd în cel polifonic,semnalul audio va cuprinde o colecție de

instrumente ce pot produce note muzicale concomitent.Cazul monofonic este punctul de

interes al acestei lucrări,considerînd importanța recunoașterii informațiilor audio pentru un

singur instrument.De asemenea,un alt factor de care trebuie ținut cont la o recunoaștere

muzicală este tipul instrumentului,deoarece fiecare instrument va produce semnale care au

proprietăți diferite (i.e. fiecare instrument are un anume timbru care caracterizează notele

asociate).Astfel,s-a ales un instrument uzual,precum chitara,aceasta prezentînd un semnal

destul de complex,după cum se va observa în capitolele următoare.

Scopul lucrării este așadar de a realiza un sistem implementat sub forma unei interfețe

vizuale,care să permită înregistrarea semnalului audio și extragerea informațiilor utile din

acesta,în scopul realizării partiturii asociate.

Cerințele sistemului se pot defini pe două direcții separate,și anume,pe calea utilității,cît

și pe calea performanței.În ceea ce privește utilitatea,se va dori ca sistemul să permită funcții

uzuale dedicate înregistrării audio (funcție de start,pauză,stop,redare audio),stocare de

date,posiblitatea de a vizualiza grafic anumite segmente de interes din procesul de

recunoaștere (de exemplu,delimitarea porțiunilor de semnal util),precum și funcția de

generare a unei partituri sub forma unui document text.

Pe calea performanței,se va dori optimizarea rutinelor de procesare,în special în privința

analizelor eficiente ale porțiunilor de semnal util.Se va dori evitarea analizei părților de

semnal ce cuprind doar zgomot,acestea fiind tratate drept pauze muzicale (segmente de

semnal care nu cuprind note muzicale).

Avînd cerințele sistemului specificate,s-a propus o divizare al proiectului în 3 segmente

majore.Fiecare segment va cuprinde atît o parte practică (modul de implementare),precum și

un suport teoretic pentru a susține metodele alese.

Astfel,în Capitolul 1 se va discuta despre identificarea inițială a segmentelor de semnal

util.Scopul acestei identificări este de a îndeplini o parte din cerințele de performanță ale

sistemului,precum și identificarea timpilor între care elementele muzicale apar.

Capitolul 2 va trata o analiză spectrală a porțiunilor de semnal util identificate

anterior,pentru a putea extrage componentele frecvențiale de interes.Acestea,împreună cu

valorile temporale extrase în Capitolul 1 vor forma informațiile complete asupra elementelor

muzicale din semnalul audio,dînd astfel posibilitatea generării partiturii aferente.

Capitoul 3 va trata implementarea propriu-zisă a interfeței grafice,analizînd structura

acesteia în concordanță cu cerințele sistemului din punctul de vedere al utilității.

3

Capitolul 4 va fi dedicat pentru partea de concluzii,care va însuma metodele și

informațiile discutate în capitolele anterioare. Secția va mai cuprinde o parte de posibile

perspective de viitor ale continuării cercetării,prezentând eventualele idei ce ar ptuea aduce

bonusuri și funcționalități deosebite acestui sistem.

Anexa proiectului va cuprinde capturi de ecran care ilustreză rezultatul final al

proiectului.De asemenea,atașat de lucrare va fi un CD (Compact Disc) care va conține toate

sursele de cod ce alcătuiesc sistemul proiectat.

Mocănașu Matei 1.Detecția segmentelor de semnal util

4

CAPITOLUL 1.DETECȚIA SEGMENTELOR DE SEMNAL UTIL

1.1.Scurtă introducere

Analiza semnalelor audio implică adesea un efort de calcul superior,față de procesarea

semnalelor audio.De asemenea,cerințele de stocare sunt mărite,adesea fiind necesare operații

de copiere și memorare a unor segmente din datele inițiale.Din acest motiv,se va căuta

eliminarea calculelor redundante,care pot genera rezultate nesimnificative.

Un prim pas în analiza audio este de a detecta porțiunile de semnal util,sau în alte

cuvinte,părțile din semnal care cuprind elemente de interes pentru prelucrare.De exemplu,se

dorește excluderea porțiunilor care cuprind numai zgomot,pentru care o procesare si o analiză

spectrală ar reprezenta un calcul si un efort inutil.Astfel,se va dori o detecție automată a

evenimentelor de interes,precum ar fi apariția unei note,sau a unui ansamblu de note prezente

în semnalul audio.

Detecția corectă a evenimentelor de interes este un pas preliminar pentru un număr mai

larg de aplicații de amploare precum : compresie audio,indexare și identificare,transcrierea

automată a informațiilor muzicale s.a. În toate cazurile enumerate,prezența evenimentelor are

rolul cel mai important,astfel încît detecția lor devine un proces cu importanță sporită.

Semnalul audio considerat în lucrarea de față este un semnal provenit de la o chitară

electrică.În Fig.1.1. este reprezentat graficul în amplitudine a unei note de chitară (sau a

anvelopei),precum și exemplificarea zonelor de interes ale acesteia.

Fig.1.1.Reprezentarea grafică a anvelopei unei note de chitară[2]

Mocănașu Matei 1.Detecția segmentelor de semnal util

5

Din Fig.1.1. se poate observa că un astfel de eveniment are 3 componente

începutul de notă este considerat eșantionul (sau unitatea de timp aferentă) la care

amplitudinea semnalului prezină o creștere bruscă față de eșantionul anterior

zona tranzitorie este zona în care amplitudinea va evolua rapid într-o manieră

cunoscută (în cazul unei chitări,această zonă reprezintă durata de timp în care

coarda este excitată,după urmînd zona de decadă).Pentru cazul curent,începutul

zonei tranzitorii va coincide cu începutul notei

zona de decadă , sau zona în care amplitudinea semnalului scade

exponențial.Aceasta din urmă curpinde timpul la care nota se sfîrșește.

Observație : instrumentele diferite vor avea anvelope diferite ! Astfel,detecția

semnalului util trebuie adaptată pentru fiecare instrument în parte.De exemplu,anvelopa unui

instrument cu corzi (chitară) sau a unui instrument de percuție va avea anvelopa ca în Fig.1.1.

(i.e. o notă începe cu o amplitudine mare,însă amplitudinea va scădea exponențial în

timp).Instrumentele cu susținere (cum ar fi o vioară , o trompetă sau chiar vocea umană),vor

prezenta o anvelopă susținută la o anumită amplitudine (Fig.1.2.)

Fig.1.2.Anvelopele unei note produse de o chitară (a) și o vioară (b)

Ținînd cont de Fig.1.1.,detecția zonelor de interes ale semnalului audio va implica atît

detecția începuturilor de note,cît și a sfîrșitului acestora.Există în momentul de față mai multe

metode de a detecta apariția și durata evenimentelor audio.Alegerea metodei (sau a funcției de

detecție) trebuie făcută în raport cu cerințele sistemului.Se va dori o prelucrare cît mai rapidă

(evitarea iterațiilor mari),precum și o utilizare cît mai mică a resurselor (precum memoria de

date).Soluția propusă va urmări diagrama prezentată în Fig.1.3.

Mocănașu Matei 1.Detecția segmentelor de semnal util

6

Fig.1.3.Diagrama algoritmului de detecție a evenimentelor de interes dintr-un semnal

audio[3]

Fig.1.3. este,de asemenea,diagrama unui algoritm general de detecție a evenimentelor

de interes.Preprocesarea poate fi o etapă opțională (deși majoritatea cazurilor reale necesită o

preprocesare adecvată a semnalului audio).Ceea ce face diferența între algoritmii cunoscuți

este defapt funcția de detecție,identificarea evenimentelor fiind relativă la rezultatul aplicării

acestor funcții de detecție.

În continuare se vor prezenta fiecare pas al unui astfel de algoritm,specificînd și modul

de implementare al fiecăruia.

Mocănașu Matei 1.Detecția segmentelor de semnal util

7

1.2.Preprocesarea

În analiza semnalelor audio reale (în opoziție cu cele produse digital),preprocesarea este

un pas adesea critic.Semnalul audio pe care s-a făcut analiza are două mari probleme :

este destul de puternic în amplitudine

este însoțit de zgomot

Amplitudinea semnalului este un factor important de care trebuie ținut cont,în special în

cazurile în care se dorește o funcție de înregistrare sau de redare audio.Fenomenul cel mai des

întîlnit în această situație este numit audio clipping sau saturație audio.Acest fenomen se

comportă ca o distorsiune aplicată semnalului originial atunci cînd puterea semnalului este

mai mare decît limita impusă de echipamentul de ieșire audio.Distorsiunea se produce sub

formă de saturație (i.e. semnalul audio va fi limitat la o anumită amplitudine),proces care

introduce armonici parazite în domeniul spectral (frecvențial).

În domeniul digital,acest fenomen poate fi întîlnit deoarece semnalul audio (drept

urmare,datele audio) vor fi restricționate la o anumită reprezentare.De exemplu,dacă sistemul

folosește o reprezentare pe 16 biți pentru întregi cu semn,atunci o valoare pozitivă de peste

32767 va fi supusă operației de trunchere la valoarea maximă admisibilă (32767).

Astfel,pentru a evita apariția fenomenului de audio clipping,s-a adoptat o normalizare a

semnalului audio la valoarea de maxim a amplitudinii semnalului,luată în valoare

absolută.Mai mult,se reduce și amplitudinea la jumătate după normalizare :

𝑥 =𝑥

max (𝑎𝑏𝑠 𝑥 )∗

1

2 (1.1)

În ceea ce privește prezența zgomotului,acesta produce și el apariția unor frecvențe

parazite în spectrul frecvențial,astfel încît o filtrare este adesea necesară.Petru zgomotul

asociat s-a folosit un filtru de ordinul 2 de tip Butterworth,filtru ce are funcția de transfer :

𝐻 𝑠 =1

𝜔𝑐𝑠

2+ 2

𝜔𝑐𝑠 +1

(1.2)

,unde 𝜔𝑐 reprezintă frecvența de tăiere a filtrului.

Pentru a putea implementa fitrul,va trebui discretizat,folosind transformarea biliniară :

𝑠 = 2 ∗1−𝑧−1

1+𝑧−1 (1.3)

Mocănașu Matei 1.Detecția segmentelor de semnal util

8

Astfel,ecuația (1.1) se poate rescrie sub forma discretă :

𝐻𝑑 𝑧−1 =4−8𝑧−1+4𝑧−2

𝜔𝑐2−2 2𝜔𝑐+4 + 2𝜔𝑐

2−8 𝑧−1+ 𝜔𝑐2+2 2𝜔𝑐4 𝑧

−2 (1.4)

Pentru a calcula frecvența de tăiere,s-a realizat un spectru în putere pentru zgomotul

aferent semnalului,observîndu-se amplitudini mari la frecvențe joase (30Hz).Alegîndu-se

drept frecvența de tăiere 30hz,filtrul găsit are diagrama Bode ilustrată în Fig.1.4.

Fig.1.4.Diagrama Bode a unui filtru trece-sus Butterworth cu frecvența de tăiere de 30hz

Astfel,preprocesarea aleasă constă dintr-o normare a semnalului audio la valoarea

absolută a amplitudinii maxime detectate,precum și o filtrare cu un filtru trece-sus (FTS) de

tip Butterworth,la o frecvență de tăiere de 30Hz.S-a evitat astfel atît fenomenul de audio

clipping digital realizat de Matlab,cît și un raport semnal/zgomot îmbunătățit în urma filtrării.

Preprocesarea a fost realizată în rutinele Matlab interfata.m (unde se normează semnalul

înregistrat),iar filtrarea semnalului audio a fost realizată în start_procesare.m.

Mocănașu Matei 1.Detecția segmentelor de semnal util

9

1.3.Funcția de detecție

Funcția de detecție reprezintă pasul cel mai important în realizarea unei detecții de

evenimente dintr-un semnal audio.Rolul ei este de a transforma semnalul inițial într-un

semnal special care prezintă un număr redus de date de procesat,păstrînd totodată informaţiile

structurale ale semnalului iniţial.

Cea mai simplă funcție de detecție folosește un sistem bazat pe thresholduri (valori

limită).Această funcție va compara semnalul inițial cu niște valori prestabilite pentru a marca

un început și/sau un sfîrșit de eveniment.Problema acestei soluții este lipsa anvelopei

semnalului (acesta fiind format dintr-o multitudine de treceri prin zero,sistemul de threshold

va necestia informații suplimentare asupra semnalului).

Alte funcţii de detecţie implică utilizarea unui operator de tip box modificat

(considerînd atît operatorul box pozitiv,cît şi unul negativ).Această soluţie nu va fi abordată

deoarece relevă rezultate destul de slabe pentru semnalele care prezintă zgomot.

O metodă intuitivă ar fi căutarea punctelor de maxim şi minim local în derivata f(x)’ a

unui semnal f(x) ,unde derivata este definită ca rata de schimbare a lui f în raport cu x (𝑑𝑓

𝑑𝑥) :

𝑓𝑖′ =

𝑓𝑖+1−𝑓𝑖

𝑥𝑖+1−𝑥𝑖 (1.5)

Problema în acest caz este că diferenţiala este senzibilă la raportul semnal-zgomot,cu

excepţia cazului în se face o prefiltrare a semnalului.Fig.1.5 ilustrează un semnal

dreptunghiular cu un raport semnal-zgomot de 10,precum şi derivata acestuia.

Fig.1.5.Semnal dreptunghiular cu raport semnal-zgomot de 10 (a) şi derivata asociată

(b)

Aşadar,ţinînd cont de faptul că diferențierea amplifică frecvenţele înalte (adesea cele

asociate cu zgomotul prezent în semnal),o filtrare de tipul trece-jos va fi necesară fie

Mocănașu Matei 1.Detecția segmentelor de semnal util

10

înainte,fie după calculul diferențierei.O metodă eficientă de implementare este de a folosi un

filtru care realizează atît funcţia de filtrare de zgomot,cît şi cea de derivare[4]

.

Proiectul de faţă a ales drept funcţie de detecţie impulsul Gaussian deoarece acesta

îndeplineşte ambele cerinţe enunţate mai sus,dar prezintă suplimentar o proprietate deosebit

de importantă pentru implementarea fizică,şi anume : transformata Fourier al unei funcţii

Gaussiene este o funcţie Gaussiană.

Ecuaţia unei funcţii Gaussiene este :

𝑔 𝑥 = 𝑎𝑒−(𝑥−𝑏)2

2𝑐2 (1.6)

, unde :

𝑎 ∈ 𝑅 , este amplitudinea pulsului

𝑏 ∈ 𝑅 , este valoarea în care pulsul este centrat

𝑐 ∈ 𝑅 , este deviaţia standard (valoarea care controlează deschiderea pulsului

gaussian)

Aşadar,paşii necesari pentru aplicarea funcţiei de detecţie vor fi :

1. Dîndu-se un semnal de intrare f(x),se va realiza operaţia de convoluţie dintre f(x)

și filtrul Gaussian g(x) definit în ecuaţia (1.6),rezultînd semnalul s(x)

2. Se va calcula derivata semnalului filtrat s(x)’

Semnalul s(x) va fi calculat,după cum s-a precizat,prin operaţia de convoluţie :

𝑠 𝑥 = 𝑔 𝑥 ∗ 𝑓 𝑥 = 𝑔 𝑢 𝑓 𝑥 − 𝑢 𝑑𝑢 = 𝑔 𝑥 − 𝑢 𝑓 𝑢 𝑑𝑢∞

−∞

−∞ (1.7)

Ţinînd totuşi cont de faptul că una din cerinţele sistemului este de a obţine un efort de

calcul cît mai mic,se va utiliza una dintre proprietăţile operaţiei de diferențiere asupra

convoluţiei,şi anume :

𝑠 𝑥 ′ =𝑑

𝑑𝑥 𝑔 𝑥 ∗ 𝑓 𝑥 =

𝑑

𝑑𝑥𝑔 𝑥 ∗ 𝑓 𝑥 = 𝑔 𝑥 ′ ∗ 𝑓(𝑥) (1.8)

Acest rezultat permite o eficenţă de calcul superioară deoarece se evită astfel aplicarea

operaţiei de diferențiere asupra semnalului iniţial I(x).Mai mult,se poate observa din ecuaţia

(1.8) că singurul termen care trebuie supus diferențierii va fi chiar filtrul Gaussian,derivata de

ordinul I a acestuia avînd forma :

𝑔 𝑥 ′ =− 𝑥−𝑏

𝑐2 𝑎𝑒− 𝑥−𝑏 2

2𝑐2 =− 𝑥−𝑏

𝑐2 𝑔(𝑥) (1.9)

Deşi ecuaţia (1.9) reuşeşte să aducă un aport computaţional substanţial,trebuie avut în

vedere faptul că operaţia de convoluţie este una costisitoare în condiţiile de lucru cu semnale

audio.În marea majoritate a cazurilor aceste semnale sunt suficient de lungi din punctul de

vedere temporal,cît şi al numărului de elemente (domeniul audio lucrează adesea cu frecvenţe

Mocănașu Matei 1.Detecția segmentelor de semnal util

11

de eşantionare mari,în general optîndu-se pentru frecvenţe de 44100Hz).Aşadar,realizarea

unei operaţii de convoluţie în domeniul temporal va necesita un efort computaţional şi un

timp de execuţie inacceptabil de mare.O soluţie des utilizată este de a realiza convoluţia în

domeniul frecvenţial,convoluţia purtînd numele de convoluţie rapidă.

Pentru a putea aplica o astfel de tehnică,vom pleca de la definiţia transformării Fourier

şi ,respectiv, a inversei asociate,aplicate unei funcţii f(t) :

𝐹 𝜔 = 𝑓 𝑡 𝑒−𝑗𝜔 𝑑𝑡 , 𝑓 𝑡 =1

2𝜋

−∞ 𝐹(𝜔)𝑒𝑗𝜔𝑡 𝑑𝜔∞

−∞ (1.10)

Echivalentele în domeniul discret al ecuaţiilor (1.10) sunt definite ca :

𝐹 𝑘 = 𝑓 𝑛 𝑒−𝑗2𝜋

𝑁𝑛𝑘

𝑁−1

𝑛=0 , 𝑓 𝑛 =

1

𝑁 𝐹 𝑘 𝑒𝑗

2𝜋

𝑁𝑘𝑛

𝑁−1

𝑘=0 (1.11)

, cu 𝑘,𝑛 = 0,1… . . ,𝑁 − 1.

În cazul în care secvenţa 𝑓 𝑛 ,𝑛 = 0,1… . . ,𝑁 − 1 este reală,atunci transformata

Fourier discretă F(k) prezintă o proprietate interesantă,şi anume :

𝐹 𝑘 = 𝐹(𝑁 − 𝑘) (1.12)

Aşadar,în semnalul discret F(k) se vor găsi informații utile doar în prima jumătate,restul

fiind informații redundante (i.e. doar jumătate din spectrul în frecvență conține date utile,de la

0 la frecvența Nyquist,restul fiind informații redundante).

Avînd definiția transformatei Fourier,putem defini transformata Fourier peste un

operator de convoluție între două semnale f și g ,și anume :

𝐹 𝑓 ∗ 𝑔 = 𝐹 𝑔 𝐹[𝑔] (1.13)

Ecuația (1.13) arată faptul că transformata Fourier a unui produs de convoluție înre două

semnale f și g este identică cu produsul transformatelor Fourier a celor două semnale.În alte

cuvinte,operatorul de convoluție peste două semnale în spațiul temporal devine operator de

înmulțire a semnalelor în spațiul frecvențial.

Același rezultat se poate aplica și pentru semnale discrete care sunt periodice,convoluția

fiind denumită în acest caz ciclică.În realitate,majoritatea semnalelor sunt

aperiodice.Astfel,dimensionarea celor două semnale (semnalul real și cel de convoluție) va

trebui făcută astfel încît dimensiunile celor două semnale să fie identice.Mai mult,rezultatul

de convoluție va avea o dimnensiune de 𝑁 = 𝑁𝑓 + 𝑁𝑔 − 1 , unde 𝑁𝑓 și 𝑁𝑔 sunt dimensiunile

corespunzătoare semnalelor f și ,respectiv, g.Această problemă este soluționată prin simpla

completare cu zerouri a celor două semnale pînă la dimensiunea rezultatului de convoluție.

Mocănașu Matei 1.Detecția segmentelor de semnal util

12

Analizînd operațiile necesare aplicării unei convoluții rapide,se poate observa că cel mai

complicat pas din punctul de vedere al timpului de execuție rămîne calculul transformărilor

Fourier,ceea ce poate fi realizat utilizînd algoritmul Transformării Fourier Rapide (sau

FFT).Complexitatea operației de convoluție va fi astfel diminuată la complexitatea

algoritmului FFT,care este 𝑂 𝑁 log𝑁 ,faţă de 𝑂 𝑁2 ,complexitatea corespunzătoare unei

convoluţii obişnuite.

Algoritmul transformării Fourier rapide a fost propus de Cooley și Tukey și are la bază

segmentarea semnalului de intrare în N părți,care mai departe vor fi procesate individual,în

mod recursiv.Cel mai simplu mod de a exemplifica utilitatea acestui algoritm este de a

considera 𝑁 = 2.Astfel,există două abordări de a segmenta semnalul,și anume decimare în

timp și decimare în frecvență.Se va prezenta pe scurt doar principiile decimării în timp.

Pentru decimarea în timp,presupunînd că N este un număr par (N=2k) , algortimul de

decimare va împărți semnalul de intrare 𝑓 𝑛 ,𝑛 = 0,1… . . ,𝑁 − 1 în două părți 𝑓𝑝 𝑛′ și

𝑓𝑖 𝑛′ , 𝑛′ = 0,1… . . ,

𝑁

2− 1 care vor conține eșantioanele pare și ,respectiv, impare.Prin

metode recursive,se vor calcula cele două transformate Fourier asociate 𝐹𝑝 și 𝐹𝑜 , iar rezultatul

final se va calcula prin ecuația :

𝐹 𝑘 = 𝐹𝑝 𝑘 + 𝑊𝑁𝑘𝐹𝑖 𝑘 , 𝑊𝑁

𝑘 = 𝑒−𝑗2𝜋

𝑁 , 𝑘 = 0,1… . ,𝑁

2− 1 (1.14)

Obervație : mai multe detalii priving algoritmul FFT vor fi discutate în Capitolul 2.

Pentru a putea exemplifica rezultatele unei convoluții rapide în raport cu o convoluție

standard (convoluție în spațiul temporal în comparație cu o convoluție în spațiul frecvențial)

din punctul de vedere al timpului de execuție,s-a considerat un semnal de referință eșantionat

la 44.1kHz , de o durată de 8.5secunde.S-au realizat pe rînd cele două operații de

convoluție,obținîndu-se timpii de execuție 𝑡𝑟 în cazul convoluției rapide și 𝑡𝑛 pentru

convoluția standard :

𝑡𝑟 = 0.1369 𝑠 , 𝑡𝑛 = 2.6867 𝑠 , 𝑡𝑛

𝑡𝑟= 19.62

Se poate observa din raportul efectuat că timpul de execuție al unei convoluții standard

este cu mult mai mare decît timpul de execuție al unei convoluții rapide.Acest rezultat aduce

un aport benefic întregului algoritm în ceea ce privește optimizarea timpilor de execuție

necesari identificării evenimentelor audio dintr-un semnal audio înregistrat.

Concluzionînd,algoritmul final pentru aplicarea funcției de detecție a evenimentelor de

tip audio dintr-un semnal înregistrat,este următorul :

Mocănașu Matei 1.Detecția segmentelor de semnal util

13

Alg.1.1.Aplicarea funcției de detecție : dîndu-se un semnal de intrare f(x),se va genera

semnalul filtrat s(x) pe baza aplicării unei convoluții rapide între semnalul de intrare și un

filtru gaussian g(x)

1. Se va genera funcția gaussiană aferent 𝑔(𝑥)conform ecuației (1.6)

2. Se va genera filtrul Gaussian 𝑔 𝑥 ′ conform ecuației (1.9)

3. Se va calcula convoluția rapidă între cele două semnale

3.1. Se va defini lungimea rezultatului de convoluție 𝑁 = 𝑁𝑓 + 𝑁𝑔 − 1 unde 𝑁𝑓 și 𝑁𝑔 sunt

dimensiunile corespunzătoare semnalelor f ,respectiv, g.

3.2. Se vor completa semnalele f(x) și g(x) cu zerouri pînă la dimensiunea N

3.3. Se vor calcula transformatele Fourier rapide (FFT) ale celor două semnale de

dimensiune N : 𝐹 = 𝐹𝐹𝑇 𝑓 , 𝐺 = 𝐹𝐹𝑇(𝑔)

3.4. Se va calcula produsul temporar 𝑆 = 𝐹𝐺

3.5. Se va calcula transformata Fourier inversă a produslui temporar,care va fi și rezultatul

final al algoritmului 𝑠 𝑥 = 𝐼𝐹𝐹𝑇(𝑆)

În ceea ce privește filtrul Gaussian g(x),singurul parametru important în generare va fi

deviația standard,deoarece aceasta va determina lungimea filtrului.Aspectul important de care

trebuie ținunt cont este că cu cît lungimea filtrului este mai mare,cu atît filtrarea va da

rezultate mai bune (i.e. semnalul va fi mai insensibil la zgomot),însă întîrzierile introduse de

filtru vor fi mai mari.În Fig.1.6 este reprezentată distribuția Gaussiană.

Fig.1.6.Distribuția Gaussiană[5]

Un aspect important de care trebuie ținut cont la implementare este faptul că orice filtru

va avea un timp de răspuns.Dacă în cazurile de reglare obișnuite punctul de interes (sau mai

bine spus,unul din punctele de interes) este timpul tranzitoriu,sau timpul la care semnalul

ajunge într-o bandă stabilizatoare,în cazul filtrului folosit în această lucrare important este

Mocănașu Matei 1.Detecția segmentelor de semnal util

14

timpul la care semnalul filtrat atinge valoarea maximă.Astfel,s-a generat răspunsul la treaptă

(folosind funcţia fvtool din cadrul programului Matlab) a unui filtrulu Gaussian de lungime

8820,la o frecvență de eșantionare de 44.1kHz,acesta fiind reprezentat în Fig.1.7.

Fig.1.7.Răspunsul la treaptă a filtrului Gaussian

Se poate observa din Fig.1.7 că răspunsul atinge valoarea maximă în

100msec.Rezultatul obţinut este susţinut şi de faptul că pentru lungimea filtrului de 8820 la o

frecvenţă de eşantionare de 44.1kHz,acesta va atinge valoarea maximă în 8820

44100

1

2= 0.1𝑠𝑒𝑐.

Deviația standard,conform Fig.1.6.,va determina lungimea filtrului Gaussian (aceasta

fiind aproximativ 𝑁 = 6𝜎 ).Centrarea distribuției a fost făcută la 𝑁

2 (i.e. filtrul va conține

eșantioane strict pozitive),

În ceea ce privește lungimea filtrului,aceasta a fost aleasă la 8820 eșantioane (valoare

corespunzătoare unui timp de creștere pînă la valoarea maximă de 0.1msec la răspuns de tip

treaptă) deoarece s-a considerat ca durata minimă a unui eveniment audio să fie de

0.1msec.Pe de altă parte,o lungime mică a filtrului va genera un semnal sensibil la zgomot

(exemplu de semnal generat folosind un filtru de lungime 820 se poate observa în Fig.1.8).

Mocănașu Matei 1.Detecția segmentelor de semnal util

15

Fig.1.8. Aplicarea funcţiei de detecţie pe un semnal audio cu un filtru de lungime 820

a) Graficul în amplitudine a unui semnal audio real provenit de la o chitară electrică ;

b) Graficul semnalului audio în urma aplicării funcţiei de detecţie

Ținînd cont de întîrzierea filtrului de 0.1msec,ultima operație care va trebui realizată

este de a compensa această întîrziere.Operația va trebui executată imediat după calculul

operației de convoluție rapidă,și anume rezultatul va avea o dimensiune de 𝑁 = 𝑁𝑓 + 𝑁𝑔 −

1.Pentru a putea readuce rezultatul la dimensiunea semnalului de intrare 𝑁𝑓 ,semnalul s(x) va

fi considerat fără 𝑁𝑔 + 1 eșantioane.Mai mult,rezultatul va trebui shiftat la stînga cu

întîrzierea generată de filtru :

𝑑𝑒𝑙𝑎𝑦𝑓𝑖𝑙𝑡𝑟𝑢 =𝑠𝑖𝑧𝑒𝑓𝑖𝑙𝑡𝑟𝑢

2=

8820

2= 4410

𝑠 𝑥 = 𝑠(𝑑𝑒𝑙𝑎𝑦𝑓𝑖𝑙𝑡𝑟𝑢 : 𝑠𝑖𝑧𝑒 𝑠 𝑥 + 𝑑𝑒𝑙𝑎𝑦𝑓𝑖𝑙𝑡𝑟𝑢 )

Atît generarea derivatei I Gaussiene (filtrul în discuție),cît și aplicarea funcției de

detecție au fost realizate în rutina Matlab start_procesare.m.

Pentru a vizualiza rezultatele obţinute în urma aplicării funcţiei de detecţie în discuţie,s-

a considerat o înregistrare de semnal audio real,peste care s-a aplicat filtrarea cu derivata I a

funcţiei Gaussiene.Fig.1.9. ilustrează o colecţie de grafice,primul fiind graficul semnalului

audio iniţial,al doilea reprezentînd semnalul audio filtrat (rezultatul obţinut în urma aplicării

funcţiei de detecţie),iar în cele din urmă este reprezentată şi funcţia de detecţie folosită.

Mocănașu Matei 1.Detecția segmentelor de semnal util

16

Fig.1.9.Aplicarea funcţiei de detecţie pe un semnal audio real cu un filtru de lungime 8820

a) Graficul în amplitudine a unui semnal audio real provenit de la o chitară electrică ;

b) Graficul semnalului audio în urma aplicării funcţiei de detecţie ; c) Funcţia de detecţie

(derivata I a unui filtru Gaussian normat) de lungime 8820

1.3.Algoritmul de identificare al evenimentelor audio

Ultimul pas în detecţia evenimentelor audio este de a detecta corect eşantioanele (sau în

varianta temporală,a momentelor de timp) la care se produc acestea.O identificare completă

presupune atît specificarea eşantioanului pentru începutul unui eveniment,cît şi eşantionul

corespunzător sfîrşitului evenimentului.

Rezultatul aplicării funcţiei de detecţie (figurat în Fig.1.8.b) este un semnal care va

prezenta vîrfuri pozitive în amplitudine la apariţia unui eveniment,precum şi vîrfuri negative

la terminarea acestuia.Altfel spus,la trepte crescătoare de amplitudine din semnalul original

vor corespunde vîrfuri pozitive (sau mai bine spus,distribuţii Gaussiene pozitive) în semnalul

filtrat,iar treptelor negative vor corespunde vîrfuri negative.

Plecînd de la aceste cunoştinţe,s-ar putea defini un prim algoritm bazat pe valori de

threshold pentru a identifica tipul,cît şi poziţia (sau eşantionul) corespunzător fiecărui tip de

element de interes (început sau sfîrşit).Un astfel de algoritm realizează o parcurgere

optimizată (se parcurge o singură dată vetorul de date s(x) fără a utiliza variabile suplimentare

celor de intrare) în scopul determinării punctelor de maxim şi de minim local.Acesta va

Mocănașu Matei 1.Detecția segmentelor de semnal util

17

parcurge vectorul de date pe segmente : pentru a căuta începutul de note,se va parcurge

vectorul pînă cînd valoarea curentă a datelor va trece peste valoarea de threshold asociată

unui început de eveniment.Apoi se va parcurge în continuare vectorul atîta timp cît elementul

curent din vector este mai mare decît elementul anterior (astfel obţinînd punctul de maxim

local).Următorul pas este de a parcurge vectorul de date pînă cînd elementul curent din vector

va fi mai mic decat threshold-ul asociat sfîrşitului de eveniment.Pentru identificarea punctului

de minim se va compara elementul curent cu cel anterior (similar ca în cazul maximului

local).

Această soluție prezintă beneficii satisfăcătoare din punctul de vedere al timpului de

execuție,însă prezintă rezultate care pot fi validate doar pentru anumite clase de

instrumente,cum ar fi pianul.În cazul chitării,semnalul este departe de a fi unul ideal din

perspectiva amplitudinii,și anume,aceasta nu va descrește exponențial de la apariția unui

eveniment pînă la sfîrșitul acestuia,după cum ar fi de așteptat.Adesea semnalul util va fi ușor

perturbat de condiții fizice (de exemplu,atingerea accidentală corzii în timpul vibrației,sau

cazul cel mai des întîlnit,în timpul vibrației unei corzi,aceasta va atinge suprafețele metalice

care delimitează notele de pe gîtul chitării).

Un alt factor care caracterizează un eveniment audio provenit de la o chitară este o

creștere abruptă a amplitudinii la apariția,unui eveniment.Această creștere este de foarte

scurtă durată,urmînd o descreștere abruptă,semnalul continuînd apoi o scădere exponențială în

amplitudine.Explicația vine de la modul în care se produce un eveniment,și anume prin

lovirea unei corzi folosind un obiect dur (denumit pană),în scopul de a pronunța acel

eveniment.Acest fenomen va produce un minim local parazit,care poate fi interpretat greșit

drept sfîrșit de eveniment.

Astfel,în marea majoritate a experimentelor,rezultatele vor prezenta erori destul de

mari,după cum se poate observa în Fig.1.10.

Fig.1.10.Exemplu de vîrfuri negative parazite în detecția evenimentelor audio :

a)vîrfuri parazite , b)vîrfurile reale corespunzătoare sfîrșitului unui eveniment

Mocănașu Matei 1.Detecția segmentelor de semnal util

18

Pentru a evita astfel de situații,se va dori eliminarea tuturor vîrfurilor parazite prezente

pe durata unui eveniment audio.Soluția propusă și validată este de a considera drept sfîrșit de

eveniment ultimul vîrf detectat pe durata unui eveniment,care îndeplinește condiția de a fi sub

threshold-ul asociat sfîrșitului de evenimente.Astfel,se va defini algoritmul final de detecție.

Alg.1.2. Identificarea eşantioanelor corespunzătoare începutului şi sfîrşitului unui

eveniment audio : dîndu-se un semnal s(x) de intrare,obţtinut în urma Alg.1.1, se vor genera

vectorul 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 care va conţine informaţiile aferente tuturor evenimentelor audio prezente

în s(x),precum şi vectorul 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 care va conţine eşantioanele aferente vectorului de

informaţii.Se vor elimina toate vîrfurile negative parazite prezente în semnalul audio

1. Se vor defini două valori de threshold denumite 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑖𝑛𝑐 ,respectiv 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓

pentru stabilirea nivelelor acceptate de amplitudine între care pot fi identificate

evenimentele audio

2. Se vor defini vectorii 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 şi 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 şi vor fi iniţializaţi cu NULL (i.e. vectori vizi);

Se va iniţializa indexul i de parcurgere a vectorului s(x) cu 1 ; Se va defini și inițializa cu

NULL un vector temporar 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 pentru stocarea de informații temporare

3. Cît timp 𝑖 < 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) (i.e. se va rula următoarea buclă cît timp nu s-a întîlnit sfîrşitul

vetorului de date

3.1. Cît timp 𝑠 𝑖 < 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑖𝑛𝑐 şi 𝑖 < 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) , se incrementează i

3.2. Cît timp 𝑠(𝑖) > 𝑠(𝑖 + 1) şi 𝑖 < 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) ,se incrementează i (i.e. se caută valoarea

de maxim local)

3.3. Se marchează poziţia curentă ca fiind început de eveniment (i.e. s-a atins un maxim

local) şi se completează vectorul de informaţii 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 = [𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 1] ,precum şi

vectorul de timpi 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 = [𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 𝑖] ;

3.4. Cît timp 𝑠 𝑖 > 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓 şi 𝑖 < 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) , se incrementează i

3.5. Se va salva eşantionul curent într-o variabilă temporară 𝑗 = 𝑖

3.6. Cît timp 𝑠(𝑖) < 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓 şi 𝑖 < 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) ,se incrementează i și se salvează

elementul curent în vectorul 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 : 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 = [ 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 𝑠 𝑖 ]

Mocănașu Matei 1.Detecția segmentelor de semnal util

19

3.7. Se vor genera toate minimele locale din vectorul temporar 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 , precum și

indecșii corespunzători din vectorul temporar și se vor salva în vectorii

corespunzători 𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙 , respectiv 𝑖𝑛𝑑𝑒𝑥𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙

[ 𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙 , 𝑖𝑛𝑑𝑒𝑥𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙 ] =

𝑓𝑖𝑛𝑑𝑝𝑒𝑎𝑘𝑠 ( −1 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 ,𝑚𝑖𝑛𝑝𝑒𝑎𝑘𝑕𝑒𝑖𝑔𝑕𝑡 , −1 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓)

3.8. Dacă 𝑠 𝑖 > 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓 sau 𝑖 = 𝑙𝑒𝑛𝑔𝑡𝑕(𝑠) (i.e. dacă s-a ajuns la un nou început de

notă sau la sfîrsitul vectorului de date) se va calcula index-ul real al sfîrşitului de

eveniment și se completează vectorii 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 şi 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 :

𝑖𝑛𝑑𝑒𝑥𝑠𝑓 𝑒𝑣𝑒𝑛𝑖𝑚𝑒𝑛𝑡 = 𝑖𝑛𝑑𝑒𝑥𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙 𝑒𝑛𝑑 + 𝑗

𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 = [𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 0]

𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 = [𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 𝑖𝑛𝑑𝑒𝑥𝑠𝑓 𝑒𝑣𝑒𝑛𝑖𝑚𝑒𝑛𝑡 ]

3.9. Se reiniţializează vectorul temporal 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 cu NULL

4. Se returnează : 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 şi 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒

Observații :

Vectorul 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 va conține doar elemente de 0 (element ce semnifică sfîrșit de

eveniment) sau 1 (element ce semnifică început de eveniment)

𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 va avea mereu un număr par de elemente,și va avea ca primă și/sau

ultimă secvență 1 → 0

𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 va cuprinde elemente de tip întreg corespunzătoare eșantioanelor pentru

început/sfîrșit de eveniment.Cei doi vectori sunt corelați,însemnînd că un element

cu index impar din 𝑡𝑖𝑚𝑝𝑛𝑜𝑡𝑒 va corespunde unui început de notă (elementele cu

index impar din 𝑖𝑛𝑓𝑜𝑛𝑜𝑡𝑒 vor avea valoarea 1)

Se poate observa în primul rînd că algoritmul final necesită un timp de execuţie mai

mare decît în cazul algoritmului Alg.1.2. datorită efortului de memorare a unor date

temporare,precum şi parsarea acestora în scopul obţinerii valorilor de minim local.

Dacă aflarea punctelor de maxim local (i.e. a începuturilor de evenimente) este identic

cu metoda folosită în algoritmul anterior,varianta finală tratează diferit minimele locale.Ideea

este de a parcurge vectorul de date pînă elementul curent este mai mic decît threshold-ul

asociat.Din acest moment,se vor memora toate datele si se va parcurge vectorul de date pînă

cînd elementul curent este mai mare ca threshold-ul de început de eveniment sau pînă cînd se

întîlneşte sfîrşitul vectorului de date.Aceste valori temporare sunt stocate în vectorul

𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 .După ce se atinge una din condiţiile enumerate la pasul 3.8 (se întîlneşte un nou

început de eveniment sau sfîrşit de vector de date),se vor genera toate minimele locale,precum

şi indecşii asociaţi din vectorul temporar.

Mocănașu Matei 1.Detecția segmentelor de semnal util

20

Observaţii :

în Alg.1.2. , la pasul 3.8 , generarea minimelor locale din vectorul temporar a fost

ilustrată folosind funcţia Matlab findpeaks ().Parametrii de intrare au fost

consideraţi,în ordinea aferentă,vectorul temporar 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 , una din proprietăţile

dispuse pentru parsare (în cazul de faţă s-a ales minpeakheight care desemnează

valoarea de threshold a minimelor locale),precum şi parametrul acestei proprietăţi

(în acest caz fiind vorba de threshold-ul asociat sfîrşitului de eveniment)

funcţia findpeaks() operează pentru aflarea punctelor de maxim local,nu şi pentru

minim ; din acest motiv,apelul ei va fi făcut cu −1 𝑣𝑒𝑐𝑡𝑡𝑒𝑚𝑝 drept vector

temporar,iar parametrul de threshold a fost de asemenea considerat cu semn

schimbat −1 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑠𝑓)

După ce se vor calcula toate minimele locale,se va verifica dacă s-a atins fie un nou

început de eveniment,fie sfîrşit de vector de date,se va considera doar ultimul minim local

găsit 𝑖𝑛𝑑𝑒𝑥𝑚𝑖𝑛𝑙𝑜𝑐𝑎𝑙 𝑒𝑛𝑑 ,se va calcula index-ul real al acestui minim în vectorul de date

(pasul 3.8) şi se vor actualiza vectorii de informaţii şi de timpi corespunzător (pasul 3.9).

Deşi această soluţie necesită un vector temporar,precum şi parsări suplimentare,elimină

toate vîrfurile parazite prezente în semnal.Acest compromis este satisfăcător,însă trebuie

făcută precizarea că fiecare tip de instrument (prin urmare,fiecare tip de semnal audio) va

necesita o adaptare a algoritmului de detecţie a informaţiilor referitoare la evenimentele audio.

Astfel,pentru fiecare tip de semnal,vor trebui identificate posibilele variaţii de

amplitudine la apariţia unui eveniment.De asemenea,valorile de threshold asociate acestora nu

pot fi identificate decît prin metode experimentale.Pentru cazul de faţă,s-au ales valori destul

de mici ( -0.1 şi ,respectiv, 0.1 pentru cele două valori de început şi sfîrşit de eveniment

audio),astfel încît evenimentele de amplitudine mai mică (note cîntate mai slab) vor fi

detectate,iar zgomotul fiind identificat înafara bandei aferente.

Un exemplu de rezultat obţinut în urma aplicării întregului algoritm de identificare al

evenimentelor audio (preprocesare,generarea şi aplicarea funcţiei de detecţie şi în final

aplicarea algorimului de delimitare al evenimentelor) poate fi observat în Fig.1.11,unde sunt

reprezentate atît graficul semnalului inițial (de intrare),graficul semnalului filtrat (cu derivata

de ordinul I a funcției Gaussiene),precum și graficul cu detecția finală a evenimentelor

delimitate.

Mocănașu Matei 1.Detecția segmentelor de semnal util

21

Fig.1.11.Detecția porțiunilor de semnal util

Semnalul din Fig.1.11 s-a ales astfel încît să conțină atît evenimente (note) care se

termină brusc (de exemplu primele evenimente),cît și evenimente care au fost lăsate liber

(vibrațiile corzilor au fost lăsate liber,fără a le termina prin tehnici fizice,i.e. amplasarea mîinii

deasupra corzilor).Se poate observa că în ambele cazuri sfîrșitul de evenimente a fost

identificat corect,eliminînd toate vîrfurile parazite prezente.Astfel,s-au creat ferestre de

semnal care cuprind date utile,ele fiind analizate ulterior,după cum se va observa în capitolul

următor.S-a evitat astfel crearea de ferestre cu zgomot,al căror analiză implică timp și efort de

calcul inutil.Mai mult,s-a soluționat și problema legată de apariția a două evenimente la scurtă

durată între ele (primele două din Fig.1.11),astfel identificarea realizînd separarea corectă.

Mocănașu Matei 2.Analiza segmentelor de semnal util

22

CAPITOLUL 2.ANALIZA SEGMENTELOR DE SEMNAL UTIL

2.1.Scurtă introducere

Capitolul anterior a prezentat implementarea fizică a unei soluții complexe de

identificare și extragere a informațiilor utile dintr-un semnal audio real provenit de la o chitară

electrică.Se va reaminti că,deși algoritmul prezentat în Capitolul 1 are o formă generală pentru

toate instrumentele muzicale,anumiți pași ai acestuia vor trebui definiți în concordanță cu

semnalul audio de la fiecare instrument în parte.

În acest capitol,se va pune în discuție analiza ferestrelor de semnal obținute prin

algoritmul de identificare.Pentru a extrage informațiile utile din aceste ferestre,va trebui

definită o metodă de analiză adecvată.Acestea pot lua diverse aspecte,enumerînd aici doar una

dintre ele,și anume analiza spectrală sau sub o altă denumire,estimarea densității spectrale.

Ideea de bază este de a aplica un set de algoritmi adecvați asupra semnalului (sau asupra

ferestrelor în cazul de față),care vor returna informații legate de componentele frecvențiale ale

semnalului.Motivul pentru care se caută frecvențe (sau periodicități prezente în semnal) este

acela că fiecare notă muzicală este caracterizată de frecvența asociată(mai mult,este

caracterizată de frecvența fundamentală).Aceasta îi conferă notei muzicale un nume

cunoscut,cît și o anume poziție în tabela frecvențială (i.e. octava).

Pentru a putea realiza o analiză în frecvență,trebuie adoptat un algoritm pentru

conversia de la spațiul temporal la cel frecvențial.Suplimentar,este necesară cunoașterea

spectrului unui anumit instrument (i.e. cunoașterea fenomenelor parazite care pot apărea).

Ținînd cont de aceste lucruri,se va prezenta în următorul subcapitol metoda aleasă

pentru conversia de la spațiul temporal la cel frecvențial,precum și algoritmul de detecție și

validare a frecvențelor de interes din spectrul rezultat în urma conversiei.Scopul final este de a

detecta toate frecvențele de interes,acestea fiind supuse unei conversii finale de la numere

reale la șiruri de caractere,care vor fi notele identificare din semnalul audio.

Mocănașu Matei 2.Analiza segmentelor de semnal util

23

2.2.Conversia de la spațiul temporal la spațiul frecvențial

Primul pas de a realiza conversia de la spațiul temporal la cel frecvențial este de a defini

o metodă sau un algoritm care să cuprindă pașii necesari ai conversiei.

În capitolul anterior s-a discutat despre utilizarea Transformării Fourier Rapide (FFT)

pentru a face conversia de la spațiul temporal la cel frecvențial.Și în acest caz se va prefera

utilizarea unui astfel de algoritm datoriă complexității reduse (complexitate computațională de

O(NlogN) ).Un aspect important legat de FFT este fatpul că acest algoritm are la bază

Transformarea Fourier Discretă (DFT) care,prin definiție,convertește o listă finită de

eșantioane ale unui semnal în lista coeficienților ai unei combinații finite de sinusoide

complexe,coeficienți ordonați după frecvență.Așadar,DFT-ul va necesita drept intrare un

vector finit de eșantioane,vector extras din setul de date inițial.Acest pas implică aplicarea

unei ferestre asupra semnalului inițial,pentru a extrage vectorul finit de eșantioane.Următorul

pas este de a aplica efectiv algoritmul de FFT asupra acestor ferestre.Un ultim pas este de a

calcula spectrul în putere pentru a putea observa puterea semnalului la fiecare frecvență.În

continuare se vor prezenta fiecare aspect al conversiei în parte,începînd cu aplicarea ferestrei

asupra semnalului,aplicarea algoritmului FFT,iar în final conversia la spectrul în putere.

Funcția de aplicare a ferestrei asupra unui semnal,este o funcție matematică care are

valoarea zero înafara unui interval,denumit lungimea ferestrei,iar în interiorul acestuia

prezintă un comportament specific.În lucrarea de față s-a folosit o fereastră

dreptunghiulară,fereastră care păstrează semnalul constant în intervalul său.Ecuația unei

ferestre dreptunghiulare :

𝑤 𝑛 = 1 , 0 < 𝑛 < 𝑁 − 1 0 , 𝑎𝑙𝑡𝑓𝑒𝑙

(2.1)

De remarcat totuși că orice fereastră aplicată unui semnal va prezenta efecte secundare

în spectrul frecvențial.Explicația provine de la faptul că o multiplicare în domeniul temporal

este echivalentul cu operația de convoluție în domeniul frecvențial.Pentru a putea observa

efectele unei ferestre dreptunghiulare asupra spectrului,se va genera răspunsul în frecvență al

acesteia (Fig.2.1).

Mocănașu Matei 2.Analiza segmentelor de semnal util

24

Fig.2.1.Spectrul frecvențial al unei ferestre dreptunghiulare de lungime 10

După cum se poate observa din Fig.2.1.,răspunsul în frecvență va conține lobi paraziți în

jurul frecvenței dominante.Aceste loburi descresc în amplitudine la frecvențele mai depărtate

de cea dominantă.Astfel,spectrul generat pe o astfel de fereastră care conține date reale va fi

corupt de loburile parazite datorate ferestrei dreptunghiulare.Totuși,s-a ales utilizarea acestei

ferestre deoarece loburile parazite au un efect din ce în ce mai diminuat în raport cu creșterea

lungimii ferestrei.

Astfel,intervalele care cuprind evenimentele audio detectate din Capitolul 1 vor fi pur și

simplu copiate,operație identică cu aplicarea unei ferestre dreptungiulare de amplitudine

unitară.

Observație : dimensiunea ferestrelor vor fi dinamic alese,deoarece fiecare eveniment

audio va fi copiat din semnalul inițial.În alte cuvinte,fereastra dreptunghiulară va avea

dimensiuea evenimentului audio curent (dimensiune specificată în eșantioane).Acest lucru

poate aduce un aspect negativ al utilizării memoriei,deoarece lungimea buffer-ului de stocare

va fi dinamic definită (în funcție de dimensiunea evenimentului curent).În cazul semnalului

provenit de la chiara electrică,notele (sau evenimentele) nu au un sustain (sau o durată

prelungită,susținută,întreținută) cum este cazul notelor provenite de la o vioară sau de la vocea

umană,astfel încît aceste ferestre dreptunghiulare nu vor avea dimensiuni deosebit de

mari,peste care o prelucrare sau o parsare de date ar necesita timpi de execuție inacceptabili.

Următorul pas este de a aplica algoritmul FFT.O primă precizare asupra acestui

algoritm,este diferențierea între cele două tipuri de ferestre : fereastra de intrare,și fereastra de

transformare (Fig.2.2).

Mocănașu Matei 2.Analiza segmentelor de semnal util

25

Fig.2.2.Distincția între fereastra de intrare și fereastra de transformare în cadrul algoritmului

FFT

Fereastra de intrare,de dimensiune m,este fereastra dreptunughiulară (sau secțiunile din

semnalul de date care cuprind evenimente).Asupra acesteia se va aplica algoritmul FFT,care

va genera un rezultat de dimensiune n,această dimensiune specificînd fereastra de

tranformare.Alegerea lungimii ferestrei de transformare trebuie făcută ținînd cont de o ipoteză

și anume : algoritmul FFT este oprimizat pentru lungimi ale ferestrei de transformare care

sunt puteri ale lui 2 (se obțin cei mai buni timpi pentru algoritmii de decemiare din cadrul

FFT).Astfel,lungimea ferestrei de transformare s-a ales următoarea putere a lui 2 care este mai

mare decît lungimea ferestrei de intrare[6]

:

𝑛 = 𝑎2 > 𝑚 , 𝑎𝜖𝑁 (2.2)

Motivul pentru care s-a ales acestă valoare pentru lungimea ferestrei de

transformare,este acela de a păstra o complexitate de 𝑂 𝑁𝑙𝑜𝑔𝑁 al algoritmului FFT.Mai

mult,rezoluția spectrului frecvențial este corelat cu dimensiunea ferestrei de transformare

(rezoluția spectrului va fi mai bună cu creșterea dimensiunii ferestrei).

În urma aplicării algorimtului FFT,va rezulta un spectru definit de ecuația (1.11) :

𝐹 𝑘 = 𝑓 𝑛 𝑒−𝑗2𝜋

𝑁𝑛𝑘

𝑁−1

𝑛=0 , 𝑘, 𝑛 = 0,1… . . ,𝑁 − 1.

,unde f(t) este semnalul de intrare (considerat în spațiul temporal),iar explonențiala din

sumă respectă identitatea lui Euler :

𝑒𝑗𝑥 = cos 𝑥 + 𝑗𝑠𝑖𝑛(𝑥) (2.3)

Combinînd cele două ecuații de mai sus reiese :

𝑅𝑒 𝐹 𝑘 = 𝑓 𝑛 cos(2𝜋𝑘𝑛

𝑁)

𝑁−1

𝑛=0

𝐼𝑚 𝐹 𝑘 = − 𝑓 𝑛 sin(2𝜋𝑘𝑛

𝑁)

𝑁−1

𝑛=0

(2.4)

Ecuația (2.4) arată că rezultatul algoritmului de FFT va conține numere

complexe.Pentru a putea analiza caracteristicile acestor numere,ultimul pas al algoritmului de

conversie de la spațiul temporal la cel frecvențial este de a calcula spectrul în putere.

Mocănașu Matei 2.Analiza segmentelor de semnal util

26

Spectrul în putere al unui semnal va defini puterea semnalului pe axa frecvențială.În alte

cuvinte,acest spectru va indica cît de pronunțată este prezența fiecărei frecvențe (din spectrul

[0 𝑓𝑠

2] )din semnal.Calculul său este adesea realizat prin ridicarea la pătrat al amplitudinii

semnalului.Asșadar,spectrul în putere va fi mereu un vector de amplitudini

pozitive,amplitudini ce vor corespunde fiecărei frecvențe din spectru.

Pentru cazul algoritmului FFT,care returnează un set de numere complexe ce definesc

fiecare frecvență din spectru sub forma de amplitudini ale celor două funcții de bază (funcția

sinus și,respectiv,cosinus),spectrul va fi calculat prin simpla operație de înmulțire a numerelor

complexe cu conjugatele aferente :

𝑃 𝑘 = 𝐹 𝑘 𝐹(𝑘) (2.5)

Astfel,pentru fiecare frecvență din spectru se va calcula amplitudinea aferentă.Ca

exemplu,s-a extras spectrul în putere pentru un semnal ce conține două sinusoide eșantionate

la 44.1kHz,una din ele avînd o frecvență de 300Hz,iar a doua avînd o frecvență de 440Hz

(Fig.2.3).

Fig.2.3.Spectrul în putere al unui semnal format din două sinusoide (300Hz,respectiv

440Hz)

Spectrul a fost generat în urma aplicării algoritmului de conversie discutat în acest

capitol.Se poate observa că spectrul conține două vîrfuri proeminente la cele două frecvențe

fundamentale ale sinusoidelor ce compun semnalul de intrare.O ultimă observație despre acest

algoritm este faptul că spectrul în putere va fi normat la 0 1] (normare la maximul

spectrului).

Mocănașu Matei 2.Analiza segmentelor de semnal util

27

Ca o concluzie asupra acestei metode de conversie din domeniul temporal la cel

frecvențial,pașii importanți includ alegerea unei ferestre care va fi aplicată peste semnal

pentru a produce segmente mai mici de date care vor putea fi procesate (în acest caz fereastra

fiind dreptunghiulară),aplicarea algoritmului FFT asupra acestor ferestre,rezultînd spectrul

frecvențial.Acest spectru va fi ulterior transformat în spectrul de putere,iar ultimul pas este de

a norma acest spectru relativ la maximul său.

Așadar,se obține un nou set de date,care va conține informații legate de prezența tuturor

frecvențelor din spectrul generat de algoritmul FFT.Următorul pas este de a stabili care din

aceste frecvențe corespund evenimentelor audio reale,realizînd astfel detecția notelor

muzicale prezente în semnal.

Algoritmul 2.1. realizează generarea spectrului în putere a unei ferestre de intrare h(x).

Alg.2.1.Generarea spectrului în putere a unei ferestre de semnal h(x) : dîndu-se o

fereastră de semnal h(x),se va genera spectrul în putere 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 ., precum și vectorul de

de frecvențe asociat 𝑣𝑒𝑐𝑡𝑓𝑟𝑒𝑐 𝑣𝑠𝑝𝑒𝑐𝑡𝑟𝑢

1. Se va defini valoarea ferestrei de transformare a algoritmului FFT drept următoarea putere

a lui 2 mai mare ca lungimea ferestrei de intrare :

𝑡𝑟𝑎𝑛𝑠𝑓𝑙𝑔 = 𝑝𝑜𝑤2 [ 𝑛𝑒𝑥𝑡𝑝𝑜𝑤2 𝑙𝑒𝑛𝑔𝑡𝑕 𝑕 ]

2. Se va aplica algoritmul FFT peste fereastra de intrare,generînd spectrul frecvențial al

ferestrei,cu lungimea de transformare definită la Pasul 1 :

𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 = 𝑓𝑓𝑡(𝑕, 𝑡𝑟𝑎𝑛𝑠𝑓𝑙𝑔 )

3. Se va genera spectrul de putere asociat , se vor elimina frecvențele redundante (de la 𝑓𝑠

2 𝑙𝑎 𝑁),și se va norma spectrul la maximul acestuia :

𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 = 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 .∗ 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎

𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 = 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 ( 1: 𝑐𝑒𝑖𝑙 𝑙𝑒𝑛𝑔𝑡 𝑕 𝑠𝑝𝑒𝑐𝑡𝑟 𝑢𝑛𝑜𝑡𝑎

2 )

𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 =𝑠𝑝𝑒𝑐𝑡𝑟 𝑢𝑛𝑜 𝑡𝑎

max 𝑠𝑝𝑒𝑐𝑡𝑟 𝑢𝑛𝑜𝑡𝑎

4. Se va genera vectorul de frecvențe aferent spectrului :

𝑣𝑒𝑐𝑡𝑓𝑟𝑒𝑐 𝑣𝑠𝑝𝑒𝑐𝑡𝑟𝑢 =𝑓𝑠

2∗ 𝑙𝑖𝑛𝑠𝑝𝑎𝑐𝑒 (0,1,

𝑡𝑟𝑎𝑛𝑠𝑓 𝑙𝑔

2)

Mocănașu Matei 2.Analiza segmentelor de semnal util

28

2.3.Detecția frecvențelor de interes din spectrul de putere

Dacă în subcapitolul anterior s-a prezentat un algoritm de a genera spectrul în putere al

unei ferestre de semnal,acest subcapitol va prezenta analiza spectrului generat,tratînd

fenomenele și cazurile speciale ce pot apărea în cazul unui instrument ca chitara

electrică.Interesul este de a generea frecvențele care definesc o notă,precum și eliminarea

frecvențelor parazite.

Înainte de a defini un algoritm de identificare al frecvențelor de interes din spectrul de

putere,va fi necesară introducerea unur termeni din analiza spectrală,și anume termenul de

armonică și,respectiv,supraton (overtone).

Armonicile sunt componente frecvențiale ale unei unde care apar la multiplii întregi ale

frecvenței fundamentale.În alte cuvinte,dacă o undă oscilează cu o frecvență (fundamentală) f

,armonicile acesteia vor fi 2f,3f....Aceste armonici au proprietatea de a fi periodice la

frecvența fundamentală,prin urmare,suma armonicilor este și ea periodică la acea frecvență.

Majoritaea oscilatoarelor reale prezintă armonici.Deși ele nu vor fi interpretate ca

frecvențe separate de către urechea umană (datorită amplitudinii reduse față de frecvența

fundamentală),acestea vor defini timbrul oscilatorului (conferă unei note cîntate la chitară de

exemplu suntel plăcut,animat,bogat).Fig.2.4 ilustrează spectrul unui oscilator cu frecvența

fundamentală de 440Hz,avînd prezentă și armonica a doua de 880Hz.

Fig.2.4.Spectrul unui oscilator cu frecvența fundamentală de 440Hz și a doua

armonică de 880Hz

Mocănașu Matei 2.Analiza segmentelor de semnal util

29

Al doilea termen care trebuie introdus este supratonul.Dacă armonicile apar la

multiplii întregi ai frecvenței fundamentale,supratonurile vor fi acele componente

frecvențiale care nu sunt multiplii întregi ai fundamentalei.

În cazul unei chitări,o singură undă (sau o notă muzicală) va conține atît armonici,cît și

supratornuri.Deși prezența acestora conferă sunetului produs un aspect plăcut (drept

exemplu,se pot compara tonul telefonului,care are o frecvență de 440Hz,cu aceeași notă

produsă pe o chitară : diferența între ele este dictată de timbru,în cazul tonului de telefon unda

fiind formată doar din fundamentală,iar în cazul chitării unda conținînd atît armonicile

frecvenței de 440Hz,cît și supratonuri,conferind astfel un sunet mult mai plăcut și colorat față

de cazul tonului de telefon) , acestea sunt totuși niște frecvențe parazite care trebuie eliminate

cînd se caută frecvența fundamentală.

Pentru soluționare acestei probleme,se poate pleca de la ideea că armonicile sunt

multiplii întregi ai fundamentalei,cu amplitudini inferioare acesteia.Așadar,considerînd

exemplul din Fig.2.5.,s-ar putea spune că frecvența cea mai mică (care este puternic

reprezentată în spectrul de putere) va fi frecvența dominantă (fundamentala),iar multiplii

acesteia vor fi armonicile sale.Această ipoteză este valabilă doar în anumite situații.În cazul

unei chitări,timbrul acesteia este mult mai complicat.Se pot întîlni anumite frecvențe care

prezintă armonici mai puternice ca fundamentala .Acest fenomen poate fi explicat în conjucție

cu metoda de a produce unda (sau nota muzicală).În funcție de locația de atac al

corzii,precum și obiectul folosit,se pot pronunța anumite armonici al fundamentalei,și

deci,amplitudinile vor fi în concordanță cu acestea.

Problema care se ridică în acest caz este modul de interpretare al armonicii.Se poate

demonstra că două note la o distanță de o octavă între ele vor avea raportul de frecvențe de

2:1.Demonstrația,precum și o analiză mai completă asupra tabelei frecvențiale va fi realizată

în ultimul subcapitol,unde se va discuta despre conversia frecvențelor de la valori reale la

șiruri de caractere.

Pentru soluționarea acestor incertitudini,se va pleca de la premiza că o fundamentală va

avea întotdeauna cel puțin o armonică.Astfel,se va apela la o metodă cunoscută sub numele de

subeșantionare (sau în echivalentul din limba engleză,downsampling).

Subeșantionarea este procesul de reducere al frecvenței de eșantionare al unui

semnal.Factorul de subeșantionare este de obicei un număr întreg (notat cu M)

supraunitar,care divide frecvența de eșantionare.

Un aspect deosebit al acestui proces este că semnalul supus subeșantionării poate

prezenta fenomenul de aliere (sau fenomen prin care frecvențele unui semnal nu vor mai

putea fi identificate corect).Explicația provine de la faptul că subeșantionarea nu realizează

operații asupra lungimii de bandă,ci doar asupra frecvenței de eșantionare.Astfel,semnalul

Mocănașu Matei 2.Analiza segmentelor de semnal util

30

care rezultă în urma procesului de subeșantionare poate devia de la îndeplinirea condiției

Nyquist (lungimea de bandă a unui semnal trebuie să fie mai mică decît jumătatea frecvenței

de eșantionare).Astfel,pentru evitarea apariției fenomenului de aliere,semnalul va trebui filtrat

cu un filtru trece-jos pentru a reduce lungimea de bandă.Astfel,pașii pentru aplicarea

subeșantionării unui semnal de intrare f(x) sunt :

1. Dacă M este factorul de subeșantionare , 𝑀 ∈ 𝑁∗ ,atunci se va aplica un FTJ

(Chebyshev sau Butterworth) cu frecvența de tăiere 𝑓 =𝑓𝑠

2𝑀 , unde fs este frecvența de

eșantionare a semnalului.Se notează semnalul filtrat cu s(x)

2. Se reduce frecvența de eșantionare alegînd doar factorii kM din semnalul s(x) :

𝑠 𝑘 = 𝑠(𝑘𝑀)

Ideea utilizării acestei operații este de a ‘alinia’ armonicile sub

dominante.Reamintind,se pleacă de la premiza că orice fundamentală are cel puțin o

armonică.Odată ce alinierea a fost realizată,se poate realize produsul celor două semnale (cel

original cu cel rezultat în urma subeșantionării),iar rezutatul va cuprinde doar frecvențele

fundamentale.

Observații

În urma subeșantionării (ca exemplu,cu un factor de 2) va avea frecvența de

eșantionare înjumătățită 𝑓 =𝑓𝑠

2 , așadar lungimea semnalului va fi și ea

înjumătățită.Drept urmare,pentru a putea realiza operația de înmulțire a celor două

semnale,fie se va completa cu zerouri semnalul subeșantionat,fie se va limita

semnalul inițial la primele 𝑁

𝑀 eșantioane,unde N este lungimea semnalului inițial

Deși subeșantionarea este în general aplicată asupra semnalului f(x),în acest caz

această operație va fi aplicată asupra spectrului semnalului,prin urmare,aplicarea

unei filtrări nu va mai fi necesară

Fig.2.5. prezintă un exemplu de spectru al unui semnal care are fundamentala de

100Hz,precum și armonica a doua de 200Hz (a).Spectrul este supus subeșantionării cu un

factor de 2 (b),precum și completat cu zerouri pînă la dimensiunea semnalului orignial.În

final,cele două semnale (a,b) vor fi supuse operației de înmulțire,rezultatul cuprinzînd doar

fundamentala de 100Hz (c).

Mocănașu Matei 2.Analiza segmentelor de semnal util

31

Fig.2.5.Subeșantionarea unui spectru : a)Spectrul de intrare , b)Spectrul subeșantionat

cu un factor de 2 , c)Rezultatul înmulțirii celor două spectre

Se poate observa că armonica a doua este eliminată cu succes.Mai mult,ținînd cont de

premiza de la care s-a plecat,dacă un semnal prezintă și supratonuri,dacă acestea la rîndul lor

nu sunt descrise de o fundamentală și o armonică,vor fi complet rejectate.Astfel,se poate

soluționa problema extragerii frecvențelor fundamentale dintr-o fereastră de semnal prin

aplicarea subeșantionării.

Algoritmul final de extragere al fundamentalelor va implica și utilizarea unui sistem de

threshold în spectrul final (care este evident normat).Orice amplitudine care va fi mai mare

peste valoarea de threshold impusă va desemna frecvența fundamentală

corepsunzătoare.Algoritmul 2.2. este versiunea finală care implementează metodele descrise

în acest subcapitol,acesta fiind realizat în rutina Matlab detectie_frecv.m.

Alg.2.2.Extragerea frecvențelor fundamentale dintr-un spectru în putere generat prin

Algoritmul.2.1.: dîndu-se un spectru în putere 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 și vectorul de frecvențe asociat

𝑣𝑒𝑐𝑡𝑓𝑟𝑒𝑐 𝑣𝑠𝑝𝑒𝑐𝑡𝑟𝑢 , se vor extrage și memora (în vectorul 𝑑𝑜𝑚𝑖𝑛𝑎𝑛𝑡𝑒 ) toate frecvențele

fundamentale cuprinse în spectru , precum și memorarea numărului acestora (în vectorul

𝑛𝑟𝑛𝑜𝑡𝑒 )

1. Pasul de inițializări

1.1. Se vor defini valoarea 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑓𝑟𝑒𝑐𝑣 drept valoarea de delimitare al amplitudinii

unei fundamentale din spectrul de putere

Mocănașu Matei 2.Analiza segmentelor de semnal util

32

1.2. Se va defini și inițializa vectorul de ieșire dominante ca vector NULL

1.3.Se va defini vectorul 𝑛𝑟𝑛𝑜𝑡𝑒 ,vectorul ce va specifica numărul de dominante din

fereastră, și se va inițializa cu NULL

1.4.Se va defini un vector de frecvențe temporare 𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 pentru memorarea

datelor temporare șe se va inițializa cu NULL

2. Se va aplica operația de subeșantionare asupra spectrului de putere

2.1. Se va genera vectorul de semnal subeșantionat cu un factor de 2 :

𝑣𝑒𝑐𝑡𝑜𝑟𝐷𝑆2 = 𝑑𝑜𝑤𝑛𝑠𝑎𝑚𝑝𝑙𝑒(𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 , 2)

2.2. Se va completa vectorul subeșantionat cu zerouri pînă la lungimea spectrului de

putere :

𝑣𝑒𝑐𝑡𝑜𝑟𝐷𝑆2 = 𝑝𝑎𝑑𝑎𝑟𝑟𝑎𝑦 (𝑣𝑒𝑐𝑡𝑜𝑟𝐷𝑆2 ,

0 , 𝑙𝑒𝑛𝑔𝑡𝑕 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎 − 𝑙𝑒𝑛𝑔𝑡𝑕 𝑣𝑒𝑐𝑡𝑜𝑟𝐷𝑆2 , ′𝑝𝑜𝑠𝑡′)

2.3. Se vor înmulți cei doi vectori (spectrul în putere inițial cu spectrul subeșantionat) :

𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 = 𝑣𝑒𝑐𝑡𝑜𝑟𝐷𝑆2 .∗ 𝑠𝑝𝑒𝑐𝑡𝑟𝑢𝑛𝑜𝑡𝑎

3. Se va parcurge spectrul obținut : se va inițializa un contor de parcurgere 𝑗 = 1.

Cît timp 𝑗 < 𝑙𝑒𝑛𝑔𝑡𝑕 (𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 )

3.1. Cît timp 𝑗 < 𝑙𝑒𝑛𝑔𝑡𝑕 (𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 ) și 𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 𝑗 < 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑓𝑟𝑒𝑐𝑣 , se

incrementează j (𝑗 = 𝑗 + 1)

3.2. Cît timp 𝑗 < 𝑙𝑒𝑛𝑔𝑡𝑕 (𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 ) și 𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 𝑗 > 𝑡𝑕𝑟𝑒𝑠𝑕𝑜𝑙𝑑𝑓𝑟𝑒𝑐𝑣 ,se memorează

elementul curent în vectorul de date temporare și se incrementează j :

𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 = [𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 𝑣𝑒𝑐𝑡𝑜𝑟𝑟𝑒𝑧 (𝑗)]

𝑗 = 𝑗 + 1

3.3. Se extrage punctul de maxim local din vectorul de frecvențe temporare , se marchează

drept fundamentală (se completează vectorul dominante),și se reinițializează vectorul

de frecvențe temporare cu NULL

𝑎𝑚𝑝𝑙𝑖𝑡max 𝑙𝑜𝑐𝑎𝑙 , 𝑖𝑛𝑑𝑒𝑥𝑙𝑜𝑐𝑎𝑙 = max (𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 )

𝑑𝑜𝑚𝑖𝑛𝑎𝑛𝑡𝑒 =

[ 𝑑𝑜𝑚𝑖𝑛𝑎𝑛𝑡𝑒 , 𝑣𝑒𝑐𝑡𝑓𝑟𝑒𝑐 𝑣𝑠𝑝𝑒𝑐𝑡𝑟𝑢 (𝑗 + 𝑖𝑛𝑑𝑒𝑥𝑙𝑐𝑎𝑜𝑙 − 𝑙𝑒𝑛𝑔𝑡𝑕(𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 ))]

𝑣𝑒𝑐𝑡𝑜𝑟𝑓𝑟𝑒𝑐𝑣 𝑡𝑒𝑚𝑝 = []

3.4. Se completează vectorul 𝑛𝑟𝑛𝑜𝑡𝑒 cu numărul de fundamentale găsite :

𝑓𝑜𝑟 𝑘 = 1: 𝑙𝑒𝑛𝑔𝑡𝑕 𝑑𝑜𝑚𝑖𝑛𝑎𝑛𝑡𝑒 𝑛𝑟𝑛𝑜𝑡𝑒 = [ 𝑛𝑟𝑛𝑜𝑡𝑒 𝑘]

Mocănașu Matei 2.Analiza segmentelor de semnal util

33

4. Se returnează 𝑛𝑟𝑛𝑜𝑡𝑒 și 𝑑𝑜𝑚𝑖𝑛𝑎𝑛𝑡𝑒

Observații :

Modul de parcurgere al spectrului în vederea căutării punctelor de maxim local

este identic cu cel folosit în Algoritmul 1.2

Vectorul 𝑛𝑟𝑛𝑜𝑡𝑒 va avea un număr de elemente egal cu numărul de dominante

găsite,iar elementele vor fi identice cu acest număr (de exemplu,pentru o fereastră

cu 3 dominante, 𝑛𝑟𝑛𝑜𝑡𝑒 = [ 3 3 3 ]

Astfel,s-au extras din ferestrele de semnal util toate frecvențele dominante cuprinse în

aceste ferestre,eliminînd componentele frecvențiale parazite (supratonurile).Totuși,rezultatul

obținut este un vector de valori reale.Așadar,ultimul pas în extragerea notelor muzicale este de

a face conversia de la reprezentarea sub formă de numere reale ale frecvențelor,la o

reprezentare sub formă de șiruri de caractere.Acest aspect va fi discutat în următorul

subcapitol,și anume,conversia frecvențelor la șiruri de caractere.

2.4.Conversia frecvențelor la șiruri de caractere

Pentru a putea realiza o conversie de la o valoarea reală a unei frecvențe la

echivanlentul acesteia sub forma unui șir de caracter,se va analiza mai întîi diferența minimă

dintre notele dispuse pe o chitară.

Semitonul,prin definiție,este cel mai mic interval muzical folosit în notațiile uzuale ale

transcriptelor muzicale.Din motive istorice,transcriptele muzicale folosesc doar 12 note din

frecvențele fixe.Astfel,considerînd o gamă formată din 12 note,semitonul va fi intervalul

dintre două note adiacente ale gamei.

Mai mult,în spațiul frecvențial,dacă două note muzicale 𝑓1 și 𝑓2 sunt în raport de

semiton (i.e. 𝑓2 este cu un semiton mai înaltă decît 𝑓1),atunci relația dintre cele două frecvențe

va fi :

𝑓2 = 212

𝑓1 Hz (2.6)

Mai mult,relația dintre două note aleatoare,definite prin frecvențele aferente 𝑓1,respectiv

𝑓2 ,va fi :

Mocănașu Matei 2.Analiza segmentelor de semnal util

34

𝑓2 = 2𝑛12𝑓1 = 2

𝑛

12𝑓1 Hz (2.7)

, unde n este numărul de semitonuri între 𝑓1 și 𝑓2 , 𝑛 ≥ 1 , 𝑛𝜖𝑁

Din relația (2.7) se poate observa că dinstanța dintre două frecvențe va fi dublă în cazul

în care 𝑛 = 12.În acest caz se poate spune că cele două note sunt aflate la o distanță de o

octavă între ele.Mai mult,dacă 𝑛

12= 𝑘 , 𝑘𝜖𝑁∗ , atunci distanța dintre cele două note va fi de

k octave.

Din considerentele de mai sus,se poate extrage numărul de semitonuri dintre două

frecvențe 𝑓1 și 𝑓2 :

𝑛 = 12𝑙𝑜𝑔2(𝑓2

𝑓1) (2.8)

În cazul în care se va desemna o notă fixă și cunoscută,caracterizată prin frecvența 𝑓1

(de ex. 𝐶4 = 261.63 𝐻𝑧),pentru a putea găsi denumirea unei note caracterizare prin frecvența

𝑓2 , se va afla numărul de semitonuri dintre acestea și se va căuta într-o listă de tabele poziția

desemnată de n (considerînd că primul element din listă este chiar nota caracterizată prin

𝑓1).De exemplu,dacă 𝑓2 = 277𝐻𝑧,atunci :

𝑛 = 12𝑙𝑜𝑔2 𝑓2

𝑓1 = 12𝑙𝑜𝑔2

277

261.63 ≈ 12 ∗ 0.8 ≈ 0.98 ≈ 1

Astfel,se poate spune că 𝑓2 este la o distanță de un semiton față de 𝑓1 , cu 𝑓2 > 𝑓1

,așadar nota caracterizată prin 𝑓2 va fi 𝐶#4.

Analizînd ecuația (2.8),se poate observa că valoarea lui n poate fi atît pozitivă,cît și

negativă ( 𝑛𝜖𝑅 ).În primul caz,se poate spune că 𝑓2 are o frecvență mai mare ca 𝑓1,iar în cazul

în care n este negativ, 𝑓2 va avea frecvența inferioară 𝑓1.De asemenea,din relația de mai sus

se poate obține doar numărul de semitornuri dintre două frecvențe (note),însă notațiile

standard muzicale folosesc,după cum s-a mai amintit,doar 12 note într-o octavă.Așadar,o

frecvență va fi compusă din una din cele 12 note uzuale,precum și octava din care face parte

(exemple C3,A#4,D2 etc.).În anexă s-a atașat o captură ce cuprinde gama Do Major standard

(sau în denumirea din literatură,gama C3),precum și frecvențele asociate.

Un ultim aspect legat de conversia în discuție,este stabilirea octavei din care face o

anumită notă (sau frecvență).Avînd ecuația (2.8) pentru calculul numărului de semitonuri

dintre două frecvențe,se poate observa că dacă 𝑛 ≥ 12 , a doua frecvență va fi cel puțin la o

octavă distanță.Dacă notăm cu 𝑘1 octava curentă,impunînd totodată o frecvență inițială 𝑓1𝜖𝑘1

(cu 𝑘1𝜖𝑁∗) cunoscută,atunci se poate calcula octava 𝑘2 din care face parte o frecvență

𝑓2,cunoscînd numărul de semitonuri n dintre cele două frecvențe :

𝑘2 = 𝑘1 + [𝑛

12] (2.9)

Mocănașu Matei 2.Analiza segmentelor de semnal util

35

.unde prin [𝑛

12] s-a notat partea întreagă a raportului

𝑛

12 .

Se poate defini astfel algoritmul complet pentru a converti o frecvență f ,din

reprezentarea de la valoarea sa reală,la șirul de caractere ce caracterizează complet nota

aferentă.

Alg.2.3.Conversia unei frecvențe de la valoarea sa reală la șirul de caractere ce

caracterizează complet nota aferentă : dîndu-se o frecvență de intrare f (valoare reală),se va

genera și returna un șir de caracter 𝑓𝑟𝑒𝑐𝑣𝑠𝑡𝑟𝑖𝑛𝑔 care va conține atît nota aferentă,cît și gama

din care aceasta face parte

1. Se definesc :

𝐶4 = 261.63 , nota (i.e. frecvența de bază) cu care se va compara frecvența de intrare

𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 = 4 , numărul octavei din care face parte frecvența de bază

𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 = [] , vector NULL ce va reține temporar string-ul pentru numele notei

2. Se calculează numărul de semitonuri dintre intrare și frecvența de bază,se calculează

ocatava intrării și se actualizează valoarea octavei curente și a numărului de semitonuri

𝑠𝑒𝑚𝑖𝑡𝑜𝑛 = 𝑟𝑜𝑢𝑛𝑑 (12𝑙𝑜𝑔2𝑓

𝐶4)

𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 = 𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 + 𝑓𝑙𝑜𝑜𝑟(𝑠𝑒𝑚𝑖𝑡𝑜𝑛

12)

𝑠𝑒𝑚𝑖𝑡𝑜𝑛 = 𝑎𝑏𝑠 𝑠𝑒𝑚𝑖𝑡𝑜𝑛 − 12 ∗ 𝑠𝑖𝑔𝑛(𝑠𝑒𝑚𝑖𝑡𝑜𝑛)

3. Se verifică semnul valorii semiton și se aplică o operație de switch-case

Dacă 𝑠𝑒𝑚𝑖𝑡𝑜𝑛 ≥ 0 :

3.1. 𝑠𝑤𝑖𝑡𝑐𝑕 𝑠𝑒𝑚𝑖𝑡𝑜𝑛

𝑐𝑎𝑠𝑒 0 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 = ′𝐶 ′

𝑐𝑎𝑠𝑒 1 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 =′ 𝐶#′

...

𝑐𝑎𝑠𝑒 10 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 =′ 𝐴#′

𝑐𝑎𝑠𝑒 11 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 = ′𝐵′

Altfel :

3.2. 𝑠𝑤𝑖𝑡𝑐𝑕 𝑠𝑒𝑚𝑖𝑡𝑜𝑛

𝑐𝑎𝑠𝑒 0 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 = ′𝐶 ′

𝑐𝑎𝑠𝑒 1 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 =′ 𝐵′

...

𝑐𝑎𝑠𝑒 10 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 = ′𝐷′

𝑐𝑎𝑠𝑒 11 𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 =′ 𝐶#′

4. Se face conversia octavei curente de la întreg la șir de caractere și se completează vectorul

𝑓𝑟𝑒𝑐𝑣𝑠𝑡𝑟𝑖𝑛𝑔 cu frecvența temporară (string-ul notei) + octava asociată

Mocănașu Matei 2.Analiza segmentelor de semnal util

36

𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 = 𝑛𝑢𝑚2𝑠𝑡𝑟(𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 )

𝑓𝑟𝑒𝑐𝑣𝑠𝑡𝑟𝑖𝑛𝑔 = [𝑓𝑟𝑒𝑐𝑣𝑡𝑒𝑚𝑝 𝑜𝑐𝑡𝑎𝑣𝑎𝑐𝑢𝑟𝑒𝑛𝑡𝑎 ]

5. Se returnează 𝑓𝑟𝑒𝑐𝑣𝑠𝑡𝑟𝑖𝑛𝑔

Observații :

S-a preferat căutarea semitonului folosind o metodă de switch-case în favoarea

unei tabele de string-uri datorită simplității metodei

Pentru fiecare semn posibil al valorii semiton vor trebui desemnate cîte o metodă

de switch-case.Explicația provine de la faptul că dacă intrarea are frecvența sub

nota de bază,atunci căutarea va trebui făcută privind vectorul celor 12 note de la

coadă la cap (i.e. ordinea notelor va fi alta).

Algoritmul 2.3 a fost implementat în rutina Matlab frecv_la_string.m

Concluzionînd,acest capitol a tratat analiza spectrală a unor ferestre de semnal

util,generate prin metodele discutate în Capitlul 1.Pentru aceasta,s-a realizat generarea

spectrului în putere al ferestrelor,s-a prelucrat spectrul pentru a putea elimina componentele

frecvențiale parazite (supratonuri),s-au extras frecvențele fundamentale din spectrul prelucrat

folosind un sistem de thresholduri,iar ultimul pas al metodei a implicat conversia acestor

fundamentale de la valorile reale ale frecvențelor la un format sub forma unui șir de

caractere,ce conține informația completă care caracterizează nota asociată unei frecvențe.

Pentru testarea detecției fundamentalelor,s-au considerat mai multe semnale reale

provenite de la o chitară electrică,toate conținînd gama Do Major C4 (C4 – C5).S-a

experimentat cu o variație de moduri de a produce sunetele,variind poziția de atac al

corzilor,precum și obiectul cu care s-a realizat atacul (folosind degetul,precum și o pană).S-a

observat că în toate cazurile s-a reușit recunoașterea tuturor notelor,cu mici erori în cazurile în

care modul de producere al notelor a fost de așa natură încît armonicile au fost amplificate (se

poate realiza fizic acest fenomen prin atacul corzilor în anumite poziții de pe griff-ul

chitării).Erorile au cuprins în fiecare caz cîte o armonică în plus față de fundamentală (de ex.

Recunoașterea a unui tren de note de C4,C5 în locul unei singure note C4),însă aceste erori nu

sunt considerate majore,ele conținînd totuși fundamentalele.Astfel,dintr-un semnal cu un

număr total de 8 note,s-au recunoscut în unele cazuri 9-10 note,erorile fiind cauzate de

prezența unei armonici (a doua) atașate fundamentalei,supratonurile fiind complet rejectate.

Mocănașu Matei 2.Analiza segmentelor de semnal util

37

CAPITOLUL 3.STRUCTURA APLICAŢIEI

Acest capitol va prezenta succint modul de implementare al aplicației,evitînd analiza

codului din punctul de vedere al programării efective.Se vor prezenta doar aspectele

interesante ale implementării.

Aplicaţia a fost proiectată ţinînd cont de cerinţele sistemului,folosind cod

Matlab.Astfel,sistemul are un comportament similar unui automat pe stări (fiind descris de

stări de funcţionare),automatul avînd posibilitatea de a fi într-o singură stare la un moment

dat.Tranziţiile între stări sunt controlate atît de utilizator (prin comenzi),dar şi prin setarea

unor variabile speciale denumite flaguri (fie codificate binar,fie pe un număr mai mare de

biţi).Flag-urile au rolul de a transporta informaţie utilă privind starea sistemului sau al stării

unei operaţii de procesare,de exemplu.Utilizarea acestor variabile permite realizarea unui

comportament dorit al fluxului de operaţii.

În ceea ce priveşte variabilele de tip flag,acestea au fost codificate atît binar,cît şi pe un

număr mai mare de biţi,după cum umrează :

1. prog_state este o variabilă codificată pe 3 biţi ce stochează starea curentă a

sistemului :

𝑝𝑟𝑜𝑔_𝑠𝑡𝑎𝑡𝑒 =

0 , 𝑠𝑡𝑎𝑟𝑒 𝑖𝑑𝑙𝑒 𝑛𝑢 𝑠𝑒 𝑟𝑒𝑎𝑙𝑖𝑧𝑒𝑎𝑧ă 𝑛𝑖𝑐𝑖𝑜 𝑜𝑝𝑒𝑟𝑎ţ𝑖𝑒 1 , 𝑠𝑡𝑎𝑟𝑒 𝑑𝑒 î𝑛𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑟𝑒 𝑎𝑢𝑑𝑖𝑜 2 , 𝑠𝑡𝑎𝑟𝑒 𝑑𝑒 𝑠𝑢𝑠𝑝𝑒𝑛𝑑𝑎𝑟𝑒 𝑎𝑢𝑑𝑖𝑜 (𝑝𝑎𝑢𝑧ă î𝑛𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑟𝑒)

3 , 𝑠𝑡𝑎𝑟𝑒 𝑑𝑒 𝑝𝑟𝑒𝑙𝑢𝑐𝑟𝑎𝑟𝑒 𝑑𝑒 𝑑𝑎𝑡𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑟𝑒 4 , 𝑠𝑡𝑎𝑟𝑒 𝑑𝑒 𝑖𝑛𝑖ţ𝑖𝑎𝑙𝑖𝑧𝑎𝑟𝑒 5 , 𝑠𝑡𝑎𝑟𝑒 𝑑𝑒 𝑟𝑒𝑑𝑎𝑟𝑒 𝑎𝑢𝑑𝑖𝑜

2. flag_init este o variabilă codificată pe 3 biți care indică dacă inițializarea

sistemului a fost efectuată

𝑓𝑙𝑎𝑔_𝑖𝑛𝑖𝑡 =

0 , 𝑖𝑛𝑖ț𝑖𝑎𝑙𝑖𝑧𝑎𝑟𝑒 𝑒ș𝑢𝑎𝑡ă 1 , 𝑖𝑛𝑖ț𝑖𝑎𝑙𝑖𝑧𝑎𝑟𝑒 𝑟𝑒𝑢ș𝑖𝑡ă 2 , 𝑖𝑛𝑖ț𝑖𝑎𝑙𝑖𝑧𝑎𝑟𝑒 𝑛𝑒𝑒𝑓𝑒𝑐𝑡𝑢𝑎𝑡ă

3. flag_date este o variabilă binară care indică dacă există date înregistrate

𝑓𝑙𝑎𝑔_𝑑𝑎𝑡𝑒 = 0 ,𝑛𝑢 𝑒𝑥𝑠𝑖𝑡ă 𝑑𝑎𝑡𝑒 î𝑛𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑡𝑒1 , 𝑒𝑥𝑖𝑠𝑡ă 𝑑𝑎𝑡𝑒 î𝑛𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑡𝑒

Mocănașu Matei 2.Analiza segmentelor de semnal util

38

4. flag_procesare este o variabilă binară ce indică dacă există date prelucrate

𝑓𝑙𝑎𝑔_𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑟𝑒 = 0 ,𝑛𝑢 𝑒𝑥𝑠𝑖𝑡ă 𝑑𝑎𝑡𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑡𝑒1 , 𝑒𝑥𝑖𝑠𝑡ă 𝑑𝑎𝑡𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑎𝑡𝑒

5. flag_zgomot este o variabilă binară ce indică dacă semnalul înregistrat conține

doar zgomot

𝑓𝑙𝑎𝑔_𝑧𝑔𝑜𝑚𝑜𝑡 = 0 , 𝑠𝑒𝑚𝑛𝑎𝑙𝑢𝑙 𝑐𝑢𝑝𝑟𝑖𝑛𝑑𝑒 𝑑𝑜𝑎𝑟 𝑧𝑔𝑜𝑚𝑜𝑡 1 , 𝑠𝑒𝑚𝑛𝑎𝑙𝑢𝑙 𝑐𝑢𝑝𝑟𝑖𝑛𝑑 𝑠𝑒𝑔𝑚𝑒𝑛𝑡𝑒 𝑢𝑡𝑖𝑙𝑒

Lansarea aplicaţiei se va face prin runtina main.m care are rolul de a elibera din

memorie atît variabile,cît şi obiectele de tip grafic.Tot aici se eliberează şi linia de comandă şi

se apelează interfata.m,rutina principală al aplicaţiei.Interfata.m are rolul de a crea toate

obiectele necesare interfeţei grafice,precum şi de a apela toate funcţiile aferente la întîlnirea

evenimentelor (sau în alte cuvinte,ale comenzilor date de către utilizator).Fig.3.1. ilustrează

sumar apelurile funcţiilor începînd cu lansarea aplicaţiilor.

Fig.3.1.Diagrama pentru apelurile rutinelor sistemului,în funcţie de flag-urile de control

(diagramă detaliată doar pentru rutina de inițializare)

Observaţii :

Diagrama prezentată în Fig.3.1. conţine doar detalii privind funcţia de iniţializare

Ini_b_Callback pentru a face diagrama cît mai simplu de înteles.Celelalte rutine de

tip callback (rutine de tratare a evenimentelor) funcţionează după principii similare

(cel puţin din punctul de vedere al tratărilor variabilelor de tip flag)

Mocănașu Matei 2.Analiza segmentelor de semnal util

39

Diagrama conţine doar apelurile rutinelor de tratare al evenimentelor generate de

utilizator (de ex. Apăsarea butonului de redare audio) relative la flag-uri.S-a dorit

astfel demonstrarea utilităţii acestor variabile pentru fluxul de control al aplicaţiei

Prin intermediul variabilelor de tip flag s-a realizat un control dorit al aplicaţiei,precum

şi evitarea problemelor de procesări ale datelor stocate anterior.Mai detaliat,fiecare apel de

funcţie callback va fi dependentă de anumite date prezente în sistem (de ex. Nu se poate

realiza procesare de semnal dacă sistemul nu a înregistrat semnal audio,nu se poate afişa o

partitură dacă nu s-a realizat procesarea de semnal etc.).Se poate observa acest aspect și din

Fig.3.1,unde lansarea funcției de inițializare este condiționată de două flag-uri,și anume,de cel

care indică starea sistemului (prog_state : nu se poate apela inițializarea dacă starea sistemului

ese diferită de idle) și de flag-ul propriu-zis de inițializare (flag_init : nu se poate apela

inițializarea dacă aceasta a fost deja realizată în rularea curentă a aplicației).Acest lucru se

extinde și la celelalte rutine,unde apelurile vor fi condiționate de flag-urile asociate.

Dacă în cele prezentate anterior s-a discutat despre apelurile rutinelor din punctual de

vedere al variabilelor de tip flag,un ultim aspect al acestui capitol este discuția asupra celei

mai importante rutine,și anume rutina de procesare.Aceasta cuprinde implementarea tuturor

algoritmilor și metodelor discutate în capitolele anterioare,iar motivul pentru care aceasta

necesită o explicare succintă în favoarea celorlalte rutine,este că aceasta are la rîndul său

apelul mai multor funcții care realizează separat anumite operații,fiecare avînd argumente I/O

(intrare/ieșire) diferite.

Așadar,rutina de procesare,denumită în codul sursă start_procesare.m va fi apelată din

rutina interfeței grafice (interfata.m) atunci cînd se identifică un eveniment corespondent

apăsării butonului de procesare (astfel,se va apela rutina callback

asociată,Process_b_Callback,care va realiza apelul rutinei principale de procesare din

discuție).Fig.3.2. ilustreză sumar fluxul apelurilor din cadrul acestei rutine.

Fig.3.2.Fluxul apelurilor subrutinelor din cadrul funcţiei start_procesare.m

Mocănașu Matei 2.Analiza segmentelor de semnal util

40

La apelul funcţiei în discuţie,se va genera vectorul de date dataB ,a frecvenţei de

eşantionare asociate fs (ambele generări fiind realizate prin citirea din fişierul .wav în care

semnlul audio a fost înregistrat),precum şi aplicarea filtrului Gaussian (definit în Cap.1.2.)

asupra semnalului de intrare,generînd semnalul filtrat dataB_filtrat.Următorul pas este de a

apela subrutina detectie_even_note(dataB_filtrat) care implementează algortimul descris în

Cap1.3.Tot în această subrutină se va calcula și raportul semnal-zgomot SNR,acest flag

condiționînd realizarea procesării (dacă acest flag va fi setat cu 0,atunci funcția de procesare

va realiza return).Subrutina va returna vectorii ce conțin informațiile referitoare la segmentele

de semnal util (începuturile/sfîrșiturile acestora).Astfel,se vor crea ferestrele de semnal util.

Apelul subrutinei detectie_frecv() este realizat după ce s-a detectat return din

detectie_even_note, flag-ul de zgomot fiind setat pe 1.Această subrutină realizează

implementarea întregii analize spectrale discutată în Cap.2.2-Cap.2.3. (va genera spectrul

ferestrelor de semnal util,se va aplica operația de subeșantionare asupra lor și se va analiza

rezultatul,generînd vectorul de frecvențe fundamentale asociat).

Avînd astfel vectorul de frecvențe fundamentale,se va apela subrutina

frecvB_la_string(),care va realiza conversia frecvențelor la șirurile de caractere echivalente

(conversie discutată în Cap.2.4.).

Ultimul pas al părții de procesare este realizarea scrierii partiturii în fișierul .txt

asociat.Aceasta se face prin apelul funcției scrie_partitura().De notat,că pentru scrierea

partiturii,care este ultimul pas din procesare,este nevoie atît de frecvențele sub formă de șiruri

de caractere,cît și de informațiile temporale ale acestora.Funcția de procesare va realiza return

atunci cînd scrierea în fișierul .txt a fost realizată,atenționînd totodată și utilizatorul prin

intermediul interfeței că prelucrarea s-a încheiat cu succes.

Rezultatul final (interfața grafică) va cuprinde obiecte de tip buton (pentru operațiile de

inițializare,înregistrare/pauză/continuare înregistrare,stop înregistrare,redare audio și afișare

partitură),un obiect de tip grafic (pentru afișarea graficelor de interes),precum și un obiect de

tip text display (pentru a afișa starea curentă a sistemului).S-a atașat în anexă și o captură de

ecran care cuprinde interfața grafică în timpul utilizării.

Se va face și o scurtă precizare asupra modului de stocare al semnalului audio

înregistrat.În momentul în care se detectează un eveniment corespondent cu apăsarea

butonului de oprire a înregistrării audio,sistemul va scrie datele înregistrate într-un fișier .vaw

denumit inregistrare.wav.Acest fișier va fi suprascris de fiecare dată cînd se va apăsa butonul

de stop.Aceași metodă a fost folosită și în cazul scrierii partiturii în fișierul partitura.txt,acest

fișier fiind suprascris la fiecare apăsare a butonului de afișare a partiturii.

Mocănașu Matei 2.Analiza segmentelor de semnal util

41

CAPITOLUL 4. CONCLUZII. PERSPECTIVE DE CONTINUARE A CERCETĂRII

4.1.Concluzii

Proiectarea unui sistem de recunoaștere automată a informațiilor utile dintr-un semnal

audio,în scopul generării partiturii aferente,este în general problematică în cazul în care

semnalul audio provine de la un instrument real.Probleme se ridică atît pe partea detecției

segmentelor de semnal util (sau a segmentelor care conțin note muzicale),cît și pe partea de

analiză spectrală.În comparație cu un semnal produs digital,semnalul real va prezenta anumite

caracteristici specifice instrumentului muzical folosit.Fiecare instrument va avea un timbru

specific (frecvențele fundamentale vor fi însoțite de supratonuri specifice),fapt care necesită

analiza spectrală a sunetelor produse de fiecare instrument.Mai mult,în funcție de cum sunt

produse notele,anvelopele semnalului pot fi diferite pentru instrumente precum chitară sau

vioară.Astfel,vor trebui adoptați algoritmi speciali de recunoaștere al segmentelor de semnal

util pentru un anume instrument,în funcție de anvelopa semnalului.

Totodată,proiectarea implică respectarea cerințelor de funcționare ale

sistemului.Acestea vor necesita optimizarea timpilor de execuție al algoritmilor,așadar,vor

trebui evitate procesările segmentelor de semnal fără informații (segmentele de zgomot

pur).De asemenea,sistemul trebuie să permită funcții specifice înregistrării audio

(start,pauză,stop,redare),precum și funcții care ilustrează prelucrările realizate asupra

semnalului.

În ceea ce privește implementarea propriu-zisă,este necesară o structurare adecvată a

programului,prin introducerea de variabile care să poată condiționa apelurile de rutine ale

sistemului.Mai mult,manipularea datelor poate deveni dificilă în unele cazuri,drept urmare o

structurare a datelor de lucru cît mai limpede este necesară,în special pentru cazul în care

rutinele folosesc un număr considerabil de parametri I/O.Un aspect important aici este

utilizarea variabilelor locale,care pot fi suprascrise și reinițializate.

Lucrarea poate servi drept punct de plecare pentru posibile proiecte viitoare,aspect

discutat în ultimul subcapitol al acestei lucrări,și anume,cel de perspective de continuare a

cercetării.

Mocănașu Matei 2.Analiza segmentelor de semnal util

42

4.2.Perspective de continuare a cercetării

S-a mai amintit că anumiți algoritmi vor trebui definiți specific pentru un instrument

anume (de ex. Algoritmul de detecție al segmentelor de semnal util a fost proiectat în

concordanță cu anvelopa unui semnal de chitară).Un prim punct de plecare ar fi studiul

semnalelor provenite de la un set de instrumente diferite (de ex.vioară,pian,vocea umană) și

contopirea acestora în același sistem de extragere a partiturii.Aspectul care va trebui luat în

considerare ar fi recunoașterea inițială a tipului de instrument de la care provine semnalul

audio,astfel încît sistemul va folosi algoritmii adecvați semnalului respectiv.

O altă propunere de cercetare ar fi extinderea analizei asupra vocii umane.Vocea umană

reprezintă poate cel mai mare interes din domeniul analizei semnalelor audio,deoarece

reprezintă cel mai neechilibrat semnal.Dacă în cazul unei chitări notele muzicale sunt dispuse

pe gîtul chitării sub scară logaritmică,vocea umană nu va putea produce în toate cazurile

frecvențele dorite.Astfel,prin recunoașterea fundamentalelor,precum și a componentelor

temporale asociate,se pot proiecta sisteme de tuning al vocei umane,în cazul în care se

detectează frecvențe apropiate de ceea ce s-ar dori să fie fundamentalele unor note muzicale.

Un alt punct de plecare ar putea fi studiul asupra comportamentului anumitor animale

care prezintă un spectru frecvențial suficient de bogat.Anumite animale,de exemplu

păsările,au un spectru mult superior față de alte vietăți,așadar o extracție de informații dintr-o

înregistrare cu sunetele produse de o pasăre ar putea fi asociate cu un anumit comportament

(cel puțin plecînd de la ipoteza că păsările comunică atît prin sunete,cît și prin limbajul

corpului).

O ultimă temă de cercetare ar putea fi reprezentată de extinderea sistemului deja

implementat pentru generarea de partituri provenite de la o sursă polifonică.Această temă

implică atît recunoașterea caracteristicilor fiecărui instrument în parte (prima temă de

cercetare propusă),cît și o metodă de separare a semnalelor provenite de la fiecare instrument

în parte.Acesta este probabil unul dintre cele mai recente teme de cercetare,care încă sunt în

curs de desfășurare.

Mocănașu Matei 2.Analiza segmentelor de semnal util

43

ANEXE

Privire de ansamblu asupra aplicației : graficul unui semnal audio înregistrat

Privire de ansamblu asupra aplicației : graficul unui semnal audio împreună cu

semnalul filtrat

Mocănașu Matei 2.Analiza segmentelor de semnal util

44

Privire de ansamblu asupra aplicației : detecția segmentelor de semnal util

Obiectele de control de tip buton ale aplicației

Obiectele de tip listă pentru selectarea graficului dorit

Mocănașu Matei 2.Analiza segmentelor de semnal util

45

Obiectul de tip display text pentru afișarea stării curente (sau al ultimei operații) ale

sistemului

Exemplu de tip de eroare (generat prin încercarea de a realiza procesarea semnalului

în timp ce starea sistemului este de înregistrare audio)

Eroare generată în cazul în care semnalul înregistrat conține doar zgomot

Mocănașu Matei 2.Analiza segmentelor de semnal util

46

Exemplu de partitură generată

Mocănașu Matei 2.Analiza segmentelor de semnal util

47

Tabela frecvențială pentru gama C3 (notele gamei cuprinse între C3 – C4)

48

BIBLIOGRAFIE

[1] Giovanni Costantini,Renzo Perfetti 2009. Event based transcription system for

polyphonic piano music,Journal of Signal Processing,p1-2

[2],[3]

Juan Pablo Bello,Laurent Daudet 2005,A tutorial on Onset Detection in Music

Signals,IEEE Transactions on Speech and Audio Processing,p1

[4]

Dave Hale,Recursive Gaussian Filters,p1

[5]

Wikipedia,Standard deviation diagram

[6]

Steven W. Smith,The Scientist and Engineer’s Guide to Digital Signal

Processing,Digital version,Ch.12 : The Fast Fourier Transform

Standford Edu,Introducion to Digital Filters,https://ccrma.stanford.edu/~jos/filters/

Oppenheim A.V 1996. Sygnals and Systems.Second Edition , Prentice Hall

Petrescu Cătălin 2011,Prelucrarea semnalelor : breviar teoretic,notiţe de curs


Recommended