Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie

Praca magisterska

Optymalizacja kodera mowy standardu LPC-10 Grzegorz Suder

Kierunek: Elektrotechnika Specjalność: Inżynieria komputerowa w przemyśle Promotor

Nr albumu: 111848

dr inż. Jarosław Bułat

Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Kraków 2006

Oświadczenie autora Ja, niżej podpisany Grzegorz Suder oświadczam, że praca ta została napisana samodzielnie i wykorzystywała (poza zdobytą na studiach wiedzą) jedynie wyniki prac zamieszczonych w spisie literatury.

.................................... (Podpis autora)

Oświadczenie promotora Oświadczam, że praca spełnia wymogi stawiane pracom magisterskim.

.................................... (Podpis promotora)

Spis treści Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozdział 1. Parametryczne kodery mowy . . . . . . . . . . . . . . . . . . . . 1.1. Wprowadzenie do przetwarzania i kompresji mowy . 1.2. Koder mowy standardu LPC–10 . . . . . . . . . . . 1.2.1. Koder . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. Dekoder . . . . . . . . . . . . . . . . . . . . . . 1.3. Algorytm wyznaczania współczynników LSP . . . . 1.4. Przykład implementacji procedury LSP w języku C

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

Rozdział 2. Metody kwantyzacji sygnału wielowymiarowego . . . . . . . 2.1. Kwantyzacja skalarna . . . . . . . . . . . . . 2.1.1. Podstawowe definicje i własności . . . . . 2.1.2. Kwantyzator równomierny . . . . . . . . 2.1.3. Kwantyzacja nierównomierna . . . . . . . 2.2. Kwantyzacja wektorowa . . . . . . . . . . . . 2.2.1. Podstawowe definicje i własności . . . . . 2.2.2. Standardowy algorytm LBG . . . . . . . 2.2.3. Technika podziałów . . . . . . . . . . . . 2.2.4. Metoda symulowanego wyżarzania . . . . 2.2.5. Kwantyzatory wieloetapowe . . . . . . . 2.3. Algorytmy przeszukiwania książek kodowych

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Rozdział 3. Implementacja programowa kodera mowy . . . . . . . . . . . 3.1. 3.2. 3.3. 3.4. 3.5. 3.6.

Implementacja kodera LPC–10 . . . . . . . . . . . Wybór danych wejściowych . . . . . . . . . . . . . Implementacja generatorów książek kodowych . . . Wyznaczanie książki kodowej pierwszego poziomu Wyznaczenie książki kodowej drugiego poziomu . . Zaproponowane ulepszenia kodera LPC–10 . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

Rozdział 4. Testy porównawcze jakości kompresji mowy . . . . . . . . . .

3 5 5 13 14 16 18 21 23 23 23 25 28 31 31 33 34 36 36 39 42 42 43 46 51 54 56

. . . . . .

66 66 67 69 70 70 73

Wnioski końcowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

78

4.1. Miary jakości mowy . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Obiektywna miara jakości . . . . . . . . . . . . . . . . . . . . 4.1.2. Subiektywna miara jakości . . . . . . . . . . . . . . . . . . . . 4.2. Porównanie jakości kompresji mowy dla różnych książek kodowych 4.2.1. Obiektywna jakość wyznaczonych książek kodowych . . . . . . 4.2.2. Subiektywna jakość wyznaczonych książek kodowych . . . . .

1

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

2

Spis treści

Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dodatek A. Opis funkcji generujących książki kodowe . . . . . . . . . . . Dodatek B. Opis klas i funkcji kodera oraz dekodera LPC-10 . . . . . . B.1. LPC10ExternalData B.2. LPC10Params . . . B.3. Koder . . . . . . . . B.4. Dekoder . . . . . . .

Dodatek Dodatek Dodatek Dodatek

C. D. E. F.

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

Tabele . . . . . . . . . . . . . . Skrypty języka Matlab . . . Opis zawartości CDROM-u CDROM . . . . . . . . . . . . .

80 82

. . . .

84 84 85 86 87

. . . . . . . . . . . . . . . . . . . . .

89

. . . . . . . . . . . . . . . . . . . . .

94

. . . . . . . . . . . . . . . . . . . . .

98

. . . . . . . . . . . . . . . . . . . . .

99

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

Wstęp Tematem przedstawionej pracy magisterskiej, jest optymalizacja kodera mowy standardu LPC–10 oraz wyznaczenie najlepszej książki kodowej dla kwantyzatora wektorowego współczynników LSP filtra traktu głosowego. Gwałtowny rozwój technologii w ostatnich latach związanych z transmisją głosu takich jak komunikacja radiowa, sieci komórkowe czy też zdobywające coraz większą popularność rozmowy głosowe transmitowane za pomocą internetu (VoIP, ang. Voice over Internet Protocol), powodują wzrost wymagań co do redukcji przepływności bitowej strumienia danych skompresowanej mowy przy zachowaniu dobrej jakości przesyłanego dźwięku. Kompresji sygnału mowy poświęconych zostało wiele publikacji [5, 11, 16, 17], jednak w większości przypadków nie dotyczą one mowy polskiej. Brak jest również badań jakościowych przeprowadzonych pod tym kątem dla koderów o niskich przepływnościach bitowych jak i wygodnych w użyciu programowych implementacji algorytmu przetwarzania i kompresji ludzkiej mowy dla celów dydaktycznych. Kodery mowy takie jak HVXC czy G.729, w znacznym stopniu bazują na algorytmie analizy–syntezy będącym jednym z punktów przedstawionej pracy. Podstawą leżącą u tej idei kompresji mowy jest zamodelowanie ludzkiego układu mowy, obejmującego szereg narządów. Bogata wiedza na temat wytwarzania mowy i jej percepcji, pozwala wyznaczyć szereg parametrów najistotniejszych z punktu widzenia kompresji, np. współczynników filtra traktu głosowego czy częstotliwości tonu podstawowego. Kwantyzacja wektorowa będąca jednym z przedmiotów badań tej pracy, może posłużyć nie tylko do zmniejszenia przepływności bitowej strumienia danych skompresowanej mowy ale i również do rozpoznawania mowy co otwiera szereg możliwości zastosowań zmodyfikowanego kodera mowy wraz z wyznaczonymi książkami kodowymi. Zaprezentowana praca składa się z dwóch części: opisu teoretycznego poruszanych zagadnień obejmującego dwa pierwsze rozdziały, oraz pracy autorskiej. W części teoretycznej opisano algorytm działania kodera mowy standardu LPC–10, opis przekształcenia współczynników filtra traktu głosowego do postaci liniowych par spektralnych (LSP) oraz opis kwantyzacji skalarnej i wektorowej. Szczególny nacisk został położony na wyprowadzenie współczynników oraz omówieniu różnych metod kwantyzacji wektorowych wraz z algorytmami przeszukiwania książek kodowych. Część autorska obejmuje implementację kodera mowy standardu LPC–10 w języku C++ wraz z zaproponowanymi ulepszeniami, zgromadzenie próbek dźwiękowych stanowiących zbiór treningowy, zaimplementowanie różnych metod kwantyzacji współczynników LSP oraz wyznaczenie dla nich najlepszej pod względem minimalizacji błędu średniokwadratowego (MSE) książki kodowej. Ostatni rozdział poświęcony jest 3

4

Wstęp

badaniom jakości sygnału mowy poddanemu schematowi kompresji według schematu analiza-synteza oraz kwantyzacji różnymi metodami. Głównym źródłem informacji o prezentowanych tutaj algorytmach była literatura poświęcona metodom kompresji mowy, w szczególności pozycje [1, 2, 5]. Ostatnim celem prezentowanej pracy jest gotowa do wykorzystania implementacja kodera mowy bazującego na standardzie LPC–10 wraz z przygotowaną książką kodową zoptymalizowaną pod kątem mowy polskiej, która mogłaby znaleźć zastosowanie w dziedzinach związanych z przetwarzaniem i cyfrową transmisją sygnału mowy. Mam nadzieję, że wyznaczone książki kodowe oraz wyniki badań jakości mowy, przyczynią się do polepszenia jakości jak i stopnia kompresji mowy oraz stanowić będą użyteczny materiał dydaktyczny.

Rozdział 1 Parametryczne kodery mowy 1.1. Wprowadzenie do przetwarzania i kompresji mowy Podstawowym pojęciem związanym z przetwarzaniem danych w procesie komunikacji przez cyfrowe media takie jak internet, jest pojęcie kompresji danych – czyli takie przetworzenie sygnału wejściowego, by zajmował on mniejszą ilość bitów. Generalnie można dokonać podziału algorytmów kompresji na: – kompresję bezstratną (np. kodowanie arytmetyczne, kodowanie Huffmana), – kompresję stratną (np. kwantyzacja skalarna i wektorowa, kodowanie podpasmowe). W przypadku kodowania danych audio dla telekomunikacji, stosowane są przede wszystkim algorytmy oparte na kompresji stratnej. Głównym tego powodem jest fakt, że transmisja danych ograniczona jest zazwyczaj do określonego zakresu częstotliwości (przedział częstotliwości skupiający przekaz odpowiadający artykułowanym słowom mieści się w zakresie fv ∈ (300, 3500) Hz [6]), co pozwala na wyeliminowanie części zbędnych informacji nie wpływających na przekaz. Nawet w tym zakresie częstotliwości, sygnał mowy charakteryzuje się nadmiarowością. Przedstawiony w tej pracy algorytm LPC–10 jest oparty na schemacie analiza–synteza [2, 3, 4, 16]. Oznacza to, że przesyłane parametry nie są bezpośrednią reprezentacją kolejnych próbek sygnału wejściowego, ale zawierają informację o tym, jak odbiornik ma postąpić by odtworzyć sygnał wyjściowy. Metoda ta wymaga stworzenia i opisania modelu generacji analizowanego sygnału jak najbliższego rzeczywistemu. Algorytmy kompresji mowy oparte na takim podejściu charakteryzują się większą kompresją przy tej samej jakości niż w innych koderach, ponieważ część informacji w postaci modelu jest już umieszczona zarówno po stronie kodera jak i dekodera, a przesyłane są tylko niezbędne informacje, tj.: współczynniki filtra traktu głosowego i wzmocnienie, informacja o dźwięczności/bezdźwięczności oraz okres pobudzenia dla dźwięcznych fragmentów mowy. Algorytm LPC–10 wykorzystuje model ściśle związany z fizycznym mechanizmem generacji mowy przez człowieka – tzw. vocoder (koder mowy, ang. VOice CODER). Dzięki stworzeniu cyfrowego modelu generacji mowy,

5

6

1.1. Wprowadzenie do przetwarzania i kompresji mowy

można zmniejszyć przepływność bitową, nawet bardziej niż w przypadku kompresji MP3. Wadą tego rozwiązania jest brak możliwości kompresji danych niepasujących do modelu, np.: muzyka czy EKG. Schemat generacji mowy ludzkiej jest w istocie złożonym i skomplikowanym procesem angażującym wiele mechanizmów różnego rodzaju. Złożoność i ilość tych procesów uniemożliwiają stworzenie idealnego generatora mowy. Dodatkowo, opierając się na znajomości percepcji dźwiękowej przez człowieka, można dokonać pewnych uproszczeń w modelu generacji mowy, które nie wpływają na zrozumiałość przekazu (przykładem może tu być wykorzystanie informacji z ograniczonego pasma częstotliwości w zakresie ok. f ∈ (0, 4000) Hz) a pozwolą zmniejszyć złożoność i zapotrzebowanie na pasmo zarówno kodera jak i dekodera. Jakość generowanej mowy w prezentowanym koderze standardu LPC–10 jest niska ze względu na znaczne uproszczenia modelu generacji mowy, dlatego ten sposób kompresji stanowi zazwyczaj tylko punkt wyjścia dla bardziej zaawansowanych koderów mowy. W celu poprawienia jakości syntetyzowanego dźwięku, zostało opracowanych wiele rozwiązań. Podstawowym czynnikiem wpływającym na naturalność i jakość dźwięku, jest modelowanie sygnału pobudzenia będącego falą dźwiękową kształtowaną w torze oddechowym, oparta na rozróżnianiu większej ilości stanów jakie może przyjąć. W standardzie LPC–10 wyróżnia się dwa rodzaje pobudzeń: losowe oraz periodyczne, natomiast w koderach mowy takich jak MPEG–4 HVXC sygnał pobudzenia jest bardziej złożony i oparty o analizę widmową. Bardziej zaawansowane metody analizy i syntezy mowy oferują tzw. kodery hybrydowe, będące w rzeczywistości techniką pośrednią między wokoderami a koderami falowymi. Główną różnicą między nimi jest podejście do kompresji sygnału pobudzenia, który w rzeczywistości nie ogranicza się tylko do dwóch stanów – dźwięczności i bezdźwięczności, ale uwzględnia również stany pośrednie. Kodery hybrydowe mają kilka charakterystycznych cech [4]: – obwiednia widma traktu głosowego sygnału mowy może być wyznaczona algorytmami znanymi z kodera LPC–10, – nie ma konieczności wyznaczania informacji o tym czy dana ramka sygnału jest dźwięczna czy bezdźwięczna ani konieczności wyznaczania częstotliwości tonu podstawowego, – model generacji pobudzenia nie ma wpływu na jakość syntetyzowanej mowy. Tego rodzaju schemat kompresji zapewnia dobra jakość dla stosunkowo niskich przepływności bitowych. Kosztem tego jest zwiększone zapotrzebowanie na moc obliczeniowa oraz zwiększone opóźnienie syntezy sygnału mowy w stosunku do sygnału nie poddanego kompresji. Najbardziej znanymi koderami hybrydowymi, są kodery bazujące na metodzie liniowego wzbudzania predykcyjnego CELP [3, 4]. Metoda ta została opracowana w 1984 roku przez Atala i Schroedera i charakteryzuje się tym, że zamiast wyznaczać parametry takie jak: dźwięczność/bezdźwięczność (ang. voiced–unvoiced, VUV) czy częstotliwość tonu podstawowego korzysta z książek kodowych z różnymi wektorami wzbudzeń, generujących sygnał najlepiej pasujący do fragmentu mowy, który jest kodowany. Przykładem implementacji kodera CELP, jest standard federalny

