Comanda Vocala Pentru Aplicatii Domotice

Comanda vocala pentru aplicatii domotice

realizata in LabVIEW

Lista acronime:

Introducere

Procesarea vorbirii este un domeniu care a evoluat mult in ultimii ani pe plan internațional. Dacă in urmă cu câțiva ani se făceau progrese în ceea ce privește găsirea unor noi metode și tehnici de prelucrare a semnalului vocal, acum accentul se pune pe integrarea acestor metode performante în sisteme dedicate unor categorii diverse de utilizatori [Vei04].

Odată cu creșterea performanțelor sistemelor de calcul, utilizatorii au acum la îndemână o gamă largă de aplicații pornind de la dictare automată și introducerea de date cu ajutorul vocii, până la servicii interactive de tip cerere-răspuns care solicită un dialog vocal între calculator și operatorul uman. De asemenea aplicațiile dedicate persoanelor cu handicap sau deficiențe de vedere sau vorbire sunt tot mai solicitate, pentru ca și aceste persoane să beneficieze de o integrare socială cât mai apropiată de standardele la care se situează ceilalți membrii ai societății [Ram05], [Wal01].

Procesarea vorbirii cuprinde două domenii distincte de abordare : recunoașterea vocii, respectiv sinteza vocală.

Recunoașterea vorbirii (speech-to-text) este procesul de identificare a cuvintelor și de ințelegere a mesajului interlocutorului uman. Acest proces implică următoarele etape: captura și digitizarea semnalului vocal, scindarea acestuia in unități sonore, apoi construirea cuvintelor din aceste unități, și trimiterea spre aplicație a textului recunoscut [Tod05].

Arhitectura software utilizată in aplicațiile de recunoastere a vorbirii cuprinde doua componente: componenta acustică și cea lingvistică. Modulul acustic analizeaza sunetele vocii, elimină zgomotul de fond, reduce datele la un spectru de frecvente si apoi convertește sunetele in foneme (elementele de baza ale vorbirii). Modulul lingvistic analizează conținutul vorbirii si compară combinațiile de foneme cu cuvintele dintr-un vocabular și decide apoi care a fost propozitia sau comanda rostita de vorbitor.

Recunoașterea vorbirii este realizată de o componentă software numită motor de recunoaștere a vorbirii (Speech Recognition Engine SRE). Motoarele de recunoastere a vorbirii suportă două moduri de lucru: dictarea, in care utilizatorul introduce date vorbind direct spre computer, și comanda sau controlul, in care utilizatorul transmite comenzi prin vorbire.

Programele ce suportă dictarea permit introducerea rapoartelor, referatelor si mesajelor e-mail prin intermediul vocii [Ram05]. Posibilitatea de a recunoaste un anumit cuvant este limitata de dimensiunea dicționarului incorporat. Majoritatea motoarelor de recunoastere care suporăa dictarea sunt dependente de vorbitor, deoarece acuratetea variaza cu trăsăturile vocii, cum ar fi timbrul si accentul. Pentru a mari acuratețea recunoașterii, sunt create baze de date numite profile de vorbitor, care stochează modelul de vorbire al fiecărui utilizator.

In cazul programelor de comandă și control, dictionarul este limitat la lista de comenzi disponibile, fapt care crește performanța aplicațiilor și scade necesarul de putere de calcul din partea sistemului. In plus, aceste tipuri de programe sunt independente de vorbitor și nu necesită sesiuni de training [Ram05].

Actualmente accentul se pune pe realizarea unor noi algoritmi care să permită recunoașterea continuă a vocii, adica recunoasterea cuvintelor si frazelor rostite de catre interlocutorul uman in condiții naturale, nerestricționate de un anumit dictionar sau vocabular. Dintre metodele recent utilizate amintim : detecția rapidă a momentelor de pauza sau rostire ; recunoașterea bazată pe dictionare de corespondenta intre unitatile fonematice și unitățile acustice ; metode de predicție a cuvintelor rostite.

Sinteza de voce este procesul invers recunoașterii vorbirii și constă in recompunerea vocii de către sistemul de calcul. Sinteza de voce este strins legată de procesul conversiei unui text in limbaj vorbit, numit text-to-speech. In cadrul acestui proces, are loc o analiză lingvistică a textului pentru a-l separa in unități lexicale (cuvinte, silabe și foneme), apoi unitățile lexicale sunt convertite in semnale sonore care sunt combinate in final pentru a genera vorbirea continua [Wou00],[Mob00].

Astăzi se folosesc noi metode pentru sinteza de voce, care să asigure o calitate cât mai bună a sintezei, calitate apropiata de vorbirea naturala. Metodele cele mai utilizate se bazează pe principiul PSOLA (Pitch Synchronous Overlap and Add), in care procesarea vorbirii se realizează in domeniul timp [Hos00], [Tat05], [Tro02] sau metode bazate pe corpus, care folosesc cantități mari de date achiziționate in urma rostirii naturale a unui text [Mob00].

Capitolul 1. Introducere in recunoasterea vocala

“There is nothing more practical than a good theory”

—Gustav Robert Kirchhoff

Semnalul vocal

Cand sunt produse sunetele vocale, fluxul de aer din plamani trece in prima faza prin glota apoi prin trahee repsectiv gura. In functie de tipul de sunet articulat, sunetul vocal poate si excitat in trei moduri:

Excitatie vocala – glota este inchisa. Presiunea aerului forteaza inchiderea si deschiderea periodica a glotei, ceea ce genereaza un tren de impulsuri. Aceasta „frecventa fundamentala” de obicei se intinde in intervalul 80Hz-350Hz.

Excitatie nevocala – glota este deschisa iar aerul traverseaza un spatiu ingust prin trahee si gura. Acesta rezulta intr-o turbulenta ce genereaza un semnal zgomotos. Forma spectrala a semnalului zgomotos este data de pozitia zonei inguste.

Excitatie tranzitorie – o inchidere a traheeei sau a cavitatii bucale va duce la cresterea presiunii aerului iar deschiderea brusca va duce la scaderea imediata a presiunii. Se creeaza ceea ce se numeste „explozie oclusiva”.

Combinarea acestor trei tipuri de excitație duce la crearea semnalelor vocale. Forma spectrală a acestor semnale este determinată de forma tractului vocal. Prin schimbare formei tractului vocal se poate modifica și forma spectrală a semnalului vocal ceea ce duce la articularea diferitelor sunete vocale.

Caracteristici tehnice ale semnalului vocal

Lățimea de bandă – se poate afirma că banda unui semnal vocal este de 4kHz. In realitate, pentru consoanele fricative se regasește o cantitate semnificativă de energie in spectru pentru frecvențe inalte și chiar și pentru ultrasunete.Cu toate astea, in telecomunicații s-a ales filtrarea semnalului peste pragul de 4 kHz deoarece in această plajă de frecvențe se regăsesc toate informațiile necesare pentru reconstrucția semnalului sa astfel incât vocea umană să poată fi ințeleasă.

Frecvența fundamentală – in urma excitației vocale rezultă un puls de trenuri, numite frecvență fundamentală(semnalul este periodic cu o frecvență cuprinsă intre 80 Hz – 350 Hz). Excitația vocală este folosită pentru articularea vocale și unele consoane. Pentru fricative, excitația nevocală este utilizată. In aceste cazuri nici-o frecvență fundamentală nu poate fi determinată.

Anvelopa spectrului de putere scade odată cu creșterea frecvenței – pulsul secvenței din glotă are un spectru de putere ce decrește spre frecvențte inalte cu -12dB pe octava. Emisia caracteristică buzelor are o caratcteristică trece-sus cu +6dB pe octavă. Acestea duc la o scădere generala de -6dB pe octavă.

Metode de analiză a semnalului vocal

Ținând cont că semnalul vocal este cvasistaționar pe segmente scurte de timp, adică își păstrează proprietățile nealterate pe parcursul fiecărui interval, metodele actuale de prelucrare a semnalului vocal folosesc așa-numita analiză pe termen scurt. Pentru a aborda această modalitate de analiză, semnalul vocal este împărțit în segmente cu lungimea de 10-30 ms, pe parcursul cărora semnalul se consideră staționar.

Extragerea informației din cadrul segmentelor de timp se face folosind o funcție fereastră, care are rolul de ponderare a parametrilor semnalului cu accentuarea valorilor corespunzătoare eșantioanelor din centrului ferestrei (segmentului considerat) și diminuarea celor corespunzătoare marginilor ferestrei. Aceasta se face în scopul obținerii unei estimări netezite a parametrilor, care să permită trecerea fină de la o secvență de parametrii la următoarea, corespunzător segmentelor de semnal considerate. Ϊn același scop se folosește și intercalarea segmentelor pe axa timpului, în acest caz începutul unui segment suprapunându-se peste sfârșitul segmentului anterior. Acest tip de analiză se numește analiză cu fereastră glisantă [Lup04].

Funcțiile fereastră cele mai uzuale sunt : fereastra Hamming, Hanning, fereastra cosinus. Aceste funcții au o formă gaussiană (prezentată în figura 1.1) pentru a asigura ponderarea valorilor centrată pe mijlocul ferestrei.

Figura 1.1 Funcție fereastră utilizată în ponderare

Mai departe, analiza semnalului vocal poate fi făcută în două moduri, ținând cont de domeniul de analiză: în domeniul timp și în domeniul frecvență. Analiza în domeniul timp presupune determinarea proprietăților semnalului vocal din studierea formei de undă a semnalului, privită ca variația valorilor eșantioanelor vocale în funcție de timp. Analiza în domeniul frecvență presupune determinarea spectrului de frecvențe a semnalului și determinarea parametrilor doriți pe baza formei spectrale.

2.2.1. Analiza în domeniul timp a semnalului vocal

Prin analizarea directă a formei de undă a semnalului se pot extrage următorii parametrii: amplitudinea maximă și medie, energia semnalului vocal, numărul trecerilor prin zero și frecvența fundamentală.

Amplitudinea semnalului ne dă informații despre prezența sau absența semnalului vocal, despre faptul că semnalul este sonor sau nesonor pe segmentul considerat. Ϊn cazul sonor (rostirea unor sunete vocalice) amplitudinea este mare, pe când în cazul sunetelor nesonore (zgomote, rostire de consoane) amplitudinea este redusă.

Amplitudinea medie pentru N eșantioane se calculează astfel [Pic93]:

, (2.7)

unde: x(m) este eșantionul curent al semnalului vocal, iar

w(n-m) este fereastra utilizată în segmentul considerat.

Energia semnalului este utilă în determinarea caracteristicilor de putere transportată a semnalului vocal. Pentru un semnal cu valoare medie nulă, energia pe termen scurt se definește astfel [Lup04]:

. (2.8)

Segmentele sonore (vocalele) au o energie medie ridicată, pe când consoanele au energie scăzută. Pentru majoritatea fonemelor, energia se concentrează în banda de frecvențe între 300 și 3000 Hz.

Numărul trecerilor prin zero este util pentru determinarea caracteristicilor de frecvență în interiorul unui segment de timp. Numărul trecerilor prin zero se calculează astfel [Pic93]:

, (2.9)

unde sgn(n) este funcția semn:

. (2.10)

Numărul trecerilor prin zero este o caracteristică ce se folosește în recunoașterea vorbirii, precum și în determinarea caracterului sonor/nesonor. Ϊn interiorul segmentelor sonore numărul trecerilor prin zero este mai redus, în timp ce în segmentele nesonore acest parametru este mai ridicat.

