Lucrare de licenta

download Lucrare de licenta

of 34

Transcript of Lucrare de licenta

UNIVERSITATEA POLITEHNICA DIN TIMIOARA FACULTATEA DE ELECTRONIC I TELECOMUNICAII DEPARTAMENTUL DE ELECTRONICA APLICATA

LUCRARE DE LICENIMPLEMENTAREA UNUI CODOR CELP

DRAGOMIR STEFAN

Conductor tiinific

Conf.dr.ing.Septimiu Mischie

TIMIOARA 2010

2010

Page 1

Subsemnatul Dragomir Stefan declar pe proprie rspundere c lucrarea de fa este rezultatul muncii mele, pe baza cercetrilor mele i pe baza informaiilor obinute din surse care au fost citate i indicate, conform normelor etice, n note i n bibliografie. Declar c lucrarea nu a mai fost prezentat sub aceast form la nici o instituie de nvmnt superior n vederea obinerii unui grad sau titlu tiinific ori didactic.

Semntura autorului

2010

Page 2

CuprinsINTRODUCERE .....00 CAPITOLUL 1.CELP..00 1.1.Funcionare ..00 1.2AnalizA..00 1.2.1Filtru A(z).....00 1.2.2 Filtru P(z).........00 1.2.3 Stabilitate.........00 1.3SintezA..00 1.4 Filtrare zgomot.00 1.5 Dicionar...00 CAPITOLUL 2.IMPLEMENTAREA CODORULUI......00 2.1 Creerea dicionarului....00 2.2 Codarea..00 2.3 Rezultate...00 2.3.1 Semnale de excitaie.....00 2.3.2 Eliminarea Zgomotul....00 2.3.3 Stabilizarea P(z)....00 2.3.4 Exemple semnale codate..00 CONCLUZII...00 ANEX...00

2010

Page 3

INTRODUCERELucrarea de fa i propune implementarea unui codor CELP cu ajutorul mediului de programare Matlab.Codorul va trebui s primeasc un semnal vocal preluat dintr-un fiier i va calcula parametri necesarii transmiterii semnalului pe un canal de comunicaie.Calitatea semnalului decodat trebuie s permit utilizatorului ntelegerea sunetelor emise. Metodele de codare caut s minimizeze rata de transfer a unui semnal vocal eantionat i cuantizat fr o degradare a calitaii acestuia.O bun calitate este obinut la rate mici de transfer prin utilizarea redundanei semnalului i prin cunoaterea faptului c anumite distorsiuni nu sunt percepute de urechea uman, fiind mascate de alte semnale.Modelele de redundan i mascare a distorsiunilor au devenit n timp foarte complexe ducnd la rate foarte sczute de transfer i calitate exepional a semnalului. Metodele de codare vocal se pot mprii n dou mari categorii.Prima reprezint codoarele ce ncearc s recreeze semnalul ct mai fidel posibil n timp ,iar cea de-a doua sunt metodele de codare denumite vocodere care pstreaz anumite caracteristici spectrale ale semnalului.Algoritmii de codare n timp recreaz semnalul vocal de foarta bun calitate la rate de transfer relativ mari, n timp ce vocoderele reproduc semnalul vocal la rate foarte mici de transfer nsa calitatea are de suferit. n cazul vocoderelor semnalul este mprit n benzi de frecven (un numr mare de benzi implic o analiz mai bun), apoi este aflat nivelul de energie a semnalului n benzile respective.n loc s fie memorate valorile eantioanelor este memorat nivelul energetic al benzii analizate. Pentru a recrea semnalul vocal se inverseaza procesul.Un aspect important este c informaiile despre frecvenele instantanee sunt pierdute.Din acest motiv vocoderele nu sunt eficiente n transmisii de bun calitate ele fiind des folosite n transmisii digitale de rate foarte scazute de transfer sau efecte speciale impuse vocii.

2010

Page 4

Metode de codare vocal: -LPC-line prediction coding -PCM-pulse code modulation -CELP-code exited line prediction -ADPCM-adaptive differential pulse code modulation

CAPITOLUL 1