7

1.1. Wprowadzenie do przetwarzania i kompresji mowy

Stanów Zjednoczonych FS 1016 [3, 16] oraz koder standardu ITU–T G.728 o bardzo małym opóźnieniu wynoszącym ok. 2 ms [3]. Kolejna grupę algorytmów kompresji sygnału mowy, stanowią kodery falowe dostarczające sygnał o małym opóźnieniu i dobrej jakości. Ze względu na te cechy znalazły one szerokie zastosowanie w standardach kodowania danych audio. Podstawowymi metodami kodowania koderów falowych, są algorytmy: – PCM (ang. Pulse Code Modulation) korzystający z kwantyzatora skalarnego zarówno równomiernego jak i nierównomiernego (opartego na charakterystykach A–law i µ–law), – ADPCM (ang. Adaptive Differential PCM ) dokonującego predykcji wartości aktualnej próbki na podstawie wartości poprzedniej próbki i dokonującego kodowania różnicowego, – ATC (ang. Adaptive Transform Coding) będący połączeniem kilku metod kompresji: kwantyzatora wektorowego i TDHS (Time Domain Harmonic Scaling). Podstawową wadą tego rodzaju kodowania jest stosunkowo wysoka przepływność bitowa, która w wielu przypadkach stanowi główne kryterium funkcjonalności kodowania. Jako przykład kodera falowego można przedstawić standard ITU–T G.711 oparty na algorytmie PCM z logarytmiczną funkcją kompresora o przepływności bitowej wynoszącej 64 kbit/s, oraz ITU–T G.721 oparty na algorytmie ADPCM 32 kbit/s. W tabeli 1.1 zostały zestawione podstawowe parametry najpowszechniej stosowanych koderów mowy. lp.

Standard ITU–T

MOS

1 2 3 4 5

G.728 LD-CELP G.711 PCM G.722 ADPCM FS-1016 CELP FS-1015 LPC–10

4.0 4.3 4.2 3.7 2.5

Przepływność bitowa [kbit/s] 16 64 32-64 4.8 2.4

MIPS 30 0.2 7.8 19 20

Rozmiar ramki [ms] 0.625 0.125 0.125 30 22.5

Tabela 1.1. Zestawienie przykładowych koderów mowy wraz z najważniejszymi parametrami: subiektywną miarą jakości generowanego dźwięku (MOS), złożonością obliczeniową (MIPS) oraz wielkością przetwarzanej ramki. W procesie generacji ludzkiej mowy, biorą udział następujące elementy układy oddechowego: płuca, oskrzela i tchawica, krtań, struny głosowe (tzw. głośnia) i ostatecznie język, podniebienie, nos, zęby i wargi. Zasadniczo płuca, tchawica oraz część krtani poniżej strun głosowych spełniają tylko rolę źródła energii wytwarzając falę dźwiękową modulowaną w górnych warstwach układu głosowego. Wszystkie elementy znajdujące się powyżej tworzą trakt głosowy (będący rezonatorem) kształtujący falę dźwiękową generowaną przez struny głosowe. Powietrze przechodząc przez głośnie pobudza do drgania struny głosowe, co powoduje powstanie tzw. tonu podstawowego. (ang. pitch). W zależności od tego czy struny głosowe są otwarte na całej długości czy

8

1.1. Wprowadzenie do przetwarzania i kompresji mowy

też rytmicznie rozchylają się, formowana fala dźwiękowa ma postać bądź szumu bądź też ciągu impulsów. Zmiana częstotliwości tonu podstawowego jest ściśle związana z intonacją głosu. Największa zmienność występuje przy zakończeniu zdania (kropka, wykrzyknik, pytajnik). Dodatkowo na częstotliwość tonu podstawowego wpływają również takie czynniki jak płeć rozmówcy, jej wiek oraz cechy osobnicze. W zależności od tych parametrów częstotliwość tonu podstawowego może zmieniać się w zakresie 80–960 Hz [1, 6]. W przypadku kobiet zakres zmienności jest ok. dwa razy wyższy niż w przypadku mężczyzn i mieści się w zakresie ok. 160–960 Hz, podczas gdy dla mężczyzn jest to zakres ok. 80–480 Hz. Schematycznie trakt głosowy pokazany został na rysunku 1.1 z pominięciem elementów znajdujących się poniżej tchawicy, nie spełniających z punktu widzenia generacji mowy istotnej funkcji w procesie modelowania sygnału pobudzenia.

Rysunek 1.1. Schemat traktu głosowego. Tor oddechowy kształtuje widmo sygnału krtaniowego powstającego przy przechodzeniu fali dźwiękowej przez struny głosowe. Dokonując estymacji parametrów opisujących trakt głosowy jako układ filtrujący sygnał pobudzenia, można wyznaczyć jego charakterystykę amplitudowo–częstotliwościową. Na rysunku 1.2, została pokazana zmiana tej charakterystyki w czasie dla kolejnych ramek mowy odpowiadających 20 ms, wyznaczona za pomocą funkcji lpc(...) i freqz(...) w programie Matlab.

9

1.1. Wprowadzenie do przetwarzania i kompresji mowy

Częstotliwość [kHz]

4

3

2

1

0

0

0.282

0.565

0.847

1.13

Czas [s]

Rysunek 1.2. Wykres czasowo–częstotliwościowy zmieniającej się charakterystyki amplitudowej traktu głosowego dla kolejnych ramek sygnału mowy na przykładzie słowa „naszego” wykonany przez autora. Dla porównania na rysunku 1.3 została zaprezentowana krótkoczasowa transformata Fouriera tego samego sygnału wyznaczona funkcją specgram(...) programu Matlab:

Częstotliwość [kHz]

4

3

2

1

0

0

0.282

0.565

0.847

1.13

Czas [s]

Rysunek 1.3. Wykres modułu krótkoczasowej transformaty Fouriera słowa „naszego” wykonany przez autora. Z rysunku 1.2 oraz 1.3 można zauważyć, że pomiędzy charakterystyką amplitudowo–częstotliwościową traktu głosowego a jego transformatą Fouriera istnieje

10

1.1. Wprowadzenie do przetwarzania i kompresji mowy

ścisły związek. Model generacji sygnału mowy można bowiem opisać jako filtrowanie pewnego sygnału pobudzającego filtr traktu głosowego. Najprostszy model generatora mowy składa się zatem z następujących elementów: – sygnał pobudzenia, który w najprostszym przypadku można podzielić na dwa typy sygnałów: dla głosek dźwięcznych („a”, „e”, „i”, „o”, „u”) i bezdźwięcznych („sz”, „cz”, „c”, . . . ), – układ rezonatorów (trakt głosowy) modelujący kształt widma sygnału pobudzenia. Na rysunku 1.4 został przedstawiony schematycznie trakt głosowy. Rzeczywisty trakt głosowy dorosłego człowieka ma długość x około 16 cm, a przekrój A(x) ma promień poniżej 2 cm [4]. Kształt fali dźwiękowej powstającej w trakcie głosowym opisany jest parą równań różniczkowych [11, 19]: ∂(u/A) ∂p(x, t) =ρ ∂x ∂t

(1.1)

∂u(x, t) 1 ∂(p/A) ∂A = 2 + ∂x ρc ∂t ∂t

(1.2)

− −

gdzie: p(x, t) – wariancja ciśnienia w tubie w chwili czasu t i w punkcie x, u(x, t) – wariancja przepływu w chwili czasu t i w punkcie x, ρ – gęstość powietrza w tubie, c – prędkość rozchodzenia się dźwięku, A(x, t) – funkcja przekroju poprzecznego tuby.

Rysunek 1.4. Schemat traktu głosowego. Równania (1.1) i (1.2) rozwiązuje się wprowadzając szereg uproszczeń dotyczących traktu głosowego [4, 11]. Zazwyczaj dokonuje się podziału traktu głosowego na kilkanaście odcinków, które aproksymuje się tubami o długości ∆x i przekroju kołowym o powierzchni A(x, t) [4, 11]. W szczególności dla lim zdyskretyzowany model traktu ∆x→0 głosowego będzie zgodny z założonym modelem rzeczywistego traktu głosowego. W

11

1.1. Wprowadzenie do przetwarzania i kompresji mowy

praktyce należy jednak przyjąć skończoną liczbę cylindrycznych przekrojów aproksymujących rzeczywisty trakt głosowy (rysunek 1.5). Tak przyjęty zdyskretyzowany model traktu głosowego wykazuje cechy wspólne z filtrami cyfrowymi [11].

Rysunek 1.5. Uproszczony schemat zdyskretyzowanego traktu głosowego. Przyjmując, że dla dostatecznie krótkich fragmentów sygnału mowy (ramek mowy) trakt głosowy jest układem liniowo niezmiennym w czasie (ang. Linear Time–Invariant, LTI), można go opisać pewnym modelem transmitancji – filtrem IIR o k współczynnikach: G

H(z) = 1+

k X

n=1

=

an z

−n

G

(1.3)

k/2

Y

−1

(1 − pn z )(1 −

p∗n z −1 )

n=1

0

20 log10 |H(ejω )| [dB]

−10 −20 −30 −40 −50

Moduł widma Fouriera sygnału Charakterystyka amplitudowo–częstotliwościowa

−60 −70 0

1

2

3

4

Częstotliwość [kHz]

Rysunek 1.6. Porównanie modułu widma Fouriera sygnału z wyznaczoną na jego podstawie charakterystyką amplitudowo–częstotliwościową funkcją lpc(...).

x-Q(x) 12

1.1. Wprowadzenie do przetwarzania i kompresji mowy

Na rysunku 1.6 została przedstawiona charakterystyka amplitudowo–częstotliwościowa powyższego filtra przy k = 10 na tle modułu widma Fouriera sygnału oryginalnego. Można zauważyć taki filtr oddaje dobrze charakterystykę sygnału nawet przy ograniczonej ilości współczynników. W koderze standardu LPC–10, przyjmuje się ilość współczynników filtra traktu głosowego k = 10. Taka ilość jest wystarczająca do zachowania zrozumiałości przekazu. Zwiększenie tej wartości nie przynosi znacznego polepszenia jakości co zostało pokazane na rysunku 1.7. Dokładność estymacji współczynników filtra głosowego jest odpowiedzialna za zrozumiałość treści, jednak już samo uproszczenie modelu traktu głosowego wprowadza niedokładności spowodowane: – brakiem płynnego przejścia pomiędzy kolejnymi przekrojami traktu głosowego, – przekrojem odbiegającym od kołowego rzeczywistego traktu głosowego, – brakiem uwzględnienia sprężystości ścian traktu głosowego. 15

20 log10 |H(ejω )| [dB]

20 log10 |H(ejω )| [dB]

15 10 5 0 −5

−10

10 5 0 −5

−10

0

1

2

3

4

−15

0

15

15

10

10

5 0 −5