Frecvența fundamentală este un parametru deosebit de important folosit atât în sinteza cât și în recunoașterea vorbirii. Frecvența fundamentală corespunde cu periodicitatea semnalului vocal. Determinarea acestui parametru nu se poate face întotdeauna cu exactitate, din cauza variabilități semnalului vocal chiar pe porțiuni scurte de timp. Rostirea vocalelor prezintă o frecvență fundamentală ce poate fi determinată, pe când consoanele, care sunt rostiri neperiodice, nu au frecvență fundamentală.

Dintre metodele uzuale de determinare a frecvenței fundamentale a semnalului vocal amintim următoarele:

A. Metoda autocorelației

Metoda se bazează pe calculul funcției de autocorelație a semnalului vocal, care ne dă informații despre interdependența temporală a eșantioanelor. Funcția de autocorelație se definește astfel [Sto84]:

. (2.11)

unde x(n) este valoarea eșantionului de semnal, iar

w(m) este funcția fereastră utilizată.

Funcția de autocorelație prezintă maxime la intervale de timp egale cu perioada semnalului. Determinarea acestor maxime și măsurarea distanței dintre ele conduce la determinarea frecvenței fundamentale a semnalului.

B. Metoda funcției diferență de amplitudine medie

Metoda se bazează pe calculul funcției diferență de amplitudine medie, care are expresia [Sto84]:

, cu . (2.12)

Funcția diferență de amplitudine medie D(n) prezintă minime la distanță egală cu perioada semnalului, și are avantajul că se poate calcula mai rapid decât funcția de autocorelație.

C. Metoda cu limitare centrală

Metoda urmărește simplificarea calculelor prin reținerea în procesul de calcul doar a eșantioanelor de semnal ce depășesc în valoare absolută o anumită valoare de prag. Apoi semnalul se accentuează în felul următor: valorile pozitive se adună cu valoarea de prag, iar din cele negative se scade valoarea de prag P:

(2.13)

Ϊn varianta metodei cu limitare infinită, valorile pozitive se înlocuiesc cu o valoare maximă, iar cele negative cu o valoare minimă.

După faza de accentuare, se calculează funcția de autocorelație definită anterior, ale cărei maxime se vor putea determina mult mai ușor.

De asemeni, se poate utiliza cu bune rezultate o metodă combinată în care după limitarea centrală se aplică metoda funcției diferență de amplitudine medie.

2.2.2. Analiza în domeniul frecvență a semnalului vocal

Analiza în domeniul frecvență a semnalului presupune descompunerea semnalului în componente de frecvență cunoscută, cum este cazul analizei Fourier, sau în componente a căror comportare în frecvență este cunoscută, cum e cazul analizei bazate pe filtre digitale. Parametrii obținuți în urma descompunerii semnalului în componente diferă de cazul analizei în domeniul timp, cele două abordări fiind complementare. Principalele metode folosite în cadrul analizei în domeniul frecvență sunt [Lup04]: analiza prin banc de filtre, analiza Fourier, analiza LPC, analiza cepstrală și analiza perceptuală.

Analiza prin banc de filtre digitale

Analiza prin banc de filtre digitale are ca scop descompunerea semnalului în benzi de frecvență și determinarea ponderii componentelor din aceste benzi în semnalul inițial, de unde se va putea trage o concluzie asupra comportării în frecvență a semnalului vocal. Schema bloc a unui astfel de analizor este dată în figura 2.7 [Lup04]:

Figura 2.7. Schema bloc a analizorului cu banc de filtre

Semnalul inițial x(n) este descompus în N benzi de frecvență prin intermediul filtrelor trece-bandă FTB1…FTBN. Fiecare bandă este supusă apoi unei transformări neliniare pentru deplasarea spectrului către domeniul frecvențelor joase. Vectorii rezultați xk(n) pentru fiecare subbandă vor fi analizați separat, iar în vederea sintezei sau recunoașterii li se va aplica în continuare anumiți operatori matematici (netezire, normalizare). Deseori se folosește calculul energiei vectorilor rezultați pentru a determina ponderea lor în alcătuirea semnalului inițial.

Analiza Fourier

Analiza Fourier este cea mai răspândită metodă de analiză a semnalului vocal pentru că ea oferă imaginea completă a componentelor semnalului pe scara frecvenței, rezultând astfel spectrul de frecvențe asociat. Analiza Fourier se bazează pe proprietatea unui semnal periodic de a putea fi descompus în componente sinusoidale, așa cum va fi expus în capitolul 2 al prezentului referat.

Această metodă de analiză se bazează pe calculul transformatei Fourier discrete, de forma [Mat01]:

, k = 1,2,…,N , (2.14)

unde: x(n) reprezintă eșantioanele de semnal,

X(k) este valoarea componentei k din spectrul de frecvențe,

N este numărul de eșantioane considerate, iar

j este unitatea imaginară.

Calculul se face în domeniul complex, rezultând pentru fiecare componentă X(k) două valori reale corespondente:

modulul sau amplitudinea: Ak= |X(k)| , respectiv

faza: φk=arg(X(k)).

În practică se folosește mai mult spectrul amplitudinilor, sau spectrul de putere al semnalului. Aceasta deoarece urechea umană e mai puțin sensibilă la spectrul de faze al unui semnal vocal.

Cum pentru fiecare k e necesar calculul sumei (2.11) cu N valori, rezultă o complexitate a algoritmului de calcul de forma O(N2). Pentru rapidizare sunt disponibili diverși algoritmi, dintre care cei mai cunoscuți sunt algoritmii FFT („Fast Fourier Transform”- Transformata Fourier Rapidă) cu decimare în frecvență sau decimare în timp. Algoritmul FFT se bazează pe calculul recursiv al valorilor spectrale [Tod05] și reduce complexitatea algoritmului la O(Nlog2N).

Pe baza aflării spectrului de frecvențe se pot determina o serie de parametrii specifici, cum ar fi anvelopa spectrală sau forma și valoarea formanților, ce ne dau informații despre comportamentul în domeniul frecvenței a semnalului pe segmentul de timp considerat. Formanții – maximele locale ale anvelopei spectrale- vor fi pe larg prezentați în capitolul dedicat procesării semnalului vocal din cadrul acestui referat.

Ϊnainte de calculul spectrului, semnalul poate fi prelucrat printr-un filtru trece-sus, realizându-se așa-numita preaccentuare a semnalului. Această operație este efectuată în scopul accentuării componentelor de frecvență ridicată, care de regulă sunt atenuate în procesul vorbirii de către sistemul fonator [Lup04].

Analiza prin predicție liniară

Analiza prin predicție liniară sau analiza LPC („Linear Prediction Coding”) este o metodă eficientă de determinare a unor parametrii recursivi ai semnalului vocal, care se vor putea folosi în cadrul procesului de sinteză sau recunoaștere a vorbirii. Analiza prin metoda LPC se bazează pe modelul producerii vorbirii prezentat în figura 2.8:

Figura 2.8. Modelul producerii vorbirii prin metoda LPC

Modelul LPC al producerii vorbirii este generat în concordanță cu producerea sunetului de către sistemul fonator uman. Astfel, energia sonoră de bază este furnizată de către un semnal de excitație, care poate să fie periodic sau neperiodic, în funcție de sunetul produs (tren de impulsuri periodice pentru cazul vocalelor sau zgomot alb în cazul consoanelor). Pentru un semnal de excitație periodic, se furnizează frecvența fundamentală F0 ca parametru de intrare în generator.

Semnalul de excitație este apoi amplificat cu un factor G (numit câștigul modelului) și trecut printr-un filtru variabil având funcția de transfer H(z). Filtrul variabil modelează comportamentul tractului vocal din cadrul sistemului fonator, și va produce la ieșire semnalul scontat s(n). Filtrul este controlat pe baza unor parametrii care sunt coeficienții LPC {ak}. Parametrii sunt calculați pentru fiecare segment de vorbire de aproximativ 10-30 ms.

Funcția de transfer a filtrului are expresia [Tod05]:

, (2.15)

unde: G este câștigul filtrului, iar

ak sunt coeficienții de predicție LPC.

Câștigul se poate determina pe baza erorii de predicție dintre semnalul calculat cu ajutorul filtrului recursiv și semnalul original. Pentru calculul parametrilor ak există mai multe metode, dintre care cele mai cunoscute sunt metoda autocorelației (prin algoritmul Levinson-Durbin) și metoda covarianței.

Metoda de analiză prin predicție liniară LPC are avantajul că necesită efort computațional relativ redus, rezultând un set de parametrii ce aproximează bine comportamentul semnalului în domeniul frecvență. Analiza LPC determină simplificarea spectrului semnalului, situație foarte avantajoasă în cazul recunoașterii vorbirii, când se va genera un set de vectori mult mai adecvați tratării prin mijloace specifice inteligenței artificiale, cum ar fi rețelele neuronale. Totodată, analiza LPC este utilă și în cazul sintezei de voce, generând reducerea volumului de date în condițiile menținerii inteligibilității vocii.

Analiza cepstrală

Analiza cepstrală este o metodă ce derivă din analiza Fourier, și se utilizează pentru determinarea unor parametrii ai semnalului vocal utili mai ales în procesul recunoașterii vorbirii [Tod05]. Modelul acustic pe care se bazează analiza cepstrală este asemănător cu modelul LPC și este prezentat în figura 2.9:

Figura 2.9. Modelul producerii vorbirii prin metoda cepstrală

Semnalul vocal s(n) este produs de către un semnal de excitație e(n) corespunzător corzilor vocale din sistemul fonator, care este filtrat de către un filtru variabil având răspunsul la impuls h(n), ce corespunde tractului vocal. Avem astfel:

, (2.16)

unde: s(n) e semnalul rezultat;

e(n) – excitația;

h(n) – răspunsul filtrului.

Dacă translatăm ecuația (2.13) în domeniul frecvență, se poate scrie:

. (2.17)

Prin logaritmare obținem:

. (2.18)

Din ecuația (2.15) rezultă posibilitatea separării excitației sonore de influența tractului vocal, de aici rezultând și modul de calcul al cepstrumului [Gav00]:

Figura 2.10. Modul de calcul al cepstrumului

Astfel:

se calculează mai întâi spectrul S(f) al semnalului prin transformata Fourier;

se aplică logaritmul;

se aplică transformata Fourier inversă pentru a determina cepstrumul în domeniul timp.

Analiza cepstrală ne oferă informații atât despre excitația sonoră, permițând estimarea frecvenței fundamentale a semnalului, cât și despre influența tractului vocal, ducând la calculul spectrului netezit al semnalului vocal. Componentele cepstrale inferioare (corespunzătoare unui segment de timp de la 0 la 2ms) permit estimarea frecvenței fundamentale prin determinarea maximului funcției cepstrale pe acest segment de timp. Pentru calculul spectrului netezit se folosesc componentele cepstrale superioare, cărora li se aplică din nou transformata Fourier.

De asemenea, se mai poate calcula un set de parametrii numiți coeficienți cepstrali LPC, derivați direct din coeficienții LPC. Formulele de calcul pentru acești parametrii sunt [Fur01]:

(2.19)

,

unde: ak sunt coeficienții LPC calculați până la ordinul p;

cn sunt coeficienții cepstrali LPC.

Coeficienții cepstrali s-au dovedit a fi un set de parametrii mai robuști decât coeficienții simpli LPC, utilizănd-se cu succes mai ales în procesul de recunoaștere a vorbirii sau a vorbitorului [Lup04].

Analiza perceptuală

Acest mod de analiză este adaptat după modul de funcționare al sistemului perceptual auditiv al omului, și anume după faptul că sesizarea diferitelor tonalități ale sunetelor se face pe o scară logaritmică în interiorul urechii, proporțional cu frecvența fundamentală a sunetului. Astfel, răspunsul urechii umane este neliniar în raport cu frecvența, ea detectând diferențe mici de frecvență mai ușor la frecvențe joase decât la frecvențe înalte [Lup04].