CODE EXITED LINE PREDICTION1.1 SCHEMA GENERALCELP este una dintre cele mai populare metode de codare folosite in sistemele de comunicaii.Metoda are un bun echilibru ntre cele 4 aspecte ale codrii vocale: -rata de codare -calitatea -ntrziere -complexitatea n aplicaii cu banda limitat rata de codare este un parametru important , in timp ce n aplicaiile n timp real complexitatea este cel mai important parametru.Complexitatea poate duce la ntrzieri ce nu sunt tolerate in aplicaii sensibile la timp.ntarzierea este unul dintre impedimentele pe care o intalneste metoda in implementarea sa intr-un sistem de

comunicatii.Aplicaiile moderne n timp real cum ar fi VoIP,telefonia prin internet,conferinele video ,telefonia de band larg, au nevoie de codoare de calitate nalt i ntrziere mica.

2010

Page 5

Fig.1.1.Schema general a unui codor CELP CELP(code exited line prediction) este o metod de codare a semnalului vocal ce const n utilizarea unui dicionar prestabilit de coduri pentru a reconstrui la recepie semnalul transmis.CELP este o metod eficient de codare vocal la rate mici de transmisie.Se transmit indicii codurilor din dicionar impreun cu 2 serii de coeficieni ale filtrului LPC si filtrului pitch. Semnalul vocal s[n] ce urmeaz s fie codat este imparit in cadre de 200 sau 240 eantioane.Aceste cadre vor trece prin 2 filtre de eliminare a corelaiei pe termen scurt i lung ntre eantioane.Primul dintre ele este un filtru LPC care elimin corelaia intre esantioanele alturate.Cel de-al doilea filtru este filtrul pitch i elimina corelaia la o distant M egal cu frecvena pitch masurat n numr de eantioane.Semnalul ce se obine la ieirea celor doua filtre este foarte asemntor cu un zgomot.Din dicionar pe rnd fiecare cod va fi amplificat i trecut prin 2 filtre ce au rolul de a reintroduce corelaia ntre eantioane.Coeficienii celor doua filtre sunt identici cu cei ale celor dou filtre folosite pentru semnalul vocal.Funciile de transfer ale filtrelor dicionarului sunt inversele funciilor de transfer ale filtrelor folosite pentru semnalul vocal. Pentru a decide care dintre codurile c[n] ale dicionarului este cel mai apropiat de semnalul decorelat sp[n], se obine semnalul eroare e[n]=sp[n]-sp[n] .

2010

Page 6

1.2 ANALIZAPrima etap n codarea semnalului vocal este analiza acestuia.Analiza const n 2 pai, trecerea prin filtrul A(z) pentru eliminarea corelaie ntre eantioanele consecutive,iar apoi trecerea printr-un filtru P(z) pentru eliminarea corelaiei determinate de perioada pitch.Aceste decorelri vor duce la obinerea unui semnal asemntor cu un zgomot la ieirea ultimului filtru. Coeficienii celor 2 filtre sunt importani deoarece ei vor fi transmisi impreuna cu indicele din dicionar pe canalul de transmisie.Deasemenea codurile coninute de dictionar sunt si ele la randul lor cadre ce au fost trecute prin cele dou filtre, deci la reconstrucia semnalului din dicionar coeficienii celor 2 filtre vor fi folosii in dou alte filtre inverse lor.

Fig. 1.2 Schema bloc a poriunii de analiz.

1.2.1 FILTRUL A(z) Primul pas n creerea semnalului rezidual este eliminarea corelaie ntre eantioanele alturate.Coeficienii filtrului A(z) sunt alei pentru a minimiza eroarea medie patratic. A(z)= (1.1)

Energia rezidual a semnalului va fi de forma: (1.2)

Aceasta valoare va fi minimizat n urma alegerii coeficienilor potrivii.Pentru aceasta se va folosi metoda covarianei care va duce la obinerea unei ecuaii matriciale de forma:

2010

Page 7

( ( (

) )

( (

) ) ) ( )=(

( (

) ) ) (1.3) ) are