−10 −15

1

2

3

4

Częstotliwość [kHz]

20 log10 |H(ejω )| [dB]

20 log10 |H(ejω )| [dB]

Częstotliwość [kHz]

5 0 −5

−10

0

1

2

3

Częstotliwość [kHz]

4

−15

0

1

2

3

4

Częstotliwość [kHz]

Rysunek 1.7. Wpływ ilości współczynników filtra traktu głosowego na kształt obwiedni widma tego filtra. Od lewej: 8 biegunów, 10 biegunów, 12 biegunów oraz 14 biegunów.

13

1.2. Koder mowy standardu LPC–10

Wszystkie te czynniki wpływają na dokładność modelu i jakość dźwięku. Na rysunku 1.7 został przedstawiony wpływ ilości biegunów na kształt obwiedni widma traktu głosowego. Można z niego zauważyć, że dla 10, 12 i 14 biegunów wykresy są do siebie zbliżone. Dalsze zwiększanie ilości biegunów nie zmieni znacząco wykresów w stosunku dla ilości biegunów równej 10.

1.2. Koder mowy standardu LPC–10 Standard LPC–10 operuje na danych spróbkowanych z częstotliwością fpr = 8000 Hz. W celu wykonania analizy, sygnał jest dzielony na fragmenty o długości 20 ms (tzw. ramki mowy). W tym celu sygnał wejściowy wymnażany jest z oknem Hamminga o długości 240 próbek, które jest przesuwane co 160 próbek (rysunek 1.8). Zatem w każdej ramce analizowanych jest 160 nowych próbek sygnału mowy i 80 próbek z poprzedniej ramki. Na podstawie tych próbek wyznaczane są parametry, które zostaną następnie przesłane do dekodera. Przy ramkach o długości 20 ms, parametry kodera LPC–10 wyznaczane są 50 razy na sekundę. Czas przetwarzania sygnału musi być zatem odpowiednio krótki by nie wprowadzać dodatkowych opóźnień ani nie pomijać ramek w procesie przetwarzania. Bardziej zaawansowane algorytmy np. wykrywania i usuwania nieciągłości informacji o tym czy ramka jest dźwięczna czy bezdźwięczna, aproksymacji współczynników filtra traktu głosowego pomiędzy ramkami, zwiększają dodatkowo opóźnienie kodera. Oprócz tego, należy jeszcze doliczyć opóźnienia spowodowane obecnością urządzeń pomiędzy koderem a dekoderem np. routery w sieci. W wielu przypadkach sumaryczne opóźnienie może być zbyt duże do zaakceptowania. Efektem jest utrudnienie bądź uniemożliwienie komunikacji głosowej pomiędzy nadawcą a odbiorcą.

0.8 0.6 0.4 0.2 0 −0.2 −0.4 0

160

320

Numer próbki

480

Rysunek 1.8. Ilustracja segmentacji sygnału czasowego. Okno czasowe o długości 240 próbek i przesuwane o 160 próbek, jest wymnażane z sygnałem mowy dla danej ramki. Standard algorytmu LPC–10 wymaga by wśród przesyłanych parametrów były współczynniki filtra traktu głosowego. Ponieważ filtr narządu mowy jest wrażliwy na

14

1.2. Koder mowy standardu LPC–10

błędy kwantyzacji, współczynniki filtra przed zakodowaniem są przekształcane do innej postaci. Standard LPC–10 [3] określa by dokonać przekształcenia współczynników ai zgodnie ze wzorem: 1 + ai (1.4) 1 − ai Tak przekształcone współczynniki są kwantowane równomiernym kwantyzatorem skalarnym o wielkości książki kodowej zależnej od numeru współczynnika. Jak podaje [3], dla ramki dźwięcznej współczynniki γ1 , . . . , γ4 są kwantowane 5–bitowym kwantyzatorem, γ5 , . . . , γ8 4–bitowym, γ9 3–bitowym a γ10 2–bitowym kwantyzatorem skalarnym. Dla ramki bezdźwięcznej kwantowane są tylko współczynniki γ1 , . . . , γ4 , natomiast pozostałych 21 bitów wykorzystywanych jest do ochrony przed błędami. W tej pracy została zaimplementowana bardziej efektywna metoda przekształcania współczynników LPC do postaci LSP omówiona w następnym podrozdziale. W niniejszej pracy magisterskiej, został zaimplementowany koder i dekoder mowy zgodny ze standardem LPC–10. Następnie wprowadzono pewne ulepszenia mające na celu poprawę jakości mowy kosztem nieznacznego zwiększenia przepływności bitowej. Poniżej został przedstawiony schemat blokowy kodera standardu LPC–10 w wersji podstawowej wraz z omówionymi poszczególnymi elementami. γi =

Wzmo

1.2.1. Koder

x(n)

Obliczenie wzmocnienia Filtr preemfazy

s(n)

Okno Hamminga

Kwantyzacja wzmocnienia

G

q

s1(n) Estymacja współczynników filtra

Filtr dolnoprzepustowy FIR 900Hz

G

LPC

Kwantyzacja współczynników LPC

LPC

q

Decyzja czy ramka jest d wi  czna czy bezd wi  czna

s2(n) Progowanie sygnału

s3(n) Autokorelacja

Wyznaczenie T, VUV

Rysunek 1.9. Schemat blokowy kodera LPC–10.

T,VUV

15

1.2. Koder mowy standardu LPC–10

W rzeczywistym trakcie głosowym, wielokrotności tonu podstawowego są tłumione z nachyleniem ok. 12 dB/oktawę przez rezonatory układu oddechowego [6]. W celu kompensacji tłumienia wyższych częstotliwości, na wejściu kodera znajduje się filtr preemfazy opisany równaniem czasowym: s(n) = x(n) − 0.9375x(n − 1)

(1.5)

gdzie x(n) jest sygnałem wejściowym. Tak przefiltrowany sygnał wymnażany jest z oknem Hamminga o długości 240 próbek, a na podstawie otrzymanego fragmentu sygnału wyznaczane są współczynniki filtra traktu głosowego, jego wzmocnienie oraz wysokość tonu podstawowego. Współczynniki i wzmocnienie filtra wyznaczane są przy wykorzystaniu modelu autoregresywnego (AR). Punktem wyjścia jest równanie 1.6, będące zmodyfikowanym równaniem Youle’a–Walkera [1, 3, 14]:      

. . . r(p − 1) . . . r(p − 2) .. .. . . r(p − 1) r(p − 2) . . . r(0) r(0) r(1) .. .

r(1) r(0) .. .

     

a1 a2 .. . ap

     

=



  −  

r(1) r(2) .. . r(p)

     

(1.6)

gdzie r(i) dla i = 0, . . . , p jest estymatą funkcji autokorelacji sprogowanego sygnału określoną równaniem (1.9), p jest rzędem filtra (w koderze mowy standardu LPC–10 p = 10) natomiast a1 , . . . , ap są poszukiwanymi współczynnikami. Wzmocnienie filtra oblicza się ze wzoru: q 2 G = γ σmin (1.7)

gdzie γ jest odwrotnością pierwiastka współczynnika korekcyjnego dla okna czasowego. Wartości współczynników korygujących są stabelaryzowane. Stosowne dane można znaleźć np. w [7]. Dla okna Hamminga współczynnik korekcyjny wynosi 0.387, czemu 2 odpowiada wartość γ = 1.607. Natomiast σmin w (1.7) jest błędem predykcji obliczanym zgodnie z: 2 Jmin = σmin = r(0) +

p X

aj r(j),

(1.8)

j=1

r(k) =

−1 1 NX s3 (n)s3 (n + k) N − p n=p

(1.9)

gdzie k = 0, . . . , N − 1 a N = 240 jest ilością analizowanych próbek. Wyznaczenie współczynników metodą bezpośrednią jest czasochłonnym zadaniem. W celu ich szybkiego obliczenia, wykorzystuje się algorytm Durbina–Levinsona [1, 3, 2, 4, 16] bądź algorytm Leroux–Gueguen [5, 16]. Drugi z algorytmów jest dedykowany dla procesorów stałoprzecinkowych w przypadku których daje lepsze wyniki niż algorytm Durbina–Levinsona. Jest on jednak mniej efektywny pod względem czasowym ze względu na konieczność przejścia z pośredniej postaci tzw. współczynników odbicia do postaci LPC (RS–to–LPC).

16

1.2. Koder mowy standardu LPC–10

Wyznaczenie dźwięczności/bezdźwięczności, jest dokonywane przy pomocy metody autokorelacji. W celu lepszego uwydatnienia interesujących własności sygnału, przed wyznaczeniem częstotliwości tonu podstawowego sygnał jest filtrowany filtrem dolnoprzepustowym ograniczającym jego pasmo do ok. 900 Hz. Wyznaczając funkcję autokorelacji dla przefiltrowanego sygnału, a następnie wyszukując maksimum tej funkcji leżące w zakresie T ∈ [20; 160] próbek (co odpowiada zakresowi częstotliwości tonu podstawowego wynoszącego 50–400 Hz) można dokonać oszacowania rodzaju pobudzenia. Jako próg, powyżej którego znalezione maksimum kwalifikuje się jako głoska dźwięczna, przyjmuje się wartość (0.3 − 0.35)r(0), gdzie r(0) jest wyznaczone z (1.9). Poniżej tej wartości ramka sygnału uznawana jest za bezdźwięczną. W celu poprawienia właściwości dyskryminacyjnych, przed wykonaniem autokorelacji wykonywane jest progowanie sygnału, czyli wykonanie operacji: s3 (n) =

  

s2 (n) − P dla s2 (n) ­ P s2 (n) + P dla s2 (n) ¬ −P   0 dla s2 (n) ∈ (−P, P )

(1.10)

gdzie P jest wartością progową wyznaczoną na podstawie funkcji autokorelacji sygnału s2 (n) [1, 16]. Ostatnim krokiem jest dokonanie kwantyzacji współczynników filtra i jego wzmocnienia (LP C q ,Gq ). Kwantyzacja wspomnianych parametrów zostanie omówiona w kolejnych rozdziałach. 1.2.2. Dekoder

G

q

Odtworzenie wzmocnienia

LPC

q

Odtworzenie warto ci LPC

VUV

T

Generator impulsów

Ramka d wi czna

LPC e(n)

Filtr syntezy

G s(n)

Filtr deemfazy

Ramka bezd wi czna Szum biały

Rysunek 1.10. Schemat blokowy dekodera LPC–10.

y(n)

17

1.2. Koder mowy standardu LPC–10

Dekoder w pierwszej kolejności dokonuje operacji odwrotnej do kwantyzacji otrzymanych parametrów: LP C q oraz Gq . W następnym kroku na podstawie informacji o dźwięczności i bezdźwięczności generowane jest pobudzenie. W pierwszym przypadku generator impulsów tworzy szereg impulsów Diraca o wysokości równej 1 w odstępach równych okresowi T , które stanowią pobudzenie dźwięczne. W modyfikacji algorytmu w celu poprawienia naturalności pobudzenia są one splatane z odpowiedzią impulsową pewnego filtra wyznaczoną w koderze co zostało opisane w rozdziale 3. Natomiast w przypadku pobudzenia bezdźwięcznego, generowany jest szum gaussowski. Wygenerowany sygnał pobudzenia jest filtrowany filtrem syntezy o odtworzonych 10 współczynnikach i wzmocnieniu G. Samo odtwarzanie współczynników LPC jest operacją odwrotną do wyznaczania współczynników LSP w koderze. Filtr syntezy o transmitancji (1.3) opisany jest równaniem czasowym: s(n) = Ge(n) −

10 X

ak s(n − k)

(1.11)

k=1

gdzie G jest wzmocnieniem filtra, ak są jego współczynnikami wyznaczonymi np. algorytmem Durbina–Levinsona, natomiast e(n) jest sygnałem pobudzenia. Tak zsyntetyzowany sygnał jest poddawany operacji filtracji filtrem deemfazy (rysunek 1.11) opisanym równaniem czasowym: y(n) = s(n) + 0.9375y(n − 1)

(1.12)

Filtr ten jest filtrem odwrotnym do filtra preemfazy i ma na celu stłumienie wyższych częstotliwości. Sygnał na wyjściu filtra jest deemfaazy jest odtworzonym sygnałem mowy o jakości zależnej od stopnia kwantyzacji współczynników i rozbudowania algorytmu LPC–10 (dokładności modelu).

20 log 10 |H(ejω )| [dB]

5 0 −5

−10 −15 −20

Filtr preemfazy Filtr deemfazy