Din acest motiv au fost adoptate diferite scări neliniare de frecvență, pentru care se va calcula spectrul semnalului. Cele mai cunoscute sunt scara de frecvență Bark și scara Mel. Ambele sunt scări cu comportare logaritmică obținute prin studii realizate asupra percepției umane.

Există două metode de lucru în cadrul analizei perceptuale: analiza PLP și analiza cepstrală Mel.

Analiza PLP („Perceptual Linear Prediction”) folosește scara perceptuală Bark, fiind o combinație între metodele de analiză Fourier și LPC. Etapele de analiză în cadrul metodei PLP cuprind [Her90]:

calculul spectrului FFT prin transformata Fourier;

aliniere spectrală după scara Bark;

aplicarea unui set de filtre dreptunghiulare Bark pentru emularea rezoluției perceptuale a urechii umane;

preaccentuare pentru stimularea frecvențelor înalte;

conversia intensitate-tărie ;

aplicarea transformatei Fourier inverse pentru obținerea funcției de autocorelație;

calculul coeficienților LPC sau cepstrali, numiți în acest caz coeficienți PLP.

Coeficienții PLP de ordin inferior ne dau informații despre conținutul lingvistic al segmentului considerat (informații semantice), pe când coeficienții de ordin superior sunt utili în procesul de recunoaștere a identității vorbitorului [Lup04].

Analiza cepstrală Mel se aseamănă cu metoda de analiză PLP, folosindu-se în acest caz scara de frecvențe Mel. Spre deosebire de cazul anterior, acum se folosește un set de filtre triunghiulare Mel pentru a descompune semnalul pe benzile de frecvență asociate cu scara Mel. Apoi pe fiecare bandă se calculează energia medie și se aplică transformata cosinus pentru a obține un set de coeficienți numiți coeficienți MFCC („Mel Frequency Cepstral Coefficients”).

Coeficienții MFCC au dat bune rezultate în procesul de recunoaștere a vorbirii, mai ales în combinație cu setul de parametrii delta specificați de către Furui în [Fur01].

Ϊn concluzie, metodele de analiză a semnalului vocal utilizate în prezent sunt numeroase, fiecare prezentând variante specifice și beneficiind de aportul interesului și studiilor a numeroși cercetători de pe mapamond. Aceste metode de analiză s-au dovedit utile atât în sinteza de voce cât și în recunoașterea semanticii vorbirii sau a identității vorbitorului.

Ca o observație, se poate spune că metodele de analiză au fost utilizate distinct pe cele două domenii: domeniul timp și domeniul frecvență. Pentru viitor, se estimează astfel că o abordare în paralel a analizei pe cele două domenii va putea constitui o bază de plecare mai robustă atât pentru sinteza de voce de calitate superioară, cât și pentru generarea unor sisteme performante de recunoaștere a vorbirii.

Un model simplu al recunoasterii vocale

După cum am văzut, producera vorbirii poate fi separată în două părți: Producerea semnalului de excitare și formarea formei spectrale. Astfel putem realiza un model simplificat al producerii vorbirii:

Acest model funcționează după cum urmează: Excitația exprimată este modelată de un generator de impulsuri care generează un tren de impulsuri (impulsuri triunghiulare) cu spectrul dat de P(f). Excitația neexprimată este modelată de un generator de zgomot alb cu spectrul N(f). Pentru a mixa excitația vocală și nevocală, se poate ajusta amplitudinea generatorului de impuls (v) și a generatorului de zgomot (u). Ieșirea celor două generatoare este cumulată și alimentată în cutia/caseta de modelare a tractului vocal și efectuează modelarea spectrală în funcție de transmisia H(f). Caracteristicile de emisie ale buzelor sunt modelate de R(f). Astfel, spectrul S(f) din semnalul vocal este dat ca:

S(f) = (v*P(f) + u*N(f)) * H(f) * R(f) = X(f) * H(f) * R(f) (1.2)

Asupra influenței sunetului vorbirii, avem următorii parametrii în modelul produsului de vorbire:

Mixul dintre excitația vocală și nevocală (determinată de v și u);

Frecvența fundamentală (determinată de P(f));

Anvelopă spectrală (determitată de H(f));

Amplitudinea semnalului (în funcție de v și u);

Aceștia sunt paremetrii tehnici ce descriu un semnal vocal. Pentru a se realiza recunoașterea vocală, parametrii de mai sus trebuiesc calculați la semnalul de timp (acesta se numește analiza semnalelor vocale sau “preprocesarea acustică”), iar apoi sunt transmiși recunoașterii vocale. Pentru recunoasterea vocală, informațiile cele mai importante sunt cuprinse în forma spectrală a schimbărilor vocale în timp. Pentru a se reflecta aceste schimbări dinamice , forma spectrală este determinată la intervale scurte de timp, de exemplu la fiecare 10 ms. Prin calculul direct al spectrului semnalului vocal, frecvența fundamentală ar fi inclusă în mod implicit în spectrul măsurat (având ca rezultat “riplul”nedorit în spectru). Figura 1.2 arată în timp semnalul produs de vocala „a” și figura 1.3 arată spectrul de putere logaritmică a vocalei calculat prin FFT.

Figura 1.2: Semnalul în timp produs de vocala “a” (fa = 11kHz, lungime = 100ms).

Vârfurile înalte ale semnalului de timp sunt provocate de trenul de impulsuri P(f) provocat de excitația vocală.

Figura 1.3 Spectrul de putere logaritmică al vocalei “a” (fS = 11kHz, N = 512).

Riplurile din spectru sunt cauzate de P(f). De asemenea, s-ar putea măsura forma spectrală prin intermediul unui grup de filtre analogice folosind mai multe filtre trece bandă așa cum este descris în continuare. După rectificarea și netezirea ieșirilor filtrelor, tensiunea de ieșire va reprezenta energia conținută în banda de frecvență definită de filtrul de bandă corespunzător.

1.4 Parametri vocali utilizati de sistemele de recunoastere

Cum se poate vedea mai sus, spectrul de putere extras din semnalul vocal contine unele ripluri cauzate de spectrul excitației X(f). In functie de implementarea preprocesarii acustice se folosesc transformate speciale care separa spectrul excitatiei X(f) de forma sepctrala a tractului vocal H(f). Astfel, o forma spectrala neteda (fara ripluri) care reprezinta H(f) poate fi estimata din semnalul vocal.

Majoritatea sistemelor de recunoastere vocala folosesc asa numitii coeficienti spectrali Mel (MFCC) dar si prima sa derivata in timp care reflecta mult mai fidel schimbarile dinamice.

1.4.1 Calcularea spectrului pe perioade scurte

Cum am reamintit, este necesara procesarea parametrilor semnalului vocal in intervale scurte de timp pentru a reflecta schimbările dinamice ale acestuia. In mod normal parametrii semnalului vocal sunt estimati in intervale de timp de 10ms.

Fig.1.4 Set de filtre pentru analiza spectrala

Primul pas este eșantionarea si discretizarea semnalului, apoi in funcție de tipul implementarii, se alege o frecventa de esantionare intre 8kHz si 16 kHz dar si o cuanatizare a amplitudinii pe 16 biti. In urma discretizarii semnalului analogic, obtinem o serie de esantioane s(k*Δt) unde sau, pentru o notare mai usoara, doar s(k). Acum este utilizat un filtru pentru eliminareaa -6dB pe decada din energia spectrala:

(k) = s(k) − 0.97 · s(k − 1)

Ulterior o scurta bucata din semnal este taiata prin multiplicarea esantioanelor cu o funcție fereastra w(k) care taie un scurt segment de semnal incepand cu esantionul k=m si terminand cu esantionul k=m+N-1. Lungimea N a segmentului (durata sa) este de obicei aleasa sa fie intre 16 ms si 25 ms, pe cand fereastra de timp este shiftata cu 10 ms pentru a procesa urmatorul set de parametri.Astfel, este folosit suprapunerea de elemente in analiza semnalului vocal. O mare varietate de functii fereastra pot fi folosite, printre cele mai uzuale numarandu-se functia fereastra Hamming :

W(k)=

unde N este lungimea ferestrei de timp exprimata in esantioane. Prin multiplicarea semnalului vocal cu fereastra de timp, obtinem un segment scurt al semnalului (k) :

(k)=

Cum am mentionat anterior, N denota lungimea segmentului de semnal si de obicei are valori cuprinse intre 16 ms si 25 ms iar m timpul de start al segmentului si este incrementat cu un interval de 10 ms in asa fel incat segmentele semnalului se suprapun. Toate operatiile ulterioare se refera la segmentul (k), k=m….m+N-1. Pentru simplificarea notației, se va șifta semnalul in timp cu m eșantioane spre stânga astfel încât indicele de timp sa fie cuprins intre 0…N-1 din nou. Din semnalul peste care s-a aplicat fereastra se doreste calcularea spectrului de putere discret .Inainte de toate, spectrul complex V(n) este calculat. Acesta are urmatoarele proprietati :

Spectrul V(n) este definit in intervalul n = [-∞;+∞].

V(n) este periodic cu perioada N, V(n±i*N); i=1,2,…

Atata timp cat (k) are valoare reala, valorile absolute ale coeficientilor sunt de asemenea simetrice :

|V (−n)| = |V (n)|

Pentru obtinerea spectrului, se calculeaza transformata Fourirer discrete (DFT) din care rezulta spectrul discret si complex al semnalului vocal :

 ; n= 0,1,…N-1

Transformata Fourier ne furnizeaza N valori complexe discrete pentru spectrul la frecventele n*Δf, unde