In ecuatia de mai sus N reprezint numrul de coeficieni sau ordinul de predictie, iar ( forma: ( ) . (1.4)

Filtrul A(z) nu prezint mari probleme in cazul stabilitaii.Acestea exist ns sunt rare i nu influeneaza puternic semnalul de ieire.

1.2.2 FILTRUL P(z)

Semnalul ce provine de la ieirea filtrului A(z) nca prezint o periodicitate datorat perioadei pitch.Scopul celui de-al doilea filtru este eliminarea acestei periodicitai redundante.Pentru a determina perioada pitch este necesar calcularea funciei de autocorelaie a semnalului s[n] de la intrarea filtrului A(z).Funcia de autocorelaie poate avea 2 forme.Una dintre forme este cea a unui cadru sonor,iar cea de-a doua este a unui cadru nesonor.

Fig.1.3a Figura 1.3a exemplu de funcie de autocorelaie a unui cadru sonor. Figura 1.3b-exemplu de cadru sonor.

Fig.1.3b

2010

Page 8

Fig 1.4a

Fig.1.4b

Figura 1.4a exemplu de funcie de autocorelaie a unui cadru nesonor. Figura 1.4b-exemplu de cadru nesonor.

n ambele cazuri se poate observa c funciile prezint maximul n origine nsa doar pentru funcia de autocorelaie asociat cadrelor sonore apar i vrfuri secundare care se repet cu frecvena pitch.astfel putem trage concluzia c filtrul P(z) va fi folosit doar pentru cadre sonore deoarece cadrele nesonore nu vor avea perioad pitch.Perioada este definit ca distanta in numr de eantioane ntre dou vrfuri consecutive. Odat aflat perioada pitch se va folosi in calculul coeficienilor filtrului P(z). P(z)= unde (1.5) sunt coeficienii filtrului.

N are ordinul 8 sau 16 in mod obinuit. Filtrul poate avea 1 ,2 sau 3 coeficieni diferii de zero.Astfel P(z) mai poate fi exprimat in felul urmator: P(z)={( ) ( ) ( )

(1.6)

unde 1, 2, 3 sunt coeficienii diferii de zero ai filtrului,iar M este perioada pitch. Coeficienii se gsesc prin minimizarea erorii medie patrate.Metoda va duce la o ecuaie liniar matricial de forma. (1.7) unde este matricea coloana ce conine coeficienii filtrului.

2010

Page 9

Pentru a calcula matricea Funcia ( ( ( ( ( ) ) (

se folosete relaia 1.4.

) exprim corelaia eantioanelor pe termen lung. ) ( ( ) ) ( ) ( ( ) ) ) ( ) )=( ( ( ( ) ) ) ) (1.8)

Ecuaia matriceal mai poate fi scris sub forma:

La ieirea filtrului P(z) semnalul va fi decorelat i foarte asemntor unui zgomot. n figura 2.3a se poate observa semnalul de la ieirea filtrului A(z).Acesta prezint o periodicitate datorat perioadei pitch ns la ieirea filtrului P(z) se poate observa c semnalul este complet decorelat.

Fig.1.5a exemplu semnal sa[n]

Fig.1.5b exemplu semnal sp[n]

Ecuaia matricial prezentat mai sus este formula de covariant folosit pentru determinarea coeficienilor lui P(z) si are scopul principal s minimizeze eroarea mediei patratica. ( ) (1.9)

Formula de mai sus reprezint expresia mediei patratice pentru filtrul P(z).n cazul unui filtru perfect care minimizeaz eroarea, expresia ia forma: ( ) (1.10) tiind expresia erorii minime putem calcula catigul ca fiind raportul ntre energia semnalului la intrare i energia semnalului de la ieirea filtrului.

2010

Page 10

1.2.3 STABILITATE

Formula de calcul folosit pentru determinarea coeficienilor filtrului P(z) nu asigur obinerea unui filtru stabil.De aceea trebuie luate msuri suplimentare pentru asigurarea stabilitii.O condiie necesar i suficient pentru ca filtrul s fie stabil este poziionarea polilor lui P(z) n interiorul cercului unitar.Ordinul filtrului este ridicat ns numrul coeficienilor diferii de zero este mic.

Fig.1.6 exemplu de semnal trecut printr-un filtru P(z) instabil Vom considera numitorul lui P(z) notat cu D(z) de forma: ( ) unde ( ) ( ) ( ) | | ( ( )| )| | ( )| ( ) ( (1.12) ( )) ( ) (1.11)

Putem scrie n continuare: (1.13)

Atunci condiia de stabilitate este: (2.14) (2.15) (2.16) | | | | | | | | (1.17)

Din cele de mai sus putem trage concluzia c o condiie necesar i suficient ca filtrul s fie stabil este ca suma n modul a coeficienilor s fie mai mic dect unu. | | | | pentru filtrul cu un coeficient. | | pentru filtrul cu 2 coeficieni.

2010

Page 11

| |

| |

|

|

pentru filtrul cu 3 coeficieni. predictor P(z) sunt calculai prin

n fiecare cadru din semnal, coeficieniifiltrului

utilizarea formulei covarian. Apoi,testul de stabilitate este folosit pentru a determina dac acesta este stabil.Dac filtrul este stabil nici o modificare nu este adusa coeficienilor.ns dac se descoper c filtrul este instabil coeficienii trebuie recalculai folosind o metod de stabilizare.Aceti coeficieni ai lui P(z) sunt folosii i n stadiul de sinteza a semnalului deci ctigul va fi modificat. O prim metod de stabilizare este catigul.Acesta va fi modificat pentru a stabiliza filtrul.mulirea semnalului cu un ctig diferit este echivalent cu nmulirea fiecrui coeficient din expresia filtrului cu o valoare c.nmulirea va face ca polii filtrului s i modifice poziia.Dup nmulire trebuie verificat din nou stabilitatea. Prin nmulirea coeficienilor cu c se vor obine noi coeficieni: (1.18) Filtrul rezultat nu va minimiza perfect eroarea medie patratic care va avea expresia: ( ) (1.19)

Termenul perfect.tiind c ( ) (

reprezint energia rezidual obtinut n urma nefolosirii unui filtru ) putem scrie energia rezidual ca fiind: (1.20)

Daca c>1 catigul va crete foarte mult i din aceast constatare putem impune condiia de aflare a lui c: 02 s=0; M=Pitch; Rpz1=0; Rpz2=0; Rpz3=0; Rpz4=0; Rpz5=0; Rpz6=0; Rpz7=0; Rpz8=0;

3.filter_celp.m

Rpz9=0; Rpz10=0;

function [cdFP,A,P]=filter_celp(cod); %[cdFA]=filter_celp(cod); %parametrii:o seventa de esantioane

Rpz11=0; Rpz12=0;

2010

Page 28

i=[M-1 M-1 M-1 M M M M+1 M+1 M+1 0 0 0]; j=[M-1 M M+1 M-1 M M+1 M-1 M M+1 M-1 M M+1]; for n=M+2:length(cod) Rpz1=Rpz1+cod(n-i(1))*cod(n-j(1)); Rpz2=Rpz2+cod(n-i(2))*cod(n-j(2)); Rpz3=Rpz3+cod(n-i(3))*cod(n-j(3)); Rpz4=Rpz4+cod(n-i(4))*cod(n-j(4)); Rpz5=Rpz5+cod(n-i(5))*cod(n-j(5)); Rpz6=Rpz6+cod(n-i(6))*cod(n-j(6)); Rpz7=Rpz7+cod(n-i(7))*cod(n-j(7)); Rpz8=Rpz8+cod(n-i(8))*cod(n-j(8)); Rpz9=Rpz9+cod(n-i(9))*cod(n-j(9)); Rpz10=Rpz10+cod(n-i(10))*cod(n-j(10)); Rpz11=Rpz11+cod(n-i(11))*cod(n-j(11)); Rpz12=Rpz12+cod(n-i(12))*cod(n-j(12)); end; teta1=[Rpz1 Rpz2 Rpz3;Rpz4 Rpz5

B(M)=beta(2); B(M+1)=beta(3); %-----------------------------Filtrare P(z)-----------------------cdFP=filter(B,1,cdFA); else cdFP=cdFA; B=zeros(1,length(cod)+1); B(1)=1;

end; P=B;

4.trans_M.m

function M=trans_M(matr); %transforma liniile in coloane a unei matrici matr d=size(matr); for i=1:d(1) M(:,i)=matr(i,:); end;

Rpz6;Rpz7 Rpz8 Rpz9]; teta2=[Rpz10; Rpz11; Rpz12;]; beta=inv(teta1)*teta2; s=abs(beta(1))+abs(beta(2))+abs(beta(3)); c=0.3; if s>1 beta(1)=c*beta(1); beta(2)=c*beta(2); beta(3)=c*beta(3); end; B=zeros(1,length(cod)+1); B(1)=1; B(M-1)=beta(1);

5.imp_cadre.m

function cadre=imp_cadre(data,dimcadru); %cadre=imp_cadre(data,dimcadru); %imparte o secventa de esantioane in cadre de dimensiunea dimcadru dim=length(data); nr_cadre=dim/dimcadru;

2010

Page 29

for i=1:nr_cadre k=1; for j=(((i-1)*dimcadru)+1):(i*dimcadru); cadre(i,k)=data(j); k=k+1; end; end;

%parametrii:o seventa de esantioane %returneaza:coef A(z) si P(z) %folosit in codor % p=14; %-------------Coeficienti A(z)----------------A=lpc(cod,p);%calcul coeficienti filtru A(z) A=real(A);

6.determinare_stabilitate.m

%-------------Autocorealatie pt A(z)--------------

load dict; for i=1:375 k=1; for j=1:200 if abs(fP(i,j))>0 c(i,k)=fP(i,j); k=k+1; end; end;

R=xcorr(cod);%calcul functie autocorelatie %--------------Perioada Pitch---------------------Pitch=pitch(cod);%apelare functie pitch care calculeaza perioada pitch %---------------Coeficienti P(z)-------------------if Pitch>2%daca perioada pitch este mai mare de 2 se calculeaza parametrii functiei P(z)

end s=zeros(375,1); for i=1:375 for j=2:4 s(i)=s(i)+abs(c(i,j));% vector cu valorile sumei in modul a coeficientilor end; end;

s=0; M=Pitch; Rpz1=0; Rpz2=0; Rpz3=0; Rpz4=0; Rpz5=0; Rpz6=0; Rpz7=0;

7.calcul_coef.m function [A,P]=calcul_coef(cod); %[A,P]=calcul_coef(cod);

Rpz8=0; Rpz9=0; Rpz10=0;

2010

Page 30

Rpz11=0; Rpz12=0; i=[M-1 M-1 M-1 M M M M+1 M+1 M+1 0 0 0]; j=[M-1 M M+1 M-1 M M+1 M-1 M M+1 M-1 M M+1]; for n=M+2:length(cod) Rpz1=Rpz1+cod(n-i(1))*cod(n-j(1)); Rpz2=Rpz2+cod(n-i(2))*cod(n-j(2)); Rpz3=Rpz3+cod(n-i(3))*cod(n-j(3)); Rpz4=Rpz4+cod(n-i(4))*cod(n-j(4)); Rpz5=Rpz5+cod(n-i(5))*cod(n-j(5)); Rpz6=Rpz6+cod(n-i(6))*cod(n-j(6)); Rpz7=Rpz7+cod(n-i(7))*cod(n-j(7)); Rpz8=Rpz8+cod(n-i(8))*cod(n-j(8)); Rpz9=Rpz9+cod(n-i(9))*cod(n-j(9)); Rpz10=Rpz10+cod(n-i(10))*cod(n-j(10)); Rpz11=Rpz11+cod(n-i(11))*cod(n-j(11)); Rpz12=Rpz12+cod(n-i(12))*cod(n-j(12)); end; teta1=[Rpz1 Rpz2 Rpz3;Rpz4 Rpz5

B(1)=1; B(M-1)=beta(1); B(M)=beta(2); B(M+1)=beta(3); %-----------------------------Filtrare P(z)-----------------------else%daca perioada pitch este mai mica de 2 vom lasa parametrii filtrului pitch 0 inafara de primul. B=zeros(1,length(cod)+1); B(1)=1; end; P=B;

8.inv_filter_celp.m

function cod=inv_filter_celp(cdFP,A,P); %[cod]=filter_celp(cdFP,A,P); %parametrii:o seventa de esantioane coef A(z) sicoef P(z) %returneaza:secventa filtrata de 1/P(z) apoi de 1/A(z) cod=filter(1,P,cdFP); cod=filter(1,A,cod);

Rpz6;Rpz7 Rpz8 Rpz9]; teta2=[Rpz10; Rpz11; Rpz12;]; beta=inv(teta1)*teta2; s=abs(beta(1))+abs(beta(2))+abs(beta(3)); c=0.3; if s>1 beta(1)=c*beta(1); beta(2)=c*beta(2); beta(3)=c*beta(3); end; B=zeros(1,length(cod)+1);

9.vqtrain.m

function

codebook=vqtrain(DB,

SIZE,

NOITER, STARTSTEP, VERBOSE) if nargin