−25 −30 0

0.1

0.2

0.3

0.4

0.5

f /fpr

Rysunek 1.11. Charakterystyki amplitudowo–częstotliwościowe filtra preemfazy oraz deemfazy, gdzie fpr jest częstotliwością próbkowania wynoszącą 8 kHz.

18

1.3. Algorytm wyznaczania współczynników LSP

Na rysunku 1.11 zostały przedstawione charakterystyki amplitudowo–częstotliwościowe filtrów preemfazy i deemfazy, o długości dwóch próbek. Widać, że częstotliwości odcięcia obydwu filtrów są zbliżone i znajdują się w okolicach f = 1000 Hz.

1.3. Algorytm wyznaczania współczynników LSP Kwantyzacja współczynników LPC {a1 , a2 , . . . , a10 } nastręcza sporo trudności. W głównej mierze ze względu na duży zakres zmienności oraz możliwość zdestabilizowania filtra spowodowanego zaokrągleniami wartości współczynników dokonanymi podczas kwantyzacji. Z tego powodu zostały rozwinięte różne sposoby przekształcania współczynników filtra, tak by był on jak najmniej wrażliwy na błędy kwantyzacji. W przypadku koderów o niskiej przepływności bitowej, które są przedmiotem badań tej pracy, zdecydowanie najlepsze efekty daje reprezentacja współczynników filtra w postaci liniowych par spektralnych (ang. Line Spectral Pair, LSP). Metoda ta została zaproponowana w drugiej połowie lat 70 przez Fumitada Itakura [4, 16]. Dla filtra będącego modelem transmitancji: A(z) = 1 +

N X

an z −n

N X

(an + aN +1−n ) + z −(N +1)

N X

(an − aN +1−n ) − z −(N +1)

(1.13)

n=1

przejście z LPC na reprezentację w postaci LSP, wymaga zwiększenia rzędu z N do (N + 1) oraz wprowadzenia dwóch nowych wielomianów P (z) i Q(z) spełniających zależność: P (z) + Q(z) A(z) = (1.14) 2 Gdzie: P (z) = A(z) + z

−(P +1)

A(z

−1

)=1+

(1.15)

n=1

Q(z) = A(z) − z −(P +1) A(z −1 ) = 1 +

(1.16)

n=1

Przekształcone w ten sposób równanie transmitancji filtra ma kilka własności: – zera P (z) i Q(z) znajdują się na okręgu jednostkowym, – zera P (z) i Q(z) przeplatają się ze sobą na przemian, – po kwantyzacji współczynników opisujących ten filtr, zera wielomianów P (z), Q(z) znajdują się nadal wewnątrz okręgu jednostkowego, więc układ jest minimalno-fazowy. Zagadnienie przekształcenia współczynników LPC na LSP sprowadza się do wyznaczenia zer ww. wielomianów zwanych Linear Spectral Frequencies (LSF), przy założeniu, że znajdują się one wewnątrz okręgu jednostkowego (co zapewnia trzecia własność, która gwarantuje zarazem stabilność układu). Dla N > 2 prawdziwe są następujące własności [5]:

19

1.3. Algorytm wyznaczania współczynników LSP

– −1 jest zerem P (z), – 1 jest zerem Q(z). Korzystając z powyższych własności można wykonać dzielenie wielomianów: P ′ (z) =

P (z) (1 + z)

(1.17)

Q′ (z) =

Q(z) (1 − z)

(1.18)

Przyrównując teraz: P ′(z) =

N X

pi z N −i

(1.19)

qi z N −i

(1.20)

i=0



Q (z) =

N X i=0

gdzie N jest rzędem filtra syntezy, można wyznaczyć współczynniki pi i qi wielomianów P ′(z) i Q′ (z). Ogólny wzór można zapisać w postaci: p0 = 1; q0 = 1; pn = (an + aN −1+n ), n = 1, . . . , N qn = (an − aN −1+n ), n = 1, . . . , N

(1.21)

gdzie an , aN −1+n są współczynnikami filtra (1.13). Wyciągając w równaniu 1.19 i 1.20 przed całość A = 21 z −N/2 i grupując wyrazy po współczynnikach, można przekształcić wyrażenie do postaci: 







N

N









z− 2 + z 2  z P ′(z) = A p0  + p1  2 N

N

z z− 2 + z 2  + q1  Q′ (z) = A q0  2

(N−2) 2

+ z− 2

(N−2) 2

(N−2) 2

+ z− 2

(N−2) 2

Podstawiając z = ejω i korzystając ze wzorów Eulera:









p  + . . . + N/2  2

q  + . . . + N/2  2

ejωk + e−jωk 2 otrzymuje się ostateczną postać wielomianów: cos(ωk) =









(1.22)

(1.23)

(1.24) 



N N −2 1 + p1 cos ω + . . . + pN/2 (1.25) 2 2 2       N N −2 1 ′ jω Q (e ) = A q0 cos ω + q1 cos ω + . . . + qN/2 (1.26) 2 2 2 Dla otrzymanej postaci wielomianów 1.25 i 1.26 należy wyznaczyć miejsca zerowe, tzn. znaleźć takie ωi dla których: P ′ (ejω ) = 0 i Q′ (ejω ) = 0. W tym celu wykorzystywane są różne implementacje algorytmów poszukujących miejsc zerowych wielomianów. P ′(ejω ) = A p0 cos ω

deemfazy 20

1.3. Algorytm wyznaczania współczynników LSP

Na rysunku 1.12 został przedstawiony przykład ilustrujący końcowy etap wyznaczania współczynników LSP. 4

Q’(z) 2

P’(z) 0

−2

−4

0

0.5

1

ω

1.5

2

2.5

Rysunek 1.12. Przykładowy wykres funkcji wielomianów P ′ (z) i Q′ (z) z zaznaczonymi miejscami zerowymi. W powyższym przykładzie szczególnie dobrze widoczna jest druga własność wielomianów P (z) i Q(z). Kolejne wartości zer występują na przemian, przeplatając się kolejno. Dla przykładu z rysunku, otrzymane wartości zer wynoszą: ω1 = 0.359, ω2 = 0.594, ω3 = 0.775, ω4 = 1.335, ω5 = 1.450, ω6 = 1.703, ω7 = 1.938, ω8 = 2.053, ω9 = 2.218, ω10 = 2.306. Oznaczając zera wielomianu P ′ (z) jako θi , a zera wielomianu Q′ (z) jako γi można powiedzieć, że dla każdego otrzymanego przekształcenia wynik będzie postaci 0 < γ1 < θ1 < γ2 < θ2 < . . . < γP/2 < θP/2 < π

(1.27)

Wadą współczynników LSP jest ich złożoność obliczeniowa wpływająca na czas kodowania jak i dekodowania sygnału. Współczynniki LSP są również wrażliwe na kwantyzację w przypadku, gdy pierwiastki wielomianów P (z) i Q(z) znajdują się blisko siebie [16].

21

1.4. Przykład implementacji procedury LSP w języku C

1.4. Przykład implementacji procedury LSP w języku C W tabeli 1.2 został przedstawiony fragment funkcji dokonującej przekształcenia współczynników LPC do postaci liniowych par spektralnych (bez obliczania pierwiastków) zaczerpnięty ze źródeł weryfikacyjnych kodera mowy MPEG-4 HVXC (ang. Harmonic Vecor eXcitation Coding) (określanego w dalszej części jako MPEG-4). Przedstawione poniżej funkcje zostały wykorzystane w implementacji kodera mowy. Tabela 1.2. Fragment kodu źródłowego z algorytmem przekształcającym współczynniki LPC do LSP znajdującego się w pliku lpc2lsf.c, zaczerpnięty ze standardu MPEG-4. 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 29 30

/∗ s p r a w d z e n i e i l o s c i w s p o l czy n n i k o w ∗/ odd = ( np % \ 2 ! = 0 ) i f ( odd ) { nb = ( np + 1 ) / 2 ; na = nb + 1 ; } else { nb = np / 2 + 1 ; na = nb ; } /∗ o b l i c z e n i e w s p o l czy n n i k o w wielomianow P i Q ∗/ fa [ 0] = 1 . 0; f o r ( i = 1 , j = np ; i < na ; ++ i , −− j ) f a [ i ] = pc [ i ] + pc [ j ] ; fb [ 0 ] = 1 . 0 ; f o r ( i = 1 , j = np ; i < nb; ++ i , −− j ) f b [ i ] = pc [ i ] − pc [ j ] ; /∗ d z i e l e n i e wielomianow ∗/ i f ( odd ) { f o r ( i = 2 ; i < nb; ++ i ) fb [ i ] = fb [ i ] + fb [ i −2]; } else { f o r ( i = 1 ; i < na ; ++ i ) { fa [ i ] = fa [ i ] − fa [ i −1]; fb [ i ] = fb [ i ] + fb [ i −1]; } }

Wykorzystując własności LSP można wykonać również odwrotne przekształcenie (patrz tabela 1.3).

22

1.4. Przykład implementacji procedury LSP w języku C

Tabela 1.3. Fragment kodu źródłowego z algorytmem przekształcającym współczynniki LSP do LPC znajdującego się w pliku lsf2lpc.c, zaczerpnięty ze standardu MPEG-4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 }

odd = o r d e r % 2 ; f o r ( j = 0 ; j 1); i ++) { n1 = i ∗ 4 ; n2 = n1 +1; n3 = n2 +1; n4 = n3 +1; xout1 = − 2 . ∗ c o s ( l s f [ i ∗ 2 + 0 ] ) ∗ xout2 = − 2 . ∗ c o s ( l s f [ i ∗ 2 + 1 ] ) ∗ w [ n2 ] = w [ n1 ] ; w [ n1 ] = x i n 1 ; w [ n4 ] = w [ n3 ] ; w [ n3 ] = x i n 2 ; x i n 1 = xout1 ; x i n 2 = xout2 ; } /∗ d l a r zed u f i l t r a b ed a ceg o l i c z b a i f ( odd = = 1 ) { n1 = i ∗ 4 ; n2 = n1 +1; n4 = n2 ; xout1 = − 2 . ∗ c o s ( l s f [ i ∗ 2 + 0 ] ) ∗ w [ n2 ] = w [ n1 ] ; w [ n1 ] = x i n 1 ; } xout1 = x i n 1 + w [ n4 + 1 ] ; xout2 = x i n 2 − w [ n4 + 2 ] ; x [ j ] = 0 . 5 ∗ ( xout1 + xout2 ) ; i f ( odd = = 1 ) { w [ n4 +2] = w [ n4 + 1 ] ; w [ n4 +1] = x i n 2 ; } else { w [ n4 +1] = x i n 1 ; w [ n4 +2] = x i n 2 ; }

w [ n1 ] + w [ n2 ] + x i n 1 ; w [ n3 ] + w [ n4 ] + x i n 2 ;

n i e p a r z y s t a ∗/

w [ n1 ] + w [ n2 ] + x i n 1 ;

Rozdział 2 Metody kwantyzacji sygnału wielowymiarowego W tym rozdziale zostaną omówione metody reprezentacji wyznaczonych parametrów kodera mowy w takiej postaci, by można było w łatwy sposób zakodować dane. W większości przypadków ilość danych do transmisji jest o wiele większa od zadanej przepływności bitowej. Zadaniem kwantyzacji jest ograniczenie zbioru danych wejściowych tak, by otrzymać określoną przepływność bitową kosztem utraty części informacji. W zastosowanej implementacji kodera mowy kwantyzacji poddane zostały: wzmocnienie filtra G oraz jego współczynniki w postaci LSP. Dodatkowo koder mowy został rozszerzony o kwantyzator wektorowy omówiony w dalszej części. Zaprojektowane kwantyzatory zostały zbadane pod kątem wpływu na jakość odtwarzanego sygnału a wyniki badań omówione w rozdziale 4.

2.1. Kwantyzacja skalarna Najprostszą metodą kompresji stratnej, jest kwantyzacja skalarna. Jest ona szeroko stosowana w procesie kompresji sygnałów jedno jak i wielowymiarowych. Najczęstszym przypadkiem stosowania tego rodzaju przetwarzania, jest operacja przekształcenia sygnału analogowego na postać cyfrową we wszelkiego rodzaju przetwornikach A/C. Sygnał analogowy poddawany jest kolejno operacjom: próbkowania, kwantyzacji oraz kodowania, w wyniku czego otrzymywany jest skończony zbiór wartości wyjściowych odpowiadający rzeczywistym danym. Można zatem powiedzieć, że kwantyzacja skalarna jest pewnego rodzaju ograniczeniem zbioru danych wejściowych. Jak zostanie pokazane w dalszej części, tego rodzaju kwantyzator można traktować jako szczególny przypadek wielowymiarowego kwantyzatora wektorowego. 2.1.1. Podstawowe definicje i własności Kwantyzacja skalarna jest odwzorowaniem zbioru wartości x ∈ R z zadanego przedziału w jego skończony N – punktowy podzbiór. Matematycznie kwantyzator skalarny Q można zdefiniować jako następujące odwzorowanie: Q: R→C 23

