lvox2
DESCRIPTION
laboratorTRANSCRIPT
%--------------------------------
%--------------------------------
%LABVOX 2
%--------------------------------
% 2.1. FORMA SEMNALULUI VOCAL
% Se incarca fisierul de semnal corespunzator cuvantului 'SASE'
load sase
% Se vizualizeaza forma semnalului
%plot(sase), title('Cuvantul "SASE"'),xlabel('Esantioane'),...
% ylabel('Amplitudine')
%pause
% Se definesc patru intervale de semnal corespunzatoare (aproximativ)
% celor patru litere ale cuvantului
%sh_int=1:1400;
%a_int=1401:2600;
%s_int=2601:4000;
%e_int=4000:5200;
% Se vizualizeaza zona de semnal asociata fonemului "SH"
%subplot(2,2,1),plot(sase(sh_int)),title('Fonemul "SH"')
%axis([sh_int(1) sh_int(length(a_int)) min(sase) max(sase)])
% Se procedeaza similar pentru zonele de semnal asociate fonemelor
% "A", "S", "E"
%subplot(2,2,2),plot(a_int,sase(a_int)),title('Fonemul "A"')
%axis([a_int(1) a_int(length(a_int)) min(sase) max(sase)])
%subplot(2,2,3),plot(s_int,sase(s_int)),title('Fonemul "S"'),...
% xlabel('Esantioane')
%axis([s_int(1) s_int(length(a_int)) min(sase) max(sase)])
%subplot(2,2,4),plot(e_int,sase(e_int)),title('Fonemul "E"'),...
% xlabel('Esantioane')
% axis([e_int(1) e_int(length(a_int)) min(sase) max(sase)])
pause
% R1. Caracterizati forma de unda corespunzatoare fiecarui fonem
% 2.2. PARAMETRI IN DOMENIUL TIMP AI SEMNALULUI VOCAL ESTIMATI PE
% TERMEN SCURT: ENERGIE, MAGNITUDINE, RATA DE TRECERI PRIN ZERO
% Se defineste frecventa de esantionare
Fs=8000;
% Se examineaza informatiile existente despre comenzile f_eng, f_mag,
% f_zcr.
%help f_eng
% Se calculeaza si se afiseaza energia semnalului pe fiecare
% fereastra, conform formulei
% ....
% folosind intervale de 25 ms, fara suprapunerea intervalelor, cu
% frecventa de esantionare data
%[ener,scala]=f_eng(sase,0.025,0,Fs);
%subplot(3,1,1),stairs(scala,ener),title('Energie/interval')
% Se procedeaza similar pentru magnitudinea respectiv rata de treceri
% prin zero a semnalului, conform formulelor
% ....
% ....
%[magn,scala]=f_mag(sase,0.025,0,Fs);
%subplot(3,1,2),stairs(scala,magn),title('Magnitudine/interval')
%[rtz,scala]=f_zcr(sase,0.025,0,Fs);
%subplot(3,1,3),stairs(scala,rtz),...
% title('Rata de treceri prin zero/interval'),xlabel('Timp (s)')
%pause
% R2. Caracterizati cele patru foneme din punctul de vedere al
% valorilor obtinute pentru marimile ener, magn si rtz
% 2.3. PARAMETRI IN DOMENIUL FRECVENTA AI SEMNALULUI VOCAL ESTIMATI PE
% TERMEN SCURT: FORMANTI, FRECVENTA FUNDAMENTALA
% Se calculeaza si se afiseaza D.S.P. pentru intervalele de semnal
% indicate anterior, folosind intervale de 256 esantioane, frecventa de
% esantionare data, fereastra Hanning de 256 esantioane si suprapunere
% de 128 esantioane
%[P_sh,f1]=psd(sase(sh_int),256,Fs,256,128);
%subplot(2,2,1),plot(f1,10*log10(P_sh)),...
% title('D.S.P. fonem "SH"'),ylabel('decibeli')
%[P_a,f1]=psd(sase(a_int),256,Fs,256,128);
%subplot(2,2,2),plot(f1,10*log10(P_a)),...
% title('D.S.P. fonem "A"'),ylabel('decibeli')
%[P_s,f1]=psd(sase(s_int),256,Fs,256,128);
%subplot(2,2,3),plot(f1,10*log10(P_s)),title('D.S.P. fonem "S"'),...
% xlabel('Frecventa (Hz)'),ylabel('decibeli')
%[P_e,f1]=psd(sase(e_int),256,Fs,256,128);
%subplot(2,2,4),plot(f1,10*log10(P_e)),title('D.S.P. fonem "E"'),...
% xlabel('Frecventa (Hz)'),ylabel('decibeli')
%pause
% R3. Comparati graficele obtinute. Notati frecventele la care apar
% principalele maxime locale ale D.S.P. pentru cele patru foneme.
% Justificati prezenta acestora.
% Observati pozitia primului maxim semnificativ pentru fonemele
% "A" si "E".
% Se sterge fereastra grafica
close
% Se afiseaza din nou D.S.P., in prima sa parte, pentru intervalele de
% semnal "sonore" (corespunzatoare fonemelor "A" si "E")
% Se identifica primul maxim semnificativ si se determina frecventa la
% care apare acesta.
%[P_a,f1]=psd(sase(a_int),256,Fs,256,128);
%plot(f1(1:20),10*log10(P_a(1:20))),title('D.S.P. fonem "A"'),...
% xlabel('Frecventa (Hz)'),ylabel('decibeli')
%pause
%[P_e,f1]=psd(sase(e_int),256,Fs,256,128);
%plot(f1(1:20),10*log10(P_e(1:20))),title('D.S.P. fonem "E"'),...
% xlabel('Frecventa (Hz)'),ylabel('decibeli')
%pause
% R4. Explicati semnificatia acestei frecvente pentru intervalele de
% semnal "sonore"
% 2.4. ANALIZA PRIN PREDICTIE LINIARA
% 2.4.1. COEFICIENTI DE PREDICTIE, COEFICIENTI DE REFLEXIE
% Se defineste si se afiseaza un interval de semnal din fonemul "A", cu
% lungimea de 200 esantioane
L=200;
x=sase(1710:1710+L-1);
plot(x),title('Semnal vocal, fonemul "A"'),xlabel('Esantioane'),...
ylabel('Amplitudine')
pause
% Se va modela semnalul vocal prin predictie liniara (LPC) cu 10
% coeficienti. Coeficientii de predictie se determina din relatia
% matriciala
% ...
% Se examineaza informatiile existente despre comanda xcorr
% Se calculeaza si se afiseaza functia de autocorelatie a semnalului
%rx=xcorr(x);
%plot(rx),title('Functia de autocorelatie')
%pause
% Se formeaza si se afiseaza un vector continand valorile functiei de
% autocorelatie rx(0) ... rx(10)
%R=rx(L:L+9)
%plot(R),title('Vectorul R')
%axis([1 10 min(R) max(R)])
%pause
% Se examineaza informatiile existente despre comanda toeplitz
% Se formeaza si se examineaza matricea Toeplitz corespunzatoare
% vectorului R
%T=toeplitz(R)
% R5. Descrieti structura matricei rezultate
% Se formeaza vectorul termen liber din ecuatia matriciala
%R2=-rx(L+1:L+10)
% Se examineaza informatiile existente despre comanda inv
% Se determina vectorul coeficientilor de predictie
%A=inv(T)*R2
% Se adauga coeficientul A(0)=1 si se transforma in vector linie
%A=[1 A']
% Se examineaza informatiile existente despre comenzile levinson, lpc
% Se modeleaza vectorul de semnal x prin predictie liniara cu 10
% coeficienti folosind comanda lcp
%A1=lpc(x,10)
% Se compara rezultatele obtinute examinand diferenta celor doi vectori
% cu coeficientii de predictie
%A-A1
% Se examineaza informatiile existente despre comanda poly2rc
% Se transforma coeficientii de predictie, A(i) in coeficienti de
% reflexie K(i)
%K=poly2rc(A)
% R6. Faceti observatii asupra dinamicii coeficientilor A(i) si K(i)
% 2.4.2. FILTRUL DE PREDICTIE. EROAREA DE PREDICTIE
% Pentru a realiza un filtru digital de tip "numai poli", avand valorile
% vectorului A drept coeficienti ai numitorului, se formeaza un vector
% B corespunzator numaratorului, conform formulei
% ...
%B=[1 zeros(1,length(A)-1)]
% Se examineaza informatiile existente despre comanda impz
% Se afiseaza raspunsul la impuls al filtrului digital B/A
%plot(impz(B,A)),...
% title('Raspuns la impuls al filtrului de predictie cu 10 coef.'),...
% xlabel('Esantioane')
%pause
% Se compara semnalul vocal original cu cel rezultat in urma procesului
% de analiza prin predictie liniara urmata de sinteza
%subplot(2,1,1),plot(x),...
% title('Semnal vocal original, fonemul "A"')
%subplot(2,1,2),plot(impz(B,A,L)),...
% title('Raspuns la impuls al filtrului de predictie cu 10 coef.'),...
% xlabel('Esantioane')
%pause
% Se calculeaza Transformata Fourier a unui interval cu lungimea de 40
% esantioane din semnalul vocal original, ponderat cu o fereastra
% Hamming si se afiseaza spectrul de putere
%X=fft(x(1:40).*hamming(40)');
%f=(0:length(X)/2-1)/length(X)*Fs;
%subplot(2,1,1),...
% plot(f,10*log10(X(1:length(X)/2).*conj(X(1:length(X)/2)))),...
% title('Spectru de putere semnal vocal original')
% Se afiseaza spectrul de putere al raspunsului la impuls al filtrului
% de predictie, cu o lungime de 40 esantioane
%XR=fft(impz(B,A,40)'.*hamming(40)');
%subplot(2,1,2),...
% plot(f,10*log10(XR(1:length(XR)/2).*conj(XR(1:length(XR)/2)))),...
% title('Spectru de putere semnal sintetizat'),...
% xlabel('Frecventa (Hz)')
%pause
% R7. Apreciati diferentele dintre cele doua rezultate afisate.
% Justificati alegerea lungimii intervalului de 40 esantioane
% Se examineaza informatiile existente despre comenzile dbode, logspace
% Se afiseaza diagrama Bode a filtrului digital calculat anterior
%dbode(B,A,2*pi/Fs)
%pause
% Observatie: datorita factorului 2*pi, diagramele vor afisa
% magnitudinea si faza in raport de frecventa (Hz) si nu de perioada
% (rad/s)
% Se afiseaza aceasi diagrama pentru intervalul 400 - 4000 Hz
%dbode(B,A,2*pi/Fs,logspace(log10(400),log10(4000)))
%pause
% R8. Comentati forma filtrului digital B/A. Corelati aceasta forma
% cu graficul spectrului de putere
% Se filtreaza semnalul vocal cu un filtru digital, inversul
% filtrului de predictie, rezultatul filtrarii reprezantand eroarea
% de predictie
close
%plot(filter(A,B,x)),title('Eroarea de predictie'),...
% xlabel('Esantioane')
%pause
% Se afiseaza simultan semnalul vocal si eroarea de predictie
%subplot(2,1,1),plot(x),title('Semnal vocal original')
%axis([1 length(x) min(x) max(x)])
%subplot(2,1,2),plot(filter(A,B,x)),
% title('Eroarea de predictie'),...
%axis([1 length(x) min(x) max(x)])
%pause
% R9. Comparati formele de unda din punctul de vedere al formei,
% dinamicii si periodicitatii
% Se sterge fereastra grafica
%close
% Se defineste si se afiseaza un interval de semnal din fonemul "SH", cu
% lungimea de 200 esantioane
%y=sase(290:290+L-1);
%plot(y),title('Semnal vocal, fonemul "SH"'),...
% xlabel('Esantioane'),ylabel('Amplitudine')
%pause
% Se repeta operatiile de modelare prin predictie liniara
%A=lpc(y,10)
%B=[1 zeros(1,length(A)-1)]
% Se creaza un vector cu lungimea de 200 elemente, continand un semnal
% aleator cu distributie uniforma si medie zero
%rand('seed',0);
%s=2.*rand(1,L)-1;
% Se examineaza informatiile existente despre comanda filter
% Se afiseaza raspunsul filtrului digital B/A la un semnal de excitatie
% de tip zgomot
%plot(filter(B,A,s)),title('Raspuns la semnal aleator al filtrului de predictie cu 10 coef.'),xlabel('Esantioane')
%pause
% Se compara semnalul vocal original cu cel rezultat in urma procesului
% de analiza prin predictie liniara urmata de sinteza
%subplot(2,1,1),plot(y),...
% title('Semnal vocal original, fonemul "SH"')
%subplot(2,1,2),plot(filter(B,A,s)),...
% title('Raspuns la semnal aleator al filtrului de predictie cu 10 coef.'),...
% xlabel('Esantioane')
%pause
% Se repeta operatiile privitoare la estimarea si afisarea spectrului
% de putere pentru cele doua semnale
%Y=fft(y.*hamming(length(y))');
%f=(0:length(Y)/2-1)/length(Y)*Fs;
%subplot(2,1,1),...
% plot(f,10*log10(Y(1:length(Y)/2).*conj(Y(1:length(Y)/2)))),...
% title('Spectru de putere semnal vocal original')
% Se afiseaza spectrul de putere al raspunsului la impuls al filtrului
% de predictie, cu o lungime de 40 esantioane
%YR=fft(filter(B,A,s).*hamming(length(s))');
%subplot(2,1,2),...
% plot(f,10*log10(YR(1:length(YR)/2).*conj(YR(1:length(YR)/2)))),...
% title('Spectru de putere semnalului sintetizat'),...
% xlabel('Frecventa (Hz)')
%pause
% Se afiseaza simultan semnalul vocal si eroarea de predictie
%subplot(2,1,1),plot(y),title('Semnal vocal original')
%axis([1 length(y) min(y) max(y)])
%subplot(2,1,2),plot(filter(A,B,y)),
% title('Eroarea de predictie'),...
%axis([1 length(y) min(y) max(y)])
%pause
% 2.4.3. ORDINUL PREDICTORULUI
% Se determina si se afiseaza grafic raspunsul la impuls cu lungimea
% de 40 esantioane, al unui filtru de predictie cu 4 poli care
% modeleaza semnalului x
%A4=lpc(x,4);
%B4=[1 zeros(1,length(A4)-1)];
%subplot(2,3,1),plot(impz(B4,A4,40)),title('LPC 4')
% Se procedeaza similar pentru filtre cu 8, 10, 12, 16,d 20
%A8=lpc(x,8);
%B8=[1 zeros(1,length(A8)-1)];
%subplot(2,3,2),plot(impz(B8,A8,40)),title('LPC 8')
A10=lpc(x,10);
B10=[1 zeros(1,length(A10)-1)];
subplot(2,3,3),plot(impz(B10,A10,40)),title('LPC 10')
%A12=lpc(x,12);
%B12=[1 zeros(1,length(A12)-1)];
%subplot(2,3,4),plot(impz(B12,A12,40)),title('LPC 12')
%A16=lpc(x,16);
%B16=[1 zeros(1,length(A16)-1)];
%subplot(2,3,5),plot(impz(B16,A16,40)),title('LPC 16')
%A20=lpc(x,20);%B20=[1 zeros(1,length(A20)-1)];
%subplot(2,3,6),plot(impz(B20,A20,40)),title('LPC 20')
pause
close
% R10. Apreciati care este ordinul minim al filtrului de predictie pentru
% care se obtine un raport optim performante/cost de implementare
% 2.4.4. STABILITATEA FILTRULUI DE PREDICTIE
% Se examineaza informatiile existente despre comanda zplane
% Se afiseaza singularitatile filtrului de predictie cu 4 coeficienti
% in planul z
%subplot(2,3,1),zplane(B4,A4),title('LPC 4')
% Se procedeaza similar pentru filtrele cu 8, 10, 12, 16, 20 coeficienti
%subplot(2,3,2),zplane(B8,A8),title('LPC 8')
%subplot(2,3,3),zplane(B10,A10),title('LPC 10')
%subplot(2,3,4),zplane(B12,A12),title('LPC 12')
%subplot(2,3,5),zplane(B16,A16),title('LPC 16')
%subplot(2,3,6),zplane(B20,A20),title('LPC 20')
% R11. Observati dispunerea singularitatilor filtrelor de predictie si
% apreciati stabilitatea filtrelor respective
% 2.5 MODELAREA ARMA
% Se va examina metoda Steiglitz-McBride
% Se examineaza informatiile existente despre comenzile stmcb si prony.
x=1/max(x)*x(1:40)';
[E10,F10]=stmcb(x,10,10)
%Scrieti coeficientii astfel determinati
%Pentru a putea compara functiile lpc si stmcb calculam
%suma patratelor erorilor in fiecare caz.
%Observatii.
[x-impz(B10,A10,40) x-impz(E10,F10,40)]
sum(ans.^2)
%Se determina si se afiseaza grafic raspunsul la impuls cu lungimea de
% 40 de esantioane al unui filtru I.I.R cu 10 poli si 10 zerouri si se
%compara cu raspunsul la impuls al unui filtru de predictie cu 10 poli
%si cu semnalul x.
subplot(3,1,1),plot(impz(B10,A10,40)),title('LPC 10')
subplot(3,1,2),plot(x),title('semnal original')
subplot(3,1,3),plot(impz(E10,F10,40)),title('STMCB 10 X 10 ')
pause
close
%Se afiseaza polii si zerourile filtrului I.I.R. obtinut si se calculeaza
%modulul polilor
subplot(2,1,1),zplane(E10,F10),title('STMCB 10 X 10')
v1=abs(roots(E10))
% R 12 Apreciati stabilitatea filtrului obtinut.