Post on 30-Aug-2019
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
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