(2.1)

24

2.1. Kwantyzacja skalarna

gdzie R jest zbiorem wartości wejściowych, natomiast C ≡ {y1 , y2 , . . . , yN } ⊂ R

(2.2)

jest wyjściem kwantyzatora zwanym również książką kodową (ang. codebook ) rozmiaru N. Na rysunku 2.1 została schematycznie przedstawiona zasada kwantyzacji. x1

x2

x3

x4

x5

x6

x7

x8

x9

x

y y1

y2

y3

y4

y5

y6

y7

y8

Rysunek 2.1. Odwzorowanie kwantyzatora skalarnego – grubą linią zaznaczono przedział wartości, któremu odpowiada pojedyncza wartość z książki kodowej. Kwantyzator jest zwany kwantyzatorem regularnym jeśli: 1. Każdy przedział Ri ma postać (xi−1 , xi ) z co najmniej jednym punktem ograniczającym. 2. yi ∈ (xi−1 , xi ). gdzie wartości xi nazywane są granicami decyzyjnymi (ang. output levels). Proces kwantyzacji skalarnej można zinterpretować jako przejście z ciągłego zbioru wartości wejściowych na podzbiór wartości wyjściowych. Różnica pomiędzy wejściem a wyjściem kwantyzatora, jest określana mianem błędu kwantyzacji i jest zdefiniowana jako: q = x − Q(x)

(2.3)

Korzystając z definicji błędu kwantyzacji, i przekształcając ją można wprowadzić model szumu addytywnego (rysunek 2.2).

Rysunek 2.2. Model addytywnego szumu kwantyzatora. Przestawiony na powyższym rysunku model błędu kwantyzacji jako szum addytywny

25

2.1. Kwantyzacja skalarna

jest często stosowany ze względu na wygodę tego rodzaju reprezentacji. W rzeczywistości należy uwzględnić fakt, że szum zależy od sygnału wejściowego i nie może być traktowany jako dodatkowe źródło sygnału. Dokonując pewnych założeń co statystycznej natury szumu kwantyzacji, można przypisać mu pewne właściwości: 1. Szum kwantyzacji ma rozkład równomierny, 2. Szum kwantyzacji jest szumem białym, 3. Szum kwantyzacji jest nieskorelowany z sygnałem wejściowym E[xq] = E[x]E[q] = 0. O wiele częściej stosowaną miarą błędu dla danych wejściowych X, oraz kwantyzatora Q = {yi, Ri ; i = 1, 2, . . . N} jest błąd średniokwadratowy (ang. mean square error, MSE), wyrażony równaniem: D = E[(X − Q(X))2 ] =

N Z X

i=1 Ri

(x − yi )2 fX (x)dx

(2.4)

gdzie fX (x) jest zadanym rozkładem prawdopodobieństwa a N liczbą wartości wyjściowych kwantyzatora. Przedstawiona definicja błędu średniokwadratowego będzie w tej pracy punktem wyjścia do wyznaczania książek kodowych zarówno dla przypadku kwantyzatora skalarnego jak i wektorowego. Często spotykaną miarą jakości kwantyzatora jest SNR zdefiniowany jako stosunek mocy sygnału do mocy błędu kwantyzacji wyrażony w decybelach: E(X 2 ) (2.5) SNR = 10 log10 D 2.1.2. Kwantyzator równomierny Najprostszą metodą kwantyzacji skalarnej jest zastosowanie kwantyzatora równomiernego o przedziałach równej wielkości ∆ = xn+1 −xn , dla każdego n = 1, . . . , N − 1, gdzie N jest ilością przedziałów. Funkcja gęstości prawdopodobieństwa sygnału wejściowego o rozkładzie równomiernym dla takiego kwantyzatora została pokazana na rysunku 2.3. Z rysunku widać, że prawdopodobieństwo wystąpienia wartości z przedziału ∆ jest takie samo dla n = 1, . . . , N − 1. Dla tego przypadku kwantyzacja wartości x ∈ (xi−1 , xi ) odbywa się zgodnie zależnością: 

x Q(x) = ∆



(2.6)

Maksymalny błąd kwantyzacji można zmniejszyć dwukrotnie, dokonując przesunięcia przedziałów wejścia (rysunek 2.4): 

x + 0.5 Q(x) = ∆



(2.7)

Wartości wyjść kwantyzatora do jakich następuje przyporządkowywanie wejść, są rozmieszczone równomiernie będąc zarazem środkami przedziałów. Dlatego też ten rodzaj

26

2.1. Kwantyzacja skalarna

x

f (x)

1

0.5

0 −1

−0.5

0

0.5

x

1

Rysunek 2.3. Przykładowa funkcja gęstości prawdopodobieństwa sygnału losowego o rozkładzie równomiernym.

y4

y4

y3

y3

y2

y2

Wy

Wy

odwzorowania jest liniowy. Na rysunku 2.4 została przedstawiona różnica pomiędzy kwantyzatorem skalarnym równomiernym bez przesunięcia i z przesunięciem. Można zauważyć, że dla drugiego przypadku maksymalny błąd kwantyzacji został zmniejszony z q do 0.5q. Na rysunku 2.5 został przedstawiony błąd kwantyzacji dla danych wejściowych z zakresu x1 , . . . , x9 .

y1 y0 x0

y1

x1

x2 We

x3

x4

y0 x0

x1

x2 We

x3

x4

Rysunek 2.4. Kwantyzator skalarny równomierny bez przesunięcia (lewy rysunek) oraz z przesunięciem (prawy rysunek).

Zakładając, że mamy do czynienia z rozkładem równomiernym sygnału wejściowego w przedziale x ∈ [−xmax , xmax ] można przyjąć, że funkcja gęstości prawdopodobień-

SNR 27

2.1. Kwantyzacja skalarna

x − Q(x)

0.5q

0

−0.5qx 1

x2

x3

x4

x5 We

x6

x7

x8

x9

Rysunek 2.5. Błąd kwantyzacji między wejściem a wyjściem kwantyzatora równomiernego. stwa tego sygnału jest określona zależnością fX (x) = D=

M Z X

yi

i=1 yi−1

(xi − yi )2

1 . 2xmax

1 dx 2xmax

Wówczas: (2.8)

Wynikiem obliczenia całki (2.8), jest wartość błędu średniokwadratowego wynosząca 2 D = ∆12 [2, 3], gdzie ∆ jest wielkością kroku zdefiniowaną jako: ∆=

2xmax N

(2.9)

natomiast N jest ilością przedziałów. Przedstawiony powyżej kwantyzator jest kwantyzatorem optymalnym pod względem błędu średniokwadratowego tylko dla danych o rozkładzie równomiernym. Na rysunku 2.6 zostały przedstawione histogramy dla każdego ze współczynników LSP. Zostały one wyznaczone na podstawie analizy statystycznej z danych wejściowych w programie Matlab za pomocą funkcji histogram(...). Jako dane wejściowe posłużyły zebrane próbki dźwiękowe zamieszczone w Dodatku F. Na rysunku można zauważyć, że histogramy nie są opisane rozkładem równomiernym, a zatem opisany powyżej kwantyzator nie będzie efektywnym rozwiązaniem. Poszukując kwantyzatora dla danych wejściowych o nierównomiernym rozkładzie, można przyjąć założenie, że mamy do czynienia z kwantyzacją równomierną w przedziale największego prawdopodobieństwa. Ponieważ oczekiwanym rozkładem współczynników LSP jest rozkład Gaussa (rysunek 2.7), zatem można postąpić według następującego schematu: 1. Wyznaczenie wartości średniej x. 2. Wyznaczenie odchylenia standardowego σx . 3. Wyznaczenie wartości krańcowych przedziału: xmin = x − 2σx , xmax = x + 2σx .

28

2.1. Kwantyzacja skalarna

4. Wyznaczenie wartości poddanej kwantyzacji dla danej przepływności bitowej zgodnie ze wzorem: x − xmin (2.10) xe = K xmax − xmin gdzie K = 2N − 1 – maksymalna wartość po kwantyzacji, N – ilość bitów na współczynnik. Operacja odwrotna do kwantyzacji jest dana wzorem: x = xe

xmax − xmin + xmin K

1

6

0.04

7

(2.11)

10

9 8

5

Częstość

=

0.03

4

2 3

0.02

0.01

0

0

0.31

0.62

0.94

1.25

1.57

1.88

2.19

2.51

2.82

3.14

ω

Rysunek 2.6. Rozkład gęstości prawdopodobieństwa kolejnych współczynników LSP, wyznaczony na podstawie danych statystycznych.

2.1.3. Kwantyzacja nierównomierna Dla rozkładów innych niż równomierny, opisany w rozdziale 2.1.2 kwantyzator skalarny jest najprostszym jednakże najmniej efektywnym rodzajem kwantyzatora skalarnego. Kwantyzator nierównomierny dzięki rozłożeniu wartości wyjść kwantyzatora w różnych odległościach od siebie, może zapewnić znacznie większy zakres dynamiki przy tej samej długości książki kodowej oraz takim samym błędzie średniokwadratowym. Na rysunku 2.7 został pokazany przykładowy rozkład gęstości prawdopodobieństwa dla kwantyzatora nierównomiernego. Zagadnienie kwantyzacji nierównomiernej można również rozważać jako zastosowanie kwantyzatora równomiernego dla danych wejściowych przekształconych pewną funkcją. Jeśli dla obszarów o dużym prawdopodobieństwie wystąpienia wartości wejściowych przedziały kwantyzacji zostaną powiększone, a dla obszarów o małym prawdopodobieństwie wystąpienia wartości wejściowych przedziały zostaną zmniejszone, wówczas charakterystyka tak przekształconych danych odpowiadać będzie danym o rozkładzie równomiernym. Funkcja realizująca takie przekształcenie nazywana jest

29

2.1. Kwantyzacja skalarna

X

f (x)

0.4

0.2

0 −4

−3

−2

−1

0

x

1

2

3

4

Rysunek 2.7. Przykładowa funkcja gęstości gaussowskiego rozkładu prawdopodobieństwa. kompresorem, natomiast funkcja odwrotna do niej i przywracająca pierwotną charakterystykę nazywana jest ekspanderem. Proces takiego przekształcenia został zaprezentowany na rysunku 2.8.

X

X'

Q(x)

1 We

1 Wy Kompresor

Ekspander

Kwantyzator rownomierny

Rysunek 2.8. Schemat blokowy kwantyzatora nierównomiernego z wykorzystaniem kompresora i ekspandera. Efekt zastosowania kompresora i ekspandera jest zatem taki sam jak z wykorzystaniem kwantyzatora nierównomiernego. W telekomunikacji najczęściej wykorzystywane są charakterystyki µ–law (Ameryka Północna oraz Japonia): cµ (x) = sgn(x)



ln 1 +

µ|x| xmax

ln(1 + µ)



xmax

(2.12)

oraz A–law (Europa):   

A|x| |x| sgn(x) 1+ln(A) dla 0 ¬ xmax < 1/A A|x| cA (x) =  1+ln( x ) |x| max  sgn(x) dla 1/A ¬ xmax ¬1 1+ln(A)

(2.13)

30

2.1. Kwantyzacja skalarna

gdzie A i µ są stałymi a xmax jest maksymalną wartością wejścia. Różnica pomiędzy kwantyzatorem opartym na A–law/µ–law a najlepszym pod względem błędu średniokwadratowego kwantyzatorem może sięgać ok. 4dB. Najlepszy kwantyzator może mieć jednak większy szum kwantyzacji, zwłaszcza gdy sygnał ma niską amplitudę, a jego zakres dynamiczny jest ograniczony do niewielkiego zakresy wejściowego. Powyższe charakterystyki są opisane zaleceniem ITU–T jako standard funkcji kompresora (m.in. ITU–T G.711 oraz ITU–T G.726). W przypadku wyznaczania charak−1 terystyki pierwotnej, stosuje się odwrotne funkcje c−1 µ (x) i cA (x) będące funkcjami ekspandera [3, 17]. Docelowo poszukiwany jest kwantyzator, który jest minimalizuje wyrażenie (2.4). Aby zapewnić minimalizację tego wyrażenia, taki kwantyzator powinien spełniać: warunek najbliższego sąsiada (ang. nearest neighbour condition) oraz warunek centroidu (ang. centroid condition). Pierwszy z nich spełnia dla zadanej książki kodowej C: Ri ⊂ {x : d(x, yi) ¬ d(x, yj ) dla każdego j 6= i}