Sa ne reamintim ca spectrul complex V(n) este definit pentru n = [-∞;+∞] dar este periodic cu N, astfel cele N valori diferite ale lui sunt suficiente pentru descriere spectrului V(n). Ce trebuie retinut este ca valorile pentru care n=N/2 pana la n=N-1 trebuiesc interpretate ca valori pentru frecventele negative ale spectrului V(n. Cu un interval de frecventa de la –N/2* la +N/2* s-ar putea crede ca ar trebui sa avem N+1 valori distincte pentru V(n), dar din moment ce V(n) este periodic cu perioada N, stiim ca :

V (−N/2 ·) = V (N/2 ·)

In procesarile urmatoare ne intereseaza doar spectrul semnalului astfel ca se vor calcula patratele valorilor absolute . Datorita periodicitatii si simetriei, numai valorile sunt folosite in continuare, rezultand N/2+1 valori.

1.4.2 Coeficienții spectrali Mel

Așa cum s-a arătat în experimentele de percepție, urechea umană nu prezintă o rezoluție liniară, dar se bazează pe mai multe grupuri de frecvențe și integrează mai multe energii spectrale într-un anumit grup. Mai mult decât atât, frecvența centrală și lățimea de bandă a acestor grupuri este distribuită neliniar. Deformarea neliniară pe axa de frecvență poate fi modelată prin așa numita scară mel. Grupurile de frecvență sunt distribuite liniar de-a lungul scarei mel. Așa numita frecvență mel fmel poate fi calculată după cum urmează:

fmel (f) = 2595*log(1+)

Figura 1.5 de mai jos arată o prezentare grafică a scalei mel.

Figura 1.5 Scala frecvenței mel

Urechea umană are o rezoluție de frecvență mare în porțiunile de frecvență joasă ale spectrului și rezoluție de frecvență joasă în părțile de înaltă frecvență a spectrului. Coeficienții spectrului de putere |V(n)| 2 sunt acum transformați pentru a refllecta rezoluția urechii umane. Un mod obișnuit de a face acest lucru este reprezentat de utilizarea a K ferestre triunghiulare în domeniul spectral de a construi o sumă ponderată de coeficienți de spectru de putere | V (n) |2 , care se află în cadrul ferestrei. Vom nota coeficienții de fereastră ca:

ηkn; k = 0, 1, . . .K − 1; n = 0, 1, . . .N/2

Acest set ne oferă un set nou de coeficieți,

G(k); k = 0,1,…, K-1

Așa numiții coeficieți spectrali mel, de exemplu [ST95].

*|V(n)| 2; k = 0,1,…, K-1

Provocat de simetria spectrului inițial, spectrul de putere Mel este de asemenea simetric în k.

G(k) = G(-k)

De aceea, este suficientă luarea în calcul numai a gamei pozitive k, k=0,1,…,k-1.

1.5 Metode de prelucrare numerică a semnalului vocal

Prelucrarea semnalului vocal începe cu achiziția semnalului de la sursă: microfon, sau aparatură electronică de înregistrare. Achiziția presupune conversia digitală a semnalului analogic și apoi filtrarea sa pentru eliminarea zgomotelor de achiziție. Conversia se face cu o frecvență de eșantionare de cel puțin 8 kHz (uzual se folosesc frecvențe standard de 11 kHz, 16 kHz sau 22 kHz). Conversia analog-digitală a semnalului presupune un anumit mod de reprezentare a semnalului în format numeric. Stabilirea unui astfel de mod de reprezentare digitală se numește codarea semnalului.

1.5.1 Metode de codare a semnalului vocal

Tehnica cea mai utilizată în codarea semnalului vocal este tehnica modulării impulsurilor în cod (PCM – «  Pulse Code Modulation ») . Folosind codarea PCM, fiecare eșantion al semnalului este cuantizat (i se atribuie o valoare numerică) independent de celelalte eșantioane. Astfel, un codor PCM determină nivelul de cuantizare al fiecărui eșantion fără să țină cont de nivelul eșantioanelor precedente, iar apoi atribuie acestui nivel de cuantizare un cod binar (numit cuvânt de cod), ce reprezintă forma codată a semnalului. Ϊn tehnica PCM există diferite moduri de cuantizare a valorii fiecărui eșantion și de asociere a cuvintelor de cod pentru un nivel de cuantizare. Cele mai uzuale tehnici folosite sunt codarea liniară și codarea logaritmică :

Codarea liniară constă în considerarea valorii scalate a eșantionului ca și cuvânt de cod. Astfel, un semnal de intrare cu valori între 0 și 1000 mV va fi codat liniar cu valori între 0 și o valoare maximă VM (255 pentru valori reprezentate pe octet). Valoarea eșantionului poate fi o mărime cu semn, ținând cont că semnalul vocal variază în jurul unei poziții de referință, de nivel 0. Astfel, cuvântul de cod poate fi la rândul lui un număr cu semn.

Codarea logaritmică aplică o transformare logaritmică valorii scalate a eșantionului, și apoi atribuie o reprezentare numerică rezultatului obținut. Astfel, cuvântul de cod va conține semnul și logaritmul valorii scalate a eșantionului. Acest standard de codare este folosit în telefonia digitală, datorită faptului că în telefonie valorile de amplitudine mare a eșantioanelor sunt puțin frecvente, și ca urmare pot fi reprezentate cu o acuratețe mai mică decât valorile de amplitudine mică, așa cum este cazul în transformarea logaritmică.

Există două standarde pentru codarea logaritmică : legea μ-law, folosită în America de Nord și Japonia, respectiv legea A-law, folosită în Europa. Aceste tehnici de codare standard sunt expuse în cadrul acestui referat, în capitolul III. Amplitudinea fiecărui eșantion va fi reprezentată printr-un cuvânt de cod pe 8 biți (față de 14 biți cât ar fi fost necesari în cazul metodei liniare pentru codarea unui semnal la o calitate percepută echivalentă).

Dacă în cazul codării PCM cuvântul de cod se reprezintă printr-un număr fix de cifre binare, există metode care generează coduri de lungime variabilă. Codarea entropică este o astfel de metodă, care urmărește codarea semnalului pe grupuri de eșantioane care au valori apropiate, situate într-o subclasă a valorilor totale posibile. Astfel, pentru fiecare grup de astfel de eșantioane, cuvântul de cod se generează pe un număr de biți mai mic decât numărul de biți ce ar fi necesar pentru codarea plajei totale de valori pentru eșantioane. Un exemplu de codare entropică de lungime variabilă este codarea Huffman, care presupune o parcurgere a-priori a semnalului pentru gruparea eșantioanelor și stabilirea claselor de valori. Codarea Huffman poate de exemplu folosi o grupare a valorilor eșantioanelor pe segmente corespunzătoare vocalelor și consoanelor, în cazul consoanelor (care au valori ale eșantioanelor mult mai mici comparativ cu vocalele) putându-se folosi o codificare mai condensată. Spre deosebire de codarea Huffman, codarea aritmetică nu codează eșantioanele pe grupe sau blocuri, ci ea caută secvențe de valori identice ale semnalului, cărora le atribuie anumite simboluri dintr-un dicționar sau cuvinte de cod.

O metodă care se folosește pentru eliminarea redundanței semnalului este codarea predictivă [Feh93]. Metoda se utilizează pentru codarea vorbirii, dar și a imaginii și a surselor de date, în vederea transmiterii informației la distanță. Metoda urmărește să elimine din semnal ceea ce poate fi prezis despre el la receptor. Predictorii de la receptor și de la transmițător trebuie să funcționeze sincron, pe baza aceluiași set de reguli.

Tehnica cea mai uzuală ce se bazează pe metoda predicției se numește modulația diferențială a impulsurilor de cod ( DPCM – « Differential Pulse Code Modulation »). Schema bloc a codorului DPCM este ilustrată în figura 2.1.

Figura 2.1. Schema canonică a codorului DPCM (PCM diferențial)

Ϊn figura 2.1, e(n) este diferența dintre eșantionul de intrare x(n) și o predicție a eșantionului notată cu xp(n| n-1,n-2,…,n-p). Această predicție se calculează ca o combinație liniară a unui număr de p eșantioane care au fost transmise anterior:

, (2.1)

unde ) reprezintă eșantionul reconstruit la momentul n-k:

(2.2)

La fiecare pas, eroarea de predicție e cuantizată într-o valoare ep(n) de către cuantizorul Q, care totodată generează și secvență de indici i(n).

Astfel, semnalul x(n) va putea fi reconstruit pe baza valorilor ep(n) recepționate de la transmițător. Utilizarea metodei DPCM e susținută de faptul că variația semnalului diferență ep(n) e mai mică decât variația eșantionului x(n). Astfel, presupunând același debit de codare și același cuantizor, tehnica DPCM aduce o îmbunătățire de aproximativ 6 dB a raportului semnal/zgomot față de codarea PCM.

Pentru tratarea nestaționarității semnalului vocal se folosesc metode de codare adaptive. Principiul de bază al adaptării este de a realiza în codor estimarea unor aspecte statistice ale semnalului vocal, precum energia, frecvența sau valorile spectrale [Feh93].

Astfel, în codificarea adaptivă ADPCM se calculează o estimație locală a deviației semnalului de intrare, care va controla câștigul unui amplificator situat în fața unui cuantizor cu variație unitară, așa cum se ilustrează în figura 2.2 :

Figura 2.2. Schema bloc a codorului delta adaptiv

Cu un astfel de codor adaptiv se poate obține un câștig mai mare de 5 dB în raportul semnal/zgomot față de sistemul DPCM.

Există două tipuri de metode de adaptare în codarea semnalului vocal: adaptarea silabică și adaptarea instantanee. Adaptarea silabică estimează caracteristica semnalului vocal pe o durată de câteva milisecunde (4..25ms) pentru a se acomoda la modificările din interiorul fonemelor și silabelor. Adaptarea instantanee folosește constante de timp mai mici (sub 4ms).

Modulația delta (DM – « Delta Modulation ») [Feh93] este un caz special de DPCM în care cuantizorul folosește doar două valori posibile, ceea ce are ca rezultat aproximarea în trepte a formei de undă. Modulația delta are variante de implementare atât cu cuantizor fix, caz în care necesită o rată de eșantionare ridicată pentru a se putea acomoda variabilității ridicate a semnalului vocal, cât și variante adaptive.

Principiul modulației delta este descris de următoarele ecuații :

, (2.3)

. (2.4)

Ϊn modulația delta apar două tipuri de zgomote (erori) de cuantizare : zgomotul de suprapantă, datorat variației mai rapide a semnalului decât posibilitatea de urmărire a codorului, și zgomotul de granularitate, care apare datorită variației de nivel scăzut a semnalului. Aceste tipuri de zgomote de cuantizare sunt ilustrate în figura 2.3 :

Figura 2.3. Tipuri de zgomot în modulația delta

Tehnicile de modulație delta adaptivă cel mai des folosite sunt modulația delta cu pantă variabilă și modulația delta cu adaptare instantanee.

Modulația delta cu pantă variabilă (CVSDM – « Continuously Variable Slope Delta Modulation ») are o schemă de adaptare silabică în forma unui filtru digital de ordinul 1 cu o constantă de timp mai mare de 4ms. Metoda CVSD are schema bloc din figura 2.2, în care câștigul amplificatorului are forma :

, (2.5)

unde funcția f() ia valorile 1 sau 0 după cum bn-1, bn-2 , bn-3 sunt sau nu toate de același semn.

Modulația delta cu adaptare instantanee are câștigul :

, (2.6)

unde M ia una din două valori după cum bn-1, bn-2 sunt sau nu de același semn : M va fi supraunitar pentru predicția de suprapantă, și subunitar pentru predicția de granularitate.

Deosebirea dintre cele două metode este că adaptarea silabică este mai lentă, având ca efect micșorarea zgomotului de granularitate, dar și creșterea zgomotului de suprapantă. La adaptarea instantanee crește zgomotul de granularitate, dar algoritmul se adaptează rapid la variațiile de suprapantă.

1.5.2. Metode și standarde de compresie a semnalului vocal 

Codarea predictivă DPCM și cea adaptivă ADPCM descrise anterior, din cauza faptului că ele reduc debitul de date prin codare, se folosesc de asemeni și în procesul de compresie a semnalului vocal. Bazată pe tehnica ADPCM, mai există o metodă de compresie pe subbenzi numită SB-ADPCM. Lărgimea de bandă disponibilă este împărțită pe mai multe subbenzi separate, pe care apoi este aplicat algoritmul adaptiv de modulare diferențială a impulsurilor în cod, crescând astfel acuratețea codării precum și lărgimea de bandă care poate fi transmisă. Rata de date la aceste metode variază între 64kbps și 48kbps.

O altă metodă de compresie este numită compresia prin transformări, în care se urmărește împărțirea semnalului de la intrare în segmente sau blocuri și obținerea unei transformări digitale pentru fiecare segment sau bloc de date considerat. Pentru fiecare segment se calculează anumiți coeficienți de transformare, care vor condensa energia semnalului și vor fi transmiși pe canalul de comunicație.

Principiul compresiei prin transformări, ilustrat în figura 2.4, este următorul :

Dacă la intrare avem un vector N-dimensional U(1..N), cu valoare medie nulă, printr-o transformare liniară A obținem un vector complex V(1..N) cu componente care sunt necorelate mutual. Componentele din vectorul V se cuantizează independent și se transmit pe canal. La receptor, vectorului Vc obținut din cuantizarea lui V i se aplică o transformare inversă B pentru a recompune aproximarea vectorului inițial U, care este Ur.

Figura 2.4. Algoritmul de compresie prin transformări

