Teza doctorat (pdf) - Universitatea Tehnică

Teza doctorat (pdf) - Universitatea Tehnică Teza doctorat (pdf) - Universitatea Tehnică

users.utcluj.ro
from users.utcluj.ro More from this publisher
15.06.2013 Views

110 Cap. 4. Analiza semnalului vocal acestuia, după o filtrare mediană a semnalului, se calculează cu algoritmul ZeroMinMax (prezentat în paragraful 4.4.1) punctele de zero, minim şi maxim din semnalul sonor. Apoi se ia eşantionul din semnal care are amplitudinea cea mai mare dintre punctele de maxim, pe o distanţă D de la începutul segmentului considerat. Acesta este punctul pivot. Apoi se încearcă estimarea perioadei actuale a semnalului în jurul punctului pivot. Pentru aceasta se determină punctele din vecinătatea stânga şi dreapta a punctului pivot care au amplitudinea comparabilă cu acesta. Prin medierea distanţelor între aceste două puncte şi punctul pivot central se obţine estimarea iniţială a perioadei. În pasul al treilea se determină toate maximele de perioadă, pornind de la punctul pivot către stânga, respectiv către dreapta. Un maxim de perioadă se determină astfel: ştiindu-se că distanţa faţă de punctul anterior este egală cu perioada estimată, se găseşte punctul de maxim local care se află la distanţa minimă faţă de această poziţie. Dacă la o anumită iteraţie nu se găseşte un punct de maxim care să se găsească în poziţia preconizată, fie din cauza depăşirii perioadei admise, fie din cauza amplitudinii mici de semnal, următorul punct de maxim local se marchează ca hiatus de perioadă – în primul caz, respectiv ca hiatus de amplitudine – în cel de-al doilea. În final, în pasul patru, după determinarea tuturor punctelor de maxim de perioadă, se calculează punctele de capăt ale intervalelor de perioadă. Punctul de start al fiecărui interval se ia ca fiind primul punct de zero care precede maximul de perioadă corespunzător. Astfel fiecare interval de perioadă începe la punctul său de zero iniţial şi durează până la punctul iniţial al intervalului următor. Algoritmul Determina_Perioade : P1. Pe segmentul considerat se determină punctul pivot. P2. Se determină perioada iniţială prin găsirea punctelor de amplitudine comparabilă cu pivotul în stânga şi dreapta sa. P3. Se determină maximele de perioadă : a) între poziţia de start a segmentului şi poziţia pivotului; b) între poziţia pivotului şi poziţia de sfârşit a segmentului. Dacă în acest pas se gaseşte un punct de hiatus, atunci se apelează recursiv algoritmul între poziţia de hiatus şi poziţia finală. P4. Se marchează intervalele de perioadă prin găsirea punctelor de zero ce preced maximele de perioadă. Din descrierea algoritmului global în pseudocod reiese modul cum se apelează procedurile corespunzătoare celor 4 etape : DeterminaPerioade(poz_start, poz_stop, perioada) // Calculeaza maximele de perioadă pentru un segment sonor // La inceput perioada =0 { // P1. Determinarea punctului pivot: pivot=DeterminaPivot(poz_start, poz_stop, poz_pivot);

P2. Estimarea perioadei: if(perioada==0.) EstimarePerioada(poz_pivot,poz_start,poz_stop,perioada); // P3a. Determinarea maximelor de perioadă // între poziţia de start a segmentului şi poziţia pivotului perioada1=perioada; complet=DeterminaMaximePerioade(poz_pivot,poz_start,perioada1,poz_hiat); if(!complet) { if(DurationIndex(poz_hiat,poz_start) > 45 /* ms */) perioada1=0; // se recalculează şi perioada DeterminaPerioade(poz_start,poz_hiat,perioada1); } // P3b. Determinarea maximelor de perioadă // între poziţia pivotului şi poziţia de sfârşit a segmentului perioada2=perioada; complet=DeterminaMaximePerioade(poz_pivot,poz_stop,perioada2,poz_hiat); if(!complet) { if(DurationIndex(poz_stop,poz_hiat) > 45) perioada2=0; // se recalculează şi perioada DeterminaPerioade(poz_hiat,poz_stop,perioada2); } // P4. Marcarea intervalelor de perioadă: MarcarePerioade(poz_start, poz_stop); } 4.6.1.1. Determinarea pivotului 111 Cap. 4. Analiza semnalului vocal Punctul pivot reprezintă punctul de referinţă în funcţie de care se vor calcula toate celelalte puncte de maxim de perioadă. Pentru determinarea acestuia, după o filtrare mediană a semnalului, se calculează cu algoritmul ZeroMinMax punctele de zero, minim şi maxim din semnalul sonor. Apoi se ia eşantionul din semnal care are amplitudinea cea mai mare dintre punctele de maxim, pe o distanţă D de la începutul segmentului considerat. Acesta este punctul de start: punctul pivot. Mk(i) D PIV Figura 4.43. Determinarea punctului pivot