(2.14)

Q(x) = yi jeżeli d(x, yi ) ¬ d(x, yj ) dla każdego j 6= i

(2.15)

Wówczas Jeżeli powyższy warunek jest spełniony, to: d(x, Q(x)) = min d(x, yi) yi ∈C

(2.16)

Warunek najbliższego sąsiada jest warunkiem wystarczającym by dany kwantyzator był optymalny. Dowód można znaleźć w [2, 5]. Warunek centroidu jest zarazem warunkiem koniecznym i wystarczającym dla optymalnego kodera. Jego interpretacją jest środek masy dla danej komórki, który odpowiada wyjściu yi z książki kodowej. Zmodyfikowana wersja warunku, zwana zgeneralizowanym warunkiem centroidu (ang. generalized centroid condition), pozwala na stosowanie dowolnej metryki odległości [2] i jest zdefiniowana jako: cent(R) = min−1 E(d(X, y)|X ∈ R) y

(2.17)

Kwantyzator, który jest optymalny w podanym wcześniej sensie, ma następujące własności: 2 1. Jeżeli błąd kwantyzacji q = x − Q(x), to σq2 = σx2 − σQ(x) . 2. Wartość oczekiwana nie ulega zmianie E[Q(x)] = E[x]. 3. Nie ma korelacji pomiędzy błędem kwantyzacji a zmienną, która jest kwantowana E[(x − Q(x))Q(x)] = 0.

Dowody powyższych własności można znaleźć w [2, 13]. Inne podejście wyznaczania książek kodowych zaproponował Stuart Lloyd. Zastosował on schemat generowania kwantyzatora na podstawie znajomości rozkładu prawdopodobieństwa wartości źródłowych, wyznaczonych na podstawie analizy statystycznej

31

2.2. Kwantyzacja wektorowa

danych. W zaproponowanym schemacie, dokonywana jest minimalizacja błędu średniokwadratowego przez obliczenie jego pochodnej po yi i przyrównaniu do zera: !

N Z ∂ X (x − yi )2 fX (x)dx = 0, ∂yi i=1 Ri

(2.18) !

N Z   ∂ X x2 fX (x) − xyi fX (x) + yi2fX (x) dx = 0, ∂yi i=1 Ri

Z

Ri

skąd

(−2xfX (x) + 2yifX (x)) dx = 0, R

R

bi xfX (x)dx bi−1 xfX (x)dx yi = R = R bi Ri fX (x)dx bi−1 fX (x)dx Ri

(2.19) (2.20)

(2.21)

Rozwiązanie tego równania wykonuje się iteracyjnie uzyskując granice przedziałów kwantyzacji. Dla takiego kwantyzatora błąd średniokwadratowy określony jest wzorem: D = σx2 −

M X

yi2 P [bi−1 ¬ X < bi ]

(2.22)

i=1

gdzie σx2 jest wariancją danych wejściowych, a yi są wektorami książki kodowej. Pomimo zalet takich jak szybkość kwantyzacji i operacji odwrotnej do kwantyzacji oraz trywialnej implementacji, kwantyzacja skalarna charakteryzuje się stosunkową wysoką przepływnością bitową w przypadku danych wykazujących korelację pomiędzy kwantowanymi współczynnikami lub danych o rozkładzie prawdopodobieństwa o rozkładzie innym niż równomierny.

2.2. Kwantyzacja wektorowa W przypadku danych, które można zgrupować w pewne bloki, podejście kwantyzatora skalarnego nie jest wystarczająco efektywne. Takim przypadkiem są współczynniki LPC/LSP, które można traktować jak pojedynczy 10 – wymiarowy wektor w każdym bloku i które są ze sobą skorelowane. Wykorzystując ten fakt można zastosować inne podejście do ich reprezentacji. Jako pierwszy wysunął taką koncepcję Shannon, kodując dane o coraz dłuższych blokach i uzyskując lepszą średnią bitową dla zadanego błędu średniokwadratowego. 2.2.1. Podstawowe definicje i własności Kwantyzacja wektorowa w przestrzeni Euklidesowej RM jest odwzorowaniem zbioru M – wymiarowych wektorów w skończony dzbiór N wektorów M – wymiarowych. Kwantyzator wektorowy można zdefiniować jako: Q : RM → C

(2.23)

32

2.2. Kwantyzacja wektorowa

gdzie C ≡ {y1 , y2, . . . , yN } ⊂ RM

(2.24)

Analogicznie jak dla przypadku kwantyzatora skalarnego, C nazywane jest książką 2 (N ) kodową o rozmiarze N. Tak zdefiniowany kwantyzator ma rozdzielczość r = logM , która określa ile bitów wymaganych jest do reprezentacji danego współczynnika. Z każdym wektorem książki kodowej związane jest pojęcie regionów (bądź komórek ) (ang. Voronoi regions). Dla i = 1, 2, . . . , N region zdefiniowany jest jako: Ri = {x ∈ RM : Q(x) = yi } = Q−1 (yi)

(2.25)

[

(2.26)

i spełnia zależność Ri = RM oraz Ri

i

\

Rj = ∅ dla i 6= j

Kwantyzator wektorowy jest nazywany regularnym, jeżeli: 1. każda komórka Ri jest figurą wypukłą, 2. yi ∈ Ri dla każdego i. Podobnie jak w przypadku kwantyzatora skalarnego, można zdefiniować optymalny pod względem błędu średniokwadratowego kwantyzator wektorowy. Kwantyzator taki spełnia warunek najbliższego sąsiada: Ri = {x : d(x, yi ) ¬ d(x, yj )} gdzie i, j = 1, 2, . . . , N oraz i 6= j

(2.27)

W kwantyzacji wektorowej centroidem jest każdy niepusty zbiór wektorów yi ∈ RM który minimalizuje błąd średniokwadratowy pomiędzy wektorami książki kodowej C a zbiorem wektorów treningowych x ∈ R: cent(R0 ) = {y0 : E[d(X, y0)|X ∈ R] ¬ E[d(X, y)|X ∈ R]}, ∀y∈RM

(2.28)

Można wykazać [2, 5], że warunkiem optymalności kodera jest by centroid spełniał zależność: yi = cent(Ri ) (2.29) Warunkiem koniecznym by kwantyzator Q(x) był optymalny pod względem błędu (MSE), jest warunek zerowego prawdopodobieństwa granicznego (ang. Zero Probability Boundary Condition, ZPB):   P

N [

j=1

Bj  = 0

(2.30)

Interpretacją powyższej definicji jest brak wystąpień punktów granicznych w optymalnej książce kodowej. Dla ogólnego przypadku w kwantyzatorach zastosowanych np. w standardzie MPEG–4 HVXC, stosowana jest metryka odległości kwantyzatora wektorowego postaci: D = d(x, y) =

M X i=1

wi (xi − yi )2

(2.31)

33

2.2. Kwantyzacja wektorowa

gdzie M jest wymiarem wektora a wi wagą współczynników LSP. W tej pracy wykorzystana została metryka odległości oparta o miarę błędu (MSE) postaci: D = d(x, y) =

M X

(xi − yi )2

(2.32)

i=1

Istotną cechą kwantyzatora wektorowego jest fakt, że nie tylko jest uogólnieniem przypadku kwantyzatora skalarnego na przestrzeń N – wymiarową, ale zapewnia uzyskanie najlepszej możliwej efektywności kodowania danych. Wadą tego rodzaju kwantyzacji jest fakt, że nie istnieje optymalny pod względem czasowym algorytm tworzenia książki kodowej. W praktyce korzysta się z suboptymalnych algorytmów iteracyjnych np. omówionego w dalszej części algorytmu LBG. Wygenerowana książka kodowa musi być dostępna zarówno po stronie kodera i dekodera co zwiększa zapotrzebowania na zasoby pamięciowe. Dodatkowo w koderze proces wyszukiwania najbliższego sąsiada jest bardzo złożony. Samo odtworzenie danych po stronie dekodera jest trywialnym procesem wymagającym odczytania danych z tablicy o zadanym indeksie. 2.2.2. Standardowy algorytm LBG Przedstawiony w poprzednim rozdziale algorytm Lloyda, można uogólnić na przypadek wielowymiarowy [2, 3], przy założeniu, że dostępny jest zbiór uczący (zwany zbiorem treningowym). Algorytm ten ze względu na stosunkowo łatwą możliwość implementacji znalazł szerokie zastosowanie w dziedzinie kompresji danych metodą słownikową. Schemat generowania książki kodowej dla danego zbioru wektorów treningowych można przedstawić następująco: 1. Inicjalizacja. – wybór zbioru wektorów treningowych {Xn }N n=1 gdzie N jest rozmiarem książki kodowej, (0) – wyznaczenie początkowej postaci książki kodowej C k : {Yi }M i=1 gdzie M jest rozmiarem zbioru treningowego, – ustalenie parametrów: najmniejszej wartości błędu (MSE) D (0) = ∞ (w praktyce przyjmowana jest bardzo duża wartość numeryczna, np. maksymalna wartość zakresu zmiennej typu int), k = 0 i wartości progu błędu ǫ. 2. Wyznaczenie komórek kwantyzacji. – przyporządkowanie zbioru wektorów treningowych X do najbardziej odpowiadających im (w sensie wykorzystywanej metryki np. błędu średniokwadratowego) wektorów książki kodowej Y : (k)

Ri

= {Xn : d(Xn , Yi) < d(Xn , Yj )∀i6=j }

– wyznaczenie średniego błędu w danej iteracji D (k) , – sprawdzenie warunku: D (l−1) − D (l) ¬ǫ D (l−1)

i = 1, 2, . . . , M

34

2.2. Kwantyzacja wektorowa

Jeżeli warunek został spełniony to znaczy, że zostało znalezione minimum lokalne o zadanym błędzie ǫ i następuje zakończenie algorytmu. 3. Uaktualnienie książki kodowej. – zastąpienie wszystkich wektorów ze starej książki kodowej C (k−1) nowymi wektorami książki kodowej C (k) będącymi środkami ciężkości w danym regionie (k) Ri , – inkrementacja k o jeden i powrót do punktu 2. Przedstawiony powyżej algorytm znany jest pod różnymi nazwami: uogólniony algorytm Lloyda (ang. generalized Lloyd algorithm, GLA), bądź algorytm Lindego–Buza–Graya (LBG) dla N – wymiarów. W szczególności dla N = 1 procedura wyznaczania obszarów kwantyzacji może być zastosowana do wyznaczenia książki kodowej kwantyzatora skalarnego nierównomiernego. 2.2.3. Technika podziałów W celu zmniejszenia złożoności przeszukiwania książki kodowej, można ją zbudować w oparciu o strukturę drzewa algorytmem zaproponowanym przez Linde, Buzo i Graya, zwanym techniką podziałów (ang. splitting algorithm) [2, 3]. Podstawową zaletą tego rodzaju algorytmu jest największa szybkość wyszukiwania obszaru kwantyzacji dla danych wejściowych. Wadą jest natomiast konieczność podwojenia rozmiaru książki kodowej, oraz fakt, że jej całkowity rozmiar musi być określony przez zależność: K = 2N +1 − 2

(2.33)

gdzie N jest rzeczywistą ilością bitów wykorzystywaną przy kodowaniu współczynników poddanych kwantyzacji. Dodatkowo nie można użyć takiej metody z kwantyzatorem wykorzystującym pomiar odległości nie będący metryką np. MPEG–4 HVXC. Generacja takiej książki kodowej przebiega według następującego schematu: 1. Wyznaczenie centroida na podstawie wszystkich wektorów treningowych, będącego środkiem ciężkości całego zbioru. 2. Optymalizacja książki kodowej standardowym algorytmem LBG opisanym w podrozdziale 2.2.2. 3. Dwukrotne zwiększenie rozmiaru książki kodowej. 4. Wyznaczenie nowych centroidów poprzez dodanie wektorów zakłóceń ǫ1 i ǫ2 takich, że ǫ1 = −ǫ2 do każdego otrzymanego w punkcie 2 centroidu. 5. Jeśli ilość otrzymanych w wyniku podziału centroidów jest równa 2N następuje wyjście z algorytmu. W przeciwnym wypadku następuje powrót do punktu 2. Idea postępowania została przedstawiona na rysunku 2.9. Wychodząc od jednoelementowego słownika, w każdym etapie podwaja się jego wielkość dochodząc do założonej ilości poziomów. Dołączenie do bieżącego słownika otrzymanego w poprzednim etapie słownika zapewnia, że po podziale nowy słownik będzie przynajmniej tak samo dobry jak przed dokonaniem podziału. Metoda drzewa charakteryzuje się mniejszą efektywnością kompresji, głównie ze względu na fakt, że już na początkowych etapach decyzyjnych popełniony błąd co do wyboru poddrzewa może spowodować wybór

35

2.2. Kwantyzacja wektorowa

błędnego wektora docelowego. Dodatkowo na każdym poziomie przeszukuje się mniejszy podzbiór wektorów. Stosując modyfikacje algorytmu [10], można jednak zwiększyć efektywność przeszukiwania, dodatkowo zastosowanie takiej struktury pozwala na progresywną transmisję danych, gdzie każde poddrzewo przybliża coraz bardziej wektor docelowy. 1

1

ǫ1

−1 −1

0 a)

1

−1 −1

1

1

0

0

−1 −1

ǫ2 = −ǫ1

0

0

0 c)