Problema care se pune în continuare este de a obține matricile A și B precum și a cuantizorului optimal Q, astfel încât valoarea medie pătratică a distorsiunii între vectorii U și Ur să fie minimă. Algoritmul optimal a fost găsit de către Karhunen și Loeve, numindu-se transformarea KL. Algoritmul KL nefiind o transformare rapidă, se înlocuiește în multe abordări prin alte transformări unitare, cum ar fi transformările de tip sinus, cosinus, DFT, Hadamard sau Slant.

O tehnică des folosită atât ca metodă de compresie, cât și ca metodă de analiză și sinteză a semnalului vocal este tehnica predicției liniare LPC (« Linear Prediction Coding »). Tehnica se bazează pe separarea semnalului de excitație de semnalul corespunzător tractului vocal, determinarea unor parametrii de aproximare numiți coeficienți LPC și transmiterea acestora pe canalul de comunicație. La receptor, decodorul va prelua acești parametrii și îi va reconverti în forma de undă inițială. Calitatea obținută cu această metodă nu este foarte ridicată, tehnica funcționând cu aproximații, dar rata de bit este mult îmbunătățită.

Printre metodele care folosesc tehnica predicției liniare amintim :

Codorul de semnal vocal folosind predicția liniară cu cod excitat CELP (« Code Excited Linear Prediction ») este o tehnică reprezentativă de compresie a vorbirii ; este folosită în SUA (Standardul Federal 1016) și poate comprima vorbirea până la 4,8 kbps.

Standardul G.728 se bazează pe o schemă de cuantizare vectorială numită predicție liniară cu cod excitat de întârziere mică LD-CELP (« Low Delay Code Excited Linear Prediction »). Standardul operează la 16 kbps dar lărgimea de bandă este limitată la 3,4 kHz.

Aceste metode bazate pe LPC folosesc cuantizarea vectorială cu dicționare de coduri (« code books ») atât la transmițător, cât și la receptor. Ϊn standardul 1016, bazat pe metoda CELP, diferența dintre valoarea eșantionului și cea găsită în dicționar e comprimată și transmisă împreună cu indexul valorii din dicționar. Calitatea standardului e comparabilă cu cea dată de metoda ADPCM. Standardul Federal 1015 al SUA folosește versiunea simplă a codării liniar predictive, care poate opera la viteze de 2,4 kbps. Din cauza aproximațiilor în codare, calitatea este mai slabă decât în cazul metodelor bazate pe CELP.

1.5.3. Standarde de compresie a semnalului audio de înaltă fidelitate

Ϊn ultimii ani au fost create de către diverse firme pe plan internațional câteva standarde de compresie foarte performante, ce se adresează nu doar semnalului vocal, ci semnalului audio în general. Dintre acestea amintim: TrueSpeech, MPEG, FLAC, Lernot&Hauspie SBC, IMC, Microsoft, Ogg Vorbis, Qdesign, Atrac, Voxware,etc.

Standardul MPEG este poate cel mai cunoscut la ora actuală, oferind o calitate net superioară a sunetului. Creat de către un grup de lucru numit Moving Picture Expert Group (MPEG), standardul a fost utilizat pentru compresia sunetului pentru televiziunea digitală. MPEG-audio este alcătuit dintr-o familie de trei scheme de codare și compresie. Ele se numesc MPEG-audio nivelul 1, nivelul 2 și nivelul 3. Complexitatea algoritmilor crește cu numărul nivelului, nivelul 3 fiind cel mai complex, având performanțele cele mai bune [Vla97].

Toate cele trei nivele din standardul MPEG folosesc același principiu: o combinație între codarea prin transformări și împărțirea pe subbenzi de frecvență. Astfel, spectrul semnalului este împărțit în subbenzi care se codează separat într-un mod optim.

Algoritmul de compresie MPEG este mai complex decât tehnicile de codare adaptive, oferind rate de compresie mai mari și o calitate mai bună a sunetului. Prin acest algoritm se pot obține rate de compresie cuprinse între 5 :1 și 10 :1.

Algoritmul MPEG-audio cuprinde următoarele etape :

Semnalul audio este convertit în domeniul frecvență, iar spectrul este divizat în 32 de subbenzi separate ;

Pentru fiecare subbandă se calculează amplitudinea semnalului audio și se determină nivelul zgomotului prin folosirea unui model psihoacustic. Funcția acestui model este de a analiza semnalul de intrare audio în vederea localizării zgomotului de cuantizare în spectrul frecvență, pentru a putea fi mascat.

Ϊn final, fiecare subbandă este cuantizată funcție de nivelul zgomotului de cuantizare din interiorul benzii respective.

Figura 2.5. Schema bloc a codorului MPEG-audio

Performanțele celor trei nivele de compresie  MPEG-audio sunt următoarele:

Nivelul 1 este o versiune simplificată a standardului MUSICAM. El este adecvat pentru construirea unor codoare simple, cu performanțe medii, și permite obținerea unei rate de transmisie de 192 kbps pe canal audio.

Nivelul 2 este identic cu standardul MUSICAM, iar calitatea obținută este aproape echivalentă cu calitatea CD-audio. Permite o rată de 96 kbps pe fiecare canal.

Nivelul 3 este cel mai performant, fiind o combinație între standardele MUSICAM și ASPEC ; el permite obținerea unei rate de 64 kbps pe fiecare canal audio.

1.6 Algoritmul DTW (Dinamic Time Warping)

Algoritmul Dynamic Time Warping este foarte cunoscut in multe domenii. A fost introdus in anii 60 si a fost foarte folosit in anii 70 in aplicatii de recunoastere a vorbirii. In zilele noastre este folosit pentru: recunoasterea scrisului de mana si a semnaturii online, recunoasterea semnelor, recunoasterea gesturilor, in animatia pe calculator, in supraveghere, alinierea secventelor de proteine, procesarea semnalelor audio si a semnalelor in general. Algoritmul DTW si-a castigat popularitatea de a fi extrem de eficient prin masurarea similaritatii in timp a doua serii, masura ce minimizeaza efectul deplasarii si distorsiunilor in timp permitand transformari elastice ale serilor pentru a putea detecta forme asemanatoare in faze diferite.

Cum am vazut in capitolul anterior, semnalul vocal este reprezentat de o serie de vectori care ssunt calculati la fiecare 10 ms. Un singur cuvant va cuprinde zeci de astfel de vectori, numarul de vectori pentru un cuvant fiind dat de viteza cu care o persoana vorbeste. Astfel se impune o clasificare a vectorilor dar si a secventelor de vectori. Sa presupunem ca se doreste recunoasterea catorva comenzi sau vocale. Pentru rostirea unui cuvant w al carui vector lungime este Tx, vom obtine o secventa de vectori ={,,….,} un urma preprocesarii acustice. Acum este nevoie de un mod de a calcula „distanta” intre acest vector necunoscut si secventa cunoscuta de vectori ={, ,….,} care sunt prototipuri pentru cuvantul pe care vrem sa il recunoastem.

1.5.1 Definirea tipurilor de clasificare

