WOJSKOWA AKADEMIA TECHNICZNA
im. Jarosława Dąbrowskiego
SYSTEMY DIALOGOWE
SPRAWOZDANIE Z ĆWICZENIA nr 4
Temat: SYNTEZA SYGNAŁU MOWY METODĄ KONKATENACJI
Wykonał: szer. pchor. Michał NADOLNY
Grupa: I9G1S1
1. TREŚĆ ZADANIA
Temat: SYNTEZA SYGNAŁU MOWY METODĄ KONKATENACJI
1. Dla sygnału s(n) wykorzystywanego w ćwiczeniu nr 2 utworzyć dwa sygnały: s1(n) zawierający wyłącznie samogłoski i s2(n)zawierający wyłącznie spółgłoski. Odsłuchać – sformułować wnioski dla konkatenacyjnej syntezy sygnałów.
2. Wykorzystując sygnały z ćwiczeń nr 2 i 3 dokonać syntezy
dowolnej
wypowiedzi (innej niż nagrana) jako konkatenacji wydzielonych (za pomocą programu PRAAT):
- fonemów
- difonów
- trifonów
3. Zastosować przekształcone okno Hanninga do wygładzenia nieciągłości konkatenacji jednostek fonetycznych.
4. Ocenić jakość syntezy sygnału mowy:
- ocena subiektywna: poprzez odsłuchanie sygnału
zsyntezowanego
- ocena obiektywna poprzez porównanie sygnału zsyntezowanego
z sygnałem rzeczywistym, zarejestrowanym przez wykonawcę ćwiczenia
(w dziedzinie czasu i częstotliwości).
2. WYNIKI Zad 1.
W celu realizacji pierwszego zadania wykorzystano nagranie z ćwiczenia laboratoryjnego nr 2 czyli „telefon”. Sygnał dźwiękowy nagrany został w trybie mono z częstotliwością próbkowania fs=22050
Hz. Słowo zawiera:
- trzy samogłoski „e”, „e” i „o”;
- spółgłoskę nosową „n”;
- spółgłoskę trącą bezdźwięczną „f”;
- spółgłoskę zwartą „t”;
-spółgłoskę boczną półotwartą „l”;
Plik dźwiękowy z ćwiczenia nr 2 znajduje się w folderze „nagrania”,
nazywa się „telefon.wav”. Plik podzieliłem na fony, difony, oraz trifony za pomocą programu PRAAT. Z wydzielonych fonemów utworzyłem dwa pliki dźwiękowe za pomocą programu Audacity:
Samogłoski s1(n), plik eoe.wav
Spółgłoski s2(n), plik tlfn.wav
WNIOSKI do zad.1.
Podczas porównywania konkatenacji spółgłosek, oraz samogłosek można usłyszeć znaczące różnice. W pliku z samymi samogłoskami wyraźnie słychać każdą samogłoskę, natomiast przy spółgłoskach trudno jest rozpoznać każdy fonem.
Zad.2.
Z wyrazów, które zostały nagrane wcześniej takie jak: jeden, cztery, osiem, trzy utworzyłem z fonemów wyraz: jemy. Natomiast do otrzymania tego samego słowa przy konkatenacji difonów, oraz trifonów potrzebowałem nagrać takie dźwięki jak: jedziemy, dajemy, mamy.
Konkatencja fonów: „j-e-m-y”.
Z wyrazów:
• jeden (fonem j);
• cztery(fonem e);
• osiem (fonem m);
• trzy (fonem y).
Konkatencja difonów: „_j-je-em-my-y_”
Z wyrazów:
• jeden (difon _j),
• jedziemy (difon je),
• siedem(difon em),
• jedziemy (difon my),
• trzy (difon m_).
Konkatencja trifonów: „_je-jem-emy-my_”
Z wyrazów:
• jeden (trifon _je),
• dajemy(trifon jem),
• jedziemy (trifon emy),
• mamy(trifon my_).
%fonemy
[j,fj]=wavread('fonemy\j.wav');
[e,fe]=wavread('fonemy\e.wav');
[m,fm]=wavread('fonemy\m.wav');
[y,fy]=wavread('fonemy\y.wav');
fon_jemy=[j', e', m',y'];
wavplay(fon_jemy,0.95*fm); %odtworzenie polaczonego dzwieku
wavwrite(fon_jemy,fj,'wynik\jemy.wav');%zapis poloczonego dzwieku
dl_fon_jemy=length(fon_jemy);
fon_czas=(0:dl_fon_jemy-1)/(fm);%obliczenie czasu trwania dzwieku
figure(1)
plot(fon_czas,fon_jemy);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy fonemow');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
Rys.1. Listing programu odpowiedzialnego za syntezę fonemów i wyświetlenie wykresu.
Rys.2. Wykres sygnału „jemy” uzyskanego z konkatencji fonów.
[dif_j,f_j]=wavread('difony\_j1.wav');
[dif_je,fje]=wavread('difony\je.wav');
[dif_em,fem]=wavread('difony\em.wav');
[dif_my,fmy]=wavread('difony\my.wav');
[dif_y_,fy_]=wavread('difony\y_.wav');
dl_d1=length(dif_j);
dl_d2=length(dif_je);
dl_d3=length(dif_em);
dl_d4=length(dif_my);
dl_d5=length(dif_y_);
dif_1=dif_j(100:dl_d1);
dif_2=dif_je(700:dl_d2-100);
dif_3=dif_em(1000:dl_d3-500);
dif_4=dif_my(100:dl_d4-1000);
dif_5=dif_y_(300:dl_d5-1000);
dif_jemy=[dif_1', dif_2', dif_3' ,dif_4' ,dif_5'];
wavplay(dif_jemy,f_j);%odtworzenie polaczonego dzwieku
%wavwrite(dif_jemy,f_j,'wynik\jemy_difony.wav');%zapis poloczonego dzwieku
dif_czas=(0:length(dif_jemy)-1)/(f_j);%obliczenie czasu trwania dzwieku
figure(3)
plot(dif_czas,dif_jemy);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy difonow');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
l=length(dif_jemy);
Rys.3. Listing programu odpowiedzialnego za syntezę difonów i wyświetlenie wykresu.
Rys.4. Wykres sygnału „jemy” uzyskanego z konkatencji difonów.
%trifony
[tri_je,f_je]=wavread('trifony\_je.wav');
[tri_jem,fjem]=wavread('trifony\jem1.wav');
[tri_emy,femy]=wavread('trifony\emy.wav');
[tri_my_,fmy_]=wavread('trifony\my_.wav');
dl_t1=length(tri_je)
dl_t2=length(tri_jem)
dl_t3=length(tri_emy);
dl_t4=length(tri_my_);
trifon_1=tri_je(500:dl_t1-500);
trifon_2=tri_jem(2500:dl_t2-500);
trifon_3=tri_emy(6200:dl_t3-2000);
trifon_4=tri_my_(2500:dl_t4-2500);
tri_jemy=[trifon_1', trifon_2',trifon_3',trifon_4'];
wavplay(tri_jemy,fm*1.9);%odtworzenie polaczonego dzwieku
%wavwrite(tri_jemy,f_je,'wynik\trifon_jemy.wav');%zapis poloczonego dzwieku
trifon_czas=(0:length(tri_jemy)-1)/(f_je);%obliczenie czasu trwania dzwieku
figure(5)
plot(trifon_czas,tri_jemy);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy trifonow');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
Rys.5. Listing programu odpowiedzialnego za syntezę trifonów i wyświetlenie wykresu.
Rys.6. Wykres sygnału „jemy” uzyskanego z konkatencji trifonów.
Zad.3
fon_h1=fon_jemy(600:800).*(1-hann(201)');
fon_h2=fon_jemy(1500:1700).*(1-hann(201)');
fon_h3=fon_jemy(2500:2750).*(1-hann(251)');
fon_h=fon_jemy;
fon_h(600:800)=fon_h1;
fon_h(1500:1700)=fon_h2;
fon_h(2500:2750)=fon_h3;
%wavplay(fon_h,fm*0.95); %odtworzenie polaczonego dzwieku
%wavwrite(fon_h,fm,'wynik\jemy_wygladz.wav');%zapis poloczonego dzwieku
figure(2)
plot(fon_czas,fon_h);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy fonow z wygladzeniem miejsc polaczem');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
Rys.7. Listing programu odpowiedzialnego za wygładzenie miejsca łączenia fonów, zapisu nowopowstałego pliku i wyświetlenie wykresu.
Rys.8. Wykres sygnału „meta” uzyskanego z konkatencji fonów po wygładzeniu nieciągłości konkatencji.
dif_h1=dif_jemy(400:600).*(1-hann(201)');
dif_h2=dif_jemy(1000:1200).*(1-hann(201)');
dif_h3=dif_jemy(1600:1800).*(1-hann(201)');
dif_h4=dif_jemy(3800:4200).*(1-hann(401)');
dif_h=dif_jemy;
dif_h(400:600)=dif_h1;
dif_h(1000:1200)=dif_h2;
dif_h(1600:1800)=dif_h3;
dif_h(3800:4200)=dif_h4;
wavplay(dif_h,fm*0.95); %odtworzenie polaczonego dzwieku
%wavwrite(dif_h,fm,'wynik\jemy_difon_wygladz.wav');%zapis poloczonego dzwieku
figure(4)
plot(dif_czas,dif_h);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy difonow z wygladzeniem miejsc polaczem');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
Rys.9. Listing programu odpowiedzialnego za wygładzenie miejsca łączenia difonów, zapisu nowopowstałego pliku i wyświetlenie wykresu.
Rys.10. Wykres sygnału „meta” uzyskanego z konkatencji difonów po wygładzeniu nieciągłości konkatencji.
tri_jemy_h1=tri_jemy(2150:2300).*(1-hann(151)');
tri_jemy_h2=tri_jemy(3700:3850).*(1-hann(151)');
tri_jemy_h3=tri_jemy(7350:7550).*(1-hann(201)');
tri_jemy_h=tri_jemy;
%Wygladzenie sygnalu
tri_jemy_h(2150:2300)=tri_jemy_h1;
tri_jemy_h(3700:3850)=tri_jemy_h2;
tri_jemy_h(7350:7550)=tri_jemy_h3;
wavplay(tri_jemy_h,fm*1.9); %odtworzenie polaczonego dzwieku
%wavwrite(tri_jemy_h,fm*1.9,'wynik\trifon_jemy_hamming.wav');%zapis poloczonego dzwieku
figure(6)
plot(trifon_czas,tri_jemy_h);%rysowanie wykresu
title('Wykres przebiegu dzwieku "jemy" uzyskanego z syntezy trifonow z wygladzeniem miejsc polaczem');
ylabel('a - amplituda');
xlabel('t - czas');
grid on;
Rys.11. Listing programu odpowiedzialnego za wygładzenie miejsca łączenia trifonów, zapisu nowopowstałego pliku i wyświetlenie wykresu.
Rys.12. Wykres sygnału „meta” uzyskanego z konkatencji trifonów po wygładzeniu nieciągłości konkatencji.
Rys.13. Fragment wykresu sygnału przedstawiający nieciągłość
konkatencji podczas syntezy
Rys.14. Fragment sygnału przedstawiający wyrównanie nieciągłości
WNIOSKI do zad 2,3,4
W trakcie wykonywania zadania udało się konkatenacji fonemów, difonów oraz trifonów, w wyniku czego uzyskałem 3 wyrazy, które zostały zapisane do folderu: „wynik”.
Podczas oceny subiektywnej w trakcie przesłuchiwania powstałych dźwięków zauważyłem znaczące różnice w dźwiękach. Najczystsze nagranie otrzymałem w wyniku konkatenacji trifonów, najgorszą natomiast przy fonemach. Spowodowane jest to tym, że przy część końcowa trifonu łączy się z częścią początkową kolejnego tri fonu, co było niemożliwe przy konkatenacji fonemów. Po użyciu okna Hanninga widać niewielką poprawę jakości dźwięku w miejscach, gdzie zaszła konkatenacja.
Podczas oceny obiektywnej uzyskanego zsyntezowanego dźwięku można zauważyć odbiegające od rzeczywistego dźwięku różnice. Może to być spowodowane słabej jakości urządzeniem rejestrującym oraz brak profesjonalnego studia.