1

−1 −1

0 b)

1

0 d)

1

Rysunek 2.9. Kolejne etapy podziałów: a) pierwszy wyznaczony centroid, b) wyznaczenie dwóch nowych centroidów przez zaburzenie wektorem losowym, c) zaburzenie każdego z nowych centroidów wektorem losowym, d) cztery centroidy otrzymane w wyniku zastosowania techniki podziału.

36

2.2. Kwantyzacja wektorowa

Sama technika podziałów może posłużyć do wyznaczenia zwykłej książki kodowej. Przy takim podejściu brany pod uwagę jest tylko ostatni poziom, który traktowany jest jak zwykła książka kodowa wygenerowana metodą LBG. 2.2.4. Metoda symulowanego wyżarzania Aby wyeliminować konieczność wielokrotnego tworzenia książki kodowej w celu znalezienia globalnego minimum, można w każdej iteracji wprowadzić dodatkowe zakłócenie o pewnej wariancji i zerowej wartości średniej, które jest dodawane do każdego wyznaczonego centroidu. Tego typu optymalizacja jest znana pod nazwą metody symulowanego wyżarzania (ang. stochastic relaxation). Ogólny schemat postępowania można przedstawić następująco: 1. Inicjalizacja podstawowych parametrów tj. najmniejszej wartości błędu (MSE) D (0) , ilości iteracji N po ilu ma się zakończyć wyżarzanie, n = 0 oraz błędu zbieżności do lokalnego minimum ǫ. 2. Wykonanie jednej iteracji algorytmu LBG omówionym w podrozdziale 2.2.2. 3. Obliczenie nowej wariancji zakłóceń zgodnie ze schematem schładzania. Jeżeli numer bieżącej iteracji n > N wówczas σn2 = 0 (zakończenie wyżarzania). 4. Wprowadzenie zaburzenia do zbioru wektorów książki kodowej. 5. Jeśli zmiana całkowitego MSE jest poniżej zadanego progu ǫ, wyjdź z algorytmu, w przeciwnym razie n = n + 1 i następuje powrót do punktu 2. Wariancja zakłóceń w danej iteracji jest wyliczana w każdym kroku zgodnie z tzw. schematem schładzania (ang. cooling schedule): 

σn2 = σ 2 1 −

n N

3

(2.34)

gdzie: σ 2 – wariancja początkowa n – aktualny numer iteracji N – całkowita ilość iteracji Oprócz przedstawionych metod istnieją również i inne algorytmy generacji książek kodowych. Przykładem może być algorytm najbliższych sąsiadów (ang. pairwise nearest neighbour, PNN) [2, 3]. Złożoność obliczeniowa tego algorytmu dla rozmiarów książek kodowych będących przedmiotem zainteresowania tej pracy, wyklucza go jednak z praktycznych zastosowań sprawiając, że ma on znaczenie czysto akademickie. 2.2.5. Kwantyzatory wieloetapowe W celu zredukowania złożoności obliczeniowej kodowania, można posłużyć się metodą wieloetapowego kwantyzatora wektorowego (ang. multistage vector quantization, MSVQ). W tym podejściu kilka koderów jest połączonych ze sobą kaskadowo w taki sposób, że wejściem kolejnego kodera jest różnica pomiędzy wartością wejściową w poprzednim etapie a wartością poddaną kwantyzacji. Dlatego też ten rodzaj kwantyzatora określany jest również jako resztkowy kwantyzator wektorowy. Idea MSVQ została

37

2.2. Kwantyzacja wektorowa

Rysunek 2.10. Schemat kodera MSVQ. schematycznie przedstawiona na rysunku 2.10. Złożoność obliczeniowa jak i wielkość PM słownika dla takiego schematu, zostają zmniejszone z ΠM i=1 Ni do i=1 Ni , gdzie Ni – rozmiar książki kodowej dla danego etapu. Dla trzyetapowego kwantyzatora MSVQ, wyjścia każdego kwantyzatora można zapisać jako: Y1 = Q1 (X) Y2 = Q2 (Y1 ) = Q2 (X − Q1 (X)) Y3 = Q3 (Y2 ) = Q3 (X − Q1 (X) − Q2 (X − Q1 (X))) Po stronie dekodera odtworzona wartość będzie wynosiła: X ′ = Y1 + Y2 + Y3 Całkowity koszt obliczeniowy wynikający z zastosowania wieloetapowego kwantyzatora wektorowego wynosi: MCM SV Q =

N X

2ri

(2.35)

i=1

gdzie ri to ilość bitów książki kodowej na i – tym poziomie, a N jest całkowitą ilością poziomów. Dla kwantyzatora wektorowego jednoetapowego o takiej samej wielkości książki kodowej koszt obliczeniowy wynosi: MCV Q =

N Y

2ri

(2.36)

i=1

W tabeli 2.1 zostały zestawione wyniki porównania złożoności obliczeniowej przy przeszukiwaniu książki kodowej metodą siłową dla kwantyzatora jedno i dwuetapowego.

38

2.2. Kwantyzacja wektorowa

Rozmiar książki kodowej [bit] 4 6 8 10 12 14 16 18 20

Całkowita ilość działań Jednoetapowy Dwuetapowy kwantyzator kwantyzator 640 2560 10240 40960 163840 655360 2621440 10485760 41943040

320 640 1280 2560 5120 10240 20480 40960 81920

Tabela 2.1. Porównanie złożoności obliczeniowej przy zadanym rozmiarze książki kodowej dla kwantyzatora wektorowego jedno i dwuetapowego 10 – wymiarowego. Kwantyzator dwuetapowy ma w każdym etapie książki kodowe tej samej wielkości. Z powyższej tabeli widać, że w przypadku książki kodowej o rozmiarze 220 wektorów, ilość działań potrzebnych na przeszukanie książki kodowej metodą siłową kwantyzatora dwuetapowego jest 512 razy mniejsza niż w przypadku kwantyzatora jednoetapowego. W tabeli 2.2 zostało przedstawione zestawienie kosztów pamięciowych dla przypadku jednopoziomowego i dwupoziomowego kwantyzatora wektorowego. Dodanie kolejnych poziomów spowodowałoby dalszą redukcję zapotrzebowania na pamięć. Rozmiar książki kodowej [bit] 4 6 8 10 12 14 16 18 20

Zapotrzebowanie na pamięć Jednoetapowy Dwuetapowy kwantyzator kwantyzator [słowa] [słowa] 16 8 64 16 256 32 1024 64 4096 128 16384 256 65536 512 262144 1024 1048576 2048

Tabela 2.2. Porównanie wymagań pamięciowych przy zadanym rozmiarze książki kodowej dla kwantyzatora wektorowego jedno i dwuetapowego. Kwantyzator dwuetapowy ma w każdym etapie książki kodowe tej samej wielkości.

39

2.3. Algorytmy przeszukiwania książek kodowych

Z powyższego zestawienia widać, że jednopoziomowa 10–wymiarowa książka kodowa o rozmiarze 20 bitów zapisana na typie float wymaga 40 MB pamięci. Dla takich samych parametrów, książka dwupoziomowa wymaga natomiast tylko 80 kB. Przedstawiona wyżej procedura znajduje zastosowanie dla dużych przepływności bitowych. Dla małych przepływności bitowych następuje znaczna utrata informacji co doprowadza do pogorszenia właściwości jakie oferuje taka struktura.

2.3. Algorytmy przeszukiwania książek kodowych Osobnym zagadnieniem są algorytmy przeszukiwania książek kodowych. W najprostszym podejściu, można wykonać pełne przeszukanie wymagające w najgorszym przypadku 4NC działań, gdzie N jest wymiarem wektora, a C – wielkością książki kodowej. Metoda ta jest niezwykle czasochłonna zwłaszcza przy dużych książkach kodowych. Koszt obliczeniowy można zmniejszyć wykorzystując schemat częściowego obliczania odległości (ang. partial distance search, PDS). Ogólna idea opiera się na założeniu, że zamiast obliczać MSE dla wszystkich wektorów z książki kodowej, można obliczyć raz błąd średniokwadratowy pomiędzy wektorem wejściowym a pierwszym wektorem z książki kodowej, a dla następnych wektorów wyliczać częściowe sumy dla kolejnych składowych wektora. W przypadku gdy suma dla r składowych będzie większa od najmniejszej znalezionej wartości MSE, następuje przejście do następnego wektora. Poniżej został przedstawiony schemat postępowania [2]: 1. Inicjalizacja zmiennych: i = 0, r = 1, Dr = 0 gdzie: i jest indeksem wektora, r jest indeksem składowej wektora a Dr błędem (MSE) i – tego wektora o r sumach kwadratów różnic składowych. 2. Obliczenie wartości błędu (MSE) dla wektora o indeksie i = 1, D =

R X

(xi − ci )2

i=1

gdzie R jest wymiarem wektora, oraz inkrementacja wartości i o jeden. 3. Obliczenie Dr = Dr +

r X

(xi − ci )2 .

i=1

4. Jeśli Dr < D i R < N (suma odległości r pierwszych elementów i – tego wektora jest mniejsza od błędu (MSE) D) to zwiększ r o jeden i wróć do punktu 2. 5. Jeśli Dr < D i r ­ N (został znaleziony wektor dla o mniejszej wartości MSE) wówczas D (i) = Dr oraz i = i + 1. 6. Jeśli i < I gdzie I jest rozmiarem książki kodowej (nie przeszukano całej książki kodowej) to ustawienie Dr = 0 i powrót do punktu 2. Postępowanie tą metodą pozwala zmniejszyć koszt obliczeniowy średnio czterokrotnie w stosunku do pełnego przeszukiwania. Ponadto nadaje się do przeszukiwania schematów kwantyzacji wektorowej z pomiarem, który nie spełnia warunku metryki (np. koder MPEG–4 HVXC). Ze względu na łatwość implementacji w tej pracy została wykorzystana właśnie ta metoda. Poniżej zamieszczona została funkcja do przeszukiwania książki kodowej napisana przez autora:

40

2.3. Algorytmy przeszukiwania książek kodowych

Tabela 2.3. Funkcja realizująca przeszukiwanie książki kodowej metodą częściowego obliczania odległości napisana przez autora. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