Daca avem o masura potrivita a distantei D() intre si prototipul putem defini o clasa a distantei dupa cum urmeaza:

)} ; k=0,1,…,(

unde este clasa rostirilor a caror reprezentare ortografica este data de cuvantul . Apoi putem scrie ca:

ν =arg min{

Aceasta definitie implica faptul ca vocabularul sistemului nostru de recunoastere vocala este limitat la setul de clase Ω = { }. Cu alte cuvinte este posibila recunoasterea a V cuvinte din vocabular, chiar daca rostirea a fost destinata sa sune complet diferit.Singurul criteriu pe care clasificatorii il aplica in alegerea lor este similaritatea acustica dintre rostirea si prototipurile cunoscute asa cum sunt definite de masura distantei D().

1.5.2 Distanta dintre 2 secvente de vectori

In subcapitolul anterior am vazut ca o clasificare a rostirii ar fi usoara daca am avea o masura a distantei D() la indemana. Principalele proprietati ale distantei sunt:

Masoara distanta intre doua secvente de vectori cu lungimi diferite (

In timpul procesarii distantei sa gaseasca o atribuire optima intre trasaturi individuale ale vectorilor si

Proceseaza o distanta totala obtinuta din suma distantelor dintre perechi individuale de vectori.

1.5.2.1 Comparare secvente de lungimi diferite

Principala problema o reprezinta gasirea unei legaturi optime intre vectorii si . In figura 1.5.1 putem vedea 2 secvente si care consta in 6 respectiv 8 vectori. Secventa a fost rotita cu 90 de grade astfel incat indicele de timp pentru aceasta secventa sa fie parcurs de la baza secventei pana la varf. Cele doua secvente curpind o grila cu posibilele atribuiri intre vectori. Fiecare cale prin aceasta grila (precum calea reprezentata in figura) reprezinta o posibila atribuire a unor perechi de vectori. De exemplu, primului vector din ii este atribuit primul vector din , celui de-al doilea vector ii este atribuit cel de-al doilea vector din , si asa mai departe.

Fig, 1.5.1 arata ca exemplu urmatoarea cale P data de secventa perechilor indiciilor de timp ale secventelor de vectori:

P = {,} = {(0.0),1,1),(2,2),(3,2),(4,2),(5,3),(6,4),(7,4)}

Lungimea Lp a caii P este determinata de numarul maxim de vectori continuti de si . Atribuirea dintre indicii de timp ai respectiv asa cum este data de P, poate fi interpretata ca o „deformare a timpului” intre axele timpului si . In exemplul nostru, vectorii au fost toti atribuiti vectorului

Fig. 1.5.1 Posibile atribuiri de perechi intre vectorii si .

Pentru calea data P, distanta masurata intre secventele vectorilor poate fi acum calculata ca suma distantelor dintre vectorii individuali. Sa presupunem ca l indica indexul secventei in matricea de puncte si de asemenea d( reprezinta distanta vectoriala d() pentru indicii de timp i si j definiti de matricea de puncte =(i,j). Atfel distanta generala poate fi calculata astfel:

D (, , P) =

1.5.2.2 Determinarea celei mai scurte cai

In cautarea caii optime , este necesara obtinerea minimului pentru distanta generala:

=

Din fericire nu este necesara calcularea tuturor cailor posibile P si a distantelor corespunzatoare pentru gasirea unui optim. Stim ca ambele secvente de vectori reprezinta vectori caracteristici masurati la intervale scurte de timp. Prin urmare vom putea reduce colmatarea timpului la niste limite rezonabile: primii vectori ai si vor fi atribuiti reciproc, la fel si ultimii vectori. Pentru indicii de timp aflati intre, se doreste evitarea unor salturi uriase in fata sau in spate pe axa timpului, in acelasi timp urmarindu-se restrictionarea colapsarii timpului. Cu aceste resctrictii se poate trasa o „cale” alternativa posibila pentru un punct din grila si posibilii sai predecesori.

Fig. 1.5.2 Cai locale alternative pentru un punct din grila

Figura 1.5.2 nu arata extinderea posibila a unei rute de la un punct dat ci rutele predecesoare posibile pentru un punct dat din grila. Dupa cum se poate vedea, un punct din grila (i,j) poate avea urmatorii predecesori:

(i-1,j): se pastreaza indicele de timp j al lui in timp indicele de timp al lui este decrementat

(i-1,j-1) : ambii indici de timp sunt decrementati

(i,j-1) : pastreaza indicele de timp i si se decrementeaza doar indicele j

Toate caile P care pot fi considerate posibile candidate pentru calea optima pot fi obtinute prin concatenarea cailor locale alternative cum se arata mai sus. Pentru atingerea unui punct (i,j) din grila de la (i-1,j-1), o tranzitie pe diagonala implica o distanta de un singur vector in comparatie cu o tranziti e verticala sau orizontala la care ar mai trebui adaugata o distanta corespunzatoare unei tranzitii (i-1,j) sau (i,j-1). Pentru compensarea acestui efect, distanta locala d( este adaugata de 2 ori atunci cand se foloseste tranzitia in diagonala.

Principiul Bellman

In urma definirii cailor locale, se va folosi Principiul Bellman pentru cautare caii optime . Aplicat problemei de fata, Principiul Bellman declara urmatoarele:

Daca este calea optima prin matricea de puncte care incepe la punctul de coordonate (0,0) si se termina la punctul de coordonate (, iar punctul de coordonate (i , j) face parte din aceasta cale, atunci calea partiala de la (0,0) pana la (i,j) face de asemenea parte din

Din asta se poate construi o metoda iterativa pentru gasirea caii optime : potrivit diagramei cailor locale alternative pe care am ales-o, exista doar 3 predecesori posibili in drumul spre punctul (i,j): calea partiala de la punctul (0,0) la punctele (i-1,j),(i-1,j-1) si (i,j-1).

Presupunem cunoscuta calea optima(prin urmare se cunoaste si distanta δ( ) de-a lungul caii) care duce de la punctul de coordonate (0,0) la aceste puncte. Toate aceste ipoteze sunt posibile cai predecesoare pentru calea optima de la (0,0) la (i,j).

Urmeaza gasirea traseului optim din (0,0) la punctul (i,j) prin selectarea exacta pag 31

Optimizarea trebuie sa indeplineasca dupa cum urmeaza:

δ(i,j) (4.6)

Prin aceasta optimizare este asigurata ajungerea la punctul (i,j) prin calea optima incepand din (0,0) si ca urmare, distanta acumulata δ(i,j) este minimul dintre toate caile posibile de la (0,0) la (i,j).

Din moment ce decizia celei mai bune cai predecesoare reduce numarul de trasee ce duc la punctul grila (i,j), exact unul, a declarat de asemenea ca eventualele ipoteze de cale sunt recombinate pe durata etapei de optimizare.

Aplicand aceasta regula, gasim o cale de a calcula iterativ calea optima din punctul (0,0) in punctul (TW-1, TX-1), incepand din punctul (0,0):

Initializare: pentru punctul din matrice (0,0), calcularea caii optime este simpla: aceasta contine numai punctul din matrice (0,0) si distanta acumulata de-a lungul caii este numai d().

Iteratie: acum avem sa detaliem calculul cailor partiale la toate punctele de retea pana cand vom ajunge la (TW-1, TX-1): In conformitate cu alternativele caii locale, acum putem calcula doar doua puncte din punctul de matrice (0,0): Punctul superior (1,0) si punctul de dreapta (0,1). Optimizarea (4.6) este mai usoarain acest caz, intrucat exista un singur predecesor valid: Punctul de start (0.0). Deci adaugam δ(0,0) distantelor vectoriale definite de punctul din matrice (1,0) si (0,1) pentru a calcula δ(1,0) and δ(0,1). Acum analizam punctele ce pot fi calculate cu ajutorul celor trei puncte pe care tocmai le-am calculat. Pentru fiecare dintre aceste puncte (i,j), cautam punctul optim predecesor din setul posibililor predecesori (bineinteles, pentru coloana cea mai din stanga (i,0) si randul de jos (0,j) recombinarea ipotezei de cale este triviala. In acest fel am parcurs matricea din stanga-jos spre dreapta-sus.

Finalizare: D( este distanta dintre si .

Figura 4.3 arata iteratia prin matrice, incepand cu punctul de pornire (0,0). Punctele de umplere sunt deja calculate, iar punctele libere nu sunt calculate. Sagetile punctate indica posibile ipoteze de cale asupra carora optimizarea (4.6) trebuie sa se efectueze. Liniile solide prezinta rezultatele traiectorilor partiale dupa decizia uneia dintre ipotezele de cale din timpul etapei de optimizare. Odata ajunsi la coltul din dreapta sus a matricei noastre, δ(TW-1) este distanta D() intre secventele vectoriale. Deasemenea, daca suntem interesati nu numai de obtinerea distantei D(), dar si de obtinerea caii optime P,trebuie pe langa distatele acumulate sa tinem o evidenta a tuturor deciziilor luate de-a lungul pasilor de optimizare (4.6). Traseul optim este cunoscut numai dupa incheierea algoritmlui, cand am facut ultima recombinare pentru cele trei posibile ipoteze de cale care conduc la punctul de grila in dreapta-sus (TW-1, TX-1). Odata ce aceasta decizie este luata, calea optima poate fi gasita prin urmarirea in sens invers a tuturor deciziilor locale pana la origine (0,0). Aceasta procedura se numeste backtracking.

1.5.2.3 Programarea dinamica a DTW

Procedura pe care o definim comparadoua secvente ale vectorilor si este deasemenea cunoscuta sub numele de programare dinamica (DP) sau ca Dynamic Time Warping (DTW). Vom utiliza la scară largă și vom adăuga unele modificări și îmbunătățiri pe parcursul următoarelor capitole. În plus față de descrierea verbală din secțiunea de mai sus, vom defini acum un cadru mai formal și va adăuga câteva sugestii pentru posibile realizări ale algoritmului.

Programarea dinamică a algoritmului. În cele ce urmează vom itera prin intermediul matricei coloană cu coloană, începând cu cea mai din stânga coloană și parcurgând fiecare coloană de jos în sus. Pentru ușurința notației definim d(i,j) ca fiind distanța d() întra cei doi vectori . Din moment ce iterarea prin matrice de la stânga la dreapta și optimizarea pentru coloana j în conformitate cu (4.6) utilizează numai distanțe acumulate din coloanele j și j-1, vom folosi numai două matrici δj(i) și δj-1(i) să păstreze valorile pentru aceste două coloane în loc să folosim o matrice întreagă pentru distanțele acumulate δ(i,j):

Să considerăm δj(i) distanța acumulată δ(i,j) la punctul din matricea (i,j) și δj-1(i) distanța acumulată δ(i, j-1) la punctul din matricea (i, j-1).

Ar trebui menționată posibilitatea utilizării unei game unice de indeci de timp j și j-1.

Se pot suprascrie valorile vechi ale matricei cu cele noi. Cu toate acestea, din motive de claritate, algoritmul prin utilizarea a două matrici este descris aici și formularea pentru o singură matrice.

Pentru a urmări toate secțiunile dintre ipotezele de cale pe durata optimizării trebuie să stocăm fiecare alternativă de cale aleasă pentru fiecare punct din matrice. Am putea pentru fiecare punct din matricea (i,j) fie stocați indicii k și l ai punctului predecesor (k,l) sau am putea stoca numai un număr de cod pentru una dintre cele trei variante de cale (traseul orizontal, pe diagonală și vertical) și calcula punctul predecesorului din afara codului (k,j) și punctul curent (i,j). Pentru o notașie mai ușoară presupunem în continuare că indicii punctului din matricea predecesorului vor fi stocați:

Să considerăm φ(i,j) a fi punctul predecesor din matrice (k, l) ales pe durata etapei de optimizare la punctul din matricea (i,j).

Cu aceste definiții, algoritmul programării dinamice (DP) poate fi scris după cum urmează:

Inițializare:

Punctul din matrice (0,0):

Inițializarea primei coloane (singura cale verticală posibilă):

For i=1 to TW -1

{

}

Iterația:

Calculează toate coloanele:

for j = 1 to TX-1

{

Schimbarea matricei δj-1(.) și δj(.)

Primul punct (i = 0, singura cale orizontală posibilă):

Calcularea coloanei j:

for i= 1 to TW – 1

{

Pasul de optimizare:

Utilizarea căilor de decizie:

Încheierea:

Backtracking:

Inițializare:

În timp ce φ(I,j)≠ -1

{

Obține punctul predecesor:

}

Constrângeri suplimentare

Rețineți că algoritmul de mai sus va găsi calea optimă luând în considerare toate ipotezele de cale prin punctele din matrice. Cu toate acestea vor exista căi luate în considerare pe durata calculării ce nu sunt foarte susceptibile de fi căi optime din cauza timpului extrem de colmatare ce îl implică. De exemplu:

1.6 Dificultățile întâmpinate în procesul recunoașterii vocale

Dificultățile întâmpinate în procesul recunoașterii vocale sunt:

1. Probleme legate de coarticulare

Spectrul unui fonem într-un cuvânt sau într-o propoziție este influențat de fonemele vecine ca o consecință a coarticulării. Un astfel de spectru este foarte diferit de acelea ale fonemelor izolate sau ale silabelor deoarece organele articulatorii nu se mișcă la fel în vorbirea continuă ca și în cazul rostirilor izolate. Cu toate că această problemă poate fi evitată în cazul recunoașterii de cuvinte izolate folosind cuvinte ca și unități lingvistice de bază, performanțele recunoașterii continue depind de gradul de rezolvare al acestui obstacol. În acest din urmă caz, dificultățile sunt date de omisiunile din vorbire, cauzate de o rostire rapidă, în care vorbitorul leagă cuvintele împreună „înghițind” unele silabe.

2. Dificultăți în segmentare

Spectrul se schimbă continuu de la o fonemă la alta datorită interacțiunilor dintre ele. Spectrul semnalului vocal poate fi comparat cu un șir de litere scris de mână. În ambele cazuri este dificil de determinat marginile fonemei. Cu toate că consoanele nesonore pot fi segmentate relativ ușor pe baza variației spectrale, nu același lucru se poate spune și despre sunetele sonore.

3. Caracteristicile individuale și alți factori care cauzează variabilitatea semnalului vocal

Caracteristicile acustice variază de la vorbitor la vorbitor chiar și în cazul aceluiași cuvânt rostit. Acest fapt se datorează diferențelor care apar între modalitățile de rostire, cât și organelor articulatorii. Pentru ca lucrurile să fie mai complicate, foneme diferite rostite de vorbitori diferiți pot avea același spectru. Sistemele de transmisiuni sau zgomotul afectează de asemenea caracteristicile fizice ale vocii.

4. Cunoștințe lingvistice insuficiente

Caracteristicile fizice ale semnalului vocal adesea nu conțin suficientă informație fonetică în și despre ele. Vorbirea în propoziții se bazează pe anumite reguli sintactice pe baza cărora ascultătorul poate prezice următorul cuvânt. Ceea ce se cunoaște în momentul actual legat de structura lingvistică a rostirilor nu ne permite să modelăm mecanismul de folosire a constrângerilor lingvistice în perceperea vorbirii.

Capitolul 2. Resurse software folosite

2.1. Motivarea alegerii

Cea mai bună alegere a software-ului folosit pentru o aplicație anume este influențată de mai mulți factori printre care se număra platforma hardware folosită, sistemul de operare, abilitățile de programare ale utilizatorului dar și tipul aplicației. Pe când unele alegeri sunt făcute din considerente de preferințe ale utilizatorului, altele pot fi dictate de politicile companiei, constrângeri financiare sau nevoia de compatibilitate cu alte elemente software.

În ziua de azi, sistemul de operare Windows de la Microsoft este dominant, astfel majoritatea pachetelor software sunt compatibile cu acest sistem de operare. Cele mai populare limbaje de programare sunt Visual Basic, Visual C/C++, C++ Builder și Delphi. Majoritatea producătorilor de echipamente de testare furnizează controale ActiveX compatibile cu SO Windows precum și instrumente de programare ce facilitează dezvoltarea software cu ajutorul acestor limbaje. Au apărut noi pachete de dezvoltare, printre care enumerăm LabVIEW, Agilent VEE sau TestPoint. Datorită apariției a tot mai multor opțiuni legate de limbajul de programare care ar trebui folosit, alegerea furnizorului sistemului de dezvolatare al software-ului rămâne încă o problemă deschisă. În multe cazuri, un mediu de dezvoltare nu este necesar din cauza aplicațiilor relative simple, fiind suficientă aplicația de inițializare furnizată odată cu echipamentul hardware.

Interfața pe care un pachet software o oferă utilizatorului poate fi una bazată pe text sau poate fi una grafică. Limbajele de programare DOS pot reprezenta exemple de limbaje text de programare. Limbajele grafice de programare sunt limbaje care permit utilizatorului să folosească reprezentări grafice ale obiectelor folosite, le pot conecta între ele folosind fire de legatură.

Pentru crearea unui sistem de înaltă calitate trebuie înțeleasă foarte bine interacțiunea dintre hardware și software, astfel încât aplicațiile create să aibă rezultate scontate. Prevenirea problemelor impune dezvoltarea aplicației în urma cunoașterii structurii software. Aceste principii se aplică indiferent dacă hardaware-ul sistemului de achiziție este unul conectat în interiorul unui calculator sau este un sistem de sine stătător conectat la computer printr-o conexiune GPIB, USB sau alte interfețe. În plus caracteristicile hardware cum ar fi non-liniaritatea, timpii de răspuns și sensibilitatea la zgomot pot avea consecințe importante într-un sistem de achiziție de date și control. Acestea au de multe ori limite de performanță și pot necesita punerea în aplicare a unor măsuri cu ajutorul aplicației software. O cunoaștere detaliată a caracteristicilor de transfer și a performanțelor temporale ale fiecărui element al sistemului de achiziție de date și control este o condiție prealabilă pentru scrierea unui software eficient. Așadar, trebuie acordată o mare atenție acelor caracteristici și proprietăți ale senzorilor, actuatorilor, condiționerelor de semnal sau a circuitelor de digitalizare care au un impact direct asupra design-ului software. În dezvoltarea părții software a acestui proiect am ales un limbaj de programare grafic numit ,,G”, iar mediul de dezvoltare pe care l-am utilizat se numește LabView (Laboratory Virtual Instrument Engineering Workbench). Am ales acest mediu deoarece este o unealta de dezvoltare software orientata catre achizitia, prelucrarea si interpretare datelor. Detine functii predefinite care pot fi utilizate la realizarea unor programe menite sa culeaga date de pe orice suport fizic ale carui drivere au fost instalate odata cu LabVIEW.

2.2. Prezentarea mediului de dezvoltare

2.2.1. Concepte introductive

LabVIEW este un mediu de programare al companiei Național Instruments ce poate rula pe orice sistem de operare (Windows, Mac OS X, Linux) și de asemenea poate creea programe care să ruleze pe aceste platforme. Este folosit pentru a crea aplicații dedicate măsurătorilor și analizei de date. Facilitează colectarea de date de la o sursă externă calculatorului și conține funcții special construite în acest scop. Spre exemplu, poate comanda hardware pentru achiziționarea sau generarea de semnale analogice și digitale, poate trimite semnale unui dispozitiv extern sau poate fi utilizat în determinarea frecvenței și amplitudinii unui semnal necunoscut. Comunicarea cu un echipament extern se poate face prin GPIB (General Purpose Interface Bus), USB, Ethernet, Firewire sau prin portul serial. GPIB este o magistrală de date ce poate comunica cu mai multe instrumente deoarece fiecare echipament are o adresă unică cuprinsă între 0 și 30 și este utilizată pentru controlul la distanță a unor instrumente precum multimetre digitale, osciloscoape, scanere. Funcțiile din LabVIEW pentru GPIB operează automat adresarea și managementul comunicației, evitând astfel complicațiile date de programarea în limbaj de asamblare. Pentru a putea folosi GPIB este nevoie de un calculator care să conțină atât o placă GPIB cât și driver-le aferente acesteia. Comunicarea serială este un alt mijloc utilizat pentru transmiterea de date între calculator și dispozitive periferice. LabVIEW folosește acest mijloc indiferent de standardul său (RS-232, RS-422, RS-485) datorită răspândirii acestor interfețe pe calculatoarele moderne. Se folosește atunci când lungimea conexiunii este considerabilă și în aplicații în care rata de transfer este mică. Spre deosebire de GPIB, un port serial nu poate comunica decât cu un singur dispozitiv aflat la distantă și nu posedă capabilități de verificare a erorilor apărute de-a lungul transmisiunii.

LabVIEW deține o colecție vastă de bilblioteci de funcții și subrutine, nu necesită cunoștințe de utilizare de pointeri sau preocupări legate de alocare de memorie eliminând multe probleme ale unui limbaj de programare text.. Librăriile de analiză de date conțin funcții pentru generare de funcții, procesare de semnale, filtrare, funcții fereastră, funcții pentru analiza statistică. Funcțiile de analiză acoperă ariile majore de procesare:

Analiză spectrală ( Transformată Fourier Rapidă, spectrul de putere etc.);

Caracterizarea pulsurilor (durată, tranziție, nivel etc);

Măsurători ale amplitudinii (DC/RMS etc);

Monitorizarea semnalelor;

Interpolare, extrapolare;

Statistică;

Transfomări (Fourier, Hilbert, etc);

Filtrare digitală;

Integrare și diferențiere.

2.2.2. Principii de programare în LabVIEW

2.2.2.1. Concepte generale

Un program în LabVIEW este denumit instrument virtual (vi) datorită asemanării acestora cu instrumentația de laborator si are trei componente: panoul frontal, diagrama bloc și panoul de conectori.

Panoul de control, după cum mai este numit și panoul frontal, este fereastra în care utilizatorul interacționeaza cu programul. Aici el poate introduce datele de intrare sau poate citi rezultatele în urma procesării. Atunci când un vi ruleaza, ceea ce utilizatorul poate vedea este numai acest panou de control. Vezi figura 1.

Figura 2.1. Panou de control în Labview

Sursa http://www.ni.com/white-paper/4292/en/

Obiectele care se pot găsi în panoul frontal sunt împărțite în elemente de control și indicatori. Elementele de control reprezintă terminalele interactive de intrare prin intermediul cărora se pot transmite codului sursă datele de intrare și pot fi butoane rotative, butoane de apăsare, cadrane. Indicatorii sunt folosiți la afișarea și stocarea datelor rezultate în urma executării diagramei bloc, iar în funcție de tipul datelor afișate pot fi indicatori de tip boolean, grafice și diagrame, indicatori digitali, etc. Atât elementele de control cât și indicatoarele au meniuri simplificate din care putem modifica diverse atribute sau putem modifica obiecte ale meniului. Elementele de control și indicatoarele nu pot fi interschimbate între ele.

Figura 2.2. a) Paleta de elemente de control

b) Paleta de funcții disponibile în diagrama bloc

Diagrama bloc este o fereastră în care se găsește codul sursă al unui VI ce corespunde liniilor de cod din limbajele convenționale de programare. Atunci când un element de control sau indicator este plasat pe panoul frontal, în mod automat acestuia îi este atribuit și plasat automat un terminal în diagrama bloc Construirea unei diagrame bloc începe cu plasarea nodurilor necesare, apoi cu ajutorul firelor de legătură se conectează nodurile între ele sau la terminalele interactive. Nodul este denumirea dată elementelor de execuție, el poate fi un operator, o funcție sau o subrutină. Un tip aparte de nod îl reprezintă structura, aceasta poate executa un cod în mod repetat, asemenea unei bucle din programarea clasică. Un fir constă într-o cale de date între un terminal sursă și un terminal destinație. Un fir poate fi legat la mai multe destinații, dar nu suportă decât o singură sursă. De asemenea, un fir își poate schimba culoarea sau forma în funcție de tipul de date pe care îl transportă, iar acest lucru se întâmplă automat în cazul în care tipul de date al sursei și cel al destinației corespund (vezi Figura 3. Tipuri de fire în LabVIEW).

Tipuri de date în LabVIEW:

Date numerice:

Întregi cu semn:

32-biți (I32): de la -2,147,483,648 până la 2,147,483,647

16-biți (I16): de la -32,768 până la 32,767

8-biți(I8): de la -128 până la 127

Întregi fără semn:

32-biți (U32): de la 0 până la 4,294,967,295

16-biți (U16): de la 0 până la 65,536

8-biți (U8): de la 0 până la 256

În virgulă mobilă:

Real :

Precizie extins [EXT]: de la –1.19e+4932 până la 1.19e+4932

Dublă precizie [DBL]: de la –1.79e+308 până la 1.79e+308

Simplă precizie [SGL]:de la –3.40e+38 până la 3.40e+38

Complex:

CXT (complex extins – 32 octeți)

CDB (complex dublă precizie – 16 octeți)

CSG (complex simplu – 8 octeți)

Date de tip string – reprezintă o secvență de caractere ASCII

Date de tip boolean – au două valori: adevărat și fals

Figura 2.3. Tipuri de legaturi în LabVIEW

Deoarece LabVIEW nu este un limbaj text de programare, codul său nu poate fi executat linie cu linie. Fluxul de date al unui program dezvoltat în acest limbaj grafic este diferit de unul clasic și anume: un nod se va executa numai atunci când are date la toate terminalele sale de intrare și va furniza date la terminalele de ieșire numai atunci când execuția se încheie. În execuția tradițională fluxul este controlat de instrucțiune, adică o instrucțiune se execută indiferent de starea datelor de intrare, de unde și acordarea de atenție sporită scrierii și citirii variabilelor. În acest caz fluxul este dependent de date, adică o funcție se execută doar atunci când setul de date de intrare este complet.

Panoul de conectori este folosit la transferul de date între diferite VI-uri. Atunci când un VI este apelat de un altul, acesta poartă numele de subVI. Conectorii unui VI sau subVI funcționează ca o listă de parametri în C sau Pascal. Fiecare conector corespunde unui terminal aflat pe panoul de control, iar la apelarea unui subVI, datele ce ajung la conectorii săi de intrare sunt copiați în terminalele de control și subVI-ul execută. La terminarea execuției, datele ce se găsesc în terminalele de ieșire sunt copiate în conectorii aferenți acestor terminale și transmise mai departe în afara funcției.

Figura 2.4. Exemplu panou de conectori

În LabVIEW se pot folosi trei tipuri de palete flotante, astfel dacă pe ecran este afișat panoul frontal vom avea acces la paleta de elemente de control, iar dacă pe ecran avem afișat diagrama bloc, vom avea acces la paleta de funcții (vezi Figura 2). Paleta de unelete este disponibilă utilizatorului indiferent de fereastra pe care o are afișată. Paleta de elemente de control este folosită la construirea panoului frontal și conține atât elemente de control cât și indicatori ordonați după modul de afișare al acesora. Paleta conține o mulțime de subpalete care la rândul lor conțin elemente ordonate după tipul de date din care face parte. Paleta de funcții disponibilă doar în diagrama bloc conține funcții și structuri folosite la scrierea codului unui VI. Datorită modularității mediului de dezvoltare LabVIEW, se pot instala o serie de module în funcție de nevoile fiecărui utilizator (vezi Figura 5), astfel paleta de funcții va fi populată variabil, după numărul de module instalate.

Figura 2.5. Lista completă de module LabVIEW

Paleta de instrumente este cea mai folosită din cele trei. O unealtă este ,,un mod special de operare al cursorului mouse-lui” [LabVIEW for Everyone: Graphical Programming Made Easy and Fun, Third Edition, By Jeffrey Travis, Jim Kring,July 27, 2006]. Unealta este folosită atunci când se dorește efectuarea unor operații precum adăugarea, legarea, editarea unor elemente atât din diagrama bloc cât și de pe panoul frontal. LabVIEW dispune de o opțiune ce se numește selectarea automată a instrumentelor și poate fi activată din paleta de instrumente. La activarea ei, atunci când cursorul este poziționat deasupra unui element de programare, acesta se transformă într-o unealtă care poate efectua transformări asupra acelui element. Printre instrumentele cele mai uzuale se număra cea de poziționare, legare, editare text și operare.

Figura 2.6. Paleta de instrumente în LabVIEW

Bara cu instrumente este diferită de paleta de instrumente, conținând în special butoane folosite la controlul execuției unui VI. Aceasta poate fi setata să nu mai apară în timpul execuției.

Figura 2.7. Bara cu instrumente

Butonul de pornire a execuției inactive (stânga), active (dreapta).

Butonul de execuție în mod continuu.

Butonul de pauză: inactiv (stanga), activ (dreapta).

Butonul sari peste.

Butonul ieșire

Butonul reține valoarea fir.

Butonul evidentiere executare

2.2.2.2. Achiziția de date în LabVIEW

LabVIEW dispune de o bibliotecă vastă de funcții pentru achiziția de date. Acestea pot fi accesate din paleta de funcții ce se găsește în diagrama bloc. Paleta de funcții numită “Data Acquisition” conține șase subpalete de funcții pentru achiziția de date împărțite după cum urmează:

Intrare analogică;

Ieșire analogică;

Intrare/Ieșire digitală;

Numărător;

Calibrare și configurare;

Condiționarea semnalelor.

În raport cu funcționalitatea lor funcțiile mai suportă o clasificare:

Funcții de achiziție pentru programare de nivel redus;

Funcții de achiztie pentru programare de nivel intermediar;

Funcții de achiziție de nivel înalt;

Funcțiile de achiziție pentru programarea de nivel redus permit o realizare cât mai simplă și mai rapidă a unui VI destinat achiziției de date. Acestea apelează la rândul lor funcții de nivel mediu și înalt. Printre funcțiile de nivel redus se numără:

Achizitioanare eșantioane semnal periodic pe un canal, care are ca intrări/ieșiri:

Numărul de eșantioane;

Frecvența de eșantionare;

Canalul de achiziție;

O referință către placă de achiziție;

Forma de undă achiziționată.

Achiziționare eșantioane semnal periodic pe mai multe canale – diferența față de funcția anterioară constă în faptul că aceasta poate achiziționa date de la mai multe canale simultan. Fiecare canal poate avea parametri individuali de achiziție.

Cu aceste funcții nu se poate achiziționa decât un eșantion sau un număr de eșantioane pe care programatorul le specifică. Se poate face și o achiziție continuă, dacă aceste funcții sunt încadrate în interiorul unei structuri repetitive.

Funcțiile de achiziție de nivel intermediar oferă posibiltăți mai mari comparativ cu cele de nivel redus, în sensul că prezintă o eficiență sporită în dezvoltarea unei aplicații. Oferă de asemnea control asupra managementului erorilor lucru care la funcțiile de nivel redus nu se găsește. Cu toate astea, această categorie de funcții presupune o cunoaștere mult mai bună a modului de programare a canalelor de achiziție.

Funcțiile de achiziție pentru programarea de nivel înalt sunt folosite atunci când achiziția se face de la un dispozitiv hardware neobișnuit pentru LabVIEW și numai în cazul în care celelalte categorii de funcții nu pot furniza elemente care să controleze intrările echipamentului de măsură. Cele mai uzuale funcții sunt:

Configurarea ceas (Clock config) – permite setarea ceasului și a vitezei de scanare a canalelor sau eșantioanelor;

Control intrări analogice – se pot seta atribuțiile fiecărui canal analogic precum și cantitatea de date achiziționate;

Configurare hardware – se pot configura limitele minime și maxime ale semnalelor de intrare, modul de cuplare (single ended/differential), numărul de dispozitive de multiplexare;

Configurare declanșare – se pot seta condițiile de declanșare a achiziției de date.

Capitolul 3. Resurse hardware folosite

3.1. Introducere

Intrucat un sistem de monitorizare si control al unei locuinte trebuie sa fie cat mai flexibil si mai intuitiv, am decis impartirea acestuia in module, numarul lor fiind ales in functie de necesitatile locuintei. Acest capitol urmareste sa descrie descrie resursele hardware folosite, tratarea lor fiind facuta prin prisma sistemului din care face parte.

3.2. NI USB-6009

NI-USB6008 este o placa de achizitie de date si control de la National Instruments folosita in general in scop didactic. Dispozitivul are urmatoarele specificatii:

8 intrari analogice

2 iesiri analogice

12 intrari/iesiri digitale

Conexiune USB

Compatibila cu LabVIEW, LabWindows/CVI, Measurement Studio for Visual Studio .NET

Dispozitivul nu este doar o simpla placa de achizitie, el incorporeaza o mare parte a unui sistem de achizitie de date ci control. Dupa cum se poate vedea in figura 2.X.1., conversia analogic/digitala, digitala/analogic, multiplexarea, sunt integrate in acest dispozitiv.

Figura 3.1. Diagrama bloc pentru NI USB-6008

Sursa: [User guide and specification NI USB-6008,National Instruments]

Canalele analogice de intrare sunt numerotate AI <0…7> (vezi Figura 2.6.2.), in numar de 8 in cazul unei masuratori in configuratie cu conexiune la masa. Pentru o masuratoare in configuratie flotanta, canalele AI<0,4>, AI<1,5>, AI<2,6>, AI<3,7> sunt intrarile positive si negative, si vor fi in numar de 4. “Masurarea in conexiune la masa (GRSE) se impune atunci cand semnalul poate avea un punct comun de masa cu celelalte semnale, iar distanta la care se face masuratoarea este la mai putin de 3 metri de dispozitivul de achizitie. Masurarea in conexiune flotanta (DIFF) este folosita atunci cand semnalul masurat are un nivel scazut si necesita o mai buna acuratete, distanta pe care semnalul o parcurge pana la dispozitivul de achizitie este mai mare de 3 metri sau cand intervalul tensiunii masurate nu este incadrat in 10V.” Sursa: [User guide and specification NI USB-6008]. Specificatii intrari analogice:

Rezolutie flotant/masa: 12/11 biti

Rata de esantionare: 10 kEs/s

Tipul convertorului integrat: Aproximatii successive

Intervalul tensiunilor de intrare: 20 , ±10 V, ±5 V, ±4 V, ±2.5 V, ±2 V,±1.25 V, ±1 V

Tensiune de lucru: 10V

Impedanta de intrare: 144 kΩ

Protectie la supratensiune: 35V

Canalele de iesire analogice sunt numerotate AO0 si AO1, pot furniza o tensiune intre 05V. “Atunci cand sunt folosite pentru a obtine forme de unda se observa aparitia unor pulsuri de tensiune in semnalul de iesire. Acestea pot fi indepartate cu ajutorul unor filtre in functie de valoarea frecventei semnalului.”[ User guide and specification NI USB-6008, National Instruments]. Specificatii iesiri analogice:

Rezolutie: 12 biti

Rata de actualizare: 150 Hz

Impedanta de iesire: 50 Ω

Curentul furnizat la iesire: 5 mA

“Canalele digitale intrare/iesire sunt in numar de 12, sunt numerotate P0<0….7> si P1<0….3> si pot fi configurate individual fie ca iesiri, fie intrari. Configuratia standard a canalelor digitale este de collector deschis, permitand tensiuni pana la 5V si cu o rezistenta interna de ridicare de 4.7 k. O rezistenta externa de ridicare poate fi adaugata de utilizator pentru a creste capabilitatea sursei de curent pana la 8.5mA pe fiecare linie.” [User guide and specification NI USB-6008, National Instruments]

Figura 3.2. Numerotarea pinilor NI USB-6009

Capitolul 4. Rezultate experimentale

4.1. Testarea placii de achizitie NI USB-6008

Configurarea si testarea cardului de achizitie se face folosind software-ul MAX (Measurement and Automation Explorer), a carui instalare se face simultan cu cea a mediului de dezvoltare LabVIEW. La prima conectare a placii USB-6008, va porni Windows Hardware Installer Wizard in cazul in care sistemul de operare este Windows, care va cauta driverul corespunzator. Driverul a fost instalat odata cu pachetul de programe NI-DAQ. Dupa ce sistemul de operare detecteaza si confirma instalarea driverului, dispozitivul de achizitie este gata de folosire. La o prima utilizare, NI recomanda efectuarea unui sir de teste pentru a se verifica integritatea sistemului. Dupa ce placa de achizitie a fost vizibila in MAX (Devices and InterfacesNI-DAQmx Devices si se pot observa dispozitivele conectate in acel moment la PC), am selectat pe rand optiunile Self-Test, Test Panels apoi Reset Device (vezi Figura 4.7)

Figura 4.1. Meniul MAX

Deoarece aceste teste s-au incheiat fara erori, urmatorul test consta in verificarea canalelor de achizitie. Pentru asta a fost nevoie de identificarea canalelor analogice, si legarea impreuna a unei iesiri analogice la o intrare o intrare analogica. Am ales canalele AO0 si AI0 (vezi poza de mai jos)

Figura 4.2. Lista teminalelor unui USB-6008

Apoi din meniul Test Panels am efectuat configurarea canalelor AO0 si AI0. Testul a fost trecut, intrucat tensiunea masurata la intrare era aceiasi cu tensiunea setata pe iesirea AO0.

4.2. Dezvoltare software

Un program in LabVIEW poarta numele de VI (Virtual Instrument). In cele ce urmeaza se vor detalia pasii parcursi in realizarea aplicatiei pentru managementul automat al unei locuinte. LabVIEW este un mediu de programare special creat pentru acest gen de aplicatii, in care se doreste achizitia de date pe un calculator obisnuit, prelucrarea si afisarea lor, si ulterior controlul diferitelor sisteme de procesare. Dupa cum s-a detaliat in capitolul 3, un VI are doua componente:

Panoul frontal – reprezinta interfata grafica prin care utilizatorul interactioneaza cu programul

Diagrama bloc – reprezinta codul sursa al programului, si este transparent pentru utilizator

Un VI poate fi compilat ca fisier executabil, si rulat pe orice sistem de operare prin simpla instalare a unui ,,runtime engine” ce furnizeaza rutinele si bibliotecile necesare, fara a fi necesara instalarea mediului de programare.

Programul dezvoltat incearca sa intuiasca nevoile unui utilizator obisnuit, si sa il ajute pe acesta in administrarea intregii locuinte prin folosirea unui singur calculator. Primul pas in conceperea aplicatiei a fost alegerea unei structuri in care sa fie integrat codul sursa. Deoarece aplicatia poate controla sistemul de securitate al locuintei, am decis ca si aplicatia in sine are nevoie de un nivel sporit de siguranta. Era indispensabil astfel un modul de autentificare al utilizatorlui la incercarea de a accesa programul. Pentru a integra o metoda prin care utilizatorul sa autentifice cu un nume si parola, a fost necesara alegerea unei structuri de programare de tipul producator/consumator (producer/consumer pattern). Este o structura predefinita in LabVIEW, ce permite rularea a mai multe bucle simultan la diferite rate. O bucla este de fapt o structura repetitiva de tipul celor din programarea text (while, for). Folosirea unei tipologii producator/consumator se impune atunci cand se achizitioneaza multiple seturi de date pentru procesare, si nu se doreste a fi afectata procesarea in acest timp. In figura 4.9 se poate observa un sablon al acestei structuri.

Figura 4.3. Producer/Consumer template

Modul de functionare este foarte simplu, numele fiind foarte sugestiv. In bucla de sus sunt generate (produse) evenimente precum apasarea unui buton, deschiderea unui alt meniu, iar in bucla de jos aceste evenimente sunt procesate (consumate). Cele doua bucle sunt independente, transmiterea datelor intre ele fiind facuta cu ajutorul unui set de functii de notificare.

4.3 Diagramele bloc

4.4 Modul de functionare

Concluzii

Similar Posts