110<br />

Cap. 4. Analiza semnalului vocal<br />

acestuia, după o filtrare mediană a semnalului, se calculează cu algoritmul ZeroMinMax<br />

(prezentat în paragraful 4.4.1) punctele de zero, minim şi maxim din semnalul sonor. Apoi se ia<br />

eşantionul din semnal care are amplitudinea cea mai mare dintre punctele de maxim, pe o<br />

distanţă D de la începutul segmentului considerat. Acesta este punctul pivot.<br />

Apoi se încearcă estimarea perioadei actuale a semnalului în jurul punctului pivot. Pentru<br />

aceasta se determină punctele din vecinătatea stânga şi dreapta a punctului pivot care au<br />

amplitudinea comparabilă cu acesta. Prin medierea distanţelor între aceste două puncte şi punctul<br />

pivot central se obţine estimarea iniţială a perioadei.<br />

În pasul al treilea se determină toate maximele de perioadă, pornind de la punctul pivot<br />

către stânga, respectiv către dreapta. Un maxim de perioadă se determină astfel: ştiindu-se că<br />

distanţa faţă de punctul anterior este egală cu perioada estimată, se găseşte punctul de maxim<br />

local care se află la distanţa minimă faţă de această poziţie.<br />

Dacă la o anumită iteraţie nu se găseşte un punct de maxim care să se găsească în poziţia<br />

preconizată, fie din cauza depăşirii perioadei admise, fie din cauza amplitudinii mici de semnal,<br />

următorul punct de maxim local se marchează ca hiatus de perioadă – în primul caz, respectiv ca<br />

hiatus de amplitudine – în cel de-al doilea.<br />

În final, în pasul patru, după determinarea tuturor punctelor de maxim de perioadă, se<br />

calculează punctele de capăt ale intervalelor de perioadă. Punctul de start al fiecărui interval se ia<br />

ca fiind primul punct de zero care precede maximul de perioadă corespunzător. Astfel fiecare<br />

interval de perioadă începe la punctul său de zero iniţial şi durează până la punctul iniţial al<br />

intervalului următor.<br />

Algoritmul Determina_Perioade :<br />

P1. Pe segmentul considerat se determină punctul pivot.<br />

P2. Se determină perioada iniţială prin găsirea punctelor de amplitudine<br />

comparabilă cu pivotul în stânga şi dreapta sa.<br />

P3. Se determină maximele de perioadă :<br />

a) între poziţia de start a segmentului şi poziţia pivotului;<br />

b) între poziţia pivotului şi poziţia de sfârşit a segmentului.<br />

Dacă în acest pas se gaseşte un punct de hiatus, atunci se apelează<br />

recursiv algoritmul între poziţia de hiatus şi poziţia finală.<br />

P4. Se marchează intervalele de perioadă prin găsirea punctelor de zero<br />

ce preced maximele de perioadă.<br />

Din descrierea algoritmului global în pseudocod reiese modul cum se apelează<br />

procedurile corespunzătoare celor 4 etape :<br />

DeterminaPerioade(poz_start, poz_stop, perioada)<br />

// Calculeaza maximele de perioadă pentru un segment sonor<br />

// La inceput perioada =0<br />

{<br />

// P1. Determinarea punctului pivot:<br />

pivot=DeterminaPivot(poz_start, poz_stop, poz_pivot);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!