i n t P a r t i a l D i s t a n c e ( const v e c t o r ∗ Vec , const v e c t o r ∗ CBook , i n t C S i ze ) { f l o a t D=0 , D part , tmp ; i n t i n d =0; D=S i z e ( Vec ) ∗MSE( Vec ,&CBook [ 0 ] ) ; // o b l i c z e n i e b l ed u (MSE) d l a p i e r w s z e g o // wektora f o r ( i n t j =1; j =D) { break ; // b l a d w i e k s z y od p o p r zed n i eg o , mozna p r z e j s c do n a s tep n eg o // wektora } i f ( i==S i z e ( Vec)−1 && D part f i l t e r d o ( a f i r , y , e r r , tmp ) ; f o r ( i n t i =0; i T ; f o r ( i n t i=T prev ; i T!=0) Tx=round ((1 − i / 1 6 0 . 0 ) ∗ T2 [ p i t c h i n d e x ]+( i / 1 6 0 . 0 ) ∗ ( BS−>T ) ) ; T prev =(BS−>T)−160+ i ; err [ i ]=1.0; }

Ponieważ ton podstawowy w standardzie LPC–10 zawiera się w przedziale T ∈ [20, 160] próbek (co odpowiada zakresowi częstotliwości fT ∈ [50, 400] Hz), zatem wyznaczenie 10 pierwszych wartości wielokrotności częstotliwości tonu podstawowego wystarczy w zupełności aby pokryć zakres częstotliwości f ∈ (500, 4000) Hz.

20 log 10 |H(ejω )| [dB]

−40 −50 −60 −70 −80 −90

−100 −110 0

1

2

3

4

Częstotliwość [kHz]

Rysunek 3.14. Widmo dźwięcznej ramki sygnału mowy z naniesionymi dziesięcioma wielokrotnościami częstotliwości tonu podstawowego. Poszukiwanie obwiedni widma odbywa się przez pobieranie wartości amplitud wyznaczonych za pomocą FFT w punktach fT , 2fT , . . . , 10fT , gdzie FT jest częstotliwością tonu podstawowego. W rzeczywistości wielokrotności częstotliwości tonu pod-

63

3.6. Zaproponowane ulepszenia kodera LPC–10

stawowego fT nie znajdują się w równych odległościach. Dlatego też podczas wyznaczania ich amplitud widmowych należy przeszukać pewien zakres częstotliwości round(Mi/pitch) ± 5, gdzie M jest długością sygnału z którego obliczone zostało widmo za pomocą FFT, a i = 1, . . . , 10. Wyznaczona w ten sposób obwiednia może zostać poddana kwantyzacji i przesłana do dekodera. Poniżej został zamieszczony fragment funkcji wyznaczającej obwiednię widma, napisany dla potrzeb zaimplementowanego kodera mowy. Tabela 3.10. Fragment kodu źródłowego wyznaczającego obwiednię widma dla ciągu impulsów. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

f l o a t k0 =512.0 f / ( f l o a t ) p i t c h ; zesp ∗Z ; Z=moj . f f t ( i n p u t ) ; f l o a t tmp , peak = 0 . 0 ,sum = 0 . 0 ; i n t f r e q =0; f o r ( i n t m= 1 ; m255) magn [m−1]=peak ; else { peak =0; tmp=abs ( Z [ f r e q ] ) ; int i ; f o r ( i=f r e q −5; i 255) break ; tmp=abs ( Z [ ( i n t ) round ( i ) ] ) ; i f ( tmp>peak ) peak=tmp ; } magn [m−1]=peak ; } sum+=magn [m− 1 ] ; } i f ( sum==0.0 f ) f o r ( i n t i =1; i T ; tmp=BS2 ; BS2=BS1 ; BS1=tmp ; u=In p u t . r ea d ( ) ; // w c z y t a n i e ramki c=cod . code ( u , BS1 ) ; // zakodowanie ramki do BS1 i f ( BS1−>VUV==T prev && BS2−>VUV!=BS1−>VUV) BS2−>T=(BS1−>T+T2 ) / 2 ; // u s u n i e c i e n i e c i a g l o s c i w VUV} BS2−>T prev=BS1−>T ; c=dec . d eco d e ( BS2 , out ) ; // zdekodowanie ramki s y g n a l u }

Dodatek C Tabele W poniższych tabelach znajdują się wyniki pomiarów jakości MOS i CCR. Zamieszczone wyniki zostały zebrane podczas testów odsłuchowych na wybranej grupie osób. Kolejne kolumny tabel oznaczają: Oznaczenie We S41 V41 V41e V17 V15 V10b V10

Sygnał mowy przetworzony koderem bez kwantyzacji kwantyzator skalarny 41–bitowy kwantyzator wektorowy 41–bitowy dwupoziomowy kwantyzator wektorowy 41–bitowy z obwiednią widma kwantyzator wektorowy 17–bitowy dwupoziomowy kwantyzator wektorowy 15–bitowy dwupoziomowy kwantyzator wektorowy 10–bitowy jednopoziomowy kwantyzator wektorowy 10–bitowy dwupoziomowy

Tabela C.1. Opis zastoswanych metod kwantyzacji próbek dźwiękowych przy pomiarach jakości MOS i CCR.

89

90

We 2.00 2.50 2.50 2.70 2.00 3.00 1.20 3.00 1.50 2.00 3.00 2.00 2.00 2.00 2.30 3.20 2.00 2.00 3.00

S41 2.00 2.50 2.25 2.40 1.90 2.00 1.10 2.00 1.30 2.00 2.50 2.00 2.00 2.00 2.00 3.00 2.00 1.00 2.00

V41 3.00 3.00 1.00 3.00 1.90 2.00 1.50 2.50 1.20 3.00 2.80 2.00 2.00 1.50 2.60 2.30 3.00 3.00 4.00

V41e 2.00 2.20 2.00 2.60 2.00 2.00 1.10 2.00 1.30 3.00 3.00 2.00 2.00 1.75 2.15 2.50 2.00 2.00 2.00

V17 2.00 1.60 1.00 2.00 2.00 2.00 1.00 1.00 1.10 2.00 1.00 2.00 2.00 1.50 1.55 2.30 3.00 2.00 2.00

V15 1.00 2.00 1.75 2.40 1.85 2.00 1.00 1.00 1.20 2.00 2.00 2.00 2.00 1.50 1.80 2.00 2.00 2.00 2.00

V10 1.00 1.80 1.50 2.20 1.80 2.00 1.00 1.00 1.10 2.00 1.50 2.00 2.00 1.50 1.60 2.30 2.00 1.00 2.00

V10b 1.00 1.60 1.25 2.00 2.00 2.00 1.00 1.00 1.00 2.00 1.20 2.00 2.00 1.50 1.45 2.30 2.00 2.00 2.00

Tabela C.2. Wyniki pomiarów jakości metodą subiektywną MOS dla sygnału mowy kobiecej

91

We 1.00 3.00 2.00 1.50 1.85 2.00 1.00 1.00 1.00 2.00 2.30 2.70 2.00 1.75 1.70 1.50 3.00 2.00 1.00

S41 1.00 2.50 2.00 1.00 1.80 2.00 1.20 1.00 1.00 2.00 1.20 2.70 2.00 1.50 1.50 1.60 2.00 2.00 1.00

V41 2.00 2.30 1.25 2.10 1.80 3.00 1.10 1.00 1.10 2.00 3.00 2.70 2.00 1.25 1.40 1.60 2.00 2.00 1.00

V41e 2.00 2.10 1.50 1.90 1.80 2.00 1.10 1.00 1.00 2.00 2.80 2.00 2.00 1.25 1.35 1.50 2.00 2.00 1.00

V17 2.00 1.60 1.50 3.00 1.80 2.00 1.00 1.50 1.10 2.00 2.50 2.00 2.00 1.25 1.20 1.40 2.00 1.00 2.00

V15 1.00 1.80 1.50 2.30 1.80 2.00 1.00 1.00 1.00 2.00 1.50 2.00 2.00 1.25 1.30 1.50 2.00 1.00 1.00

V10 1.00 2.00 1.50 2.40 1.80 2.00 1.00 1.00 1.00 2.00 1.50 2.00 2.00 1.25 1.25 1.50 2.00 1.00 1.00

V10b 1.00 1.80 1.50 2.00 1.78 1.00 1.00 1.00 1.00 2.00 1.20 2.00 2.00 1.25 1.20 1.40 2.00 1.00 1.00

Tabela C.3. Wyniki pomiarów jakości metodą subiektywną MOS dla sygnału mowy męskiej

92

S41 V41 V41e V17 V15 V10 V10b 0.00 0.00 0.00 1.00 0.00 0.00 1.00 -1.00 0.00 -1.00 0.00 1.00 0.00 0.00 -2.00 1.00 0.00 -1.00 0.00 1.00 -1.00 -1.50 1.00 2.00 0.00 -1.00 2.00 -2.00 -1.00 0.00 -3.00 2.00 1.00 0.00 2.00 -1.00 0.00 2.00 0.00 0.00 0.00 -2.00 -1.00 1.00 2.00 1.00 -1.00 1.00 1.00 1.00 -1.00 1.00 0.00 -1.00 0.00 1.00 -1.00 -1.00 2.00 1.00 -1.00 0.00 -2.00 -1.00 1.00 1.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00 1.00 1.00 0.00 2.00 -2.00 0.00 0.55 2.20 0.00 -1.50 -3.00 0.00 0.00 1.00 -1.00 0.00 0.00 -1.00 -1.00 1.00 0.00 1.00 -1.00 -2.00 2.00 -1.65 0.00 2.15 -0.50 0.00 0.00 -1.70 -1.00 0.00 0.00 -0.50 0.00 0.00 -0.50 0.00 1.00 0.00 -1.00 1.00 2.00 1.00 0.00 1.00 0.00 0.00 0.00 -1.00 0.00 2.00 0.00 1.00 1.00 0.00 -1.00 -1.00 Tabela C.4. Tabela z wynikami pomiarów jakości współczynnika CCR dla mowy kobiecej

93

S41 1.00 0.00 0.00 1.50 0.00 0.00 2.00 1.00 -1.00 -1.00 0.00 2.50 1.00 2.00 1.50 2.00 0.00 1.00 0.00

V41 -1.00 2.00 -2.00 -1.50 -1.00 2.00 -3.00 -2.00 -2.00 0.00 0.00 -1.00 -2.00 -2.00 -2.00 -2.00 1.00 0.00 -1.00

V41e 0.00 2.00 2.00 2.00 1.00 -1.00 0.00 0.00 0.00 -1.00 0.00 -3.00 -1.00 0.00 1.40 0.00 1.00 0.00 -1.00

V17 0.00 -1.00 -1.00 0.00 -2.00 -1.00 -2.00 -1.50 -2.00 0.00 0.00 -2.80 0.00 -3.00 -0.60 0.00 -1.00 -1.00 0.00

V15 1.00 -1.00 -2.00 -1.00 2.00 1.00 2.00 2.00 -1.00 -1.00 -1.00 -3.00 -2.00 2.00 -2.50 -1.50 0.00 -2.00 2.00

V10 V10b 0.00 1.00 1.00 -1.00 1.00 1.00 0.00 1.00 0.00 0.00 -1.00 0.00 -2.00 2.00 0.00 1.00 0.0 0.00 1.00 1.00 -1.00 0.00 0.00 0.50 -1.00 0.00 0.00 1.00 -2.20 1.80 -2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00

Tabela C.5. Tabela z wynikami pomiarów jakości współczynnika CCR dla mowy męskiej

Dodatek D Skrypty języka Matlab Przedstawione w tym załączniku skrypty służą do oceny jakości sygnału metodami obiektywnymi. Wywołanie każdej m–funkcji sprowadza się do podania dwóch parametrów, którymi są: scieżka do oryginalnego pliku oraz ścieżka do pliku poddanego schematowi analiza–synteza wraz z kwantyzacją i dekwantyzacją. Skrypty zostały napisane w Matlabie 6.5 ale ponieważ nie używają specyficznych funkcji dla tej wersji programu, mogą z powodzeniem zostać wykorzystane w starszych wersjach środowiska Matlab.

94

95

Tabela D.1. Funkcja w języku Matlab służąca do wyznaczania oceny jakości dźwięku mowy metodą wyznaczania miary log-likelihood ratio. 1 2 3 4 6 7 8 9 11 12 14 15 16 17 18 20 21 22 23 25 26 28 29 30 31 32 33 34 35 37 38 40 41 43 44 46 47 49 50 51 52 53 54 56 57 58 59 60 61

% % % %

funkcja o b l i c z a j a c a wartosc c e p s t r a l di s tance Praca dyplomowa , , O p ty m a l i za cj a k o d er a mowy LPC−10 ’ ’ AGH Gr zeg o r z Suder 2 0 0 6 LIKELIHOOD .m

f u n c t i o n [ DLR]=LIKELIHOOD( w e j s c i e , w y j s c i e ) x = wavread( w e j s c i e ) ; y = wavread( w y j s c i e ) ; s h i f t = 1 6 0 ; % d l u g o s c ramki N org=length ( x ) ; % d l u g o s c s y g n a l u w e j s c i o w e g o N por=length ( y ) ; % d l u g o s c s y g n a l u porownywanego % z a p e w n i e n i e t e j samej d l u g o s c i obydwu sygnalow i f N org>N por N=N por ; x=x ( 1 : N por ) ; end i f N orgN por N=N por ; x=x ( 1 : N por ) ; end i f N orgN por N=N por ; x=x ( 1 : N por ) ; end i f N org