złożona z liczby p określającej pozycję początkową podciągu pc w buforze słownikowym oraz z długości l podciągu pc i z pierwszego symbolu wejściowego s następującego po odpowiedniku podciągu pc w buforze kodowania. Następnie zawartość całego bufora (bufora słownikowego i bufora kodowania) przesuwamy w lewo o / pozycji plus jeden. W ten sposób / + 1 lewo stronnych symboli zostanie usuniętych z bufora i tyleż samo symboli wejściowych zostanie wprowadzonych po jego prawej stronie. Przykład 5.1. Rozważmy sytuację, gdy f = l 2 = 4, a kodowaniu podlega komu nikat aababacbaacbaadaaa... Pozycje bufora są indeksowane liczbami 0 ,..., 7. 0. Początkową sytuację pokazuje pierwszy wiersz na rys. 5.1. 1. Pierwszym symbolem na wejściu jest litera a\ zatem pozycje od 0 do 3 są wy pełnione literami a. Na pozostałych pozycjach umieszczamy pierwsze cztery litery na wejściu aaba. Najdłuższym przedrostkiem równym podciągowi pc, zaczynające mu się na jednej z pozycji od 0 do 3, jest podciąg aa. Tworzymy zatem trójkę <2, 2, b > albo po prostu 22b, co oznacza, że podciąg pc zaczyna się na pozycji 2, pc skła da się z dwóch symboli, a symbolem następującym po przedrostku bufora kodowa77
Rozdział 5. Kodowanie słownikowe
nia równego podciągowi pc jest litera b. Na rysunku 5.1 podciąg pc w buforze słownikowym jest podkreślony linią przerywaną, a przedrostek równy podciągowi pc - linią ciągłą. Następuje przesunięcie w lewo powodujące usunięcie trzech pierwszych liter a i pojawienie się ciągu bac. Wejście
Bufor
Wyjście
aababacbaacbaadaaa... aababacbaacbaadaaa... abacbaacbaadaaa...
a a aa
a
a a aa a a b a a a a b abac
22b 23c
baacbaadaaa... cbaadaaa... daaa... aaa...
abacbaac cbaacbaaa cbaadaaa
03a 304
12a
Rys. 5.1. Kodowanie komunikatu aababacbaacbaadaaa... za pomocą metody LZ77
2. Najdłuższe dopasowanie również zaczyna się na drugiej pozycji i składa się z trzech symboli aba, po których następuje po przedrostku bufora kodowania litera c. Zostaje zwrócona trójka 23c. Zauważmy, że przedrostek aba i podciąg pc prze cinają się, tj. pc przekracza granicę dzielącą oba bufory. Następuje przesunięcie, a zatem usunięcie aaab i włączenie baac. 3. Zostaje zwrócona trójka 12a i odpowiednie uaktualnienie buforów. 4. Najdłuższe dopasowanie pc zawiera cztery symbole, ale ponieważ trzecim elementem trójki powinien być symbol następujący po przedrostku równym pod ciągowi pc, pc zachowuje tylko trzy symbole, a czwarty symbol a staje się trzecim elementem trójki 03a. 5. Dla przedrostka d nie można znaleźć równego mu podciągu pc, zostaje za tem wygenerowana trójka 3Cki, przy czym długość podciągu pc jest 0; zauważmy, że początkowa pozycja tego podciągu jest 3, co nie ma znaczenia, gdyż mogłaby to być każda inna liczba.
□
Liczby lx i l2 zostały wybrane w ten sposób, żeby można je było wyrazić za po mocą 2 bitów. Ponieważ każdy symbol wymaga 1 bajta, tj. 8 bitów, każda trójka jest kodowana za pomocą 12 bitów. Tak więc liczby Zx i l2 powinny być potęgami dwójki, by była użyta każda liczba binarna o danej długości. Jeśli lx byłoby równe 5, to trze ba by użyć 3 bitów na zakodowanie wszystkich możliwych liczb od 0 do 4, trzy trójbitowe ciągi odpowiadające liczbom 5, 6 i 7 nie byłyby nigdy użyte. Warto zauwa żyć, że w aktualnych implementacjach tego algorytmu liczby lx i l2 są znacznie więk sze niż w naszym przykładzie, zwłaszcza liczba lx. W celu zdekodowania trójek dekoder inicjuje bufor słownikowy, używając pierwszego symbolu na wejściu. W każdej iteracji dekoder dla danej trójki
odpowiadającą najdłuższemu ciągowi dopasowanie w buforze słownikowym-, if rozmiar(
)> rozmiar{dopasowanie) zwróć parę < \, pierwsza litera w buforze kodowania >; przesuń zawartość całego bufora o jedną pozycję; else zwróć trójkę < 0, p ,l >; przesuń zawartość całego bufora o lpozycji;
1 i j 1 ■ ; | | J
Przykład 53. W przykładzie 5.1 największą liczbą użytą do określenia pozycji p i długości / była liczba 3, wymagająca 2 bitów, a zatem rozmiar{
jest również więk szy, metoda LZSS umożliwia uzyskanie lepszego współczynnika kompresji. Wejście aababacbaacbaadaaa... aababacbaacbaadaaa... babacbaacbaadaaa... abacbaacbaadaaa... cbaacbaadaaa... baacbaadaaa... acbaadaaa... adaaa... daaa... aaa...
Bufor aaaa aaaaaaba aaaababa aaababac babacbaa abacbaac acbaacba acbaadaa cbaadaaa
Wyjście a 022 1b 023 1c 012 004 la u
Rys. 5.3. Kodowanie komunikatu aababacbaacbaadaaa... za pomocą metody LZSS
Dużo czasu w metodzie LZ77 zajmuje przesunięcie zawartości buforów po zakodowaniu danego podciągu wejściowego. Możemy tego uniknąć, używając bufora pierścieniowego. W ten sposób nie trzeba fizycznie przesuwać symboli znajdujących się w buforze. Należy jedynie uaktualnić pozycje słownika i bufor kodowania.
5.2. Metoda LZ78 Słownik w metodach LZ77 i LZSS nieustannie się zmienia: jest to bufor słowniko wy, którego zawartość zależy od bieżąco kodowanego fragmentu wejścia. Dlatego też jeśli komunikat zawiera podciągi, które już przedtem były kodowane i zostały usunięte z bufora słownikowego, to koder musi zwrócić więcej trójek niż w sytuacji, 'gdyby te podciągi wciąż były w buforze słownikowym. By uniknąć tej sytuacji, rmetodzie LZ78 używamy słownika, który zachowuje hasła na stałe i który zwięk' sza się w miarę kodowania komunikatu. Metoda LZ78 różni się od metody LZ77 również tym, że używamy tylko par ; zamiast trójek. Para
zawiera pozycję p kodowanego podciągu w słowniku ~i symbol s następujący na wejściu po tym podciągu. Zauważmy, że długości podcią: gu tym razem się nie przesyła, gdyż dekoder buduje słownik w ten sam sposób co koder, a zatem może on znaleźć długość danego podciągu w słowniku. Jeśli na ^przykład aktualnie jest kodowany podciąg abcdef, to zwrócona para <15, /> , w skrócie 15/, oznacza, że słownik zawiera hasło abcde na pozycji 15 i że w słowni ku nie ma hasła abcdef. Po przetworzeniu tego podciągu do słownika zostaje do-
Rozdział 5. Kodowanie słownikowe
dane odpowiadające mu hasło. Istnieje również specjalna sytuacja, kiedy para za czyna się od zera, <9r#>, co oznacza, że symbolu 5 nie ma w słowniku i należy go tam dodać. Przykład 5.4. Zakodujmy komunikat aababacbaacbaadaaa... Kroki wykonane w czasie tego procesu pokazujemy na rys. 5.4. Koder wejście wyjście a ab aba c b aa cb aad aaa
Oa lb 2a 0c Ob la 4b 6d 6a
Słownik indeks hasło 1 2 3 4 5 6 7 8 9
a ab aba c b aa cb aad aaa
Rys. 5.4. Kodowanie komunikatu aababacbaacbaadaaa... przy użyciu metody LZ78
1. Początkowo słownik jest pusty. Pierwszej litery na wejściu, a, nie ma w słowni ku, zwracamy zatem parę 0a i umieszczamy literę a na pierwszej pozycji słownika. 2. Koder znajduje w słowniku hasło równe podciągowi a. Hasło takie istnieje, więc koder próbuje znaleźć hasło dla podciągu ab. Ponieważ hasła takiego nie ma, koder zwraca parę lb oznaczającą, że symbol na wejściu, b, następuje na wejściu po ciągu, który możemy znaleźć w słowniku na pozycji 1. Następnie ciąg ab zostaje umieszczony w słowniku na pozycji 2. 3. Nieprzetworzoną częścią komunikatu jest teraz ciąg abacbaacbaadaaa...; koder próbuje znaleźć najdłuższe dopasowanie dla przedrostka tego ciągu. Znaj duje najpierw hasło a, potem ab, lecz niepowodzeniem kończy się poszukiwanie hasła aba, zatem koder zwraca parę 2a, by poinformować dekoder, że zakodowa ną częścią komunikatu jest ciąg znajdujący się w słowniku na pozycji 2, a po nim litera a. Następnie koder umieszcza w słowniku ciąg aba. Pozostałe kroki poka zujemy na rys. 5.4.
□
Dekoder jest prostszy od kodera. Dla danej pary wejściowej
łączy ciąg ze słownika na pozycji p z symbolem 5 i zwraca rezultat jako zdekodowaną część komunikatu, a ponadto umieszcza go w słowniku. Tym samym naśladuje on dzia łanie kodera, tj. modyfikuje słownik dokładnie w ten sam sposób.
5.2. Metoda LZ78
Przykład 5.5. Zdekodujmy strumień par 0alb2a0c... 1. Po otrzymaniu pierwszej pary 0a dekoder zwraca literę a, a także umieszcza ą w słowniku. y 2. Druga para lb powoduje, że dekoder łączy ciąg z pozycji 1, tj. ciąg a, z literą _ i zwraca ciąg ab oraz włącza go do słownika. ; 3. Po otrzymaniu trzeciej pary 2a dekoder łączy ab z pozycji 2 z literą a, po "zym zwraca ciąg aba i rozszerza słownik przez dodanie do niego tego ciągu. Pozo stałe kroki pokazujemy na rys. 5.5. Dekoder wejście wyjście 0a 1b 2a 0c Ob la 4b 6d 6a
a ab aba c b aa cb aad aaa
Słownik hasło indeks 1 2 3 4 5 6 7 8 9
a ab aba c b aa cb aad aaa
Rys. 5.5. Dekodowanie strumienia par za pomocą metody LZ78
5.2.1. Metoda LZW Algorytm LZW jest zazwyczaj używaną wersją metody LZ78, zawierającą ważną modyfikację: redukuje on wyjście kodera z par do pojedynczych liczb, nie wymaga jąc przesyłania symbolu będącego drugim elementem par w metodzie LZ78. Jest to możliwe przez odpowiednie inicjowanie słownika, a mianowicie wprowadzenie do niego wszystkich symboli przed rozpoczęciem kodowania lub dekodowania. :W ten sposób symbol użyty w komunikacie po raz pierwszy ma zawsze odpowiada jące mu w słowniku hasło [7], [3]. W metodzie LZW próbuje się zwracać słowa kodowe dla podciągów obecnych już w słowniku. Przy napotkaniu podciągu niemającego hasła w słowniku w meto dzie LZW dodaje się ten podciąg do słownika i zwraca słowo kodu dla znanego fragmentu tego podciągu. Oto bardziej szczegółowa postać tego algorytmu: ; KodowanieLZWQ wprowadź do słownika wszystkie symbole wejściowe; ciąg c = pierwsza litera wejściowa; while kodowanie niezakończone
Rozdział 5. Kodowanie słownikowe
wczytaj symbol s; if c + s jest w słm#tiku c = c + s; else zwróć słowo kodu odpowiadające ciągowi c; włącz c + s do słownika; c = s; zwróć słowo kodu odpowiadające ciągowi c; Ciąg c nigdy nie jest pusty. Po wczytaniu nowego symbolu s sprawdzamy, czy ! słownik zawiera połączenie c + s. Jeżeli połączenie to jest w słowniku, to zostaje | wczytany nowy symbol; w przeciwnym razie LZW zwraca słowo kodu odpowiadają- i ce ciągowi c, wprowadza do słownika połączenie c + s i nadaje zmiennej c wartość s.
Jj
Przykład 5.6. Na rysunku 5.6 pokazujemy wykonanie tej procedury przy kodowaniu aababacbaacbaadaaa... 0. Najpierw litery a, b, c, d zostają wprowadzone do słownika. 1. Słownik zawiera hasło a, lecz nie zawiera hasła aa, a zatem aa zostaje dodane do słownika na pozycji 5 i zwrócone słowo kodu 1 (indeks podciągu a w słowniku), odpowiadające przedrostkowi ciągu aa, a następnie przedrostek ten zostaje usunięty z kodera, lecz końcowa litera ciągu, litera a, zostaje w nim zachowana. Koder wejście wyjście
baa acb baad da aaa
i i 2 6 1 3 7 9 11 4 5
i | 1 |
Słownik indeks hasło 1 2 3 4
aa ab ba aba ac cb
a
5 6 7 8 9 10 11 12 13 14 15
a b c d aa ab ba aba ac cb baa acb baad da aaa
Rys. 5.6. Kodowanie komunikatu aababacbaacbaadaaa... za pomocą metody LZW
-v>
i ! 1 j
5.2. Metoda LZ78
2. Trzecią literą na wejściu jest b; zostaje ona połączona z zachowaną w po przednim kroku literą a, co daje w wyniku ciąg ab. Ciągu tego nie ma w słowniku, zostaje zatem do niego włączony; następnie zostaje zwrócone słowo kodu 1, odpo wiadające przedrostkowi ciągu ab, i usunięcie tego przedrostka; jedynie końcowa litera ciągu, litera b, jest zachowana. 3. Czwartą literą na wejściu jest a, co powoduje utworzenie ciągu ba po dołą czeniu a do uprzednio zachowanego b. Ciągu ba nie ma w słowniku, zostaje więc do niego włączony, po czym jest zwrócone słowo kodu 2, kodujące przedrostek b Itego ciągu. Przedrostek zostaje usunięty, a litera a zachowana. 4. Następna litera, b, daje ciąg ab po połączeniu jej z a z poprzedniej iteracji. Ponieważ ab jest już w słowniku, następna litera, a, zostaje wczytana i połączona z ciągiem ab, by dać ciąg aba. Tego ciągu nie ma w słowniku, zostaje zatem doń wprowadzony, po czym jest zwrócone słowo kodu 6, odpowiadające podciągowi ab. ’Pozostałe kroki możemy prześledzić na iys. 5.6. Zauważmy, że w kolumnie zawie rającej wejście kodera każdy ciąg zaczyna się od litery będącej ostatnią literą ciągu z poprzedniego wiersza tej kolumny.
□
Dekoder używa tego samego słownika, uaktualniając go przy każdym przetwa rzanym słowie kodu, oprócz pierwszego z nich. Dla każdego słowa kodu dekoder znajduje w słowniku, a następnie zwraca, odpowiadający mu ciąg. Dekoder zapa miętuje ten ciąg i wczytuje następne słowo kodu. To słowo zostało utworzone przez dekoder dlatego, że poprzedniego ciągu połączonego z pierwszym symbolem bieżącego ciągu (nie mówiąc już o pozostałych symbolach) nie było w słowniku, . toteż koder utworzył odpowiednie hasło. Dekoder dokonuje tego samego, włącza jąc do słownika poprzedni ciąg połączony z pierwszym symbolem bieżącego ciągu, po czym zwraca bieżący ciąg. Dla każdego słowa kodu, prócz pierwszego, dekoder modyfikuje słownik w ten sam sposób co koder. Procedura dekodowania przed stawia się następująco: . DekodowanieLZW() wprowadź do słownika wszystkie symbole wejściowe-, wczytaj na zmienną poprzednieSłowoKodu pierwsze słowo kodu i zwróć odpowiadający mu symbol, while słowa kodu wciąż napływają wczytaj słowoKodu; poprzedniCiąg = d^g(poprzednieSłowoKodu); if słowoKodu jest w słowniku wprowadź do słownika poprzedniCiąg + pierwszySymbol(ciąg(s\o\NoKoóuj); zwróć ci^g(słowoKodu); else // specjalny przypadek-, scscs, przy czym ciąg c może być Upusty i ciąg sc jest już w słowniku;
Rozdział 5. Kodowanie słownikowe
wprowadź do słownika poprzedniCiąg + pierwszySymbol (poprzedniCiąg)^ zwróć poprzedniCiąg + pierwszySymbol(poprzedniCiągy, poprzednieSłowoKodu = słowoKodu; Ten dość prosty algorytm określa też działanie dla szczególnego wypadku, któ ry za chwilę rozważymy. W podanym teraz przykładzie kodowany komunikat nie zawiera takiego wypadku. Przykład 5.7. Zdekodujemy teraz strumień słów kodu utworzonych w przykła dzie 5.6. 0. Wszystkie symbole źródłowe wprowadzamy najpierw do słownika. Następ nie wczytujemy pierwsze słowoKodu, 1, co powoduje zwrócenie litery a i inicjowanie zmiennej poprzedniCiąg = a. 1. Liczba 1, drugie słowoKodu, zostaje również zdekodowane jako a, lecz teraz poprzedni ciąg a został połączony z pierwszą literą bieżącego ciągu, z literą u, a re zultat, aa, jest wprowadzony do słownika. 2. Trzecie słowoKodu, 2, zostaje zdekodowane jako b i pierwsza litera tego cią gu, litera b, zostaje dołączona do poprzedniego ciągu, którym jest a, dzięki czemu powstaje ciąg ab wprowadzony następnie do słownika. 3. Liczba 6 to następne słowoKodu, po otrzymaniu którego dekoder zwraca ab i rozszerza słownik przez dodanie ciągu ba, będącego połączeniem poprzedniego ciągu b i pierwszej litery bieżącego ciągu, litery a. Dekoder wejście wyjście
1 1 2 6 1 3 7 9 11 4 5
Słownik hasło indeks a 1 2 b 3 c 4 d
a a b ab a c ba ac baa d aa
5 6 7 8 9 10 11 12 13 14
aa ab ba aba ac cb baa acb baad da
Rys. 5.7. Dekodowanie strumienia liczb za pomocą metody LZW
86
5.2. Metoda LZ78
4.1 jest piątym słowem kodu reprezentującym a; litera ta zostaje dołączona do ; poprzedniego ciągu ab i powstały w ten sposób ciąg aba jest dodany do słownika. ; Pozostałe kroki pokazujemy na rys. 5.7.
□
Specjalna sytuacja występuje wówczas, gdy słowo kodu nie ma w słowniku od powiadającego mu hasła. Występuje to wówczas, gdy kodowany komunikat zawie ra podciąg scscs, przy czym s jest pojedynczym symbolem, c jest ciągiem o dowol nej długości, a sc znajduje się już w słowniku. W tym wypadku dekoder otrzymuje I- słowo kodu odpowiadające ciągowi scs, lecz dla scs nie ma hasła w słowniku deko dera. Wówczas dekoder wie, że poprzednio zdekodowanym ciągiem był ciąg sc, zatem zwraca poprzedni ciąg sc połączony z pierwszą literą s, co prowadzi do właś| ćiwego ciągu scs. Dekoder wejście wyjście
i 2 5 7 3 9 4 10 12
Słownik hasło indeks a 1 2 b c 3 4 d
a b ab aba c cc d ccd ccdc
5 6 7 8 9 10 11 12
ab ab aba abac CC ccd dc ccdc
Rys. 5.8. Specjalny wypadek dla dekodera LZW
Przykład 5.8. Rozważmy komunikat abababacccdccdccdca. Specjalny wypadek zachodzi tutaj trzykrotnie, co zaznaczamy wzięciem w nawiasy każdego z tych wyU padków: ab(ababa)(ccc)d(ccdccdc)a. Koder generuje strumień słów kodu 1 2 5 7 3 I 9 4 10 12. Po zdekodowaniu słów kodu 1, 2 i 5 sytuacja przedstawia się jak w pierwH szych siedmiu wierszach tabeli na rys. 5.8. Ostatnie hasło słownika wygenerowane gv. przez dekoder odpowiada słowu kodu 6, a słowem kodu jest teraz liczba 7, która podnosi się do nieistniejącego hasła. To jest właśnie omawiany szczególny wypadek. ' Teraz dekoder tworzy hasło słownika, tj. na pozycji siódmej umieszcza ciąg aba, I któiym jest poprzedni ciąg ab połączony z pierwszą literą a, a następnie wydobywa ten ciąg, by go zwrócić. W tym wypadku ciągiem scscs jest ciąg ababa, przy czym 87
Rozdział 5. Kodowanie słownikowe podciąg c składa się z jednej tylko litery b. Szczególny wypadek występuje tu jesz- ■ > cze dwa razy, mianoWiCie w wypadku ciągu ccc, dla którego podciąg c z ogólnego % schematu scscs jest pusty, a podciąg sc, czyli po prostu symbol s został umieszczo- j ny w słowniku w trakcie inicjowania; następny szczególny wypadek istnieje dla \ ciągu ccdccdc, przy czym ciąg c z ogólnego schematu scscs równa się cd. |
□\
Zasadniczym czynnikiem decydującym o efektywności każdej z metod anali- \ zowanych w niniejszym rozdziale jest organizacja słownika. Jest oczywiste, że | w bardziej realnych sytuacjach słownik może zawierać setki, a nawet tysiące haseł, i co wymaga użycia efektywnych metod przeszukiwania słownika. Różne warianty | metod LZ78 i LZW różnią się m.in. strukturą danych implementującą słownik. Ą Najbardziej popularnymi strukturami danych używanymi w tym celu są tablice ':J haszowania, drzewa binarne i struktury typu trie [2]. j| Wiele powszechnie używanych metod kompresji opiera się na metodzie LZ77 fi lub LZ78. Przykładami programów opartych na LZ77 są ARJ, LHarc, PKZip | i UC2; przykładami programów opartych na LZ78, czy raczej na LZW, są ARC, 'i PAK i używany przez Unix program compress; obrazy typu .gif są również kodowane przy użyciu wersji metody LZW.
J
■1
Ćwiczenia
■Ą 1. W metodzie LZ77 pierwsze /, pozycji jest wypełnionych /, egzemplarzami pierwszego symbolu wejściowego. Czy są możliwe inne inicjacje? 2. Na rysunku 5.1 lx = l2 = 4 = 22. Pod jakim względem wybór /, = l2 = 16 = 24 upraszczałby implementację algorytmu LZ77? 3. W jakiej sytuacji algorytm LZ77 jest najbardziej efektywny? Najmniej efek tywny? 4. Zdekoduj ciąg b3\a23b30c2\a32b przy użyciu metody LZ77. 5. Skonstruuj tabelę podobną do pokazanej na rys. 5.2, dekodując a0221M)231c0120041ald metodą LZSS. 6. Używając metody LZ78 i słownika zawierającego początkowo litery a, b, c, zdekoduj ciąg 1 2 4 3 1 4 9 5 8 12 2. 7. Jaki jest najdłuższy ciąg, który możesz zakodować jako trójkę za pomocą metody LZ77? Jaki jest możliwy problem łączący się z tym? 8. W metodzie LZ78 parę <0, s> uważa się za szczególny wypadek, co oznacza, że symbolu s nie ma w słowniku. Czy wypadek ten trzeba traktować w szczególny sposób? 9. Zakoduj metodą LZW komunikat abababacccdccdccdca analizowany w przykładzie 5.8.
Literatura
Literatura 1. Bell T. C: Better OPM/L text compression. IEEE Transactions on Communications, 1986, COM-34, s. 1176-1182. ; 2. Bell T. C , Cleary J. G., Witten I. H.: Text compression. Prentice-Hall, Englewood Cliffs 1990. i;3. Miller V. S., Wegman M. N.: Variations on a theme by Ziv and Lempel. W: Apostolico A., Galii Z. (red.): Combinatorial algorithms on words. Springer, Berlin 1985, s. 131-140. 4. Nelson M.: LZW data compression. Dr. Dobb’s Journal, 1989,14, s. 29-37. 15. Schuegraf E. J., Heaps H. S.: A comparison of algorithms for data-base compression by use of fragments as language elements. Information Storage and Retrieval, 1974,10, s. 309-319. f 6. Storer J. A., Szymański T. G.: Data compression via textual substitution. Journal of the ACM, | 1982,29, s. 928-951. jj" 7. Welch T. A.: A technique for high-performance data compression. Computer, 1984, 17, nr 6, s. 8-19. jf. 8. Ziv J., Lempel A.: A universal algorithm for sequential data compression. IEEE Transactions on Information Theory, 1977, IT-23, s. 337-343. p . 9. Ziv J., Lempel A.: Compression of individual sequences via variable-rate encoding. IEEE Trans actions on Information Theory, 1978, IT-24, s. 530-536. fcrir-V
pPr;
90
<•;1 i - . i u*....1'.. i -Yi ~i fi >i4'I!rwi ~ i ~ ~ i v f r i * ' - ' r i i
Komputery są maszynami cyfrowymi operującymi językiem zer i jedynek. Więk szość natomiast zachodzących wokół nas zjawisk naturalnych to zjawiska ciągłe, nieustannie trwające procesy o ciągłych przejściach między dwoma różnymi sta nami. Leibniz mówił o zasadzie ciągłości jako sposobie, w jaki zachodzą zjawiska naturalne i społeczne, co jest wyrazem uznawanej już w średniowieczu zasady natu ra non facit saltus, natura nie wykonuje skoków, tj. każdy proces zmienia się w spo sób ciągły, przechodząc gładko przez wszystkie pośrednie stany, dokonując przej ścia od stanu A do stanu B. Zasada ciągłości oznacza, że nie istnieje chwila, w której dane ciało nie ma temperatury. Temperatura ta może być różna w różnych chwilach, lecz zawsze ma jakąś wartość, zmieniając się w czasie w sposób ciągły. Tak samo jest z innymi wła ściwościami ciał. Jeśli chcielibyśmy wyrazić te zmiany za pomocą liczb, to musieli byśmy użyć nieskończenie wielu wartości do reprezentacji temperatury w pewnym przedziale czasu. Zakres liczb, które możemy reprezentować w systemach kompu terowych, jest zawsze skończony, a zatem dla dwóch różnych liczb zawsze istnieje liczba mieszcząca się między nimi, której w systemie komputerowym nie możemy reprezentować, istnieje jednak zawsze nieskończenie wiele chwil między dwoma różnymi chwilami, a zatem istnieje nieskończenie wiele wartości temperatury mię dzy tymi chwilami. Taką ciągle zmieniającą się informację może przetworzyć urządzenie analo gowe, ciągłe. Na przykład ciągłe zmiany temperatury danego ciała można repre zentować za pomocą ciągłych zmian napięcia prądu w danym czujniku. Nie gwa rantuje to jednak, że informacja nie zostanie w ten sposób zniekształcona lub stracona. Urządzenie analogowe może zmieniać parametry z powodu, powiedz my, fluktuacji natężenia prądu czy zmian temperatury otoczenia. Również po wymianie części tego urządzenia może się okazać, że właściwości nowej części mają niepomyślny wpływ na przetwarzanie informacji. Tego rodzaju problemy możemy wyeliminować lub przynajmniej w dużym stopniu zredukować, dokonu jąc przetwarzania analogowo-cyfrowego. Przetworzenie to powoduje przekształ-
a
Próbkowanie i kwantyzacja
r'v' 'V
Rozdział
Rozdział 6. Próbkowanie i kwantyzacja
cenie ciągłego sygnału w ciąg liczb. A ponieważ zazwyczaj dokonuje się to przy .udziale komputera, ciąg ten składa się z liczb binarnych. Są z tym jednak związame pewne problemy. Temperatura i napięcie prądu są przykładami sygnałów. Sygnałem nazywamy ciągłą funkcję/w dziedzinie czasu, ponieważ obliczając wartość_y = f(t) argument t 'tej funkcji oznacza czas. Jeśli oś x reprezentuje czas, to wykres funkcji / nazywamy linią falową (waveform) lub po prostu falą. Fala ma trzy właściwości, które możemy zmieniać (modulować) w sposób nieza leżny jedna od drugiej: amplitudę, częstotliwość i fazę, co ilustruje rys. 6.1 w wypadvku funkcji sinusoidalnej. Amplitudą nazywamy intensywność sygnału i możemy ją zmieniać, wydłużając lub ścieśniając falę wzdłuż osi y. Na przykład ze wzrostem am plitudy fali dźwiękowej rośnie natężenie dźwięku, mierzone w decybelach. Częstotli wość wskazuje na to, jak często okres fali się zmienia i możemy ją zmienić, wydłuża jąc lub ścieśniając falę wzdłuż osi x. Na przykład wysokość dźwięku zmienia się wraz z częstotliwością. Zmian a/ozy oznacza przesunięcie fali w prawo lub w lewo.
Częstotliwość
Rys. 6.1. Niezależne zmiany amplitudy, częstotliwości i fazy funkcji sinusoidalnej
Liczby uzyskane w trakcie przetwarzania analogowo-cyfrowego następują jed na po drugiej, co różni się od następstwa wartości sygnału źródłowego, które do>konuje się w sposób ciągły. Oznacza to, że nie wszystkie wartości sygnału zostają 91
Rozdział 6. Próbkowanie i kwantyzacja zapisane. Stwarza to problem właściwego próbkowania, tj. zapisania wartości umoż liwiających adekwatn»^dtworzenie sygnału. Na rysunku 6.2 pokazujemy próbki po brane w chwilach tn, tb t2 itd.
4
Rys. 6.2. Przykład próbkowania i kwantyzacji
Inny problem związany z przetwarzaniem analogowo-cyfrowym polega na pre cyzji liczb. Sygnał może przybrać dowolną wartość z określonego przedziału, a więc mogą to być liczby niewymierne, które wymagałyby użycia nieskończonej liczby cyfr po przecinku, by dokładnie je zarejestrować. Jest to oczywiście niemożliwe, próbki są zatem zawsze zaokrąglane lub kwantowane. Jak pokazujemy na rys. 6.2, zakres możliwych pomiarów jest podzielony na mniejsze przedziały i próbki zostają zapisane z pewnym zniekształceniem spowodowanym zaokrągleniem. W wyniku, próbkowania i kwantyzacji proces na rys. 6.2a jest zapisany w postaci ciągu liczb odpowiadających wykresowi na rys. 6.2b. Rysunek ten wskazuje, że wraz ze wzro stem liczby pobranych próbek i ze wzrostem poziomów pomiarowych rośnie do kładność zapisu sygnału i łatwość, z jaką ten sygnał będziemy mogli odtworzyć na podstawie próbek. Jeśli jednak zostanie pobranych nazbyt wiele próbek lub błąd zaokrąglenia będzie bardzo mały, to może to spowolnić tempo przetwarzania in formacji i zwiększyć wymagania dotyczące pamięci. Konieczne jest zatem wyważe nie wymagań narzucanych przez efektywność przekształcania danych i dokładność gromadzonej informacji. W niniejszym rozdziale przedyskutujemy oddzielnie pro blem próbkowania i kwantyzacji. 92
6.1. Próbkowanie
6.1. Próbkowanie próbkowanie jest procesem polegającym na pobieraniu co pewien czas próbek lub amiarów ciągłego procesu. Zazwyczaj próbki pobieramy w równych odstępach asu, tj. co T sekund. Parametr T nazywamy okresem próbkowania sygnału (time tep lub sample interval), a parametr 1/T - częstotliwością próbkowania (sample *equency lub sampling rate). Otrzymujemy w ten sposób sygnał spróbkowany f.(n) ygnału /(r), będącego funkcją ciągłą, tj. taką funkcją, dla której /.(«) = f(nT) dla okresu T, czyli sygnał spróbkowany f.(n) jest ciągiem liczb będących wartościami funkcji f(t) w punktach t = nT. Przykład 6.1. Na rysunku 6.2a przedstawiamy wykres próbkowanego sygnału f(t) z naniesioną siatką, przy czym Unie pionowe oznaczają chwile, w których zosta ły pobrane próbki, a linie pionowe - poziomy pomiarowe. JeśU próbki pobieramy ,!wchwili t0 = 0 s, fi = 1 s, t2 - 2 s itd., tj. T = 1 s, to sygnał spróbkowany f.{n) = {1,1, '% 3,45, 5,35, 7,2, 8,2, 7,1, 5,66, 4,87, 4,3, 4,2} (rys. 6.2c). Kwantyzacja powoduje zaokrąglenie wartości tego ciągu, w wyniku czego otrzymujemy ciąg liczb f.(n) = ={1, 2, 3,5, 7, 8, 7, 6, 5,4, 4} (rys. 6.2c). Ten ciąg reprezentuje funkcję na rys. 6.2b.
□
Wydaje się, że próbkowanie powoduje utratę informacji i ciąg próbek zawiera mniej informacji niż próbkowany sygnał, czyli nie ma sposobu na odtworzenie sy gnału. Aczkolwiek może się tak zdarzyć, to nie jest to nieuniknione. W celu do kładnego odtworzenia sygnału należy pobrać odpowiednią liczbę próbek, a twier dzenie o próbkowaniu (dowiedzione w p. 12.4) określa, jaka powinna być to liczba. Twierdzenie to mówi, że częstotliwość próbkowania powinna być przynajmniej 2-krotnie większa od największej częstotliwości sygnału: częstotliwość próbkowania > 2 największa częstotUwość sygnału Przykład 6.2. Znaczenie tego, co to twierdzenie mówi, możemy pokazać na ■rzykładzie zjawiska, które obserwujemy, oglądając film. JeśU samochód na obra zie filmu jedzie dość wolno, to widzimy, że koła obracają się do przodu, gdy jednak samochód jedzie szybko, to koła zdają się obracać do tyłu. Otóż musimy sobie zdać :sprawę, że złudzenie ruchu jest wywołane dzięki pokazaniu 24 obrazów, lub ram, na sekundę. Kręcenie filmu polega na zrobieniu jednego zdjęcia co 1/24 s, tak więc sąsiednie obrazy różnią się tylko nieznacznie między sobą i przez pokazanie ich w odpowiednim tempie możemy przywołać do życia ruch obecny w kręconej sce nie. Jeśli jednak ruch niektórych obiektów dokonywał się bardzo szybko, to zostaje odtworzony w sposób zniekształcony. Przyjrzyjmy się samochodowi, którego koła /wykonują pełen obrót w 4/24 s (rys. 6.3a). Przez próbkowanie tego sygnału z częs totliwością 24 próbek na sekundę, tj. wykonując 24 zdjęcia na sekundę, zostaje 93
Rozdział 6. Próbkowanie i kwantyzacja
M
wyprodukowany film, który poprawnie odtwarza ruch kół. Jeśli koła wykonują* pełen obrót w 2/24 s^fys. 6.3b), to widzimy, że koła się obracają, lecz nie możemy* określić z wyglądu kół, w którym kierunku się obracają. Gdyby nie tło filmu, to 9 wiedzielibyśmy tylko, że samochód się porusza. Jeśli koła samochodu wykonują; pełen obrót w okresie mniejszym niż 2/24 s, powiedzmy w 1/18 s (rys. 6.3c), to pa-| trząc tylko na koła mielibyśmy wrażenie, że samochód na filmie porusza się powoli i do tyłu. V?
a)
b)
c)
Rys. 6.3. Koło obracające się na filmie w tempie: (a) 6; (b) 12; (c) 18 obr./s
Przykład ten wskazuje również, gdzie zaczyna się problem. Jeśli częstotliwość sygnału, tj. liczba pełnych obrotów koła jest równa dokładnie połowie częstotliwo ści próbkowania, to zaczyna się problem, jak widać to na rys. 6.3b: zostały pobrane 24 próbki na sekundę, a częstotliwość sygnału równa się 12, tj. koła wykonały 12 pełnych obrotów na sekundę. Natomiast na rys. 6.3a częstotliwość sygnału równa się 6, co dało odpowiednie wrażenie ruchu, a na rys. 6.3c równa się 18, co dało błędne wrażenie ruchu.
□
6.1. Próbkowanie Rysunek 6.4 ilustruje wpływ częstotliwości próbkowania na odtworzenie cią głego sygnału. Jeśli częstotliwość próbkowania spełnia warunki twierdzenia o prób owaniu, to ciąg próbek umożliwia odtworzenie sygnału (rys. 6.4a). Zazwyczaj sygnał możemy również odtworzyć wówczas, gdy częstotliwość próbkowania jest ówna dokładnie podwojonej największej częstotliwości sygnału (rys. 6.4b). Jeśli na tomiast ta ostatnia częstotliwość przekracza częstotliwość próbkowania, to odtwo rzony sygnał jest zniekształcony (rys. 6.4c).
Rys. 6.4. Sygnał sinusoidalny próbkowany z częstotliwością: (a) większą; (b) równą; (c) mniejszą niż podwojona częstotliwość sygnału
Zniekształcenie pojawiające się na wyjściu, a spowodowane tym, że częstotli wość próbkowania jest mniejsza niż podwójna największa częstotliwość sygnału, nazywamy utożsamianiem sygnałów (aliasing). Sygnał odtworzony za pomocą prófcbek na rys. 6.4c jest przedstawiony linią przerywaną. Utożsamianie sygnałów może 'mieć miejsce nawet wówczas, gdy są spełnione warunki twierdzenia o próbkowa§niu, czego powodem jest natura filtrów używanych przy przygotowywaniu sygnałów ‘jdo przekształcenia w postać cyfrową. W praktycznych zastosowaniach próbkowa; nia dokonuje się z częstotliwością większą, czasem o wiele większą niż podwojona największa częstotliwość sygnału.
Rozdział 6. Próbkowanie i kwantyzacja
6.2. Kwantyzacja Twierdzenie o próbkowaniu przyjmuje niejawnie, że ciąg próbek jest dokładny, tj. ; pomiary są wykonane z doskonałą dokładnością. W rzeczywistości tak jednak nie j jest. Przy dokonywaniu pomiarów istnieje tylko pewna liczba poziomów pomiaro wych zwanych poziomami kwantyzacji (reconstruction, quantization, quantizing lub v output levels), a wartości mieszczące się między tymi poziomami są reprezentowane j przez jeden z sąsiadujących z nimi poziomów. Proces przypisywania danej próbki \ określonemu poziomowi nazywamy kwantyzacją. Przetwarzaniu cyfrowemu, a za tem i kompresji, podlegają tylko skwantowane próbki. is Dogodne jest modelowanie procesu kwantyzacji źródeł dyskretnych źródłami ) ciągłymi, tj. przyjmując, że próbki są pobierane w każdej chwili. W takim wypadku i wartości wejściowe dzielimy na przedziały i każdą wartość w obrębie danego prze- I działu reprezentuje jedno z ograniczeń danego przedziału; ograniczenie to nazy- 1 wamy poziomem decyzyjnym (decision boundary, level lub point). Przyjmujemy za- Jj zwyczaj, że ograniczenie lewe najbardziej lewostronnego przedziału równa się -oo, a ograniczenie prawe najbardziej prawostronnego przedziału równa się +<». fi Kwantyzacja powoduje w sposób nieunikniony utratę informacji, gdyż za okrąglanie prowadzi do nieodtwarzalnej utraty precyzji pomiarowej. Kwantyza cja jest także postacią kompresji danych, jeśli poziomy decyzyjne są efektywnie zakodowane.
Napięcie [V] 0,0- 2,5 2,5- 5,0 5,0- 7,5 7,5-10,0 10,0-12,5 12,5-15,0 15,0-17,5 17,5-20,0
Binarne słowo kodu 000 001 010 011 100 101 110 111
Rys. 6.5. Kwantyzacja napięcia z przedziału od 0 do 20 V
.-•i
Przykład 63. Załóżmy, że dokonujemy pomiaru napięcia prądu, przy czym napięcie zmienia się od 0 do 20 V. Jeżeli używamy ośmiu poziomów kwantyzacji,
□
6.2. Kwantyzacja Przykład ten wskazuje na problem, jaki może powstać przy próbie odtworzenia [^sygnału na podstawie ciągu słów kodu. Aby uzyskać dokładniejsze pomiary, należy |użyć więcej przedziałów, co wymaga więcej poziomów kwantyzacji, a tym samym i dłuższych słów kodu. Wzrost długości słów kodu oznacza z kolei wzrost wymagań |: dotyczących pamięci, gdyż więcej pamięci trzeba na przechowanie pomiarów. | A zatem wraz ze wzrostem precyzji pomiarowej maleje współczynnik kompresji. Przykład 6.4, Częstotliwość przefiltrowanego sygnału telefonicznego równa się najwyżej 3,5 kHz, co wymaga użycia przynajmniej 7000 próbek na sekundę; praktyce używa się ok. 8000 próbek na sekundę. Dla tego sygnału używa się | 28 = 256 poziomów kwantyzacji, tj. każda próbka jest kodowana jako ciąg 8 bitów. '§ Zatem 1 s sygnału telefonicznego wymaga 8000 ■8 bitów « 8 KB pamięci.
□
Kwantyzacją skalarną nazywamy proces kwantyzacji każdej próbki z osobna. Jeżeli kwantyzacji podlegają jednocześnie przynajmniej dwie próbki, to mamy do czynienia z kwantyzacją wektorową (lub blokową).
6.2.1. Kwantyzacja skalarna Kwantyzator skalamy charakteryzuje funkcja schodkowa, ustalająca zależność między próbkami a wartościami wyjściowymi pomiaru. Istnieją dwa rodzaje kwantyzatorów skalarnych. Kwantyzator z zerem to kwantyzator, dla którego wartości wypadające w przedziale zawierającym zero są zapisane jako zero (midtread quan tizer, nazwany w ten sposób, gdyż zero znajduje się w środku odcinka poziomego, czyli tread, rys. 6.6a). Jeżeli zero jest wartością graniczną poziomu decyzyjnego, to próbkom w sąsiadującym z zerem lewym przedziale zostaje przypisana wartość ujemna, a próbkom z przedziału prawego - wartość dodatnia. Jest to wyjście kwantyzatora bez zera (midriser quantizer zwany tak, gdyż zero znajduje się w środku odcinka pionowego, czyli riser, rys. 6.6b).
I ;
Rys. 6.6. Kwantyzator z zerem (a); kwantyzator bez zera (b) 97
Rozdział 6. Próbkowanie i kwantyzacja Dla L poziomów kwantyzacji {r,} istnieje L + 1 poziomów decyzyjnych {d,}; je śli rozkład prawdopodobieństwa sygnału jest znany, tj. jeśli dla każdej wartości wejściowej * jest określone prawdopodobieństwo p{x) wystąpienia tej wartości i jeśli x e (dM, d,], to kwantyzator Q możemy określić za pomocą funkcji Q{x) = n = x = x +eQ czyli e Q = x-x przy czym eQjest różnicą między skwantowaną i nieskwantowaną wartością x; róż nicę tę nazywamy błędem kwantyzacji {quantization lub round-off error) lub szumem kwantyzacji. Różnica ta wskazuje na zniekształcenie wprowadzone przez kwantyzar tor do sygnału. Do pomiaru tego zniekształcenia używamy miary błędu kwantyzacji d(x, x) {distortion measure), która jest funkcją nieujemną, wskazującą na wielkość rozbieżności między wartościami skwantowaną i nieskwantowaną. Najczęściej używaną miarą błędu kwantyzacji jest błąd kwadratowy d{x, x ) = Cg = {x - x)2 Miary błędu kwantyzacji używamy zazwyczaj do określenia poziomów kwanty zacji i poziomów decyzyjnych. W tym celu używamy następującego średniego błędu kwantyzacji oo D = Jd{x, x)p{x)dx —oo
Jeśli funkcja rozkładu prawdopodobieństwa p{x) i liczba poziomów L jest zna na, to zadanie skonstruowania optymalnego kwantyzatora sprowadza się do znale zienia poziomów decyzyjnych {d,} i poziomów kwantyzacji {r,} minimalizujących średni błąd kwantyzacji D. Jeśli odległość między sąsiednimi poziomami decyzyjnymi i poziomami kwan tyzacji jest taka sama, to mamy do czynienia z najprostszym kwantyzatorem, zwa nym kwantyzatorem równomiernym {uniform quantizer). Jeżeli różnice między po ziomami są różnej to kwantyzator nazywamy nierównomiernym.
6.2.I.I. Kwantyzacja równomierna W wypadku kwantyzatora równomiernego przedziały wejściowe i wyjściowe mają tę samą wielkość: A = d i - d,_i dla 2 i < L -1 A = n - /Vi dla 2 < i sś L przy czym przedział A nazywamy krokiem {step size), a poziomy kwantyzacji są punktami środkowymi poziomów decyzyjnych, tj. -=
i + — dla 2 98
i< L- 1
6.2. Kwantyzacja przy czym: r\ =d\ - rL =dL- i +W celu określenia błędu przyjmujemy, że funkcja rozkładu prawdopodo bieństwa p(x) jest stała w każdym przedziale (d,_b dj\ i równa p{dj), co jest rozsąd nym założeniem dla dużej liczby L poziomów kwantyzacji. Przyjmujemy również, że liczba próbek mniejszych niż d, i większych niż dL-x jest niewielka, dzięki czemu \p{dj) = p(dL) = 0, oraz ż e d 0 = -ao id L = +oo. W ten sposób średni błąd kwantyzacji L
D = \d {x,x)p {x)d x = J(/v- x ) 2p(di)dx = ^ -oo
—oo
L- 1
& fe-f t Ponieważ: r
(ń -* )3
J(ri - x ) 2p(di)dx d i-1
p(d‘)| i , = - Ż
( # ł - 4 )3 (r, - j , ) 3
1=2
d, = ij 4— dla 2 < i $ L - l 2
I otrzymujemy
D- Z -
AV8
A3/8
gdyż ^ p (d ,)A = |p(jc)dz = 1 1=2 — oo Równanie D =
wskazuje, że dla kwantyzatora równomiernego miara błędu
kwantyzacji rośnie z kwadratem wielkości przedziałów, czyli bardzo szybko. A za_jtem błąd maleje wraz ze wzrostem poziomów decyzyjnych. W szczególności po dwojenie liczby przedziałów, tj. podzielenie na połowę kroku A, powoduje cztero krotne zmniejszenie miary błędu kwantyzacji.
Rozdział 6. Próbkowanie i kwantyzacja
6.2.1.1.1. Kwantyzacja dynamiczna W poprzednim podrozdziale omówiliśmy kwantyzatory używające przez cały czas tego samego kroku A. Jest jednak możliwe skonstruowanie bardziej elastycznego kwantyzatora, który dostosowuje wielkość kroku do aktualnie przetwarzanych próbek. Przykład 6.5. Prostym kwantyzatorem dynamicznym, zasugerowanym przez Jamesa L. Flanagana i opracowanym przez P. Cumminskeyego oraz Nuggehally’ego Jayanta, jest kwantyzator z pamięcią wystarczającą na zapisanie jednego słowa [6]. Jest to kwantyzator równomierny o średniej wartości = 0, w którym krok A„ może przyjąć nową wartość dla każdej próbki x„_, w zależności od jej wartości (lecz niezależnie od jej znaku), zgodnie z równaniem A„ = A „_tM ( ! 2 ( U n-i I))
Rys. 6.7. Dynamiczny kwantyzator z pamięcią wystarczającą na zapisanie jednego słowa 100
6.2. Kwantyzacja Zgodnie z tą specyfikacją, dwubitowy kwantyzator ma cztery poziomy kwantyzacji, a zatem funkcja M przyjmuje tylko dwie wartości; dla kwantyzatora trzybitowego z ośmioma poziomami kwantyzacji, M przyjmuje cztery wartości. Na rysunku 6.7 pokazujemy kwantyzator trzybitowy z czterema wartościami funkcji M: M\ = 0,5, M2= 1,0, M 3 = 1,25 i M4 = 1,5 najpierw w chwili n - 1, a następnie w chwili n, przy czym nowy krok A„ zależy od wartości |x„-j | . Oczywiste jest, że jeśli < \xn-x| < : < 2A„_!, to A„ = An^!, ponieważ M 2 = 1,0. Przykład ten wskazuje, że jest pożądane, żeby wartości funkcji M następowały w porządku rosnącym 1 >Mi
... < M l/2> 1
Ważne jest również, by dla każdego kroku A„ był spełniony warunek Amin ^ An ^ A max Powodem tych praktycznych ograniczeń jest ograniczona dokładność arytme tyki komputerowej: w trakcie zmniejszania kroku A„ jego wartość może stać się mniejsza niż najmniejsza wartość reprezentowalna w pamięci komputera, wskutek czego stałby się po prostu równy zeru, po czym kwantyzator zwracałby tylko zera. Z podobnych powodów krok A„ nie powinien przekraczać największej wartości reprezentowalnej w pamięci komputera.
□
6.2 .I.2 . K w antyzacja nierów nom ierna Choć kwantyzatory równomierne są proste, zazwyczaj są nieodpowiednie. Jeśli na przykład prawdopodobieństwo tego, że wartości będą przypadać w jednym prze dziale jest większe niż prawdopodobieństwo, że znajdują się w innym przedziale, to wydaje się uzasadnione żądanie większej liczby poziomów kwantyzacji w pierw szym przedziale niż w drugim. W ten sposób zmaleje miara błędu kwantyzacji D. Prowadzi to do użycia przedziałów kwantyzacji o różnych wielkościach, co jest cechą charakteryzującą kwantyzatory nierównomierne. Pragnęlibyśmy teraz określić poziomy kwantyzacji i poziomy decyzyjne dla da nego L tak, by błąd kwantyzacji D był jak najmniejszy. Zauważmy, że nie czynimy teraz żadnego założenia co do funkcji rozkładu prawdopodobieństwa p(x). W celu minimalizacji średniego błędu kwantyzacji D wyznaczamy konieczne warunki, róż niczkując oo
i
D = J(/i - x ) 2p(x)dx = ^ -oo
di
J (n —x )2p(x)dx
i'”1 dj-i
względem poziomów decyzyjnych dt i poziomów kwantyzacji r, oraz przyrównując tak otrzymane pochodne cząstkowe do zera:
Rozdział 6. Próbkowanie i kwantyzacja di
L -l 2 j(r t -x)p(x)dx = 0 dla i = 1, ( 6 . 2) di-1 Zauważmy, że nie różniczkujemy względem d0 i dL, gdyż są to stałe niezależne od wartości wejściowych. Jeśli p(di) * 0, to z równania (6.1) wynika, że di =— £ M dla i = l , . . . , L —1 co oznacza, że oprócz d0 i dL każdy poziom decyzyjny d, jest punktem środko wym między dwoma poziomami kwantyzacji r, i r,+1; stąd otrzymujemy ri+i = 2At - Ti
(6.3)
Ponadto, z równania (6.2) wynika, że di
J(r; -x)p(x)dx = 0
(6.4)
di-1
czyli
dla
L -l
co oznacza, że poziom kwantyzacji r, jest centroidem ('punktem ciężkości') funkcji rozkładu prawdopodobieństwa p(x) w obszarze między dH1 a dr Równania (6.3) i (6.4) są, ogólnie biorąc, bardzo trudne do analitycznego roz wiązania, a łatwość rozwiązania zależy od funkcji rozkładu prawdopodobieństwa p(x). Lecz jeśli znamy właściwą wartość ru to równania (6.3) i (6.4) możemy zasto sować iteracyjnie do znalezienia kolejnych wartości d, i r,. Zauważmy, że równanie (6.4) jest niejawnym równaniem umożliwiającym znalezienie d„ wyrażonym wzglę dem r, i d ^ . Jeśli wyznaczona w końcu wartość rL okaże się centroidem dla funkcji p(x) w obszarze między dL-x id L =
6.2. Kwantyzacja
AlgorytmLloyda-Maxa() określ rx; d0 = -^o; while niepowodzenie for (i = 1; i < L; i + +) oblicz di z równania (6.4); oblicz ri+lz równania (6.3); if
f
Lm°('Jl - x)p(x)dx = 0 JdL-\ sukces: zwróć ciąg rx, ...,rLi d u ...,d L-i; else wybierz inną wartość rx i zacznij od nowa;
I
Optymalne poziomy decyzyjne i poziomy kwantyzacji otrzymane za pomocą tego algorytmu dla niektórych kwantyzatorów czteropoziomowych przedstawiamy na rys. 6.8.
6.2.2. Kwantyzacja wektorowa W kwantowaniu skalarnym próbki były kwantowane niezależnie jedna od drugiej. Uogólnieniem kwantyzacji skalarnej jest kwantyzacja wektorowa (lub blokowa).
a) 0,75 ■ — 0,25 -i '— 0,5 i -0,75 —
Rys. 6.8. Parametry optymalnego czteropoziomowego kwantyzatora nierównomiernego znalezione za pomocą algorytmu Lloyda-Maxa dla rozkładu prawdopodobieństwa: (a) jednostajnego; (b) normalnego (Gaussa); (c) Laplace’a (por. rys. 6.13) 103
Rozdział 6. Próbkowanie i kwantyzacja W kwantyzacji wektorowej strumień skalarów dzielimy na bloki lub wektory x złożo ne z N skalarów, x x N]T, a następnie wszystkie skalary w danym bloku skwantowane są jednocześnie, tak że blok x zostaje odwzorowany na wektor r, = [rx, .... rN]T, przy czym 1 < i < L, a L jest liczbą obszarów kwantyzacji. Zbiór złożony z L wektorów kodu r, (code vectors, reference patterns lub templates) nazy wamy książką kodów. W celu skonstruowania książki kodów Af-wymiarową prze strzeń dzielimy na L komórek i jeden wektor kodu r, zostaje stowarzyszony z jedną komórką Cf. Proces kwantyzacji Q polega teraz na przypisaniu każdemu wektorowi jc należącemu do C, wektora kodu r,, tj. Q(x) = r,. Jeśli N = 1, to kwantyzacja wektorowa sprowadza się do kwantyzacji skalarnej. Przykład kwantyzacji wektorowej dla N = 2 pokazujemy na rys. 6.9 (diagram na tym rysunku nazywamy diagramem Woronoja, charakteryzującym się tym, że odle głość punktów w danej komórce od jej centroidu jest mniejsza niż odległość tych punktów od centroidu każdej innej komórki). Przestrzeń dwuwymiarową dzielimy na L = 21 komórek. Kropki oznaczają centroid komórki będącej zarazem obsza rem kwantyzacji. Wszystkim wektorom [xitx2] należącym do określonej komórki C przypisujemy wektor [ru r2] złożony ze współrzędnych centroidu komórki C. Za uważmy, że komórki mogą mieć różną wielkość i kształt, co jest właściwością wyko rzystywaną przy optymalizacji kwantyzacji wektorowej. W kwantyzacji skalarnej przedział między dwoma sąsiednimi poziomami kwantyzacji mógł mieć różną wiel kość, lecz, będąc tylko przedziałem, miał zawsze ten sam kształt.
Tak jak w wypadku kwantyzacji skalarnej, w kwantyzacji wektorowej również używamy miary błędu kwantyzacji w celu określenia rozbieżności między wektorem wejściowym x a wektorem kodu r. Najczęściej używaną miarą błędu kwantyzacji jest błąd kwadratowy określony dla wektorów jako
i ■ \ 1 1 3
i i ■r 1
6.2. Kwantyzacja
Średni błąd kwantyzacji określa równanie L e Q ) jd (x,r,)p (x)d x przy czym p{x e C,) jest prawdopodobieństwem tego, że wektor x należy do ko mórki C„ a całka jest obliczona względem wszystkich składników wektora x. Kwantyzator uważamy za optymalny, jeśli spełnia następujące dwa warunki: 1. Warunek najmniejszego błędu', przypisanie wektora kodu r, wektorowi wej ściowemu x daje w rezultacie najmniejszy błąd, czyli r, = Q(x) wtedy i tylko wtedy, gdy d(x, r,) < d(x, rj) dla każdego j * i, 1 < j < L . 2. Warunek centroidu: każdy wektor kodu r, powinien minimalizować średni błąd kwantyzacji D dla każdej komórki C„ tj. każdy wektor r, minimalizuje błąd
Wektor spełniający ten warunek nazywamy centroidem komórki C,. Warunki te wskazują na zależność między wektorami kodu a komórkami. Pierwszy warunek nie odnosi się w sposób jawny do komórek, lecz oznacza, że komórki są określone przez miarę błędu kwantyzacji d i wektory kodowe rt. Zgod nie z drugim warunkiem dla danej miary błędu kwantyzacji d możemy określić centroid (wektor kodu) dla każdej komórki C,. Trudność w bezpośrednim zastosowaniu tych warunków polega na tym, że wa runek najmniejszego błędu kwantyzacji wymaga wykonania testu dla każdego wek tora wejściowego x. Ponadto wielowymiarowa funkcja rozkładu prawdopodobień stwa p(x) może być nieznana, co uniemożliwiałoby użycie warunku centroidu. Dla tego też w praktyce używamy tzw. wektorów treningowych {x k: 1 =€ k M} dla pewnego M > L. Dla każdej komórki C, i dla Mt wektorów w tej komórce średni błąd kwantyzacji D, jest określony jako • J=1 jest on najmniejszy dla błędu kwadratowego, gdy i Mi
Oznacza to, że dla błędu kwadratowego estymacją centroidu r, komórki C, jest średnia wszystkich wektorów treningowych zawartych w komórce C,. 6.2.2.I. Algorytm centroidów Jedną z metod umożliwiających skonstruowanie książki kodów, opisaną po raz pierwszy przez Stuarta Lloyda dla przypadku skalarnego i Edwarda Forgy’ego dla
Rozdział 6. Próbkowanie i kwantyzacja
przypadku wektorowego, jest algorytm centroidów (K-means algorithm). Nazywa się 3 go również algorytmm# klastrowym, i - od nazwisk Linde, Buzo oraz Gray - algorytmem LBG. ■ \ A lgorytm C entroidów ()
określ zbiór początkowych wektorów kodu r, i wartość tolerancji e ; m= 1; D° = w hile niepowodzenie podziel zbiór M wektorów treningowych x na L grup Kh opierając się na warunku najmniejszego błędu: x e K, wtedy i tylko wtedy, gdy d(x, r,) < d(x, rj) dla każdego j * i , l < j < L; oblicz średni błąd kwantyzacji D m
| 'i
d(xs, r,), przy czym xs, r, e Kh
\ i j \
tj. wektor kodu r, należy do tej samej grupy Kt co xs; dla każdej grupy Kt oblicz centroid dla wektorów treningowych zawartych w Kt i uczyń ten centroid nowym wektorem kodu r, w K,; if (//" ' - Dm)/Dm < e sukces-, else m + + i spróbuj raz jeszcze; Przykład 6.6. Rozważmy następujący strumień próbek: 4 6 5 10 9 6 8 9 3 9 1 0 10 2 8 8 4 5 1 4 2
Dla N = 2 ten strumień dzielimy na dziesięć wektorów (M = 10); wszystkie będą tu * użyte jako wektory treningowe | [4 6] [5 10] [9 6] [8 9] [3 9] [10 10] [2 8] [8 4] [5 1] [4 2]
.jj i pokazane na rys. 6.10a. By zastosować algorytm centroidów, przyjmijmy, że bę- ^ dziemy używać trzech obszarów kwantyzacji, tj. L = 3, a początkowymi wektorami 1 kodu będą wektory: 1 ri = [5 3], r 2= [6 9], r3 = [10 7] zaznaczone jako kółka na rys. 6.10a. Używając błędu kwadratowego jako miary | błędu kwantyzacji, otrzymujemy podział na następujące trzy grupy wektorów: | ^ = {[4 2] [4 6] [5 1] [8 4]}, K2 = {[2 8] [3 9] [5 10] [8 9]},
J
K3 = {[9 6][10 10]}
I
Obliczamy teraz średni błąd kwantyzacji
J
------------------------------------------------ t o 6 --------------------------------------------------- I
6.2. Kwantyzacja
I
+
Dl = ^ - ( ( ( 4 - 5 ) 2 + (2 - 3 ) 2) + ((4 -5 )2 + (6 _ 3)2) ( (5 -5 )2 + (1 -3 )2) + ((8 -5 )2 + + ( 4 - 3 ) 2) + ((2 - 6 ) 2 + (8 - 9 ) 2) + ((3 -6 )2 + (9 - 9 ) 2) + ((5 -6 )2 + (1 0 -9 )2) + + ( (8 - 6 ) 2 + (9 - 9)2) + ((9 - 10)2 + (6 - 7)2) + ((10 - 10)2 + (10 - 7)2)) £>>=6,9 a następnie centroidy dla każdej grupy: r, = i ( [ 4 2] + [4 6] + [5 1] + [8 4]) = --[2113] = [5,25 3,25] r 2 = - ( [ 2 8] + [3 9] + [510] + [8 9]) = [4,5 9] r 3 = -([ 9 6]+ [1010] = [9,5 8]
Z nowymi centroidami, które zostają wektorami kodu, sytuacja przedstawia się I p> jak na rys. 6.10b.
i
|R ys. 6.10. Zastosowanie algorytmu centroidów do próbek 4 6 5 10 9 6 8 9 3 9 10 10 2 8 8 4 5 1 4 2 107
Rozdział 6. Próbkowanie i kwantyzacja Wykonujemy teraz drugą iterację pętli algorytmu centroidów, która rozpo czyna się od przeklasyfikowania wektorów treningowych: K, = {[4 2] [4 6] [5 1] [8 4]}, K2 = {[2 8] [3 9] [5 10]}, *3 = {[8 9] [9 6] [10 10]} Pierwsza grupa pozostaje bez zmian, druga grupa traci jeden wektor, który zostaje włączony do trzeciej grupy. Nowy średni błąd kwantyzacji D2= 4,8 co jest znaczną poprawą w porównaniu z D1. Nowymi wektorami kodu, czyli centroidami, są wektory: rj = [5,25 3,25], r2= [3,33 9], r3 = [9 8,33] co prowadzi do sytuacji przedstawionej na rys. 6.10c. Żaden z wektorów kodu nie zmienia się w sposób istotny, a wszystkie trzy grupy zachowują te same wektory, przy czym średni błąd kwantyzacji D3 = 4,28 Jest teraz jasne, że kontynuując wykonywanie algorytmu centroidów nie zmienimy przynależności wektorów do określonych grup ani wartości wektorów kodu.
□ Koszt obliczeń przy konstruowaniu książki kodów za pomocą algorytmu cen troidów zależy w głównej mierze od kosztu etapu klasyfikacji. Jeśli jeden skalar kodujemy za pomocą R bitów, to kwantyzacja N-wymiarowa wymaga użycia RN bitów na wektor. Ta liczba bitów umożliwia reprezentowanie 2RWwektorów, co też określa rozmiar książki kodów. Innymi słowy, każdy z L wektorów kodu jest zako dowany za pomocą tej samej liczby bitów B = R N = lg L. Etap klasyfikacji wymaga określenia miary błędu kwantyzacji raz dla każdego z M wektorów treningowych i dla każdego z L wektorów kodu, co daje M L obli czeń błędu kwantyzacji w jednej iteracji. Wyznaczenie błędu kwadratowego d wy maga N operacji dodawania i mnożenia, a zatem koszt obliczeń wykonania jednej klasyfikaq'i równa się NML = NM2RN operaqi arytmetycznych, co wskazuje na wy kładniczy wzrost w miarę wzrostu wymiaru N, będącego liczbą skalarów w wekto rze, i w miarę wzrostu rozmiaru skalarów R. Po zakończeniu działania algorytmu centroidów otrzymane wektory kodu uży wamy do kwantyzacji wektorów próbek. W celu skwantowania wektora próbek trzeba określić miarę błędu kwantyzacji dla każdego z L wektorów kodu, co wymaga wyko nania NL = N2RN operacji arytmetycznych. Koszt ten jest raczej wysoki; dekwantyzacja jest tania, gdyż wymaga wykonania tylko jednego sprawdzenia książki kodów. Kwantyzaq'a wektorowa może dawać znakomite wyniki, co pokazujemy na rys. 6.11. W książce kodowej zawierającej L = 32 = 25 słów kodu trzeba pięciu bitów na jedno słowo. Jeśli wektory składają się z ośmiu skalarów (N = 8), to jeden skalar 108
6.2. Kwantyzacja
możemy zakodować 5/8 = 0,625 bitami; podwojenie wymiaru (N = 16) redukuje liczbę bitów na skalar o połowę, 5/16 = 0,3125. Jeśli określimy stopień kompresji jako iloraz liczby bitów/skalar przed kwantyzaq'ą i liczby bitów/skalar po kwantyza cji, to otrzymamy liczbę wskazującą, ile razy liczba bitów potrzebna do zakodowa nia jednego skalara po kwantyzacji zmniejsza się w porównaniu z liczbą bitów po trzebną do zakodowania tego skalara przed kwantyzacją. Przy założeniu, że nieskwantowany skalar wymaga użycia 8 bitów, dla N = 8 stopień kompresji 8/0,625 = = 12,8, co wymaga użycia 12,8 razy mniej bitów na skalar po kwantyzacji niż przed kwantyzacją.
L
IgL
32 32 64 64 128 128 256 256
5 5 6 6 7 7 8 8
N 8 16 8 16 8 16 8 16
Bity na skalar 0,625 0,3125 0,75 0,375 0,875 0,4375 1,0 0,5
Współczynnik kompresji 12,8 25,6 10,7 21,3 9,1 18,3 8,0 16,0
Rys. 6.11. Współczynniki kompresji uzyskane za pomocą kwantyzacji wektorowej
Ó.2.2.2. Drzewiasta książka kodów Przy omawianiu konstrukcji książki kodów za pomocą algorytmu centroidów zało żyliśmy, że warunek najmniejszego błędu był sprawdzany dla każdej kombinacji wektora treningowego i wektora kodu. Metoda ta, nazywana przeszukiwaniem wy czerpującym (full search) była powodem dużego kosztu tego algorytmu. Liczbę operacji możemy jednak zredukować przez odpowiedni dobór struktury danych do implementacji książki kodów. Jedną z takich możliwości jest drzewo, co prowadzi do konstrukcji drzewiastej książki kodów i metody przeszukiwań zwanej przeszuki waniem binarnym (binary search lub hierarchical dustering). Załóżmy, że liczba wektorów kodu L jest potęgą dwójki. Za pomocą algoryt mu centroidów konstruujemy najpierw książkę kodów dla dwóch wektorów kodu r0 i rj. Wektory te umożliwiają podział wszystkich wektorów treningowych na dwie grupy C0 i Cj. Następnie dla każdej z tych grup konstruujemy książkę kodów z dwoma wektorami kodu: rgg i r01 dla grupy C0 oraz r 10 i r n dla grupy Cv Proces ten kontynuujemy do chwili, gdy łączna liczba wektorów kodu jest równa L (rys. 6.12a). Metoda ta umożliwia znaczną poprawę w porównaniu z przeszukiwaniem wy czerpującym. Jeśli, jak poprzednio, N jest liczbą operacji potrzebną do określenia 109
Rozdział 6. Próbkowanie i kwantyzacja
miary błędu kwantyzacji, to teraz poprzez lg L etapów i dla M wektorów treningowi wych algorytm cent»#dów wykonuje w jednej iteracji 2NM lg L operacji. Porów-j najmy to z liczbą operacji wykonanych przez przeszukiwanie wyczerpujące równą i NM2RN, co wskazuje na ogromną poprawę, a mianowicie o NM2RN/(2NM lg L) = = 2m t{2 IgL) = 2RN/(2RN) razy. r Przy kwantyzacji wektora x trzeba obliczyć miarę błędu kwantyzacji dla każ-; dego wektora kodu r,0 i ra na każdym poziomie i drzewiastej książki kodów i jeśli! d(x, ri0) < d(x, rn), to zostaje przesłany bit 0 jako część słowa kodu dla wektora xjf następnie, na poziomie i + 1, miara błędu kwantyzacji zostaje określona dla x i dla! dwóch potomków wektora r,0, mianowicie ri00 i r,01; w przeciwnym razie zostaje j przesłany bit 1, a następnie x podąża w kierunku potomków wektora rn. W tymi podejściu jedna kwantyzacja wymaga wykonania 2N lg L operaqi, co raz jeszcze J jest dużą poprawą w porównaniu z przeszukiwaniem wyczerpującym, mianowicie | o N2RN/(2N\gL) = 2rn/(2RN) razy.
Rys. 6.12. Przykład równomiernej książki kodów dla L = 23 (a) i nierównomiernej książki kodów (b)
Metoda ta wymaga dwukrotnie większej pamięci na przechowanie wektorów; kodu niż w przeszukiwaniu wyczerpującym: ponieważ książka kodów jest zupełnymi drzewem binarnym, składa się ono z L liści i L - 1 węzłów wewnętrznych; węzły tę zawierają dodatkowe wektory kodu, niewymagane przez poprzednią wersję algo-| rytmu centroidów. Drzewo na rys. 6.12a nazywamy jednorodnym ze względu na jednorodny układ! krawędzi: każdy węzeł wewnętrzny ma dwóch potomków o tej samej wysokością! gdyż na każdym poziomie grupa wektorów zostaje podzielona na dwie grupy. Mo-1 że to prowadzić do grup złożonych z niewielu wektorów, w skrajnym wypadkuJ z jednego tylko wektora. W takim wypadku kontynuowanie podziału grupy nię| przyniesie redukcji miary błędu kwantyzacji. Doprowadzi to też do niepotrzebnego! wydłużenia słów kodu dla niektórych grup. By uniknąć tej sytuacji, określamy naj-1 pierw całkowity błąd kwantyzacji dla każdej grupy. Podziałowi podlega potem gru- j 110
6.3. Dodatek: Funkcje rozkładu prawdopodobieństwa
|p a o największej wartości całkowitego błędu kwantyzacji. Proces ten prowadzi zagzwyczaj do powstania drzew niejednorodnych (rys. 6.12b). W wypadku drzew nie jednorodnych założenie, by L było potęgą dwójki, nie jest już potrzebne.
6.3. Dodatek: Funkcje rozkładu prawdopodobieństwa |jeśli 5 jest źródłem wartości próbek, to zmienną losową X określamy jako funkcję
przy czym R jest zbiorem liczb rzeczywistych. Używamy notacji p (X = xj), by wskaJ,zać na prawdopodobieństwo, z jakim zmienna losowa X przyjmuje wartość x,. Dla źródła dyskretnego 5 = {xu ..., xN} określamy wartość oczekiwaną jako E[X] = 'Zxip (X =x.) Dla źródeł ciągłych wartość oczekiwana jest zdefiniowana całką E [X ] = J xp{x)dx I przy czymp jest funkcją rozkładu prawdopodobieństwa. Wariancja o2 = E[{X - p)2} = E[X^} - p 1, przy czym średnia p = E[X). Istnieje wiele powszechnie używanych funkcji rozkładu prawdopodobieństwa-, Iponiżej podajemy trzy przykłady: I rozkład jednostajny
rozkład normalny
tozkład Laplace’a
1 dla a < x < b p(x) = it>-a 10 w przeciwnym razie p O )=
i
f i jra* o— 'J2\x\/ c
p(x) =
-fic Wykresy tych funkcji pokazujemy na rys. 6.13, przy czym a = 1 i /i= 0.
Rozdział 6. Próbkowanie i kwantyzacja
Ćwiczenia 1. Patrząc na rys. 6.3, możemy mieć wrażenie, że twierdzenie o próbkowaniu nie zawsze jest słuszne, jeśli koła obracają się bardzo szybko. Jeśli wykonują one 30 obrotów na sekundę, to film pokazywałby koła obracające się do przodu. Czy ob serwacja ta rzeczywiście świadczy, że twierdzenie to jest nieprawdziwe? 2. Na początku rozdziału zauważyliśmy, że zazwyczaj sygnał możemy odtwo rzyć również wówczas, gdy częstotliwość próbkowania jest równa dokładnie po dwojonej największej częstotliwości sygnału (rys. 6.4b). W jakim wypadku obser wacja ta jest niesłuszna? 3. Przy nagrywaniu płyt o dobrej jakości dźwięku o maksymalnej częstotliwości 20 kHz używa się częstotliwości próbkowania równej 44,1 kHz. Ile trzeba pamięci na nagranie jednej godziny muzyki, przy założeniu, że liczba poziomów kwantyza cji równa się: a) 28? b) 216? 4. Jak możesz zoptymalizować pętlę for w procedurze AlgorytmLloyda-Maxa()? Czy jest to zawsze możliwe? 5. Jaka jest relacja między warunkiem najmniejszego błędu i warunkiem centroidów zdefiniowanym dla optymalnego kwantyzatora wektorowego a kwantyzatorem skalarnym, dla którego błąd kwantyzacji jest określony jako błąd kwadrato wy? (Rozważ zależność między tymi warunkami i równaniami (6.3) i (6.4)). 6. Jakie jest znaczenie użycia liczby 1 jako dolnego i górnego ograniczenia w dyskusji o dynamicznym kwantyzatorze z pamięcią wystarczającą do zapisania ■ i jednego słowa w p. 6.2.1.1.1 1 > Mj < ... < Mu2 > 1 Co się stanie, gdy jedno z tych ograniczeń zostanie odrzucone? 112
Literatura 7. Zastosuj algorytm centroidów do próbek podanych w przykładzie 6.5, użyając tylko dwóch wektorów kodu: a) [6 9] [10 7]; b) [5 3] [10 7]. Czy ma znacze nie, jakie są początkowe wektory kodu? Co się stanie, jeśli jeden z wektorów kodu 'est znacznie większy (lub mniejszy) od wszystkich próbek? Rozważ cztery początowe wektory kodu: [5 3] [6 9] [10 7] [20 20] (pierwsze trzy z nich są takie same jak w przykładzie 6.5).
Literatura 1. Abut H. (red.): Vector quantization. IEEE Press, New York 1990. 2. Czechowski T.: Elementarny wykład rachunku prawdopodobieństwa. PWN, Warszawa 1978. 3. Davisson L. D., Gray R. M (red.): Data compression. Dowden, Hutchinson & Ross, Stroudsburg 1976. 4. Forgy E. W.: Cluster analysis of multivariate data: efficiency vs. interpretability of classifi cations. Biometrics, 1965,21, s. 768. 5. Gersho A., Gray R. M.: Vector quantization and signal compression. Kluwer, Boston 1992. 6. Jayant S. N.: Adaptive quantization with a one word memory. Bell System Technical Journal, 1973,52, s. 1119-1144. 7. Jayant S. N. (red.): Waveform quantization and coding. IEEE Press, New York 1976. 8. Jayant S. N., Noll P.: Digital coding of waveforms: principles and applications in speech and video. Prentice-Hall, Englewood Cliffs 1984. 9. Lim J. S.: Two-dimensional signal and image processing. Prentice-Hall, Englewood Cliffs 1990. 10. Linde Y., Buzo A., Gray R. M.: An algorithm for vector quantizer design. IEEE Transactions on Communication, 1980, COM-28, s. 84-95; również w Abut [1], 11. Lloyd S. P.: Least squares quantization in PCM. IEEE Transactions on Information Theory, 1982, IT-28, s. 129-137. [Pierwotnie ukazał się w roku 1957 w Bell Lab jako raport wewnętrzny], 12. Lynch T. J.: Data compression: Techniques and applications. Van Norstrand Reinhold, New York 1985. 13. Łukaszewicz J., Steinhaus H.: O mierzeniu przez kalibrowanie. Zastosowania Matematyki, 1955, s. 225-231. 14. Makhoul J., Roucos S., Gish H.: Vector quantization in speech coding. Proceedings of the IEEE, 1985,73, s. 1551-1588; również w Abut [1], 15. Max J.: Quantizing for minimum distortion. IRE Transactions on Information Theory, 1960, 6, s. 7-12; również w Davisson, Gray [3].
Rozdział
Kodowanie predykcyjne
W poprzednim rozdziale próbki były kwantowane oddzielnie, bez względu na ist niejące między nimi zależności. Miało to miejsce również w wypadku kwantyzacji wektorowej, kiedy to kilka próbek było kodowanych jednocześnie, lecz przynależ ność danych próbek do wektorów była określona ich fizycznym sąsiedztwem w strumieniu danych. W wielu sytuacjach jednak sąsiedztwo fizyczne oznacza rów nież podobieństwo wartości próbek. W fali dźwiękowej, na przykład, sąsiednie próbki nie różnią się nazbyt od siebie; w obrazach sąsiednie piksele mają zazwyczaj podobny kolor i natężenie. Tę zależność możemy zastosować przy kodowaniu pró bek. W kodowaniu predykcyjnym dokonujemy predykcji wartości danej próbki na podstawie wartości przynajmniej jednej sąsiedniej próbki i zamiast kodowania samych próbek kodujemy różnice między ich wartością a wartością przewidywaną. Odbiorca używa skwantowanej różnicy, by odtworzyć oryginalną próbkę. Istnieje wiele metod kodowania predykcyjnego, które różnią się liczbą próbek używanych przy dokonywaniu predykcji i elastycznością w określaniu używanych przez nie parametrów (metody statyczne i dynamiczne). Jedną z pierwszych metod należącej do tej kategorii jest modulacja delta.
7.1. Modulacja delta Modulacja delta (MD) jest najprostszą metodą kodowania predykcyjnego. Przyj mijmy, że A jest krokiem kwantyzacji, a x n oznacza wartość próbki x„ zrekonstru- £ owaną przez MD. Otóż MD nie kwantuje wartości próbek x„, lecz zamiast tego : kwantuje różnicę między tą wartością a odtworzoną wartością x„-i poprzedniej próbki x„_j, tj. kwantuje sygnał różnicowy (błąd predykcji, dijference signal i predic-} tion error) * Cn — %n
% n -1
7.1. Modulacja delta
Różnica en zostaje skwantowana zgodnie z funkcją znaku e„ = sign (e„) =
1 jeśli e„ > 0 - 1 w przeciwnym razie,
a następnie przesłana przez nadajnik. Odbiorca używa otrzymanej skwantowanej wartości e„ i poprzednio odtworzonej wartości próbek do rekonstrukcji wartości próbek odpowiadającej otrzymanej wartości xn —xn-i +
(7.1)
•A
Zauważmy, że możemy przesłać tylko jedną z dwóch wartości: 1, jeśli skwan towana różnica en jest dodatnia, albo -1, jeśli en jest ujemna lub równa 0. Dlate go też potrzebny jest tylko 1 bit do przekazania tej informacji. Odbiorca używa tego bitu do konstrukcji funkcji schodkowej reprezentującej oryginalne próbki. b)
>Vi ,
V.1
^1
Rys. 7.1. Sygnał różnicowy e„ w MD obliczony jako: (a) en= x „ (b) en = xn - i „_i; liczby użyte przy obliczeniu en są połączone strzałką dwustronną
Należy podkreślić, że sygnał różnicowy en = x n - x„_i , a nie en = xn - x„_,, to znaczy, że sygnałem różnicowym jest różnica między wartością xn a przewidywaną wartością x n_\ (rys. 7.1b) związaną z poprzednikiem jc„_j, a nie między x„ a samym tym poprzednikiem (rys. 7.1a). Jeśli byłaby to różnica między wartością próbki ■a wartością poprzedniej próbki, to powoli rosnąca linia falowa zostałaby odtwo rzona jako szybko rosnąca funkcja dodająca za każdym razem wartość A do warto ści poprzedniej. Jeżeli różnicę en obliczamy za pomocą predykcji x„_1; to widzimy, jak należy tworzyć wykres zrekonstruowanej funkcji: bieżący krok funkcji schod kowej rysujemy zawsze w kierunku fali na wejściu. Istnieją dwa rodzaje błędów kwantyzacji w MD, których nie możemy równo cześnie zredukować. Pierwszym z nich jest przeciążenie zbocza {slope overload), które występuje wówczas, gdy krok A jest za mały, by nadążyć za szybko rosnącą .falą (rys. 7.2a). Zwiększenie kroku A powoduje zmniejszenie przeciążenia zbocza ■■(rys. 7.2b). Drugim rodzajem błędu kwantyzacji jest granulacja {granular noise lub ■granularity), kiedy krok A jest za duży w porównaniu z niewielkimi zmianami fali. W tym wypadku zmniejszenie A powoduje lepsze dopasowanie do zmian na wej115
Rozdział 7. Kodowanie predykcyjne
ściu. Użyjemy również jako miary efektywności modulatorów kumulatywnego błędu i predykcji **■* k Ek = Y j \ x i - X i | i=0 I
będącego sumą wielkości różnic między rzeczywistymi a przewidywanymi warto- < ściami próbek.
7.1.1. Dynamiczna modulacja delta Decyzja w sprawie właściwego wyboru kroku A jest trudna z powodu trudności pogodzenia wymagania zredukowania błędu przeciążenia zbocza i błędu granula cji, gdyż wymagania te pozostają ze sobą w sprzeczności. W celu poradzenia sobie z tym problemem możemy skonstruować dynamiczny system MD, który umożliwia zmianę kroku odpowiadającą zmianom fali na wejściu. i Dynamiczna MD przegląda m ostatnio przesłanych bitów i nadaje krokowi A odpowiednią wartość za pomocą mnożnika kroku {step size multiplier), którego wartość zależy od m bitów: \ = MnA„_! Za pomocą dwu ostatnich bitów możemy wykryć możliwość przeciążenia zbocza | wówczas, gdy bity te są takie same, a możliwość granulacji możemy wykryć wówt| czas, gdy bity te się różnią. Przy użyciu większej liczby bitów możliwość podjęcia j właściwej decyzji w sprawie wartości kroku A wzrasta. :?j
7.1. Modulacja delta Przykład 7.1. Przykładem dynamicznej MD jest system zaproponowany przez Ching-Long Songa, Josepha Garodnicka i Donalda L. Schillinga [7]. W tej MD krok A zwiększa się o 50%, jeśli różnica e„ pozostaje taka sama, i maleje o 50%, jeśli en się zmienia: e„ = sign(e„ ) = sign(x„ - ź„_,) A«» jeśli 0 < A„_i < Am,„ An = ' ~ &min jeśli Amin < An_l <0 A„.i|e„+ye„-i| w przeciwnym razie xn = x n-\ + e„A„ , przy czym Amin jest najmniejszym krokiem kwantyzacji [5]. Zauważmy, że mnożnik . kroku |e„ + ^ e n_,j równa się 0,5 albo 1,5. Jeśli A„_, < A,„„, to krok kwantyzacji przyjmuje najmniejszą wartość. Przykład zastosowania tego systemu pokazujemy na rys. 7.3a-b dla strumienia próbek
m. m
{555 7 15 30 45 50 48 44 40 40 4247 5047 32 28 25 25 23 15 1 0 5 5 8 10 15 17 20 19 19}
Zauważmy, że krok kwantowania rośnie wówczas, gdy funkcja schodkowa po zostaje z tyłu za falą wejściową, by w ten sposób m ocją dogonić. Za każdym razem, m- gdy funkcja schodkowa przekracza falę, krok zostaje zredukowany, by funkcja ta pozostała w pobliżu fali. Porównajmy ten wynik z rezultatem zastosowania statycz nej MD z krokiem A = 5 na rys. 7.3c.
□
*
7.1.2. Kodowanie z opóźnieniem i modulacja delta W omawianej przed chwilą dynamicznej MD używamy informacji dotyczącej prze szłości w celu modyfikowania kroku A. Modyfikacja ta może być znacznie skutecz niejsza, jeśli przy określeniu wielkości kroku dla bieżąco analizowanej próbki weźmiemy pod uwagę również przyszłe próbki. Proces ten nazywamy kodowaniem 2 opóźnieniem [6], [2]. Kodowanie z opóźnieniem możemy zastosować w wielu różnych sytuacjach, a zwłaszcza przy kwantyzacji. Zastosowanie tego rodzaju ko lidowania przedstawimy tylko w powiązaniu z modulacją delta. Przy kodowaniu z opóźnieniem używamy bufora zawierającego k przyszłych -próbek i określamy najlepszą kombinację k + 1 kroków umożliwiających optymalne ■odtworzenie bieżącej próbki i próbek zawartych w buforze. Jeśli bufor zawiera tylko jedną próbkę, to decyzja dotycząca wartości en, a zatem wartości en ■A, w celu znalezienia xn jest oparta nie tylko na różnicy x n tj. na informacji •dotyczącej bieżącej próbki jc„ i skwantowanej poprzedniej próbki i„_i, lecz rów nież na informacji dotyczącej przyszłej próbki xn+1 zawartej w buforze. Sprawdzamy 117
Rozdział 7. Kodowanie predykcyjne
teraz, jaka jest najlepsza kombinacja wartości e„ i en+1 powodująca najmniejszy błąd kumulatywny | | + 1xn+1 - x n+1 \ . Ponieważ en i e„+i mogą przybierać dwie wartości, wielkość błędu trzeba sprawdzić dla czterech wypadków. Dla bufora zawierającego k przyszłych próbek wymaga to sprawdzenia 2*^' kombinacji wartości e„,...,en+k i odpowiadającym im kumulatywnych błędów predykq'i k ^ | %n+i %n+i |* i=0 n
x„
0 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 28 29 30 31
5 5 5 7 15 30 45 50 48 44 40 40 42 47 50 47 32 28 25 25 23 15 10 5 5 8 10 15 17 20 19 19
e„ 1 -1 1 1 1 1 1 1 1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 1 1 -1 1 1 1
4, 5 2,5 1,25 1,875 2,8125 4,2188 6,3281 9,4922 14,2383 21,3574 10,6787 16,0181 8,009 4,0045 2,0023 3,0034 4,5051 2,2525 3,3788 5,0682 7,6023 11,4035 17,1052 8,5526 4,2763 6,4145 3,2072 4,8108 7,2163 3,6081 1,8041 2,7061 4,0592
xn 5 2,5 3,75 5,625 8,4375 12,6563 18,9844 28,4766 42,7148 64,0723 53,3936 37,3755 45,3845 41,38 43,3823 46,3857 50,8907 48,6382 45,2594 40,1912 32,5888 21,1854 4,0801 12,6327 8,3564 1,942 5,1492 9,96 17,1763 13,5682 15,3722 18,0783 22,1375
j |
;| j
7.1.
Modulacja delta
b)
c)
Rys. 7.3. Tabela pokazująca wartości zmiennych użytych w dynamicznej modulacji delta w przykładzie 7.1 (a); dane wyjściowe dynamicznego modulatora delta (b); dane wyjściowe statycznego modulatora delta (c)
Rozdział 7. Kodowanie predykcyjne Przykład 7.2. Dla zbioru próbek { 5 5 5 7 1 5 3 0 l? 5 0 48 44 40 40 42 47 50 47 32 28 25 25 23 15 10 5 5 8 10 15 17 20 19 19} dla r_, i A o wartości początkowej równej 5 oraz używając jednej tylko przyszłej próbki w kodowaniu z opóźnieniem chcemy określić e0 tak, by x 0 i x 1 skwantować w sposób optymalny. Przy założeniu, że e0 - 1, otrzymujemy xq = 10 i błąd | x0 - x 0 | = 5; przyjmując, że ei = 1, otrzymujemy i i = 15 i błąd | x\ - X\ \ = 10, a zatem błąd kumulatywny wynosi 5 + 10 = 15. Następnie również dla e0 = l przyjmujemy e\ = - l i otrzymujemy i i = 5 i błąd | x\ - i i | = 0, a zatem błąd ku mulatywny równy 5 + 0 = 5. Następnie sprawdzamy te same dwie możliwości dla e3 z eo = -1 i otrzymujemy błąd kumulatywny równy odpowiednio 5 i 15. Widzimy zatem, że eo może przyjąć dowolną wartość (1 lub -1); ponieważ jednak najpierw testowaliśmy wartość 1 i przy wartości -1 nie było żadnej poprawy, e0 przyjmuje wartość 1. Teraz próbka z bufora staje się próbką bieżącą i następna przyszła próbka zostaje umieszczona w buforze. Proces określania e, i obliczania błędu kumulatywnego dla pierwszych czterech próbek pokazujemy na rys. 7.4a. Krzywa schodkowa wygenerowana za pomocą jednej tylko przyszłej próbki znajduje się na rys. 7.4b. Kumulatywny błąd predykcji £31 = 164 jest taki sam dla regularnej MD wykorzystującej równanie (7.1) bez kodowania z opóźnieniem. Jeśli użyjemy dwóch przyszłych próbek, to błąd E 31 redukuje się do 122 (rys. 7.4c) i pozostaje taki sam niezależnie od liczby używanych przyszłych próbek. n
x„-l
0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
5 5 5 5 10 10 10 10 5 5 5 5 10 10 10 10
e„ - A 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7
5 5 -5 -5 5 5 -5 -5 5 5 -5 -5 5 5 -5 -5
x„ 10
10 0 0 15 15 5 5 10
10 0 0 15 15 5 5
błąd
*„+i
e„ A
%n+1
błąd
5 5 5 5 10 10 0 0 5 5 5 5
5 5 5 5 5 5 5 5 7 7 7 7 15 15 15 15
5 -5 5 -5 5 -5 5 -5 5 -5 5 -5 5 -5 5 -5
15 5 5 -5 20 5 10 0 15 5 5 -5 20 10 10 0
10 0 0 10 15 5 5
8 8 2 2
8 2 2 2 5 5 5 5 15
błąd kumulatywny 15 5 5 15 25 15 5 5 13 7 7 17 13 13 7 17
7.1. Modulacja delta b)
c)
Rys. 7.4. Tabela ilustrująca zastosowanie kodowania z opóźnieniem w modulacji delta, używającego jednej przyszłej próbki do określenia kroku kwantyzacji. Błędy kumulatywne, wybrane kroki i wygenerowane skwantowane wartości bieżących próbek są zaznaczone tłustym drukiem (a); dane wyjściowe modulatora delta używającego jednej przyszłej próbki (b); oraz dwóch przyszłych próbek (c) 121
Rozdział 7. Kodowanie predykcyjne
a)
b)
Rys. 7.5. Dynamiczna MD z przykładu 7.1 uzupełniona kodowaniem z opóźnieniem używającym: (a) jednej przyszłej próbki; (b) trzech przyszłych próbek
7.2. Metoda DPCM Kodowanie z opóźnieniem możemy zastosować nie tylko ze statyczną MD, lecz również z dynamiczną MD. Jeśli przy określaniu wielkości kroku kwantyzacji możemy użyć przeszłych próbek, to możemy również włączyć do tego i przyszłe próbki. Przykład 73. Za pomocą MD określonej w przykładzie 7.1 otrzymujemy wy kres pokazany na rys. 7.3b, gdzie kumulatywny błąd predykcji E 31 = 184. Po włą czeniu jednej tylko próbki przy dokonywaniu predykcji błąd ten zmniejsza się do 78 (rys. 7.5a) i pozostaje taki sam w wypadku użycia dwóch przyszłych próbek, lecz dla trzech i czterech próbek zmniejsza się do 58 (rys. 7.5b).
□
7.2. Metoda DPCM W metodzie MD x n .t jest predykcją próbki x„, tj. dla przewidywanej wartości x* próbki xn mamy
tak więc wartość x„ zostaje odtworzona za pomocą bezpośredniego jej (skwantowanego) poprzednika. W różnicowej modulacji kodowo-impulsowej {differential pulse code modulation, DPCM) predykcję wartości bieżącej otrzymujemy na pod stawie co najmniej dwóch poprzednio przetworzonych próbek. A zatem metodę DPCM możemy uważać za uogólnienie metody MD. Przewidywaną wartość x* próbki xn uważamy w DPCM za kombinację liniową jej N poprzedników N
f przy czym a, są współczynnikami predykcji Liczba N wskazująca na liczbę poprzednich próbek użytych przy dokonywaniu predykcji bieżącej próbki określa rząd predyktora. Błąd predykcji e„ = xn - x ’n i zostaje następnie skwantowany Ćn —Q{Cn ) ,i przesłany linią transmisyjną (rys. 7.6). Odbiorca używa en oraz predykcji próbki :x„ - predykcją tą jestx* - do odtworzenia przybliżonej wartości próbki x„, czyli
Rozdział 7. Kodowanie predykcyjne co jest przybliżeniem wartości wejściowej xn obliczonym przez odbiorcę. W tym celu odbiorca odtwauM* predykcję jc* za pomocą poprzednio otrzymanych skwantowanych błędów predykcji i odtworzonych już wartości próbek. W celu skonstruowania predyktóra musimy określić optymalne współczynniki pre dykcji. Optymalność oznacza tu minimalizację błędu kumulatywnego predykcji, określającego różnicę między rzeczywistymi a przewidywanymi wartościami. Miarą tej różnicy jest zazwyczaj błąd kwadratowy. By skoncentrować się tylko na problemie konstrukcji predy która, przyjmiemy, że predyktor operuje na rzeczywistych, a nie na skwantowanych danych. Nadajnik
Rys. 7.6. Schemat blokowy systemu DPCM
Jeśli predykcja liniowa ma postać N
Zn — i=l
to problem konstrukcji predyktora sprowadza się do minimalizacji wariancji ciągu różnic o-2 = E[ (x n -x'ny ] = E
Xn
\
CCiXn~
i=1
przy czym E jest wartością oczekiwaną. W celu znalezienia najmniejszej wariancji o2 znajdujemy najpierw pochodne cząstkowe i przyrównujemy je do zera 124
Metoda DPCM
7 .2 d a
2
d a k
IV = -2 E x„ ~ 2 ^aiX„_i Xn-k = 0
dla l < k < N
skąd ^ [(^ n
)^ n -A ]
^ [(^
b ^-b -A
^
b^ b - a ) ]
—0
czyli E [xnxn_k] —E[xnxn-k\
(7.2)
Na podstawie definicji funkcji autokorelacji R M ) = E[xnxn+k\ ■S'.' i faktu, że R ^ k ) = Ra (-k), równanie (7.2) możemy przedstawić w postaci ji Rxxi.k') ~ R\xnxn_k\ —E[xnxn-k ] i=i
(t,E[xn„k x„ -(] - ^^ctiE[xnx n-'+k] — i=i
N
= ' ^ a iRxx( i - k ) i=1 dla 1 < k < N lub, w innej postaci: ^«(1) = «i ^ ( 0 ) + a 2R M ) + «3R M ) + ... + a NR ^ N - 1) R M ) = « i ^«(1) + «2 ^«(0) + « 3 ^«(1) + ••■+
<*n R
M - 2)
R M ) = «i ^«(2) + a 2R M ) + a 3^ ( 0 ) + ... + aN Ra {N - 3)
R J M ) = «! R J N - 1) + a 2Ra( N - 2) + a 3Ra(N - 3 ) + ... + a NR M ) co jest układem równań, które trzeba równocześnie rozwiązać względem a „ a 2, ..., a N. Równania te nazywamy równaniami normalnymi., równaniami Wienera-Hopfa lub równaniami Yule’a-Walkera. Przykład 7.4. Rozważmy zbiór M = 31 próbek dane = {5 6 5 6 5 7 4 8 3 9 2 1 0 1 9 2 8 6 6 6 10 1 10 1 6 1 6 1 3 5 7 9} (rys. 7.7a). Użyjemy predyktorów rzędu N = 1, 2 i 3. W celu porównania tych trzech predyktorów użyjemy następującej miary zysku predykcyjnego {prediction gain) wyrażonego w decybelach M
IM
zysk Pred = ^ x f / ^ (jc , - x ? ) 2 i=i i=l 125
Mpk _ _ _ i— ^XiXi+k
Użyjemy również definicji
R a (k ) = E[XnXn+k ] =
D l a N = l ’-
8 ( i ) s B l iaO )
lx x x \x /
R„ (0 ) . ^ 31
a)
b)
^
«
n fi,2 + 2 - 72 +
, ł 2 -3 , + 1 ' 4 , + _ + 3 •102) = 1168 / 31 = 37,68
n a q2 . 2 - 82 + 3-9 +
7.2.
Metoda DPCM
RXx(l) = ^ ( 5 - 6 +6-5 +5-6 +6-5 +5-7 + l-4+4 -8 + 8-3 + 3-9 + 9-2 +2-10 + + 10-l + l- 9 + 9- 2 + 2- 8 + 8 -6 + 2-(6-6) + 6-10 + 10- l +l - 10 + 10-l + + 2- (l -6 + 6 -l) + l - 3 + 3-5 + 5-7 + 7-9) = 707/30 = 23,57 = R J l j / R J O ) = 23,57/37,68 = 0,6255 C)
d)
Rys. 7.7. DPCM z przykładu 7.4 skonstruowany za pomocą równań normalnych: wykres próbek (a); wykres różnic między próbkami a ich przewidywanymi wartościami, obliczonych przez predyktor rzędu: (b) pierwszego; (c) drugiego; (d) trzeciego 127
Rozdział 7. Kodowanie predykcyjne
zatem wartości predykcyjne określone są równaniem "*■*
*n = 0,6225*„_i
a przesyłanymi wartościami będą sygnały różnicowe c n = -Tn “ Wartości te jednak mają większy zakres niż pierwotne wartości próbek, które mie-1 ściły się w przedziale [1, 10], podczas gdy sygnały różnicowe należą do przedziału^ [-5,3,9,4]. Dla predyktora drugiego rzędu, gdy N = 2:
R JX ) = «1 #«(0) + a 2/?xr(l) i?„(2) = a 1^ ( l ) + a 2i?„(0) Po znalezieniu Rxx(2) = -£y-1000 = 34,48 i rozwiązaniu powyższych równań ! otrzymujemy względem a , i a 2: a , = 0,0871
a 2 = 0,8607
zatem równaniem określającym wartości predykcyjne jest równanie x'n = 0,087 1jc„- ! +0,8607rn_2 Dla predyktora trzeciego rzędu, gdy A^= 3: ^«(1) = “ i fl«(0) + a 2RJ^l) + a 3Ra(2) R J & = oi *«(1) + a 2R J 0 ) + a 3Ra( 1) ^a(3) = O! /?«(2) + « 2^ = 0 ) + «3 ^rc(O) co w powiązaniu z i?**(3) = -^-662 = 23,64 daje: = 0,0358
a 2 = 0,8555
a 3 = 0,0596
a wartości predykcyjne określamy zgodnie z równaniem
Xn = 0,0358x„_i + 0,8555x„_2 + 0,0596xn_3 Na rysunkach 7.7b-d pokazujemy wykresy różnic między rzeczywistymi warto ściami a wartościami przewidywanymi dla wszystkich trzech predyktorów. Widzimy | ogromną różnicę między predyktorem pierwszego rzędu a pozostałymi dwoma J predyktorami. Predyktor pierwszego rzędu daje rezultaty przypominające pierwot-1 ne próbki (rys. 7.7b). Wykres wyjścia predyktora drugiego i trzeciego rzędu jest S spłaszczony w porównaniu z wykresem predyktora pierwszego rzędu. Zysk predyk- ;> cyjny wynosi dla tych predyktorów odpowiednio 1,67, 7,84 i 7,80 dB, tak więc j otrzymujemy ogromną poprawę, przechodząc od N = 1 do N = 2, natomiast różnica 1 między predyktorami drugiego i trzeciego rzędu jest niewielka. □ ■*,
7.2. Metoda DPCM
7.2.1. Dynamiczna metoda DPCM |$V dotychczasowej dyskusji w metodzie DPCM używaliśmy w trakcie kodowania ich samych współczynników predykcji. Przykład 7.4 sugeruje, że powinno się ać różnych współczynników dla różnych bloków próbek, co prowadzi do dyiamicznych systemów DPCM. W systemach tych możemy modyfikować przynajiej dwa składniki: współczynniki predykq'i i poziomy kwantyzaq'i. Dynamiczna ietoda DPCM może się opierać na modyfikacji jednego z tych elementów, momy jednak modyfikować oba jednocześnie. Problem kwantyzacji dynamicznej mówiliśmy w p. 6.2.1.1.1, przedyskutujemy więc teraz tylko problem predykcji dynamicznej.
7.2.1.1. Predykcja dynamiczna |W metodzie DPCM z predyktorem dynamicznym modyfikujemy współczynniki |predykcji tak, by odzwierciedlały lepiej zmiany w strumieniu próbek wejściowych. Przykład 7.5. Przykładem dynamicznej metody DPCM jest system zapropo[nowany przez B. S. Atala i M. R. Schroedera [1]. Układ równań “ ' N ' da2 = -2 E X n - J \ a i X n- i % n -k = 0 d l a l < k < A dak < i=1 , zostaje rozwiązany dla wszystkich próbek mieszczących się w przedziale 5 ms, tak więc predyktor jest optymalny dla tego czasu. Ponieważ autorzy użyli częstotliwości próbkowania równej 6,67 kHz, to N = 33. Współczynniki obliczane co 5 ms zostają ‘ przesłane do odbiorcy wraz z sygnałami różnicowymi, tak by odbiorca mógł rów nież dokonać odpowiednich modyfikacji co 5 ms.
□
Predyktor z ostatniego przykładu wymaga użycia bufora próbek w celu obli czenia współczynników predykcji. Powoduje to opóźnienie transmisji, gdyż współ czynniki muszą być znane przed przesłaniem danych. Podejście to wymaga również : przesyłania dodatkowej informacji, przede wszystkim współczynników predykcji. IPowodem tego jest fakt, że modyfikacja jest oparta na podstawie wejścia użytego t przez koder, niedostępnego dla odbiorcy. Tego rodzaju podejście nazywamy adap) tacją w przód (forward adaptation). Sposobem uniknięcia tego problemu jest estymacja współczynników predykcji i na podstawie skwantowanych i przesłanych już danych. Ponieważ dane te stanowią Pwyjście kodera, są również dostępne dla odbiorcy, co umożliwia wyeliminowanie : przesyłania dodatkowej informacji. Tego rodzaju podejście nazywamy adaptacją [wstecz (backward adaptation). Rozważmy równanie określające błąd kwadratowy dla predyktora pierwszego rzędu el = (xn - xń ) 2 = On - *n-l )2 129
Rozdział 7. Kodowanie predykcyjne
Wykres błędu e„ względem współczynnika predykcji a x pokazujemy na rys. 7.8. i Pochodna funkcji efr-w punkcie optimum aopl równa się zeru, co oznacza najmniej- i szą wartość błędu ejj. Pochodna funkcji w punkcie a x, położonym na lewo odj optymalnego punktu a op„ ma wartość ujemną. Aby punkt a x zbliżył się do a^,, i należy go zwiększyć, tj. należy dodać do a l liczbę dodatnią, by skorygować a,.'1 Korekta ta jest dodatnia, tj. przeciwna znakowi pochodnej. Podobnie, jeśli a x > aopnj to pochodna w punkcie at jest dodatnia, zatem adaptacja zmiennej ax polega na odję-' du od niej pewnej liczby, czyli znak korekty jest również przetiwny znakowi pochod nej.
Rys. 7.8. Wykres błędu predykcyjnego e l względem współczynnika predykcji a.
Za pomocą metody najszybszego spadku {steepest descent method lub gradient search method) modyfikacji współczynnika predykcji a x w chwili n + 1 dokonujemy przez dodanie do wartości a x w chwili n liczby proporcjonalnej do pochodnej funk cji el, wziętej ze znakiem przeciwnym
«i {n +1) = a x{n) - / 9 ~ - * ai (”) ~ P ' 6" da.\
da\
przy czym /7 jest współczynnikiem gradientu stosowanym do kontrolowania współ czynnika adaptacji (współczynnik /7jest często stały); gradientem funkcji/określo nej w przestrzeni ^-wymiarowej nazywamy wektor złożony z n pochodnych cząst kowych V/ =
df dx\ ’
T
B fn ’ dx„
Jednym ze sposobów oceny gradientu funkcji el jest algorytm najmniejszego kwadratu średniej {least mean square [8]). Ponieważ d el d
del — 2{x„ da\
ct\Xn-\jxn-\ — 2enx n~\
otrzymujemy «i {n +1) = a.\ (w) + 2pe„xn.\ « a x{n) + 2/7 enx n-
7.2. Metoda DPCM . jest wartością użytą do rozwiązania równania en =(*« - a i ( n ) i n-]) Dla predyktora rzędu N kwadratowy błąd predykcji określamy jako (
N
\ 2
= X n - ' £ a ix n-i V
i=l
skąd otrzymujemy TVpochodnych względem współczynników a k Ve2 =
del dct\
del da„
co jest gradientem funkcji e l . Każda pochodna cząstkowa del .
del - ’
8 a k
d a k
2(xn CtiXfi-k^Xn-lc — 2 enXn-k
a zatem a k(n
+ l) = a
k(n )
+ 2 f i e n x n- k
* a k(n )
+2
p e nx „ -k
Przykład 7.6. Użyjmy tych samych próbek co w przykładzie 7.4: dane = {5 6 5 6 5 7 4 8 3 9 2 10 1 9 2 8 6 6 6 10 1 10 1 6 1 6 1 3 5 7 9} przyjmując /? = 0,0001. Zakładamy, że dane nie są poddane kwantyzacji, zatem predyktor pierwszego rzędu jest oparty na równaniach: e n = ( x n ~ a i ( n ) x „ - 1)
ci\ (n + l) = «i (w) + 2/?e„xn_, Żeby rozpocząć proces, nadajemy a ^ l ) wartość 0,6. Adaptacja nie jest zbyt dobra, a zysk predykcyjny wynosi zaledwie 1,66 dB. Otrzymujemy jednak znaczącą poprawę, używając predyktora drugiego rzędu; po inicjowaniu a i(2) = 0,09 i a 2(2) = = 0,9, otrzymujemy zysk predykcyjny równy 7,85 dB. Predyktor trzeciego rzędu daje bardzo podobny wynik; po inicjowaniu a , (3) = 0,04, a 2(3) = 0,9 i a 3(3) = 0,06, otrzymujemy zysk predykcyjny równy 7,78 dB. Jednakże predyktor dynamiczny i ż tego przykładu daje nieco gorsze wyniki niż metoda DPCM z przykładu 7.4 opar ta na równaniach normalnych. Ważne jest, że efektywność naszego algorytmu zależy od wyboru parametru (i. Jeśli p= 0,001, to zysk predykcyjny równa się odpowiednio 1,59, 6,94 i 6,72 dB dla analizowanych tu predyktorów, lecz drastycznie zmienia się na niekorzyść, gdy p = = 0,01, kiedy równa się on odpowiednio 1,08, 0,61 i 0,01 dB. a
Rozdział 7. Kodowanie predykcyjne *
Ćwiczenia 1. W jakiej sytuacji krok A„ może osiągnąć wartość minimalną Aminl 2. W dynamicznej metodzie MD, podanej przez Marion R. Winkler [9], krok jest określony równaniem 2A,.! jeśli e„ = e„_] = e„_2 A„ = 0,5A„_i jeśli en * e n-\ i 2A, w przeciwnym razie A -i x n —x n~i +e„An Metoda ta podwaja krok, jeśli zmienna e nie zmieniła się przez ostatnie dwa razy tj. en odpowiadające próbce xn jest równe e„_i odpowiadające próbce Jf„_i i e„_2 odpowiadające próbce x n.2 - co jest oznaką przeciążenia zbocza, redukuje krok kwantyzacji o połowę przy zmianie znaku zmiennej e„; jeśli e„ zmieniła się za ostatnim razem, to krok pozostaje taki sam. Podaj wykres odpowiadający tej me todzie zastosowanej do danych na rys. 7.3. 3. Dla dynamicznej MD zdefiniowanej jako A n i dla warunku M i =
[Afi A„^ jeśli e„=e„.i \M 2A„-i w przeciwnym razie
= M [4] podaj wykres dla: a) M = 1,2; b) M = 1,6; c) M = 2
odpowiadającej tej metodzie zastosowanej do próbek z rys. 7.3. 4. Podaj tabelę podobną do tabeli na rys. 7.4a, gdy predyktor używa dwóch przyszłych próbek. Zrób to tylko dla pierwszej próbki bieżącej.
L iteratura Atal B. S., Schroeder M. R.: Adaptive predictive coding of speech signals. The Bell System Tech nical Journal, 1970,49, s. 1979-1986. 2. Cutler C. C.: Delayed encoding: stabilizer for adaptive coders. IEEE Transactions on Com munications, 1971, COM-19, s. 898-907. Gdański R., Kościelniak D.: Scalone układy modulacji różnicowych. W: Golański R. (red.): Wybrane systemy i układy scalone w telekomunikacji cyfrowej. Wydawnictwa AGH, Kraków 1995, s. 85-108. 4. Jayant N. S.: Adaptive deltamodulation with a one-bit memory. Bell System Technical Journal, 1970, s. 321-342. 5. Lei T. L. R., Scheinberg N., Schilling D. L.: Adaptive delta modulation systems for video encoding. IEEE Transactions on Communications, 1977, COM-25, s. 1302-1314.
Literatura Newton C. M. B.: Delta modulation with slope-overloaded prediction. Electronics Letters, 1970, 6, s. 272-274. Song C. L., Garodnick J., Schilling D. G: A variable-step-size robust delta modulator. IEEE Transactions on Communication Technology, 1971, COM-19, s. 1033-1044. Widrow B., McCool J. M., Larimore M. G., Johnson C. R.: Stationary and nonstationaiy learn ing characteristics of the LMS adaptive filter. Proceedings of the IEEE, 1976,64, s. 1151-1162. Winkler M. R.: High information delta modulation. IEEE International Convention Record, 1963, p. 8, s. 260-265.
Rozdział
8
Transformaty i kodowanie
W wielu sytuaq'ach przetwarzanie danych w ich pierwotnej postaci jest niedogodne z powodu natury stosowanych operacji lub otrzymanych wyników. Na przykład dodawanie jest łatwiejsze niż mnożenie, dobrze by było zatem sprowadzić jedną operację do drugiej. Najpierw jednak trzeba przedstawić dane w innej postaci, tj. przekształcić je tak, by nowa operacja nabrała znaczenia w określonym kontekście. Na przykład liczby możemy zastąpić ich logarytmami, dzięki czemu możemy je dodawać, zamiast mnożyć, następnie jednak wynik należy przekształcić w postać, w której wynik będzie identyczny z wynikiem otrzymanym za pomocą mnożenia, bez odwoływania się do przekształcenia logarytmicznego. W wypadku logarytmu problem sprowadza się do ustalenia odwzorowania izomorficznego między dzie dzinami (R +, *) i (R, +), ponieważ funkcja logarytmu jest funkcją wzajemnie jed noznaczną z dziedziny dodatnich liczb rzeczywistych R ‘ na dziedzinę liczb rzeczy wistych R oraz log(x*y) = logjc + logy. Funkcję logarytmu możemy zatem uważać za sposób przekształcenia operacji (lub funkcji) mnożenia w operaq'ę dodawania w ten sposób, że wyniki dodawania przekształca (za pomocą tablic logarytmicznych czy też funkcji potęgowej) w liczby oznaczające wyniki operacji mnożenia w pier wotnej dziedzinie relacyjnej (rys. 8.1). W kontekście kompresji danych przekształ canie danych jest operacją umożliwiającą szybsze i bardziej efektywne przesyłanie danych, niż w wypadku przesyłania danych w pierwotnej postaci. Jak jednak zoba czymy, przekształceniu podlega tutaj grupa danych w grupę danych. Innym powodem przekształcania danych z jednej postaci w drugą jest fakt, że pewne zależności między danymi są lepiej widoczne, lub w ogóle widoczne, po przekształceniu niż w postaci pierwotnej. Na przykład wyniki prezentowane w dzie dzinie czasu przez oscyloskop mogą być niewystarczające, gdyż pokazują zmiany amplitudy fali w czasie. W wypadku fali dźwiękowej taka postać jest niedogodna w przewidywaniu określonego dźwięku danego sygnału. Więcej informacji możemy uzyskać, gdy fala jest reprezentowana w dziedzinie częstotliwości, tj. zależność amplitudy i fazy fali od częstotliwości, a nie od czasu. Pragniemy zatem przekształ cić funkcję f(t) określoną w dziedzinie czasu, w funkcję T(f) = F(a>) określoną 134
Rozdział 8. Transformaty i kodowanie
ie częstotliwości, tak by funkcja transformacji {przekształcenia) T była znie określona. Transformatą funkcji /, określonej dla pewnej dziedziF jest jednoznacznie określona i jednoznacznie powiązana z funkcją / Na przykład mnożenie jest transformatą dodawania, jeśli logarytm jest
*
+ Rys. 8.1. Zależność między dziedzinami relacyjnymi (R +, ') i (R, +) ustalona za pomocą funkcji logarytmicznej
Dziedzina
Dziedzina częstotliwości
f
F
8.2. Utworzenie transformaty F funkcji/za pomocą funkcji transformacji T
je jeszcze jeden powód przekształcania danych. W kontekście kompresji ażne jest, by przekształcone dane były nieskorelowane, dzięki czemu idealnej sytuacji całość, energii sygnału, jest skoncentrowana w nietransformaty. W ten sposób mogą być przesyłane tylko elementy nasycone tą energią. W tym właśnie celu w kodowaniu używamy at. W niniejszym rozdziale przedstawimy definicję transformaty, jej ini oraz kilka powszechnie używanych transformat. 135
Rozdział 8. Transformaty i kodowanie
8.1. Definicja transformaty D efinicja 8.1. Jednowymiarową dyskretną transformatę F funkcji / określamy za pomocą równania N - 1
F(k) = X / ( " ) «(*.«)
dla k = 0,1,..., N -1
n=0
przy czym a(k, n) nazywamy jądrem transformacji. Odwrotna transformata f funkcji F jest dana wzorem A-l /( « ) = F(k) b(k, n) dla n = 0,1......N -1 *=o przy czym b(k, n) nazywamy jądrem transformacji odwrotnej.
□
Zauważmy najpierw, że każda wartość transformaty F(k) zależy od wartości /(« ), określonych dla wszystkich n argumentów zawartych w dziedzinie funkcji /. Ponadto jeśli \ f \ = [/(O) /(1 ) ... f ( N - 1)]Tjest wektorem sygnałów, to wektor [F] = = [F(0) F (l) ... F(N - l)]7 reprezentuje jego transformatę zgodnie z równaniem [F] = T\f] przy czym T = [a(/c, n)] jest dwuwymiarową N x N macierzą transformacji. T powin no być macierzą ortogonalną, dzięki czemu energia sygnału zostaje zachowana w energii transformaty, przy czym zachowanie energii jest określone równaniem Z i/(* )i2= 2 > ( * ) i2 k k Zależność ta jest prawdziwa, gdyż [ f V[ f ] = ( T T[F]y(TT[F]) = [F]t T T t [F] = [ F f [ F ] Elementy macierzy [F] nazywamy współczynnikami transformaty, współczynniki te zostają najpierw skwantowane, a następnie przesłane linią transmisyjną. Od biorca dekoduje otrzymane dane w celu odtworzenia wektora [f] za pomocą prze kształcenia W = T-'[F\ przy czym T~l= [b(k,«)]. Wszystkie te definicje możemy rozszerzyć do dwóch wymiarów, co jest ważne ze względu na kompresję obrazów. W tym wypadku zbiór próbek, np. zbiór pikseli, reprezentuje dwuwymiarowa tablica o wymiarze N 2, zawierająca próbki z po wierzchni obrazu; próbki te opisuje funkcja/(m, n) dla współrzędnych m ,n = 0,1, ..., N - 1; definicję 8.1 możemy teraz rozszerzyć do dwóch wymiarów w następują cy sposób: 136
8.1. Definicja transformaty i DEFINICJA 8.2. Dwuwymiarowa dyskretna transformata F funkcji / ma postać N - 1
N -1
F(k, l) = Y
n)a(k, l, m, n)
dla k, l = 0,1, . . . , N - 1
m =0 n=0
I przy czym a(k, l, m, n) nazywamy jądrem transformacji, a zmienne k i l - częstotli wościami przestrzennymi. Odpowiadająca temu transformata odwrotna ma postać N -1
N -1
f ( m , n ) = Y J ^ F ( k , l)b(k, l , m , n ) k=0 1=0
dla m, n = 0,1,..., N - 1
przy czym b(k, l, m, n) nazywamy jądrem transformacji odwrotnej.
□
D efinicja 8 3 . Transformatę N -1
N -1
F(k,l) = ^ ^ f ( m , n ) a ( k ,l ,m , n ) m=0 /i=0
dla A:,7 = 0 ,1 ,...,7V-1
nazywamy separowalną, jeśli jej jądro jest separowalne, tj. jeśli
-i; jft
a(k, l, m, n) = a f k , m)a2(l, n) dla dwóch jednowymiarowych jąder a,(Tc, m) i a2(l, n).
Ą '-L' j I4 p.
□
Jeśli transformata dwuwymiarowa jest separowalna, to możemy ją obliczyć za pomocą dwóch kolejnych transformat jednowymiarowych. W ten sposób liczba operacji mnożenia i dodawania redukuje się z 0 ( N i) do 0 ( N y). Zauważmy, że dla k, 7= 0,1, . . . , N -1 N-l N-1 fżF(k,l) = ' £ 'YJf{ m, ń )a {k, l, m, n ) = ^Z jZ ^^/ ( w , n) ax(k, m) a2(l, n) = m=0 n=0 m=0 n=0 N~1 N-1 = Z ai (*> W) Z / ( m»") "2(7, rt)
n=0
Dlatego znalezienie transformaty dwuwymiarowej sprowadza się do złożenia dwóch transformat jednowymiarowych: najpierw znajdujemy transformatę jedno wymiarową wzdłuż każdej kolumny m N-l F(m, 7) = f ( m , ń) a2(l, n) n =0
Rozdział 8. Transformaty i kodowanie a następnie transformatę jednowymiarową wzdłuż każdego wiersza / macierzy otrzymanej w wynikwj^erwszej transformacji F(k, /) =a\ (k , m)F(m, l) m= 0
(8.1)
co pokazujemy na rys. 8.3.
Rys. 8.3. Wyznaczenie transformaty dwuwymiarowej za pomocą jednowymiarowych transformacji
Definicja 8.4. Jądro transformaty nazywamy symetrycznym, jeśli
a(k, l, m, ri) = a^{k, m ) a 1(l, n )
□ Czasami dogodniejsze jest wyrażenie transformaty w postaci macierzy. Dla separowalnego i symetrycznego jądra a(k, l, m, n) wzór (8.1) określający transforma tę [Z7] możemy przedstawić w postaci [F] = [F(k, /)] = [«, (p, s)][f(m, n)][fll (p, *)] = T[f]T
(8.2)
przy czym \f] = \f(m, n)] jest N x N macierzą próbek, T= [a,(p, 5 )] jest symetryczną macierzą transformacji, a [Z7] jest transformatą N x N otrzymaną w wyniku tego przekształcenia. Jeśli jądro odwrotnej transformaqi jest separowalne i symetrycz ne, tj. jeśli b(k, l, m, n) = bffk, m)b^(l, n) a odwrotnością macierzy T jest macierz T ]= [bi(k, w)], to pomnożenie obu stron równania (8.2) od strony lewej i prawej przez macierz T-1daje T-1[Z7]7’ 1 = r - 17’[/]7 T -1 = [/] W ten sposób macierz [/] w dziedzinie przestrzennej, reprezentująca pewien ob raz, zostaje przekształcona za pomocą macierzy T w transformatę [Z7], będącą dwuwymiarową macierzą w dziedzinie przestrzennej częstotliwości. 138
; F
8.2. Interpretacja transformacji
Powodem przekształcenia [/] w [F] jest fakt, że nie wszystkie elementy trans formaty [F] są tak samo ważne. Ponieważ większa część energii macierzy jest skon centrowana w lewym górnym rogu, pozostałe elementy możemy ze względów prak tycznych pominąć, tj. potraktować je tak, jakby były równe zeru. W ten sposób powstaje pewna strata informacji, jednak jest ona (czy raczej powinna być) nie wielka w porównaniu z zachowaną informacją, dzięki czemu jest możliwe odtwo rzenie w zadowalającym stopniu pierwotnej informacji.
8.2. Interpretacja transformacji Transformację możemy interpretować na kilka sposobów; zaprezentujemy dwie z tych interpretacji, a mianowicie transformację jako rotację i transformację jako sposób dekompozycji próbek na sumę wektorów bazowych.
8.2.1. Transformata i rotacja osi współrzędnych Rozważmy obraz o wymiarze 8 x 8 (rys. 8.4a), przy czym liczby oznaczają odcienie szarości na skali 16 odcieni od 0 do 15. Obraz ten dzielimy na bloki 2 x 1 , które poddamy transformacji za pomocą macierzy T o wymiarze 2 x 2 . Bloki te pokazu jemy jako punkty na rys. 8.4b. Liczby obok punktów oznaczają liczbę bloków od powiadających danemu punktowi. Gdyby obraz zawierał liczby umieszczone w sposób losowy, wówczas każda z liczb od 0 do 15 miałaby równą szansę pojawie nia się w dowolnym punkcie obrazu, a rys. 8.4b zawierałby punkty rozrzucone nie mal równomiernie w kwadracie [0 15] x [0 15]. Jednakże punkty na obrazie repre zentującym zakrzywiony wał (rys. 8.4f) są umieszczone w szczególnym porządku, a liczby w sąsiednich blokach 2 x 1 są w większości wypadków takie same lub nie mal takie same; 22 z tych bloków składa się z pary tych samych liczb: 12 z nich z jedynek, 4 z szóstek, 4 z ósemek i 2 z dziesiątek. Punkty odpowiadające tym blo kom są umieszczone na przekątnej płaszczyzny. Tylko trzy bloki zawierają znacznie różniące się między sobą liczby (1 i 6), a liczby zawarte w pozostałych blokach są bliskie siebie, tak więc odpowiadające im punkty są bliskie przekątnej. Fakt, że większość punktów znajduje się na przekątnej lub w jej pobliżu, wskazuje na to, że liczby zawarte w każdym bloku są w bardzo dużym stopniu skorelowane z sobą. Dokonajmy teraz rotacji osi współrzędnych o 45°. Dokonujemy tego, przekształca jąc każdy blok w nowy blok za pomocą macierzy rotacji 1 1' cos 45° sin 45° 1 - s in 45° cos45° "V 2 - 1 1
139
a)
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 6 6 6 6 6
1 1 6 8 8 8 8 8
1 6 6 8 8 10 JA 8 10 8 10 8 10 8 10 8
8 10 10 8 8 6 6 1 6 1 6 1 6 1 6 1
b)
y< 10 9
•2 •
8
\
y2
7 6- *2 5 4 3 2 \ l - --*"12 H--1—t-
2
/A
2 0 2 0 2 0 2 0
2 0 2 0 2 0 2 0
2 0 7 5 12 0 12 0
2 0 14 2 16 0 16 0
7 5 18 2 20 0 20 0
14 18 2 2 18 14 -2 -2 16 12 0 0 16 12 0 0
•1 -I—I—I—l—t-
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 4 4 6 6 6 6
1 1 7 7 8 8 8 8
4 7 4 7 9 9 9 9 10 8 10 8 10 8 10 8
9 9 7 7 6 6 6 6
10 x,
18 -2 7 -5 2 0 2 0
■4— I—4 —I— I—4 — 1 - 4 — 1
e)
*2
•1
1 2 3 4 5 6 7 8 9
c)
/'2
9 9 4 4 1 1 1 1
~
»■
2 3 4 5 6 7 8 9 10 x,
Rys. 8.4. Transformacja jako rotacja: macierz próbek (a) reprezentująca zakrzywiony wał i tworzące ją punkty na płaszczyźnie (b); (c) macierz z rys. (a) po transformacji; (d) punkty przekształconej macierzy; (e) odtworzenie macierzy za pomocą transformacji odwrotnej po przyrównaniu współrzędnych y2 do zera (d); (f, g) trójwymiarowa reprezentacja macierzy (a) i (e)
"
"
' 140 ------— ---------- -------------------------—
8.2. Interpretacja transformacji |skąd c 1 1" a i ~2 d ~V2 0 - i i b I przy czym blok [c d]T jest odpowiednikiem bloku [a b]r w nowym układzie współl rzędnych. Na przykład: i r T i 1 2 V2 - i i 2 = V2 0 i i "i' 1 ~T 1 V2 - i i 6 = V2 5 Tak
i I
więc
punkt
[1 1]T zostaje
przekształcony
w
punkt
-jk [2 0]r =
- f f r 0^ , a [1 6]r w punkt ^=-[7 5]r = [^- ■^■|r . W rezultacie obraz na rys. 8.4a zostaje przekształcony w obraz z rys. 8.4c, po przekształceniu każdego bloku obra zu z rys. 8.4a. Zauważmy, że liczby na rys. 8.4c powinny być podzielone przez -J2. Widzimy również, że druga liczba każdego bloku jest równa zeru lub jest bliska zeru, ponieważ punkty odpowiadające przekształconym blokom są w pobliżu osi x 2. Natomiast pierwsza liczba każdego bloku wzrosła, czyli energia obrazu jest teraz skoncentrowana w pierwszych elementach bloków. Całkowita energia obrazu po zostaje jednak taka sama przed i po rotacji; całkowita energia jest sumą energii obliczonej wzdłuż obu osi współrzędnych: j2 + £ y ? = (14■ l 2 + 7 ■62 + 7 •82 + 4 •10z) + (13 l 2 + 7• 62 + 8-82 + 4-102) = = 1114 + 1177 = 2291 +H y2 = r ^ y ( ( 12-22 + 3 ' 72 + 4122 +3-142 + 4-162 +4-182 +2-202) +
W2 ) + (22 • O2 + 3 • 52 + 7 • 22)) = = -(4 3 7 4 + 103) = 2291 Jeśli tak jest, to kosztem pewnego zniekształcenia wszystkie przekształcone punkty możemy rzutować na oś x2, dzięki czemu druga liczba każdego bloku równa się zeru (rys. 8.4d). W ten sposób wystarczy przesłać odbiorcy tylko pierwszą liczbę 141
Rozdział 8. Transformaty i kodowanie każdego bloku, tj. połowę wszystkich liczb tworzących obraz. Fakt, że wprowadzo- \ ne w ten sposób znieteztałcenie nie jest zbyt wielkie, widzimy na rys. 8.4e, na któ-; rym oryginalny obraz zostaje odtworzony przez rotację każdego przekształconego punktu o 45° w prawo, czyli przez zastosowanie transformacji odwrotnej II
cos 45° -s in 45° sin 45° cos 45°
1 "1 - 1 ' 1 1
przy czym a i "1 - 1 ' c b = V2 1 1 d obliczamy dla każdego przekształconego bloku. Na przykład:
1 1 -1' 1 Y V2 1 1 V2
Y
1Ul
1__
Y 1
VQ|
i '1 -1" 1 '2 V2 1 1 V2 °j
Zniekształcona część obrazu jest zaznaczona na odtworzonym obrazie na rys. 8.4e. Przykład ten pokazuje powód stosowania przekształcenia, a mianowicie skon centrowanie energii obrazu w jak najmniejszej liczbie elementów przekształconego obrazu. Rotacja osi powoduje dekorelację elementów bloków, a przynajmniej znaczne zmniejszenie korelacji między tymi elementami. Na rysunku 8.4b pokazujemy, że jeżeli znamy współrzędną danego bloku, to z dużą dozą prawdopodobieństwa potrafimy podać współrzędną y, tego bloku, gdyż w większości wypadków współ rzędna x : jest równa lub niemal równa współrzędnej y v Sytuacja zmienia się dra stycznie po zmianie układu współrzędnych. Tym razem współrzędnej x2 odpowiada mała wartość współrzędnej y2 - co jest wskaźnikiem przesunięcia energii ze współ rzędnych y2 do współrzędnych x 2 - lecz współrzędnej y2 może odpowiadać dowolna wartość współrzędnej x2, tj. elementy bloku zostały zdekorelowane, czyli nie zależą teraz jeden od drugiego, a przynajmniej zależą od siebie w bardzo małym stopniu (musimy być ostrożni z używaną tu terminologią, gdyż niezależność, czy raczej niezależność statystyczna, nie jest tożsama z brakiem korelacji: elementy bloku mogą być nieskorelowane, a mimo to statystycznie zależne).
8.2.2. Transformata i macierze bazowe Macierz złożoną z pikseli możemy przedstawić w postaci rozkładu na macierze ortogonalne: 142
8.2. Interpretacja transformacji in —i iv —i
X =
X x ( m ,n )[ e (m ,n )]
przy czym [e(m, «)] jest macierzą M x N zawierającą 1 w punkcie (m, n) i Ow pozo stałych punktach. Oznacza to, że macierz próbek X jest złożeniem wektorów ba sowych pomnożonych przez współczynniki (wagi) będące elementami tej macierzy. Na przykład =a
+b
czyli wektor [a b]Tzostaje przekształcony w samego siebie za pomocą transformaty ..tożsamościowej ri o ir a 0 1 b co sugeruje, że i inne transformaty również możemy uważać za macierze złożone z wektorów bazowych, na które możemy rozłożyć naszą macierz próbek. Jako przy kładu użyjemy przekształcenia Hadamarda (omówionego w p. 8.4) do wektora próbek X = [2 5]r 7 1 "1 1' 2 1 %■ Y =W. V2 ! -1 5 ~V2 - 3 Ponieważ odwrotnością macierzy Hadamarda jest również macierz Hadamar da, pierwotny wektor 2Ć możemy odtworzyć, stosując przekształcenie odwrotne X =
7 1' 1 1 '1 1 -1 3 V2 V2
2 5
Wiersze macierzy Hadamarda możemy zatem uważać za wektory bazowe, a składniki wektora Y za współczynniki, przez które mnożymy wektory bazowe. Tak więc wektor X=-
1 _ ł (_ l V2 U /2 - 1
1 & { V2
■X czyli X jest złożeniem wektorów bazowych pomnożonych przez współczynniki, którymi są elementy transformaty Y. Jeśli próbki są zebrane jako macierze 2 x 2, to transformacji dokonujemy albo za pomocą macierzy transformacji 4 x 4 , albo - jeśli ta ostatnia macierz jest separowalna i symetryczna - za pomocą dwukrotnego przekształcenia przy użyciu tej samej macierzy transformacji 2 x 2 : raz przekształcenia wierszy macierzy próbek, a raz jej kolumn. Rozważmy najpierw tę drugą możliwość. Naszym zadaniem jest wyznaczenie transformaty Hadamarda dla macierzy próbek
9- _________________________________
143
Rozdział 8. Transformaty i kodowanie X =
2 3 5 -2
czyli wyznaczenie macierzy 1' '2 3" 1 "1 1' _ 1 7 1' '1 1' 1 '1 y — V2 1 -1 5 - 2 V2 1 -1 " 2 - 3 5 1 - 1 3"
(8.3)
1 1__
6" '4 1
1 00
00 2
Oryginalną macierz X możemy odtworzyć, stosując te same dwa kroki, przy czym role macierzy y i Y zostają odwrócone: "2
3'
li
1
1
__t-H1
1
3' 1 '1 1' V2 1 - 1
1Ln 1 t-o i----
1' '4 t-H1
1 '1 X =V2 1
Macierz X o wymiarze 2 x 2 możemy uważać za punkt w czterowymiarowej przestrzeni i jako taki przedstawić w postaci złożenia wektorów bazowych tej prze strzeni. Oczywiście wektory te muszą być również punktami tej przestrzeni. Czym jednak są te wektory? Otóż możemy zastosować właśnie użytą macierz Hadamarda 2 x 2 w celu ich wyznaczenia. Macierz złożoną z dwóch wektorów bazowych zasto sowaliśmy dwukrotnie w trakcie obliczania transformaty Y za pomocą mnożenia macierzy. Możemy zatem wyznaczyć wektory bazowe naszej przestrzeni czterowy miarowej, mnożąc poziomo zorientowane dwuwymiarowe wektory bazowe przez zorientowane pionowo takie same wektory (rys. 8.5). Jeśli elementy transformaty Y zinterpretujemy jako wagi wektorów bazowych, to macierz X możemy rozłożyć na sumę czterech macierzy bazowych w następujący sposób: \ [2 3 1 1 f [l ["i - l l 1 -1 1 4 +3 +1 1 -4 X = -1 1J 5 -2 1 -1 -1 -1 2< 1 1 Jeśli macierz transformacji nie jest separowalna, to punkty czterowymiarowej przestrzeni musimy reprezentować jako czteroelementowe wektory, a macierz transformacji będzie zastosowana tylko jeden raz, tak więc musi to być macierz 4x4. Macierze próbek 2 x 2 przekształcamy w wektory przez umieszczenie elementów tych macierzy jeden nad drugim. Na przykład naszą macierz X przekształcamy najpierw w wektor [2 3 5 -2]r, a następnie wyznaczamy transformatę 1 1 1 1 1-1 1-1 y = 1 1 1 -1 V4 1-1-1 1
2 3 5 -2
4 3 1 -4
(8.4)
8.3. Transformata Karhunena-Loevego 1
- 1
1
1
1
1
1
- 1
1
1
1
- 1
T”
t—
T” 1
r* 1
1 - 1
- 1 1
Rys. 8.5. Tworzenie czterech macierzy bazowych za pomocą dwóch wektorów bazowych
a zatem rozkład macierzy X na wektory bazowe, będące wierszami powyższej ma cierzy Hadamarda 4 x 4 , przedstawia się następująco: ' 1 2 1\ 1 1 3 -1 -1 1 1 1 X = 4 +3 +1 -4 -1 5 1 -1 1 2 -2 1 1 -1 -1 co jest po prostu inną postacią reprezentowania tego samego rozkładu co za po ll mocą macierzy bazowych 2 x 2 .
8.3. Transformata Karhunena-Loevego Omawiane tu przekształcenie zaproponowali Harold Hotelling [7] pod nazwą przekształcenia głównych składników i Kari Karhunen [9] oraz Michel Loeve [11]. Przekształcenie to opiera się na użyciu właściwości statystycznych obrazu, co wy maga wprowadzenia wstępnych definicji. Poniżej przyjmiemy, że wektory próbek są realizacjami procesu stochastyczne go, czyli każdy wektor [f] = [x0 x 1 ... xN-^Y jest zdarzeniem losowym, przy czym składniki wektora xk mogą być liczbami zespolonymi, rzeczywistymi lub po prostu całkowitymi i są również wybierane losowo. Na przykład wektor złożony z próbek sygnału fonicznego może zostać zniekształcony w trakcie transmisji i nie możemy przewidzieć z pewnością, co dotrze do odbiorcy; jednakże nadal możemy badać właściwości ciągu takich wektorów. W kontekście kompresji danych strumień próbek dzielimy na bloki tak, że każdy blok jest wektorem próbek. Naszym celem jest znalezienie sposobu na trans mitowanie tych bloków w nieskorelowanej postaci. W wypadku obrazów spróbkowany obraz dzielimy na M bloków 8 x 8, co daje w rezultacie ciąg bloków [f°], [ f " '1]; każdy blok [fk] = [/£ /„*, ... f kQ / A f jest wektorem złożonym z 64 próbek.
Rozdział 8. Transformaty i kodowanie
D efinicja 8.5. Wartością średnią wektora losowego X =[x0... xN-x\T nazywamy liczbę
^ 1 E [X )-X .Z -Y ,X ‘ k =0
przy czymX° ,
X M 1jest ciągiem wektorów próbek.
□
D efinicja 8.6. Macierzą autokorelacji dyskretnej wektorowej zmiennej losowej X nazywamy macierz E[XXr |.
□
Dla danego ciągu wektorów X®, ..., X M 1 przybliżenie macierzy autokorelaqi dla zmiennej losowej X uzyskujemy, stosując równanie 1
M -\
d la /,ra = 0 ,
— Ż x >x M to
*=0
DEFINICJA 8.7. Macierzą kowariancji dla dyskretnej wektorowej zmiennej losowej X nazywamy macierz
cov(X) = E[(X - E[ X])(X - E[ X\ Y]
□ W praktyce dogodniejsze jest użycie odmiennej postaci tej definicji. Dla danego ciągu wektorów próbekX ° , X 1, X M l mamy cov(X )
=
E[(X - X ) ( [ X -
1
M ~ l
1
M ~ l
M
k=0
m
k=0
/ = E [ X X T] V
l
r
_
]
4
z
' (
M
k=o
1
" Z ,1
1V1
^
-
* ) ( * *
M - l
k=0
*=0 , M-l
M -l
M ^k-0
M *=o
= £[A X 7' ] - * * r - X X T + X X T ----------------------
i
-
146 ----------------------
=
8.3. Transformata Karhunena-Loevego
skąd otrzymujemy
cov(X) = E [ X X T] - X X T
(8.5)
Definicja 8.8. Transformatą Karhunena-Loevego (KLT) określamy wektor
[F] = T[ f ] przy czym elementami wektora T =[y0 ... yw-,]T są wektory własne macierzy kowa riancji cov([/]).
n Zauważmy, że 1
A /-1
,
M -1
T X = T — Y X k =— Y T X k = T X m k =0 m *=0 a zatem
coV([f)) = E [ [ f ] [ f Y ] - [ f ] [ f y możemy przekształcić w
Tcov([f])TT = n £ [ [ / J [ / ] f j - [ / ] [ / F F = = E[ T( [ f ] [f VTT]- T[f ][f ]T) TT = = E[ T ( [ f ] ( T [ f ] Y ] - T [ f ] T [ f Y co prowadzi do cov([/']) = c o v (7 \[/]) = E[T[f )( T[f ]Y - W \ W Y = Tcov{[f])TT Ponadto, ponieważ wierszami macierzy transformacji T są wektory własne macie rzy cov(X), a każdemu wektorowi własnemu odpowiada wartość własna Ą, to mamy (p. 8.8)
cov([f])ri = Ai/i a zatem po włączeniu wszystkich wektorów własnych otrzymujemy
cov(ff\)TT = Ai[yo, • /n-\] = [^o/o, •••, ...
=
0 = [yo ••• //v-i]diag(/ło,. . . , ŹLN-i )
= [y0 ...yN-i] 0 ... A/1/-1
147
Rozdział 8. Transformaty i kodowanie
czyli cov([f])TT = T T diag(Ao,...,
-i)
lub Tcov([f])TT = cov([F]) = diag(,lo, •••, przy czym macierz diagonalna diag(/lo, ■■■, A ^-i) składa się z wartości własnych macierzy cov(\f\) takich, że każdemu wektorowi własnemu A zawartemu w T od powiada wartość własna A- Oznacza to, że elementy wektorowe macierzy \F\ są nieskorelowane. Podsumowując, proces wyznaczenia transformaty [F] dla wektora próbek \f] przebiega następująco: (a) wyznaczenie macierzy kowariancji cov([/]); (b) wyznaczenie wartości własnych, a następnie wektorów własnych macierzy cov{\f\) oraz konstrukcja macierzy transformacji T ze znormalizowanych wektorów własnych; (c) wyznaczenie transformaty [/*]. Przykład 8.1. Przekształćmy następującą macierz próbek za pomocą KLT X =
1 2 10' 2 - 1 1 2 '
Krokiem przygotowawczym jest podział tej macierzy na ciąg bloków: [ / 3]
[/°]
0 2
przy czym każdy wektor [/*] uważamy za realizację wektora losowego \f\. W celu wyznaczenia macierzy kowariancji dla [/] odwołujemy się do równania (8.5):
i i [ / H / f = \ [i i] = i i
™ n = - Ż tfc=0 / * ] t / ‘ ]r = 7 +
1 [1 1] + 1
[0 2 ]
cov([f] = E[ [ f ] [ f Y) - [ f ] [ f ] T
[1 2] +
2 [2 -1] + -1
J. 6 1 4 1 10 0,5 - 0,75' -0,75 1,5
8.3. Transformata Karhunena-Loevego W celu wyznaczenia wartości własnych rozwiązujemy równanie charaktery styczne \cov( [f] )-A I\= 0
det
1 0 0,5 -0,75 -A 0 1 -0,75 1,5
0,5- A -0,75 -0,75 1,5-A
= (0,5 - A)(l,5 - A) - 0,5625 = A2 - 2 A - 0,1875 a zatem Ą = 0,0986, A, = 1,9014, skąd wyznaczamy wektory własne. Pierwszy wek tor własny y0wyznaczamy z zależności (cov([/J) - AqI) to =
0,4014 -0,7500' yoo 1,4014 /10 -0,7500
"o' 0
-0,5352' 1,8685' Po ; podobnie wyznaczamy y\ ~ 1 1 '1,8685' "0,8816 j • Ti = -0,4719' ; podobnie 0,4719 1 0,8817
zatem wektor własny yo = normalizacji, j p - = .
IN I
Daje to następującą macierz transformacji: 0,8816 0,4719 -0,4719 0,8817 która jest macierzą ortogonalną, tj. TT 1= T T T = /, skąd wyznaczamy transfor maty [F] = T[f[. [Fo] = r [ / ° ] =
[F2] = r [ / 2] =
1,8254' 1,2915 1,3535 0,4098
1,2915 [F'] = T [ f lii] = -1,8254 [F3] = T [ f 3] =
0,9438' 1,7634
Ponieważ cov{[F]) = Tcov([f])TT, otrzymujemy cov([F] =
0,5 -0,75' 0,8816 0,4719' -0,4719 0,8817 -0,75 1,5 0,9860 0,0001' 0,0001 1,9015
0,8816 0,4719' -0,4719 0,8817
-------------------------------------------------------------------------------- 1 Rozdział 8. Transformaty i kodowanie Zauważmy, że elementy diagonalne są niemal równe wartościom własnym ' 0,986 i 1,9014, wyzrwwfconym dla macierzy cov([f\), a elementy poza przekątną są , niemal równe zeru. Różnica jest wynikiem zaokrąglania liczb w trakcie obliczeń do i czterech miejsc po przecinku. Pierwotne wartości wektorów [/*] możemy odtwo rzyć za pomocą odwrotnej macierzy transformacji T~l = T T [f °\ = T T[F°] =
0,9998 , 2,0001
[f' ] = T T[F'] =
2,0001' -l,0000j
[ f 2) = T T[F2] =
0,9999 1,0000 ,
[/3] = :T [F 3] =
-0,0001' 2,0001
□ Ponieważ macierz kowariancji obliczamy dla każdego strumienia próbek, KLT jest transformatą dynamiczną i optymalną; co oznacza jednak, że wyznaczanie jej jest czasochłonne. Nie istnieje bowiem żaden algorytm szybkiego wyznaczania KLT i jej odwrotności. Z tego powodu w praktyce stosuje się inne transformaty, a KLT jest używana jako punkt odniesienia tych transformat przy ocenie stopnia dokonywanej przez nie dekorelacji próbek.
8.4. Transformata Hadamarda D efinicja 8.9. Macierzą Hadamarda jest kwadratowa macierz, złożona z liczb 1 i -1 , której wiersze i kolumny są wzajemnie ortogonalne.
□
Definicja ta nie narzuca żadnych ograniczeń na wymiar macierzy Hadamarda, jednak w kontekście kompresji danych użytecznym podzbiorem macierzy Hada marda są macierze o wymiarach będących potęgą dwójki. D efinicja 8.10. Macierz Hadamarda H2n o wymiarze 2" x 2" definiujemy za pomo cą następującej zależności rekurencyjnej:
Hn Hn Hn -H n
□ Przykład 8.2. Oto pierwsze trzy macierze Hadamarda należące do zdefiniowa nej właśnie klasy 150
8.4. Transformata Hadamarda
[ 1],
1 1 1 1 1-1 1-1 1 1 -1 -1 1 -1 -1 1
1 1 1 -1
Łatwo możemy zauważyć, że dla macierzy Hadamarda Hk jej odwrotność jest macierzą proporcjonalną do samej siebie
macierz ta jest również symetryczna Hl=Hk i ortogonalna HT k H k =kI k dla macierzy jednostkowej Ik rzędu k.
m
Definicja 8.11. Sekwensem (sequency) jest liczba określająca, ile razy zmienia się znak w danym wierszu macierzy Hadamarda.
Pojęcie sekwensu wprowadził Harmuth jako odpowiednik częstotliwości. Tak więc wiersze macierzy Hadamarda możemy uważać za odzwierciedlenie zmian fal prostokątnych pokazanych na rys. 8.6. Fale te nazywamy funkcjami Walsha. Istnieje I ; wiele różnych sposobów na uporządkowanie tych funkcji i macierz Hadamarda jest jedną z takich możliwości. Sekwens 1
1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 1 1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 1
-1
H.=
Fbd= b _ r ~ L T F = Ł = F = F b = _ n _ J — L»
1 1 1 -1
1 -1 -1 -1 -1 1 1 -1
-1 -1
1 1 1 -1
0 7 3 4
1 6 2
5
-
Rys. 8.6. Ciągłe funkcje Walsha i macierz Hadamarda rzędu 8, odzwierciedlająca dyskretne funkcje Walsha 151
Rozdział 8. Transformaty i kodowanie D e f in ic j a 8.12. Dla wektora [/] = [x0 x \ ... xn -i ]r złożonego z N = 2" liczb rzeczy wistych jednowymia»«*vą transformatę Walsha-Hadamarda (WHT) definiujemy jako wektor
[ F ] = - j - H N[f]
(8 .6 ) j
przy czym [F] = [y0 y i yw-i lr jest wektorem złożonym ze współczynników WHT. Odwrotną transformatę Walsha-Hadamarda definiujemy jako
□ Definicja ta wskazuje, że transformatę Hadamarda otrzymujemy, używając macierzy Hadamarda znormalizowanej za pomocą odwrotności pierwiastka kwa dratowego jej rzędu. D efinicja 8.13. Dwuwymiarowa transformata Walsha-Hadamarda o wymiarze N x N = 2" x 2" jest zdefiniowana jako macierz
[F] = - ^ L / / „
[ / ] =— H N[ f ] H N
a dwuwymiarowa odwrotna transformata WHT jest dana wzorem [f] = - H N[ F) HN
□ Ponieważ macierze Hadamarda są złożone tylko z liczb 1 i -1, wyznaczanie WHT nie musi odbywać się za pomocą operacji mnożenia; oprócz podzielenia wyniku przez czynnik normalizujący, WHT obliczamy tylko za pomocą operacji odejmowania i dodawania: rozwiązanie (8.6) wymaga wykonania 0 ( N 2) operacji, co możemy zredukować do 0 ( N lg N) operacji dodawania/odejmowania [8], Uży cie transformaty Hadamarda zaleca się w sytuacjach, gdy jest wymagane bardzo szybkie przetwarzanie danych. Kompresja energii uzyskana za pomocą tej trans formaty nie jest tak dobra jak w wypadku innych transformat, czego powodem jest m.in. fakt, że wiersze nie są uporządkowane zgodnie z rosnącą wartością sekwensu.
8.5. Dyskretna transformata Fouriera
8.5. Dyskretna transformata Fouriera W niniejszym i następnym podrozdziale przedstawimy tylko transformaty. Czytel nik zainteresowany uzasadnieniem postaci tych transformat znajdzie wyprowadze nie ich w rozdz. 12. DEFINICJA 8.14. Jednowymiarową dyskretną transformatą Fouriera (DFT) dla ciągu
liczb / (O), . . / ( A - 1) nazywamy ciąg F (0 ),..., F(N - 1), przy czym ,
AM
F(k) = - ~ £ / ( m ) e~i2vkmlN
dla k = 0,1,..„ A - l
Analogicznie odwrotną dyskretną transformatę Fouriera definiujemy za pomocą równania i
AM
f ( m ) = - £ = Y F ( k ) e i2’*m'N ■VA k =o
dla m = 0,1,.... A - l
□
DEFINICJA 8.15. Dwuwymiarową dyskretną transformatą Fouriera dla ciągu /(O, 0),
...,/ ( A - 1, A - 1) nazywamy ciągF(0, 0), ..., F ( A - 1, A - 1), przy czym ,
AM
N -l
F (k ,/) = — N
£ m=0
Y , f ( m ’n) e~i2n(km*ln)IN
d la
* ,/ = 0 ,1 ,..„ N
- l
n=0
natomiast dwuwymiarową odwrotną dyskretną transformatę Fouriera definiujemy jako .
N -l
Y
N -l
f(m,ri) = — Y F ( M ) e i2n(*m+4,)//v dla m ,n = 0 , l , . . „ A - l N ta t o Jądra obu transformacji dwuwymiarowych są separowalne i symetryczne; na przykład jądro 1 g -i2 n (k m + ln )/N __ ______ 1 g -U n k 1m /N ______ g - i litln/N ___ A Va Va czyli transformatę Fouriera, możemy wyrazić w postaci macierzowej [F] = — [ e-i2”km'N] [ / ] [ e-i2MN] A
dla k , l, m ,n =0, 1, . . . , A - l
Transformata F jest zazwyczaj funkcją zespoloną, chociaż funkcja / jest rze czywista, a zatem jeśli przekształceniu podlegają piksele, to A 2 składników obrazu zostaje przekształconych w 2A2 składników transformaty; tak więc każdej często153
■s Rozdział 8. Transformaty i kodowanie
tliwości przestrzennej obecnej w obrazie odpowiadają dwa składniki w transforma cie, mianowicie składnik rzeczywisty, będący amplitudą, i urojony, będący fazą. Okazuje się jednak, że nie jest konieczne przesyłanie wszystkich 2N2 składników transformaty, gdyż połowę transformaty możemy zrekonstruować z drugiej połowy, a zatem transformatę definiuje jednoznacznie N 2 składników. Ponadto szybka trans formata Fouriera (FFT) umożliwia wyznaczenie dyskretnej transformaty Fouriera za pomocą 0 ( N lg N) operacji mnożenia/dodawania w wypadku jednowymiarowym i 0 ( N 2 lg N) w wypadku dwuwymiarowym. Jednak metoda FFT wymaga, by ma cierz próbek była macierzą kwadratową rzędu 2" dla pewnej liczby naturalnej n. Ponieważ jądro dyskretnej transformacji Fouriera jest okresowe, DFT łączy się z obecnością zjawiska Gibbsa, tj. z powstaniem ostrych przejść na granicy między blokami próbek (dyskusję tego zjawiska podajemy w rozdz. 12). Powodem tego jest obcięcie nieskończonego szeregu Fouriera. Jednym ze sposobów ominięcia tego problemu jest użycie innej transformaty, a mianowicie transformaty kosinusowej.
8.6. Dyskretna transformata kosinusowa Dyskretną transformatę kosinusową wprowadzili Nasir Ahmed, T. Natarajan i Kamisetty R. Rao [2]. DEFINICJA 8.16. Dyskretną transformatą kosinusową (DCT) dla ciągu próbek /(O) ... f ( N - 1) nazywamy ciąg liczb F ( 0 ) ... F(N - 1), przy czym:
0 F(m ) =
X ,/( £ )c o s ^
+1')
dla m = l,2 ,..., N - l
F(m) nazywamy współczynnikami DCT. Odwrotną dyskretną transformatę kosinusową (IDCT) określamy jako F{k) = —
F(0) +
(m) cos- M ^
+-1} dla k = 0 , 1 , .. . , N -1 a
Definicja 8.17. Dwuwymiarową dyskretną transformatą kosinusową dla ciągu /(O, 0) ... f( N ~ l , N - 1 ) nazywamy ciąg F(0, 0) ... F(N - 1 , N - 1), przy czym
154
8.7. Dyskretna transformata falkówa N -\
N - 1
F{m,n) = ~ c (m)c {n)YJ ] T / ( M ) cos
vm{2k + l) 4N ^
nn(2l + l) 4N
dla m ,n = Q , l , . . . , N - l a odwrotną dyskretną transformatę kosinusową definiujemy jako N -1
f ( k , /) = — ^ ]C ( m ) ^ C ( n ) F(m, n)cos n=0
vm(2k +1) 4N
im{2l +1) 4N
dla k , 1 = 0,1,. .. ,N —1 przy czym —=• dla v = 0 C(v) = V2 1 w przeciwnym razie
(8.7)
Przekształcenie kosinusowe powoduje dobrą dekorelację danych wejściowych, co daje w wyniku efektywną kompresję energii; okazuje się, że współczynniki trans formaty kosinusowej o największej wariancji zajmują ok. 25% transformaty, to jest mniej więcej tyle samo co dla KLT.
i
$ * 3
8.7. Dyskretna transformata falkowa Definicja 8.18. Jednowymiarowa dyskretna transformata falkowa (DWT) dla ciągu próbek/(0) ... f( N - 1) to funkcja F(j, k) = J /( x ) vtj,k(x)dx gdzie funkcja falkowa Wi,k(x) = a0inV ( V -x - k t0) dla rzeczywistej i// zwanej falką podstawową i dla stałych an i r0 określających prze dział próbkowania. Funkcja/zostaje zrekonstruowana za pomocą wzoru f(x)
X F 0 ’>* ) Vi* W
Rozdział 8. Transformaty i kodowanie
8.8. Dodatek: Macierze Macierzą o wymiarze N x M nazywamy strukturę złożoną z N wierszy i M kolumn U li
A = [aij\ =
■• ■ fll M
«21
0. n
■■ ■
«2M
oni
ON2
■• •
<*NM
1
Dodawanie dwóch macierzy o wymiarze N x M polega na dodaniu elementów znajdujących się na tych samych pozycjach, na przykład a b c 1 i d e f s t u
a +p b +q c +r d + s e+ t f + u
Mnożenie skalaru przez macierz sprowadza się do pomnożenia przez ten skalar każdego elementu macierzy, na przykład a b c d
as bs cs ds
Iloczyn wektora o wymiarze 1 x M i wektora o wymiarze M x 1 określamy w następujący sposób:
[rn /i2 .. - / i m ]
Cli C21
= ru cn +ri2C2i + ...+TimCm\
Cm 1 Wynikiem pomnożenia macierzy/I o wymiarze N x M i macierzy B o wymiarze M x P jest macierz C o wymiarze N x P, której elementy cis są iloczynem wiersza i macierzy A i kolumny j macierzy B, czyli M
Cij :
Cik bkj
k=1 Na przykład ap + br + ct + dv aq + bs + cu + dw a b c d pr qp / j = ep + fr + gt + hv eq + fs + gu+hw e f g h t i u ip + jr + kt + lv iq + js + ku + lw i j k l V W 11
Macierzą diagonalną nazywamy macierz kwadratową o wymiarze N x N, której każdy element, poza elementem położonym na przekątnej, równa się zeru. Macie156
8.8. Dodatek: Macierze rzą jednostkową I nazywamy macierz diagonalną o wymiarze N x N, której wszyst kie elementy diagonalne są równe 1. Macierz kwadratowa A jest symetryczna, jeśli dla każdego i i atj = a;l. Oznacza to, że elementy macierzy symetrycznej, znajdują ce się po jednej stronie przekątnej są lustrzanym odbiciem elementów po drugiej stronie przekątnej. Dla macierzy A istnieje macierz odwrotna A"1, jeśli jest spełniony warunek A~lA = A A -> = / Macierzą transportowaną / l r jest macierz otrzymana przez zamianę w macierzy A wierszy i kolumn. Na przykład: a b c A = d e f g h i
a d g oraz A T = b e h c f i
Wyznacznik macierzy./! definiujemy następująco: det[n] = a det/1 = a , i ( - l ) ,+1 detA/a + a , 2 ( - l ) ‘+2 detA/l2 + ... + a ^ ( - l ) ‘+n d etM in
przy czym macierz Mtj, zwaną minorem, tworzymy przez usunięcie w macierzy A wiersza i i kolumny j. Na przykład: det
a b c d
a b c det d e f g h i
a b = a \ d \ - b \ c \ = ad -bc c d a b c d e d e f = a e f - b d f +c h i g h g i g h i
= a(ei ~f h) ~ b(di - f g ) + c(dh - eg) = aei + bfg + cdh - afh - bdi - ceg Wartościami własnymi (wartościami charakterystycznymi) macierzy kwadratowej A nazywamy pierwiastki wielomianu stopnia n względem zmiennej X, zwanego równaniem charakterystycznym macierzy A \A-AI\ = 0 Na przykład dla macierzy A =
det
1 2 1 0 -X 3 -4 0 1
'1 2] 3 -4
1-X 2 = (1 - X)(-4 3 -4-X 157
- 6 = /l2 + 3/ł -10
Rozdział 8. Transformaty i kodowanie
a zatem równaniem charakterystycznym jest równanie A2 + 3A - 10 = (A - 2) (A + 5), skąd obliczamy pierwiastki Ą = 2 i Ą = -5, będące wartościami własnymi macierzy A Wektorami własnymi (wektorami charakterystycznymi) macierzy kwadratowej A nazywamy wektory xh które dla wartości własnych A, macierzy A spełniają równanie Aixi = A x t czyli (A - A,/)*, = 0 Dla naszej macierzy A i dla pierwszej wartości własnej A, = 2 2 -6
(A-AJ)xi
dla której rozwiązaniem jest wektor własny
o o
x y
2 dla drugiej wartości własnej A%= -5 1;
mamy 6 2
(A-A.2l)x2 = 3 1
0 0
skąd wyznaczamy drugi wektor własny Długość wektora v definiujemy jako
Dwa wektory x, y nazywamy ortogonalnymi, jeśli ich iloczyn skalamy równa się zeru, tj. *iyi +x2y2 + ••• + xstyM =0 Wektor nazywamy znormalizowanym, jeśli jego długość równa się 1, tj. || v|| = 1. Wektor normalizujemy, dzieląc każdy z jego składników przez jego długość, tj. zastępując go wektorem v/||v||. Dwa ortogonalne i znormalizowane wektory x, y nazywamy ortonormalnymi. Jeśli kolumny macierzy kwadratowej są ortonormalne, to macierz nazywamy ortogonalną (a nie ortonormalną!). Tak więc dla macierzy ortogonalnej A mamy A TA = A A T= I oraz A T=A~' 158
Ćwiczenia
A oto inne zależności między macierzami: A l =IA =A (A B f = B TA T (.AB)~l = B ' A ~ x (A -y =(A y 1 det 1=1 det A B = det A det B de,lAT = d e tA Zbiór wektorów v , , v* nazywamy liniowo niezależnym, jeśli zależność c1v1+ ...+c*v* = 0 zachodzi tylko wówczas, gdy wszystkie współczynniki c,, ck są równe zeru. Jeśli każdy wektor v jest kombinacją liniową wektorów v, , . . vk, tj. jeśli v
=
jc , v
,
+ ... +xkvk
to wektory vu ...,v k nazywamy bazą (wektorami bazowymi) przestrzeni wektorowej, z której pochodzi v. *
Ćwiczenia 1. Pod jakim względem przekształcenie otrzymane za pomocą funkcji logaryt micznej (iys. 8.1) różni się od przekształcenia zgodnego z definicją 8.1? 2. Ile dokładnie operacji dodawania i mnożenia zostaje wykonanych przy obli czaniu równań (8.3) i (8.4)? Uogólnij otrzymany wynik na wypadek, gdy Y we wzo rze (8.3) jest macierzą kwadratową o wymiarze N x N, by potwierdzić, że użycie transformat separowalnych redukuje liczbę operacji z 0 ( N Ą) do 0 ( N 3). 3. Zdefiniuj jednowymiarową transformatę kosinusową i odwrotną DCT względem współczynników C(v) podanych we wzorze (8.7). 4. Wyznacz transformatę Hadamarda i transformatę kosinusową dla próbek [ 1 1 1 1]T, [2 13 2]T i [10 1 8 -5]7, a następnie wyznacz transformaty Hadamarda i kosinusową dla tych samych próbek zorganizowanych jako macierze 2 x 2 , 1 1 2 r ' 10 1' Czy są jakieś różnice między transformatami jedno8 -5 ' 1 1 3 2 159
Rozdział 8. Transformaty i kodowanie i dwuwymiarowymi dla tych samych próbek? Jeśli tak, to co jest tego powodem? Wyznacz również transformaty odwrotne.
Literatura 1. Ahmed N., Rao K. R.: Orthogonal transforms for digital signal processing. Springer, New York 1975. 2. Ahmed N., Natarajan T., Rao K. R.: Discrete cosine transform. IEEE Transactions on Com puters, 1974, C-23, s. 90-93; również w Rao 1990. 3. Gonzalez R. C , Woods R. R: Digital image processing. Prentice Hall, Upper Saddle River 2002. 4. Hadamard J.: Rćsolution d’une question relative aux determinants. Bulletin des Sciences Mathematiques et Astronomiques, ser. 2, 1893, 17, s. 240-246; również w: J. Hadamard: Oeuvres. Paris, CNRS 1968,1.1, s. 239-245. 5. HaliE. L.: Computer image processing and recognition. Academic Press, New York 1979. 6. Hannuth H. R: A generalized concept of frequency and some applications. IEEE Transactions on Information Theory, 1968, IT-14, s. 375-382. 7. Hotelling H.: Analysis of a complex of statistical yariables into principal components. Journal of Educational Psychology, 1933,24, s. 417-441,498-520. 8. Jain A. K.: Fundamentals of digital image processing. Prentice-Hall, Englewood Cliffs 1989. 9. Karhunen K.: Uberlineare Methoden in der Wahrscheindlichkeitsrechnung. [Kirjapaino], Helsinki 1947. 10. Kiełbasiński A., Schwetlick H.: Numeryczna algebra liniowa. WNT, Warszawa 1992. 11. Loeve M.: Functions aleatoires du seconde ordre. W: P. Lćvy: Processus stochastiques et mouvement brownien. Hermann, Paris 1965 [1948], s. 367-420. 12. Rao K. R. (red.): Discrete transforms and their applications. Krieger, Malabar 1990. 13. Rao K. R., Yip P.: Discrete cosine transform: algorithms, advantages, applications. Academic Press, Boston 1990. 14. Rosenfeld A., Kak A. G: Digital picture processing. Academic Press, New York 1982. 15. Skarbek W.: Metody reprezentacji obrazów cyfrowych. PU, Warszawa 1993. 16. Tadeusiewicz R., Korohoda P.: Komputerowa analiza i przetwarzanie obrazów, rozdz. 4, Wy dawnictwo Fundacji Postępu Telekomunikacji, Kraków 1997. 17. Walsh J. L.: A closed set of normal orthogonal functions. American Journal of Mathematics, 1923,55, s. 5-24.
Rozdział
Kodowanie podpasmowe
Kodowanie podpasmowe obejmuje algorytmy kodowania, które dzielą sygnał wej ściowy na kilka przedziałów częstotliwości, zwanych pasmami, i następnie kodują każde z tych pasm z osobna. Pasma są generowane za pomocą banku filtrów, przy czym każdy filtr przepuszcza określone pasmo częstotliwości (rys. 9.1). Bank fil trów używany przez nadawcę nazywamy bankiem analizującym. Sam podział na pasma nie powoduje kompresji danych, lecz ponieważ cechy statystyczne każdego z pasm są odmienne, każde z pasm jest kontrolowane z osobna, dzięki czemu ko dowanie jest odmienne i bardziej efektywne niż przy kodowaniu wszystkich pasm jednocześnie. Odbiorca używa filtru banków zwanego bankiem syntetyzującym w celu odtworzenia możliwie najlepiej pierwotnego sygnału. Wszystkie pasma mogą mieć tę samą szerokość Wk = W/M, przy czym W jest szerokością widma sygnału, czyli różnicą między największą i najmniejszą często tliwością, a M jest liczbą pasm. Mogą one mieć również różną szerokość, przy czym
Filtr 11
Filtr 12
<
<
Decymator 1
Koder 1
Decymator 2
Koder 2
J?
Dekoder 1
Interpolator 1
Filtr 21
Dekoder 2
Interpolator 2
Filtr 22
i
cm
Filtr IM
Decymator M
Koder M
Dekoder M — Interpolator M — Filtr 2M
Rys. 9.1. System kodowania podpasmowego 161
Rozdział 9. Kodowanie podpasmowe zazwyczaj pasma zawierające małe częstotliwości są węższe od pasm zawierających duże częstotliwości «Mfest to ważne w wypadku kodowania sygnałów fonicznych i wizyjnych, gdyż w tych sygnałach małe częstotliwości są ważniejsze dla zmysłu słuchu i wzroku. Ale nawet w tym wypadku możemy użyć pasm o tej samej szero kości, z tym że pasmom z małymi częstotliwościami przypisuje się więcej bitów, co umożliwia użycie większej liczby poziomów kwantyzacji, dzięki czemu sygnały z tych pasm są lepiej reprezentowane niż sygnały z innych pasm.
9.1. Filtry Pierwszy etap kodowania podpasmowego polega na podziale szerokiego pasma częstotliwości na oddzielne mniejsze pasma. Do tego celu używamy filtrów, które mogą być filtrami analogowymi lub cyfrowymi ([4], [6], [7]). W kontekście przetwa rzania cyfrowego sygnałów zazwyczaj używamy filtrów cyfrowych. Filtry cyfrowe są zwykle liniową kombinacją danych. Przykład 9.1. Filtr z ruchomą średnią jest filtrem używanym w celu eliminacji szumu z danych przez uśrednianie tych danych. Prosty przykład takiego filtru defi niujemy równaniem
które jest równaniem filtru uśredniającego poprzednią próbkę i próbkę bieżącą. Rozważmy pomiary temperatury dokonywane przez pewien czas. Szum jest wyeli minowany z pomiarów przez uśrednienie sąsiednich próbek, dzięki czemu ogólna tendencja w zmianie temperatury jest lepiej widoczna (rys. 9.2).
□
90 80-70
| (V2+V ,+x,) 5
10
Rys. 9.2. Eliminacja szumu z pomiarów temperatury 162
15
9.1. Filtry
Uogólnienie filtru z przykładu 9.1 może polegać, po pierwsze, na uśrednianiu dowolnej liczby przeszłych próbek N po drugie, na wzięciu pod uwagę nie tylko przeszłych próbek, ale i przyszłych. Jeśli dane pobieramy z pliku, to nie przedstawia to żadnego problemu. Po trzecie, uogólnienie może iść w kierunku pozwolenia na używanie dowolnej wagi dla każ dej próbki: yn
— h n - N + lX n - N + l
+ ... +
hnXn
+ ...
łtn + M X n+\ {
(9.1)
Równanie (9.1) może stanowić definicję filtru, aczkolwiek współczynniki /i, mogą być na początku nieznane. Bardzo często jesteśmy zainteresowani określeniem filtru przepuszczającego określone częstotliwości. Zadanie polega zatem na skon struowaniu filtru o współczynnikach powodujących, że odpowiedź filtru jest zgod na, przynajmniej w przybliżeniu, z podanymi początkowo wymaganiami. Nie jest to zadanie proste. Wymaganiem narzucanym na filtr może być żądanie, by filtr prze puszczał tylko sygnały o częstotliwości mniejszej od zadanej częstotliwości; ponie waż jednak tylko skończona liczba wyrazów tworzy sumę (9.1), odpowiedź rzeczy wistego filtru jest jedynie przybliżeniem tego wymagania. Sztuka konstruowania filtrów polega na znalezieniu najlepszego przybliżenia. Oznacza to rozwiązania kompromisowe. Wzór (9.1) jest zdefiniowany w dziedzinie czasu (oś zmiennej niezależnej re prezentuje czas), jednak specyfikacje filtru bardzo często są podawane w dziedzi nie częstotliwości, zatem konieczne jest przełożenie tych specyfikacji na dziedzinę czasu. Dokonujemy tego za pomocą funkcji transmitancji. Transmitancja H jest funkcją o okresie 2n, zatem analizę tej funkcji możemy ograniczyć do tego okresu, którym zazwyczaj jest przedział [ ~ 7 t , jc ] ; zwykle tylko nieujemna część [0, n\ tego przedziału jest brana pod uwagę. Przykład 9.2. Rozważmy filtr zdefiniowany jako y„ =ax„_! +bx„ +axn+l
(9.2)
H(2itf) = 2a cos 2jtf + b
(9.3)
dla którego transmitancja [4]
Chcemy skonstruować filtr, który przepuszcza sygnał o częstotliwości równej 1/8 i zupełnie blokuje sygnał o częstotliwości równej 3/8, czyli filtr narzucający dwa warunki dotyczące transmitancji:
163
R ozdział 9. Kodowanie podpasm owe
Z tych dwóch warunków i z równania (9.3) otrzymujemy: b
1 2
tak więc //( 2 tf ) = ^ c o s 2 7 t f + ! Wykres transmitancji na rys. 9.3a rzeczywiście pokazuje, że H równa się 1 dla częstotliwości / = 1/8 i równa się 0 dla f —3/8. Potrzebujemy teraz równania poka zującego wpływ filtru na sygnał, tj. równania określającego x„ odpowiadającego określonej częstotliwości. Dokonujemy tego za pomocą funkcji cos(27r/h), tak więc funkq'a cos 271-/1 generuje dane odpowiadające częstotliwości 1/8, a funkcji cos
2 7 1 -/1
8
możemy użyć do próbkowania danych odpowiadających częstotliwości 3/8. By zo baczyć, jak działa nasz filtr, użyjmy danych zdefiniowanych jako * " = co sh( -Kn\ H + cosb( 3im r tj. danych zdefiniowanych jako suma małej i dużej częstotliwości. Po podstawieniu nowych wartości zamiast a i b w równaniu (9.2) otrzymujemy równanie filtru yn
a/2 = ~
,
.1
( * n - l + X n+1 ) + 2
X’>
Wykresy funkcji x„ i yn pokazujemy na rys. 9.3b. Zauważmy, że wykres funkcji y„ jest identyczny z wykresem funkcji cos (—), tj. filtr rzeczywiście przepuszcza sy gnał o małej częstotliwości i blokuje sygnał o dużej częstotliwości. Należy przy tym podkreślić, że wykresy na rys. 9.3b, c są narysowane dla czasu ciągłego, by wyraź niej pokazać zmiany funkcji x„ i y„, aczkolwiek funkcje te są określone tylko dla czasu dyskretnego, tj. tylko w chwilach n e {0,1, 2,...}.
C)
Rys. 9.3. Wykres transmitancji H(2%f ) = -^-COS 2nf +j z przykładu 9.2 (a); zastosowanie filtru z przykładu 9.2 do sygnału x„ —COS (JjjL) + COS (~p-) (b); do sygnału x n = cos (— )+ cos (-x)+ c°s (^fŁ)+ cos (im) (c) 165
Rozdział 9. Kodowanie podpasmowe
Właściwości filtru zdefiniowanego równaniem (9.2) zostały wyznaczone ze względu na częstotli^WSci 1/8 i 3/8. Co się stanie, jeśli sygnał wejściowy będzie za wierać również inne częstotliwości? Wykres transmitancji H wskazuje, że małe częstotliwości zostaną zachowane, choć w nieco zniekształconej postaci, a duże częstotliwości zostaną w ogromnej mierze wyeliminowane. Na przykład, dla czę stotliwości 1/16, H(2n-fó) = 1,153, czyli częstotliwość ta zostanie zwiększona o ok. 15%. Dla dużej częstotliwości 1/3, H(2n \)= 0,146, czyli pewne ślady tej czę stotliwości, w granicach 15%, pozostaną na wyjściu filtru. By to zobaczyć, rozważ my sygnał zdefiniowany jako + cos (tin)
xn
Jak widzimy na rys. 9.3c, sygnał wyjściowy filtru zdefiniowanego równaniem (9.2) jest bardzo bliski wykresowi zawartych w sygnale wejściowym dwóch małych czę stotliwości
□
9.2. Podpróbkowanie (decymacja) i nadpróbkowanie W kodowaniu podpasmowym każde pasmo zawiera tylko część częstotliwości obecnych we wszystkich próbkach x„. Częstotliwość próbkowania była zgodna z twierdzeniem o próbkowaniu w celu uniknięcia utożsamiania sygnałów. Po po dziale sygnału na pasma nie ma jednak potrzeby używania tej samej częstotliwości próbkowania dla poszczególnych pasm, gdyż zakres częstotliwości należących do danego pasma jest ograniczony. Jeżeli używamy tylko dwóch równej wielkości pasm, to każde z nich zawiera połowę wszystkich częstotliwości, a zatem częstotli wość próbkowania użytą do próbkowania oryginalnych próbek możemy zreduko wać dla każdego z tych pasm o połowę. Dla M pasm dla każdego pasma trzeba zazwyczaj 1IM pierwotnie używanej częstotliwości próbkowania. Jeżeli nie zredu kujemy częstotliwości próbkowania, to dla M pasm trzeba by przetworzyć w sumie NM próbek, przy czym N jest liczbą próbek pobranych przed podziałem sygnału na pasma. Aby mieć tylko N próbek po utworzeniu pasm, w każdym paśmie należy zachować tylko co M-tą próbkę. Ten proces zachowania tylko co M-tej próbki na zywamy podpróbkowaniem (decymacją). 166
9.3. Alokacja bitów
Odbiorca próbek należących do poszczególnych pasm musi móc odtworzyć pierwotne próbki. Odtworzenie to polega na dodaniu do siebie próbek należących do poszczególnych pasm. W wyniku tej operacji otrzymalibyśmy tylko HM pier wotnych próbek, a zatem operację tę musi poprzedzić dodanie do każdego z pasm usuniętych uprzednio próbek tak, by każde pasmo zawierało ich N\ proces ten nazywamy nadpróbkowaniem, po któiym następuje interpolacja. Przykład tych operaq'i pokazujemy na rys. 9.4.
a) Podpnóbkowanie
Interpolacja
Rys. 9.4. Przykład podpróbkowania i interpolacji
9.3. Alokacja bitów Problem alokacji bitów polega na przypisaniu każdemu pasmu pewnej liczby bitów, mając do dyspozycji tylko z góry zadaną liczbę bitów; alokacja ta ma po wodować minimalizację błędu kwantyzacji dla wszystkich pasm. Załóżmy, że istnieje M nieprzecinających się pasm o takiej samej szerokości; w ten sposób całkowity błąd kwantyzacji jest równy sumie błędów wprowadzanych przez kwantyzatory dla poszczególnych pasm. Jeśli Rk jest liczbą bitów alokowanych dla pa sma k w celu kodowania zawartych w nim próbek, a R jest średnią liczbą bitów na próbkę wejściową (9.4) 167
Rozdział 9. Kodowanie podpasmowe to problem alokacji bitów polega na minimalizacji
fc=i przy czym a} jest wariancją błędu odtworzenia próbek*!, ...,xN,
n k=1 a yk jest dokonaną przez odbiorcę rekonstrukcją próbki xk. Efektywność kwantyzatora możemy mierzyć za pomocą wariancji błędu kwantyzacji (zob. ćwiczenie 3) (j2ą = s 2 - ™ o x2 dla pewnego współczynnika efektywności kwantyzatora e, zależnego od rozkładu prawdopodobieństwa, i dla wariancji sygnału wejściowego erj. Równocześnie o'!
n k=1
a zatem przy założeniu, że transmisja odbywa się bez utraty informacji, wariancja błędu rekonstrukcji równa się wariancji błędu kwantyzacji i całkowity błąd rekon strukcji fc=1
fc=l
Przyjmujemy, że współczynnik s jest taki sam dla wszystkich pasm. Odwołując się do reguły nieoznaczonego czynnika Lagrange’a [5], sprowadzamy problem do roz wiązania równania ( d = 0 £ 3Rk V k=1 skąd otrzymujemy Rk = - Ig (2M so lt ln 2) - i lg 2 Z tego równania i z równania (9.4) znajdujemy A. ( M A,=
Y\2Mealk ln2
2 -2 R
V i a stąd i z równania (9.5) znajdujemy optymalną alokację bitów jako 168
(9.5)
9.3. Alokacja bitów
Przykład 9.3. Dla dwóch pasm dla M = 2 otrzymujemy: ^ te (c^.
)
/?2 =i? + —lg (cr^/cr^ ) = / ? - - Ig (axn/ a m ) Jest oczywiste, że jeśli wariancja próbek w pierwszym paśmie jest większa niż wa riancja w drugim paśmie, tj. cr^ > a ^ , czyli rozsiew próbek w pierwszym paśmie jest większy niż w drugim, to pierwszemu pasmu zostanie przypisane więcej bitów niż drugiemu (rys. 9.5).
□
R 1,5 1,5 1,5 1,5
20 20 20 20
&xn 10 5 2,5 1,25
r2
2 2,5 1,5 1,75
Rys. 9.5. Przykłady wartości parametrowi?, i
1 0,5 0 -0,5 dla dwóch pasm
Przykład ten wskazuje, że równanie (9.6) umożliwia przypisanie ułamkowej i ujem nej liczby bitów, do czego nie powinniśmy dopuszczać. W wypadku ujemnej liczby bitów nie przypisujemy żadnego bitu danemu pasmu; w powyższym przykładzie dla czwartego wypadku R2 = 0. Lecz przypisanie zera powoduje, że liczba bitów przypisa na innym pasmom powinna być odpowiednio zmodyfikowana, aby średnia liczba bitów R dla wszystkich pasm pozostała bez zmian; dla naszego przykładu Rr = 1,5. Aby zagwarantować przypisanie tylko całkowitej liczby bitów każdemu pasmu, możemy użyć prostego algorytmu przydzielającego 1 bit najbardziej potrzebujące mu pasmu [3], W każdej iteracji algorytm ten znajduje pasmo charakteryzujące się największym błędem, tj. największą wariancją, i przypisuje mu 1 bit z bieżącej puli R bitów. Algorytm kontynuuje wykonywanie do chwili, aż pula bitów będzie pusta, jak widać w poniższym pseudokodzie: CałkowitoliczbowaAlokacjaBitówO while R > 0 znajdź pasmo z największą wariancją a *; zwiększ o 1 liczbę bitów przydzielonych pasmu k\ zmniejsz R o i ; Algorytm nie jest optymalny, lecz daje zadowalające wyniki. 169
Rozdział 9. Kodowanie podpasmowe *
Ćwiczenia 1. Zastosuj filtr z ruchomą średnią zdefiniowany jako yn = -|(x „_2+*„-i +xn) do danych na rys. 9.2. Jaki jest wykres wyjścia filtru w porównaniu z rys. 9.2? Jak zmieni się ten wykres, jeśli filtr będzie uśredniać N próbek? 2. Dla filtru w przykładzie 9.2 narysuj wykres transmitancji, kiedy warunkami brzegowymi są: a) H(2 k0) = 1 i H(2n{) = 0 b) H ( 2n$) = l i H(2 n f) = 0 c) / / ( 2 n |) = l i H(2n}) = 0 3. Pokaż, że dla równomiernego kwantyzatora wariancja wejściowa a \ = ^yp~, a więc D = = 2 '2S a 2. Użyj równości /? = Tlg M l (uzasadnij tę możliwość). 4. Za pomocą równania (9.6) znajdźR u ..., RA, jeśli?? = 4, er^ =1 oraz: a) a x2r\ = 2ct2 = 8cr^ =16o 1 xri xr$ /
xtą
b) a 2 —2a XT2 2 = 4
ą
c)' a x2r \ =4cr2 1 =64
xtą
5. Sposób alokacji bitów zaprezentowany w p. 9.3 może prowadzić do przydzie lenia ułamkowej liczby bitów. Oczywiste jest, że każdą próbkę (kodowaną z osobna) możesz zakodować całkowitoliczbową liczbą bitów. Jak możesz poradzić sobie z pro blemem ułamkowej liczby bitów?
Literatura 1. Crochiere R. E.: Sub-band coding. Bell System Technical Journal, 1981,60, s. 1633-1653. 2. Crochiere R. E., Webber S. A., Flanagan J. L.: Digital coding of speech in subbands. IEEE International Conference on Acoustics, Speech, and System Processing, 1976, s. 233-236. 3. Gersho A , Gray R. M.: Vector quantization and signal compression. Kluwer, Boston 1992. 4. Hamming R. W.: Digitalfilters. Prentice-Hall, Englewood Cliffs 1989. 5. Leja F.: Rachunek różniczkowy i całkowy. PWN, Warszawa 1973, s. 190. 6. Mitra S. K., Kaiser J. F. (red.): Handbookfor digital signal processing. J. Wiley, New York 1993. 7. Oppenheim A. V., Schafer R. W.: Cyfrowe przetwarzanie sygnałów. WKiŁ, Warszawa 1979. 8. Vaidyanathan P. P.: Multirate systems and filter banks. Prentice-Hall, Englewood Cliffs 1993. 9. Woods J. W. (red.): Subband image coding. Kluwer, Boston 1991. 10. Woods J. W., O’Neil] S.: Subband coding of images. Transactions on Acoustics, Speech, and System Processing, 1986, ASSP-34, s. 1278-1288.
Rozdział
Kompresja obrazów statycznych: JPEG I I f1i f.
5: W 1986 roku powstał zespół ekspertów, zwany Joint Photographic Experts Group (JPEG), w celu standaryzacji algorytmów do przetwarzania obrazów monochroma tycznych i kolorowych. JPEG jest łącznym przedsięwzięciem organizacji ISO (In ternational Organization for Standardization) i CCITT (Comite Consultatif Interna tional de Telephonie et Telegraphie). Standard zaproponowany przez ten komitet został opublikowany w 1991 r. Standard odnosi się do obrazów statycznych, a za tem polega na usunięciu nadmiarowej informacji drogą kodowania wewnątrzobrazowego, tj. dokonanego w obrębie jednego obrazu. Standard JPEG jest zazwyczaj stosowany do kompresji zdjęć fotograficznych i obrazów graficznych - w celu prze chowania ich lub transmisji przez Internet, a także obrazów medycznych, obrazów satelitarnych, map pogodowych, danych wywiadowczych itp. JPEG definiuje dwie klasy procedur kodowania i dekodowania, a mianowicie procedury stratne i bezstratne. Kodowanie stTatne opiera się na dyskretnej trans formacie kosinusowej (DCT), umożliwiającej bardzo dużą kompresję obrazów, 20-krotną, a nawet większą, kosztem pewnego zniekształcenia zrekonstruowanego obrazu. Najprostszym procesem tego typu jest sekwencyjny proces bazowy. W procesach bezstratnych odtworzony obraz powinien być dokładnie taki sam jak obraz poddany kompresji i żadna informacja nie powinna ulegać utracie w trakcie kompresji oraz dekompresji. Jeśli taka utrata informacji ma miejsce, to jest ona powodowana innymi czynnikami (np. szumami na linii transmisyjnej). W systemie JPEG procesy tego rodzaju nie opierają się na DCT, lecz na pewnej postaci metody DPCM. Współczynnik kompresji jest tu o wiele mniejszy niż dla procesów stratnych i jest równy stosunkowi 2:1. JPEG definiuje cztery tryby operacyjne i ich warianty: 1. Tryb sekwencyjny oparty na DCT; a) system bazowy; b) rozszerzony system sekwencyjny. r\
171
Rozdział 10. Kompresja obrazów statycznych: JPEG
2. Tryb progresywny oparty na DCT; a) selekcja spektnfeia; b) kolejne przybliżenia. 3. Bezstratny tryb sekwencyjny. 4. Tryb hierarchiczny. Pierwsze dwa tryby są stratne, ostatni może być przedłużeniem trybu stratnego opartego na DCT lub trybu bezstratnego. W niniejszym rozdziale przedstawimy szczegóły systemu bazowego, a następnie krótko wspomnimy pozostałe tryby ope racyjne systemu JPEG.
10.1. System bazowy Na rysunku 10.1 pokazujemy zasadnicze etapy kodowania opartego na DCT. Obraz jest tablicą pikseli i z powodu ogromnej liczby pikseli w jednym obrazie nie wszystkie piksele są jednocześnie poddane przetworzeniu. Najpierw dzielimy obraz na bloki pikseli o rozmiarze 8 x 8 i dopiero te bloki podlegają kompresji, jeden po drugim, za pomocą systemu JPEG. Transformacja kosinusowa przekształca każdy blok w ciąg 64 liczb, zwanych współczynnikami DCT. Liczby te następnie zostają skwantowane za pomocą tabeli kwantyzacji złożonej również z 64 liczb. Następnym krokiem jest kodowanie, które jest albo kodowaniem Huffmana dokonanym przy użyciu tabeli Huffmana, albo kodowaniem arytmetycznym, dokonanym za pomocą tabeli kodo wania; tabele te umożliwiają odpowiednie modelowanie kodowanych obrazów. Na rysunku 10.1 pokazujemy również kroki procesu dekodowania, który jest zasadniczo odwróceniem procesu kodowania.
Zrekonstruowany obraz
Rys. 10.1. Fazy kodowania i dekodowania w metodzie JPEG
172
10.1. System bazowy
10.1.1. Format obrazu źródłowego Obraz źródłowy jest zbiorem najwyżej 255 komponentów, przy czym każdy kom ponent jest dwuwymiarową tablicą próbek (iys. 10.2). Obrazy monochromatyczne składają się z jednego tylko komponentu. W wypadku obrazów kolorowych może my użyć jednego z przynajmniej trzech zbiorów komponentów: trzy komponenty reprezentujące kolory czerwony, zielony i niebieski (reprezentacja RGB) albo cztery komponenty reprezentujące kolory turkusowy, karmazynowy, żółty i czarny (reprezentacja CMYK), albo wreszcie trzy komponenty reprezentujące jasność, barwę i nasycenie (reprezentacja luminancyjno-chrominancyjna). Komponenty obrazu możemy uważać za warstwy, na które dzielimy obraz, by uprościć proces kodowania, a które po zdekodowaniu i złożeniu dają pierwotny obraz. C„
i&StQWK
Cj--------
---------------- X ----------------- ► Rys. 10.2. Obraz z kilkoma komponentami
Każdy komponent i jest tablicą próbek (pikseli) o rozmiarze*, x_yr Największa wartość *, określa wymiar X całego obrazu i, analogicznie, największa wartość y, określa wymiar Y tego obrazu. Każdy komponent charakteryzuje się określonym współczynnikiem próbko wania poziomego Ht oraz współczynnikiem próbkowania pionowego Vr Współ czynniki te określają liczbę próbek w komponencie i względem innych komponen tów obrazu. Jedynymi dopuszczalnymi wartościami tych współczynników są liczby 1, 2, 3 i 4. Wszystkie współczynniki próbkowania oraz wartości X i Y zostają zako173
Rozdział 10. Kompresja obrazów statycznych: JPEG dowane, dzięki czemu odbiorca może odtworzyć wymiary x, i y, dla każdego kom ponentu na mocy zatośłtości Xi = X x
Hi H„
oraz y, =
V, V r max
przy czym i są największymi poziomymi i pionowymi współczynnikami próbkowania dla wszystkich komponentów obrazu. Teoretycznie każdy komponent jest próbkowany oddzielnie i częstotliwość próbkowania może być różna dla różnych komponentów. W systemie JPEG każdy komponent składa się z bloków próbek o rozmiarze 8 x 8 . Każdy z tych bloków jest przekształcony za pomocą transformacji kosinusowej w ciąg 64 współczynników DCT. Próbką wejściową jest liczba całkowita z przedziału [0, 255], reprezentująca odcień szarości. JPEG przesuwa jednak każdą z tych liczb względem zera, tak więc przedział [0, 255] zmienia się w przedział [-128, +127]. (Generalnie, przedział [0, 2P - 1] liczb P-bitowych zmienia się w przedział [-2M , +2P~1 - 1], przy czym liczba P zależy od trybu operowania). Przesunięcie to redukuje wymagania doty czące precyzji przy obliczaniu DCT.
10.1.2. Kodowanie oparte na DCT Po przygotowaniu bloków próbek każdy blok przekształcamy w blok 64 współczyn ników DCT za pomocą równania F(m ,n) = ^ C ( m ) C ( n ) ^ ^ / ( M ) 4 t i to
+ 16
+ 16
dla m ,n = 0,1,....7
Odpowiadający temu równaniu wzór określający odwrotną transformatę ma następującą postać /(fc .0 = - Ż C(w ) I CW F(m,w)g g g — > Kn(2l + 1l dla M = 0 ,l ,...,7 ą m=0 1=0 10 10 przy czym C(v) = - ^ dla v = 0 i C(v) = 1 dla pozostałych v. Efekty zaokrąglania 64 współczynników DCT zależą od systemu, a zatem za leżnie od systemu jakość zrekonstruowanego obrazu może być nieco różna. Współczynnik umieszczony w lewym górnym rogu danego bloku nazywamy współczynnikiem DC. Współczynnik ten jest równy 8-krotnej średniej ze wszyst kich próbek zawartych w danym bloku (ponieważ współczynnik DC = F (0,0) = = s S l-o
/(k , /), trzeba go podzielić przez 8, by otrzymać prawdziwą śred
nią). Współczynnik ten jest również największy spośród współczynników DCT
10.1. System bazowy
danego bloku. Wartość tego współczynnika równa się zeru w obu wymiarach i stąd jego nazwa DC (direct current - prąd stały). Pozostałe 63 wpółczynniki nazywamy współczynnikami AC (alternate current - prąd zmienny). Wartość współczynników l AC jest niezerowa w przynajmniej jednym wymiarze. Wartość większości tych ■współczynników jest zazwyczaj mała. Ich nazwy biorą się z ich zastosowania do ; analizy prądu elektrycznego. Ponieważ wartości f(k, l) < 2F~1, największa z wartości współczynnika DC = i =F(0,0) = g-^^_0 y j „f(k, l) < j (64 ■2r ~x) - 2P*2, widzimy zatem, że po uwzględ■ nieniu znaku są potrzebne P + 3 bity, by móc reprezentować dowolną wartość ; współczynnika DCT. Stąd po zakończeniu transformacji kosinusowej otrzymujemy macierz DCT o wymiarze 8 x 8 , która wymaga więcej pamięci niż pierwotna ma cierz próbek: w nowej macierzy każdy element wymaga użycia 11 bitów, podczas gdy każda próbka wymagała użycia tylko 8 bitów. Jasne jest więc, że trzeba przed' sięwziąć jakieś działanie w celu obniżenia wymagań dotyczących pamięci. Tym \ działaniem jest kwantyzacja elementów transformaty.
10.1.3. Kwantyzacja I
Kwantyzacja w systemie JPEG polega najpierw na przeskalowaniu każdego współ czynnika DCT przez podzielenie go przez określony współczynnik kwantyzaqi, pochodzący z tabeli kwantyzacji używanej przez kwantyzator, a następnie na za okrągleniu wyniku do najbliższej liczby całkowitej, zgodnie ze wzorem C(m, ri) = round
F(m,n) , Q{m,n),
(10.1)
czyli liczba C(m, n) jest normalizacją za pomocą kroku kwantyzacji Q(m, n) po chodzącego z tabeli kwantyzacji. W ten sposób odrzucamy pewną informację, osiąg nąwszy tym samym pewną kompresję obrazu, lecz informaqa ta nie jest istotna dla właściwej rekonstrukq’i zakodowanego obrazu. Dekwantyzaqa na etapie dekodo wania obrazu jest natomiast procesem polegającym na przeskalowaniu współczyn ników DCT tak, by odtworzone liczby były jak najlepszym przybliżeniem współ czynników DCT przed kwantyzacją. Dekwantyzator jest zdefiniowany równaniem D(k, l) = C(k, l) Q(k, l) umożliwiającym usunięcie normalizacji. Kwantyzator używa jednej z czterech tabel kwantyzacji, jednakże JPEG nie podaje żadnej tabeli jako obowiązującej, czyli każda implementacja musi zdefinio wać taką tabelę, biorąc pod uwagę parametry lokalnych urządzeń i specyfikę prze------------------------------------------------ 17s
Rozdział 10. Kompresja obrazów statycznych: JPEG
twarzanego obrazu. Typowymi przykładami tabel kwantyzacji, podanymi przez komitet JPEG, są tafc«ie przedstawione na rys. 10.3 i 10.4. Tabele te są wynikiem eksperymentów wykonanych z różnymi obrazami i różnymi urządzeniami. A;
0
1
2
3
4
5
6
7
0 1 2
16 12 14 14 18 24 49 72
11 12 13
10 14 16 22 37 55 78 95
16 19 24
24 26 40 51 68 81 103 112
40 58 57 87 109 104 121
51 60 69 80 103 113 120 103
61 55 56 62 77 92 101 99
3 4 5 6 7
17 22 35 64 92
29 56 64 87 98
100
Rys. 10.3. Tabela kwantyzacji dla luminancji i\j 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
17 18 24 47 99 99 99 99
18 21 26 66 99 99 99 99
24 26 56 99 99 99 99 99
47 66 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99
Rys. 10.4. Tabela kwantyzacji dla chrominancji
Zauważmy, że współczynniki kwantyzacji mają większą wartość w miarę od dalania się od górnego lewego rogu tabeli. W ten sposób współczynniki odpo wiadające małym częstotliwościom są skwantowane bardziej dokładnie niż pozo stałe współczynniki. W ten sposób większość współczynników odpowiadających dużym częstotliwościom zostaje usunięta przez przyrównanie ich do zera. Rów nocześnie, jak widzimy z równania (10.1), jeśli współczynniki Q(m, n) przed kwantyzacją wymagały użycia P + 3 bitów, to po kwantyzacji liczba bitów zmniej sza się do P + 3 - lg (Q(m, n)), a zatem w wypadku tabeli z rys. 10.3, gdzie naj mniejszy współczynnik kwantyzacji = 10, wystarczy P + 3 - Lig lOj = P bitów do zakodowania współczynnika DCT. W celu zakodowania obrazów monochromatycznych używamy tylko tabeli luminancji. Okazuje się jednak, że nawet dla obrazów kolorowych większa część informaq'i jest skoncentrowana w składnikach luminancji. 176
10.1. System bazowy DC
AC«
WWW/ I /W W W 1 ’/W W W 1/WWW1 W W /W I/WWWI W W /W
AC70
Rys. 10.5. Uporządkowanie zygzakowate współczynników DCT
Po zakończeniu kwantyzacji otrzymane współczynniki umieszczamy w jedno wymiarowej tablicy ZZ w porządku zygzakowatym (rys. 10.5), co jest porządkiem opisanym przez A. G. Teschera w 1978 r. w jego raporcie badawczym. Ten sposób uporządkowania współczynników został wybrany ze względu na to, że umożliwia umieszczenie współczynników odpowiadających małym częstotliwościom przed pozostałymi współczynnikami. Dzięki temu elementy tablicy są ustawione mniej więcej w porządku malejącym, co jest ważne przy ich kodowaniu.
10.1.4. Kodowanie skwantowanych współczynników Zygzakowaty ciąg skwantowanych współczynników w tablicy ZZ zawiera długie pod ciągi zer i w wypadku tych grup, lub serii, możemy zastosować kodowanie długości serii polegające na generowaniu słów kodowych dla serii takich samych symboli. W systemie bazowym JPEG stosujemy metodę Huffmana do kodowania wszystkich współczynników, używając dwóch zestawów tabel, jeden do kodowania współczynników DC i drugi do kodowania pozostałych współczynników. Oznacza to, że dla obrazów z trzema lub czterema komponentami należy użyć tego samego zestawu tabel Huffmana co dla obrazów z dwoma komponentami. 10.1.4.1.
K odowanie współczynników DC
Współczynniki DC kodujemy za pomocą równania diff = ZZ[0] -pred przy czym predyktor pred jest skwantowaną wartością współczynnika zakodowane go właśnie bloku próbek, należących do tego samego komponentu co blok bieżący. Wartością początkową zmiennej pred jest zero, nadaną jej przy kodowaniu pierwrn Fi
R o z d z i a ł 1 0 . K o m p r e s ja o b r a z ó w s ta ty c z n y c h : J P E G
szego bloku danego komponentu. Różnica diffj jest zazwyczaj mała, co umożliwia efektywne stosowan»*netody DPCM do kodowania współczynników DC. Różnica diff jest następnie zakodowana za pomocą tabeli kodów Huffmana, podanej na rys. 10.6. Tabela ta zawiera wszystkie możliwe wartości zmiennej diff w systemie bazowym (w systemie rozszerzonym tabela ta składa się z 16 wierszy). Najpierw znajdujemy 4-bitowy indeks SSSS za pomocą wzoru
ssss=rig( i ^ i +1)1 przy czym SSSS odpowiada jednej z dwunastu kategorii wartości różnicy diff. Na stępnie używamy SSSS jako indeksu umożliwiającego odszukanie w tabeli Huffma na słowa kodu odpowiadającego różnicy diff, przy czym słowo kodu zależy od bieżąco używanej tabeli Huffmana. JPEG nie zawiera takiej tabeli; raport JPEG podaje przykład tego rodzaju tabel, jednej dla luminancji, jednej dla chrominanq'i. Tabele te skonstruowano na podstawie dużej liczby obrazów i okazuje się, że są wystarczające w wielu zastosowaniach. Tabelę Huffmana dla luminanq'i różnic współczynników DC pokazujemy na rys. 10.7. Słowo kodu Huffmana składa się z co najmniej dwóch i z najwyżej 16 bitów; żadne ze słów kodu nie składa się tylko z jedynek. Otóż słowa kodu odpowiadają kategoriom wartości diff, a nie poszczególnym wartościom. Dlatego też, wyjąwszy wypadek gdy SSSS = 0, słowo kodu zawiera również SSSS dodatkowych bitów, wskazujących na znak i wielkość różnicy diff zgodnie z następującą regułą:
SSSS
d i f f lub
współczynnik AC
Dodatkowe bity
0
0
-
1
-1 ,1
0,1
2
-3 , -2 , 2, 3
00,01,10,11
3
-7 , . .. ,- 4 , 4...... 7
000, ...,011,100, ...,111
4
-15, ...,- 8 ,8 ,..., 15
0000...... 0111,1000...... 1111
5
-31, ..,-1 6 ,1 6 , ...,31
00000,..., 01111,10000...... 11111
6
-63, ..,-3 2 ,3 2 ...... 63
000000, ...,011111,100000...... 111111
7
-127, ..,-6 4 , 64, ...,127
0000000, ...,0111111,1000000,.... 1111111
8
-255, .. ,-128,128...... 255
00000000, .... 01111111,10000000,..., 11111111
9
-5 1 1 ,.. .,-256,256, ...,511
000000000, .... 011111111,100000000...... 111111111
10
-1023, .. ,-512, 512,.... 1023
0000000000, ...,0111111111, 1000000000,..., 1111111111
11
-2047,.... -1024, 1024, ...,2047
00000000000, ...,01111111111,10000000000, .... 11111111111
k
-2* + 1 ,.. .,- 2 ‘-', 2*“', .. ., 2* -1
Rys. 10.6. Tabela słów kodu Huffmana dla różnic współczynników DC i dla współczynników AC 178
10.1. System bazowy
if diff > O dołącz do słowa kodu SSSS najmniej znaczących bitów tworzących diff; else dołącz do słowa kodu SSSS najmniej znaczących bitów wartości (diff - 1), przy czym (diff - 1) podano w notacji zapisu uzupełnień do dwóch. Tabela na rys. 10.6 zawiera dodatkowe bity odpowiadające każdej wartości zmiennej diff. Dla wartości dodatnich dodatkowymi bitami są reprezentacje binar ne wartości diff, dla wartości ujemnych dodatkowymi bitami są reprezentacje bi narne w zapisie uzupełnień do dwóch liczby (diff - 1). SSSS
Słowo kodu Huffmana
SSSS
0
00 010
6 7
1110 11110
011
8 9
111110 1111110
1 2
Słowo kodu Huffmana
3 4
100 101
10
11111110
5
110
11
111111110
Rys. 10.7. Tabela Huffmana dla luminancji różnic współczynników DC
Zauważmy, że dodatkowe bity reprezentujące wartości dodatnie diff zaczynają się od 1, a reprezentujące wartości ujemne - od 0. Z tego powodu nie ma potrzeby dołączania dodatkowego bitu wskazującego na znak liczby, gdyż znak ten jest częś cią reprezentacji wartości diff. Przykład 10.1. Jeśli diff = 12, SSSS = 4, to słowo kodu Huffmana = 101, a do datkowe bity = 1100, zatem słowo kodu = 1011100. Jeśli diff = -12, to SSSS i słowo kodu Huffmana pozostaną takie same, lecz dodatkowymi bitami są cztery najmniej znaczące bity zapisu uzupełnień do dwóch liczby (diff - 1) = -13, tj. liczby 11111110011, a zatem słowo kodu = 1010011.
□
Zauważmy, że taki podział wartości diff na kategorie umożliwia osiągnięcie dużej kompresji, gdyż małym wartościom diff - które też najczęściej występują odpowiadają krótkie słowa kodu, o wiele krótsze niż 11 bitów używanych do kodo wania współczynników AC i wartości diff. Na przykład liczbom z piątej kategorii, tj. takim, dla których SSSS = 4, odpowiadają 7-bitowe słowa kodu: 3 bity na słowo kodu Huffmana i 4 bity umożliwiające jednoznaczną identyfikację wartości diff. 10.1.4.2. Kodowanie współczynników AC Po zakodowaniu współczynników DC należących do danego bloku następuje ko dowanie pozostałych, uporządkowanych zygzakowato współczynników AC, ZZ[1], ..., ZZ[63], Ponieważ ciąg ten zawiera zazwyczaj długie ciągi zer, ciągi te są kodo179
Rozdział 10. Kompresja obrazów statycznych: JPEG
'i wane za pomocą metody kodowania długości ciągu. Kodowanie to tworzy bajt j RRRRSSSS, przy cgfAt RRRR jest długością ciągu zer, a SSSS jest kategorią niezerowych współczynników AC. W celu określenia kategorii AC możemy także użyć tabeli z rys. 10.6, po pominięciu jej pierwszego wiersza i po dołączeniu wierszy od 12 do 15. Tabela kategorii współczynników AC nie zawiera hasła dla kategorii zerowej, gdyż jeśli SSSS = 0, to SSSS oznacza specjalny symbol. Pierwszym specjal nym symbolem jest symbol ZRL (zero run length), używany wówczas, gdy ciąg zer składa się z więcej niż 15 zer; w tym wypadku bajt RRRRSSSS równa się binarnej liczbie 11110000, która oznacza obecność 16 zer. Drugim specjalnym symbolem jest symbol EOB {end-of-block), który oznacza, że pozostałymi elementami danego bloku są zera; symbolu EOB nie włącza się do strumienia słów kodu, gdy ostatni współczynnik ZZ[63] jest różny od zera; w tym wypadku bajt RRRRSSSS równa się binarnej liczbie 00000000. RRRR/SSSS
Słowo kodu Huffmana
0/0 (EOB) 0/1 0/2
1010 00 01
0/3
100
0/4
1011
0/5
11010
2/3
1111110111
4/4
1111111110010111
15/0 (ZRL)
11111111001
15/1 15/2
1111111111110101
15/10
1111111111111101
1111111111110110
Rys. 10.8. Tabela słów kodu Huffmana dla każdej kombinacji długości ciągu i kategorii współczynnika AC
Chociaż RRRRSSSS jest słowem kodu kodowania długości ciągu na oznacze nie danego ciągu zer, to nie jest to słowo kodu, które będzie przesyłane. W JPEG używamy tabeli Huffmana zawierającej słowa kodu dla każdej kombinacji długości ciągu od 0 do 15 i każdej kategorii współczynników AC, czyli słowa kodu dla każ180
10.1. System bazowy
dej pary RRRR/SSSS (długość ciągu/znak i wartość współczynnika AC). Ponieważ system bazowy używa 10 kategorii liczbowych dla współczynników AC, tabela za wiera 16 • 10 + 2 = 162 wiersze, przy czym dwa wiersze odpowiadają specjalnym symbolom EOB i ZRL. Fragmenty tej tabeli pokazujemy na rys. 10.8. Jak poprzednio, JPEG umożliwia jednoznaczne kodowanie również współ czynników AC, czego dokonuje się w ten sam sposób co w wypadku różnic między współczynnikami DC. Mianowicie do słowa kodu Huffmana odpowiadającego danemu bajtowi RRRRSSSS dołączamy dodatkowe bity kodujące znak i wartość niezerowego współczynnika AC występującego po ciągu zer. Jeśli współczynnik ten jest liczbą dodatnią, to dodatkowe bity zawierają SSSS najmniej znaczących bitów tego współczynnika, a gdy współczynnik ten jest ujemny, to dodatkowe bity są utworzone z SSSS najmniej znaczących bitów uzupełnienia do dwóch liczby (współczynnik AC -1 ).
Przykład 10.2. Rozważmy następujący ciąg 63 współczynników AC zawartych w tablicy ZZ: ZZ[1 ...63] = 5 2 0 0 - 4 0 0 0 0 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 . . . 0 0 Podzielmy ten ciąg na podciągi i przypiszmy im słowa kodu Huffmana i dodatkowe bity, posługując się tabelami na rys. 10.6 i 10.8:
z z [i... n 5 2 0 0 -4 0 0 0 0 15 0000000000000000 -1
RRRR/SSSS
Słowo kodu Huffmana
o
O
o
O
100 01 1111110111 1111111110010111 11111111001 00 1010
0/3 0/2 2/3 4/4 15/0 (ZRL) 0/1 0/0 (EOB)
Dodatkowe bity 101 10 011 1111 0 -
W rezultacie, współczynniki ZZ[1 ... 63] zostają zakodowane jako następujący ciąg bitów: 1001010110111111011101111111111100101111111111111110010001010
który składa się z 61 bitów, jedenastokrotnie mniej niż 11 - 63 = 693 bitów potrzeb nych na zakodowanie wszystkich 63 nieskwantowanych współczynników AC bez kompresji i ośmiokrotnie mniej niż 8 • 63 = 504 bitów potrzebnych na zakodowanie 63 skwantowanych współczynników AC.
□
181
1
Rozdział 10. Kompresja obrazów statycznych: JPEG
10.1.5. Obrazy z wieloma komponentami Jak wspomnieliśmy w p. 10.1.1, obraz może się składać z kilku komponentów, któ re możemy skompresować i przesyłać każdy z osobna. W wypadku obrazów kolo rowych oznacza to, że obraz zostaje w zupełności odtworzony po przesłaniu kom ponentów kodujących podstawowe kolory. Nierzadko zachodzi konieczność prze słania komponentów w sposób równoległy, tzn. odpowiadające sobie części wszyst kich komponentów jednocześnie. Wymaga to odpowiedniego przeplecenia kom ponentów w celu dokonania kompresji i transmisji. Podajmy najpierw wstępne definicje. Jednostką danych jest jedna tylko próbka w wypadku kodowania bezstratnego oraz blok próbek 8 x 8 w kodowaniu opartym na DCT. Najmniejszą zakodowaną jednostką (minimum coded unit, MCU) jest najmniejsza grupa danych poddanych kodowaniu. Jeśli przeplecenie nie zachodzi, to MCU jest jedną jednostką danych. W wypadku użycia przeplecenia MCU skła da się z przeplecionych jednostek danych pochodzących z każdego komponentu. Odpowiadające każdemu z komponentów poziome i pionowe współczynniki prób kowania dzielą te komponenty na H, ■V, regionów jednostek danych, zawierających dane w porządku od lewej do prawej z góry do dołu. Po włączeniu jednostek da nych z odpowiadających sobie regionów do jednego MCU następuje włączenie jednostek danych z następnych odpowiadających sobie regionów do kolejnego MCU. Rozmiar jednego MCU jest ograniczony £ / / , !/; <10 i
Ograniczenie to oznacza, że nie wszystkie kombinacje komponentów i współ czynników próbkowania są dopuszczalne. Przykład 10.3. Rozważmy obraz złożony z czterech komponentów C„ ..., C4 (rys. 10.9), z następującymi poziomymi i pionowymi współczynnikami próbkowania:
H, = 2 V, = 2
Hmm = 2 H2 = 2 V2= l
V Y max = 2**
H2 = 2 U3 = l
h 4=
1 U4= 2
określającymi rozmiar MCU = 2- 2 + 2 1 + 2- l + l - 2 = 10 oraz MCU, =C,(0,0), C,(0,1), C,(1,0), C ,(l,l) C2(0,0), C2(0,1), C3(0,0), C3(0,1), C4(0,0), C4(1,0) MCU2 = C,(0,2), C,(0,3), C,(l,2), C,(l,3), C2(0,2), C2(0,3), C3(0,2), C3(0,3), C4(0,1),
c 4(i,i)
182
10.2. Progresywny tryb operacji oparty na D C T
^4
O
1
2
3
0 1 2
3 4 5 6
7
Rys. 10.9. Przetwarzanie przeplecionych komponentów
10.1.6. Rozszerzony system sekwencyjny Rozszerzony system sekwencyjny jest wzmocnieniem systemu bazowego, umożli wiającym większą precyzję i lepszą kompresję niż system bazowy. W systemie tym możemy użyć dynamicznego kodowania arytmetycznego zamiast kodowania Huffmana. Jeśli jednak stosujemy kodowanie Huffmana, to odbywa się to za po mocą czterech tabel współczynników DC i czterech tabel współczynników AC. Piksele-próbki w blokach 8 x 8 mają rozmiar 12 bitów, a skwantowane współczyn niki DCT - rozmiar 15 bitów.
10.2. Progresywny tryb operacji oparty na DCT W trybie progresywnym obraz zostaje zakodowany w trakcie kilku przebiegów, z których każdy poprawia jakość przesyłanego obrazu. Tak więc obraz staje się co raz dokładniejszy, poczynając od obrazu blokowego. To progresywne ulepszanie jako183
Rozdział 10. Kompresja obrazów statycznych: JPEG ści obrazu może się dokonywać na jeden z dwóch sposobów. Podobnie jak w sys temie bazowym, r&mtież tutaj współczynniki DC są kodowane niezależnie od współczynników AC.
10.2.1. Selekcja spektralna Metodą selekcji spektralnej kodujemy określony podciąg współczynników (pasmo częstotliwości) pochodzących z ciągu zygzakowatego. Najpierw kodujemy tylko współczynniki DC, następnie kolejno coraz więcej współczynników AC, co polep sza jakość przesyłanego obrazu.
10.2.2. Kolejne przybliżenia W trybie kolejnych przybliżeń zamiast kodowania grup współczynników DCT są kodowane wszystkie współczynniki jednocześnie, jednak w kolejnych przebie gach zmienia się stopień precyzji kodowania. Po przesłaniu współczynników DC w pierwszym przebiegu, właściwe kodowanie metodą kolejnych przybliżeń rozpo czyna się od bitów najbardziej znaczących, a każdy następny przebieg poprawia jakość o 1 bit do chwili, gdy są przesłane wszystkie bity. Liczba najbardziej zna czących bitów przesłanych w drugim przebiegu zależy od tzw. parametru transformaq'i punktowej A l określającego, o ile bitów należy przesunąć w prawo okreś lony współczynnik; operacja ta dla liczb całkowitych jest równoważna podzieleniu współczynnika przez 2Al. Porównanie działania obu metod możemy znaleźć na rys. 10.10. Obraz jest ciągiem bloków 8 x 8 przekształconych w tablice zawierające współczynniki w po rządku zygzakowatym. Jak widzimy na tym rysunku, za pomocą metody selekcji spektralnej przesyłamy obraz warstwami poziomymi, natomiast za pomocą me tody kolejnych przybliżeń dokonujemy tego warstwami pionowymi (wyjąwszy pierwszy przebieg).
10.3. Tryb hierarchiczny Kodowanie w trybie hierarchicznym odbywa się na rosnących poziomach rozdziel czości, przy czym współczynnik rozdziału podwaja się w kierunku poziomym, pio nowym lub w obu kierunkach, przechodząc z jednego poziomu na drugi. Ten spo sób operacji, zwany kodowaniem piramidowym, jest dogodny dla przesyłania obra zów o dużej rozdzielczości do urządzeń wymagających małej rozdzielczości, np. do monitora, którego rozdzielczość jest na ogół znacznie mniejsza niż rozdzielczość drukarki laserowej. Najpierw dokonujemy podpróbkowania obrazu przez odrzucenie co drugiej próbki w obu kierunkach, po czym próbki te kodujemy i przesyłamy za pomocą 184
10.3. Tryb hierarchiczny
Przebieg 1
Przebieg 2
Przebieg 3
Rys. 10.10. Metoda selekcji spektralnej i metoda kolejnego przybliżenia w trybie progresywnym
dowolnego trybu operowania JPEG. Dekoder dokonuje nadpróbkowania otrzy manego obrazu i interpolacji próbek za pomocą równania a +b x - -----2
przy czym a i b są sąsiadującymi z sobą próbkami - czy to w kierunku pionowym, czy poziomym - obrazu o małej rozdzielczości, a x jest wartością interpolowaną (rys. 10.11). Najbardziej na lewo położona kolumna rekonstruowanego obrazu odpowiada najbardziej na lewo położonej kolumnie obrazu o małej rozdzielczości. Prawa kolumna i dolny wiersz zostają skopiowane, by była możliwa interpolacja prawej kolumny i dolnego wiersza. 185
Rozdział 10. Kompresja obrazów statycznych: JPEG
10.4. Sekwencyjny, bezstratny tryb operowania W celu zagwarantowania, że obraz odtworzony przez odbiorcę będzie taki sam jak zakodowany przez nadawcę, JPEG umożliwia użycie bezstratnego trybu operowa nia, niezależnego od DCT. Tryb bezstratny opiera się na prostym kodowaniu predykcyjnym, polegającym na przewidywaniu wartości danej próbki za pomocą war tości niektórych jej sąsiadów. Na rysunku 10.12 pokazujemy pozycję próbki, w sto sunku do której dokonujemy predykcji, i pozycje jej sąsiadów, a na rys. 10.13 wzory predykcji wartości x. Selekcji zerowej używamy tylko w trybie hierarchicz nym. Selekcje 1, 2 i 3 są predyktorami jednowymiarowymi, a pozostałe predyktorami dwuwymiarowymi. Selekcji 1 używamy do pierwszego wiersza próbek, a se lekcji 2 do pierwszej próbki w danym wierszu. Na początku pierwszego wiersza używamy wartości predykcyjnej 2^', przy czym P jest liczbą bitów na próbkę wej ściową (wartością tą jest 2F~Pt~', jeśli Pt jest niezerową wartością współczynnika skalowania). Wybrany dwuwym iarowy predyktor używamy do wszystkich pozosta łych próbek. Wartość obliczoną za pomocą danego predyktora odejmujemy na stępnie od danej wartości próbki, a otrzymana różnica (podzielona modulo 216) zostaje zakodowana przy użyciu metody Huffmana lub kodowania arytmetycznego. Dekoder natomiast dodaje tę różnicę do predykcji.
c b X
a
Rys. 10.12. Pozycja rekonstruowanej próbki* w stosunku do zrekonstruowanych już próbek a, b i c
Literatura Predykcja
0 1 2 3 4 5 6 7
x -a x=b x=c x= a +b - c x = a + (b - c)fl x = b + ( a - c)/2
2s + W II H
Selekcja
Rys. 10.13. Wzory rekonstrukcji próbkix
10.5. JPEG 2000 JPEG 2000 jest nowym standardem kodowania obrazów, wykorzystującym dys kretną transformatę falkową DWT zamiast transformaty kosinusowej DCT. Nowy standard koduje różne części obrazu z różnym stopniem dokładności, pozwala na przejście od stratnej (obraz) do bezstratnej (tekst) kompresji, ponieważ tekst czę sto zostaje rozmazany przy przetwarzaniu obrazu, umożliwia dostęp do dowolnej części obrazu i generalnie ma lepszy współczynnik kompresji.
Literatura 1. Burnett I. S., Pereira F., Van de Walie R., Koenen R. (red.): The MPEG-21 book. Wiley, Chichester 2006. 2. Kou W.: Digital image compression: algorithms and standards. Kluwer, Boston 1995. 3. Pennebaker W. B., Mitchell J. L.: JPEG: still image data compression standard. Van Nostrand Reinhold, New York 1993. 4. Taubman D., Marcellin M. (red.): JPEG2000: image compression fundamentals, standards and practice. Springer, New York 2002. 5. Wallace G. K.: The JPEG still picture compression standard. Communications of the ACM, 1991,34, s. 31^t4. 6. Zhang M.: The JPEG and image data compression algorithms. Technical Report, University of California at Santa Cruz 1990, UCSC-CRL-90-68.
Rozdział
Kompresja obrazów: MPEG
Sekwencja wideo jest ciągiem obrazów wykonanych blisko siebie w czasie, a zatem w większości wypadków różnica między sąsiednimi obrazami jest niewielka. Kom presja obrazów wykorzystuje fakt tego podobieństwa sąsiednich obrazów, koncen trując się na różnicach między nimi.
11.1. MPEG-1 Praca nad systemem MPEG {Moving Picture Experts Group) rozpoczęła się w 1988 r. i zakończyła w 1990 r. raportem definiującym standard zwany dziś MPEG-1. Ce lem tego systemu jest kompresja sygnałów fonicznych przesyłanych z szybkością do 192 Kb/s i sygnałów wizyjnych przesyłanych z szybkością do 1,5 Mb/s. System ten jest przeznaczony w szczególności do kompresji obrazów, by móc je przechowywać na takich mediach, jak dyski kompaktowe. By uzmysłowić sobie ogrom zadania zważmy, że kolorowy obraz złożony z 480 wierszy i 640 kolumn (rozdzielczość ekranu typu VGA) wymaga użycia 8 bitów na piksel, czyli 480 x 640 x 8 ~ 2,5 Mb na jeden obraz; pokazywanie 24 obrazów na sekundę wymaga przetworzenia nie mal 60 Mb/s. A jest to tylko obraz. Jeżeli dodamy do tego dźwięk, to przy zwykle używanej częstotliwości próbkowania, równej 44,1 kHz, dźwięk stereo, tj. dwa ka nały dźwiękowe, wymaga ok. 1,4 Mb/s. Tak więc, stosując MPEG, zamierzamy osiągnąć współczynnik kompresji umożliwiający przechowywanie skompresowane go dźwięku i obrazu na przestrzeni dysku koniecznej do przechowania nieskompresowanego dźwięku. W ten sposób dysku kompaktowego stosowanego do zapisu sygnałów dźwiękowych możemy użyć do zapisu dźwięku i obrazu.
11.1.1. Poziomy w systemie MPEG-1 MPEG jest systemem hierarchicznym złożonym z kilku poziomów. Najwyższym poziomem jest poziom systemowy, który łączy w jeden strumień bitów skompreso188
11.1. MPEG-1 wany dźwięk i obraz. Strumieniem bitów jest ciąg partii (packs) będących zbiorami pakietów (packets) zawierających skompresowaną informację o dźwięku i obrazie. Drugim poziomem jest ciąg obrazów, który jest zbiorem grup obrazów. Poziom grup obrazów jest zbiorem złożonym z co najmniej jednego obrazu. Następnym poziomem jest poziom obrazów, przy czym każdy obraz jest ciągiem warstw. Każ da warstwa jest ciągiem makrobloków w porządku przebiegu rastra, a wszyst kie makrobloki wchodzące w skład danej warstwy mają ten sam stopień szarości (rys. 11.1). Makroblok składa się z czterech 8 x 8 bloków współczynników DCT reprezentujących luminancję i dwóch bloków próbek reprezentujących chrominancję obrazu, jeden z nich kodujący barwę, a drugi nasycenie (rys. 11.2). Zauważmy, że jest 2-krotnie więcej próbek luminancji niż chrominancji. Powodem tego jest fakt, że oko nie rozróżnia tak dobrze szybkich zmian przestrzennych chrominancji jak zmian luminancji, a zatem liczba próbek chrominancji może być mniejsza niż liczba próbek luminancji. 7/ 7 7
7 7 7 7 7 7 7 7 7/7/
7
7 7 7 // 7 7 7 7/ 7 7 // 7 T l 7/ 7 7 7 T 7^ 7 7 7 77 7777 7 7 7 77 7 7
77 7/ 7/
7 / / 7 77/ 7 77 7 7 77> 77 7 7 7 7 7 // 7 77 7 777 7 7777 7 7 /Ą 77 7 7 7 7 77 7 7 7 7 7 7 7 77
7 7 7 7 7
7 7 7 7 7 7^ 7 7 7 7 7 7 7 7 7 7 7
7/
7
7/
77
7 7 /7 7/
77777 77 77 7 7 7 7 7
7/
7 7 7 7 7
/
7
7 7 7 7 7 7 / /
Rys. 11.1. Obraz złożony z pięciu warstw. Każdy kwadrat oznacza makroblok 189
R ozdział 11. Kompresja obrazów: M PEG
Rys. 11.2. Części makrobloku; punkty oznaczają pozycje niektórych pikseli
Ciąg obrazów jest zbiorem grup obrazów. Każda grupa obrazów jest ciągiem trzech typów obrazów. Dana grupa obrazów zaczyna się od obrazu należącego do typu I-obrazów (intra-coded pictures), które są kodowane niezależnie od obrazów pozostałych typów i w których używa się tylko korelacji elementów wewnątrz obra zu. Obrazy te są podstawowymi punktami odniesienia dla obrazów pozostałych typów. Umożliwiają one oglądanie ciągów obrazów, począwszy od dowolnie wy branego obrazu lub bardzo blisko tego obrazu, dzięki temu, że każda grupa obra zów może być dekodowana niezależnie. Współczynnik kompresji dla tych obrazów jest dość mały. Współczynnik ten dla całego ciągu obrazów możemy poprawić dzięki użyciu innych typów obrazów. Następnym typem obrazów są rzadko używane D-obrazy, zawierające tylko in formację dotyczącą współczynników DC. Trzecim typem są P-obrazy {predictive-coded pictures) kodowane na podstawie predykcji z poprzedzających je I-obrazów i P-obrazów. I wreszcie czwartym typem są B-obrazy (bidirectionally predictive-coded pictures), których kodowanie może być oparte na poprzedzających je i następujących po nich I-obrazach i P-obrazach (rys. 11.3). Odwołanie się do poprzedzających i następujących obrazów umożliwia osiągnięcie największego współczynnika kom presji w wypadku B-obrazów. Jeżeli następuje zmiana sceny lub pewien obszar jest zakryty, to kodowanie predykcyjne na niewiele się przydaje, jednak użycie przyszłego obrazu jako punktu odniesienia umożliwia kompresję i w takich wypadkach. Ponie waż B-obrazy polegają na informacji zawartej w następujących po nich obrazach, nie używamy ich w predykcji. Dlatego też mogą się one charakteryzować dużym stop niem zniekształcenia, gdyż zniekształcenie to nie przeniesie się na inne obrazy.
Rys. 11.3. Zależności między obrazami tworzącymi grupę obrazów w kodowaniu między obrazami 190
11.1. MPEG-1 Możliwe jest, że predykcję w P- i B-obrazach ograniczamy do pewnych tylko części tych obrazów lub też nie używamy w ogóle predykcji. W tym ostatnim wy padku kodowanie ogranicza się do wykorzystania informacji w obrębie jednego obrazu. Przy kodowaniu B- i P-obrazów wykorzystujemy różnice między kodowanym obrazem a obrazem stanowiącym punkt odniesienia. Kodowanie I-obrazów i wspom nianych właśnie różnic odbywa się podobnie jak w systemie JPEG. Najpierw więc bloki próbek zostają przekształcone w DCT, a następnie współczynniki DCT zosta ją skwantowane za pomocą dwóch danych z góry tabel kwantyzacji, jednej do ko dowania wewnątrz obrazów, a jednej do kodowania między obrazami. Jedna z różnic między kwantyzacją w systemach JPEG i MPEG polega na tym, że ma cierz kwantyzacji w systemie MPEG możemy przeskalować o pewien czynnik, któ rego wartość jest przesłana wraz ze skompresowanym obrazem. Współczynniki DCT I-obrazu są niemal doskonale zdekorelowane, lecz nadal istnieje pewna korelacja między współczynnikami DCT sąsiednich I-obrazów, w szczególności między współczynnikami DC. Dlatego też te ostatnie czynniki są kodowane osobno za pomocą wzoru diff= DC -pred przy czym predyktor pred jest predykcją wartości DC właśnie kodowanego bloku. Wartości diffsą kodowane w taki sam sposób jak w systemie JPEG. Najpierw ko dujemy kategorię wielkości (jedną z liczb z przedziału [0, 8]) za pomocą odpo wiedniej tabeli, po czym następuje słowo kodu odpowiadające znakowi i wartości zmiennej diff. Kodowanie współczynników AC I-obrazów odbywa się tak jak w systemie JPEG. Najpierw współczynniki te ustawiamy w porządku zygzakowatym, a następ nie kodujemy, czyniąc użytek z obecności ciągów zer dla współczynników odpo wiadających dużym częstotliwościom. W tym celu używamy tabeli słów kodu dla współczynników AC, złożonej ze 114 wierszy i zawierającej wysoce prawdopodob ne kombinacje długości ciągów zer i wartości współczynników AC. Na przykład podciąg liczb całkowitych 0 0 0 0 1 w ciągu zygzakowatym zostaje zakodowany jako ciąg bitów 001100, a podciąg 0 0 0 0 0 0 0 - 1 jako 0001001. W P- i B-obrazach ciągi zer makrobloków kodujemy za pomocą ich adresów. Niezerowe makrobloki używają 6-bitowych wzorców kodowania określających, który z sześciu bloków tworzących dany makroblok składa się z samych zer, a na stępnie temu makroblokowi zostaje przypisane słowo kodu wzięte z tabeli wzorców kodowania. Na przykład wzorzec 010110 wskazuje, że drugi, czwarty i piąty blok składają się z samych zer; fakt ten jest zakodowany w słowie kodu 10001. W wy padku bloków niezerowych ciągi zer są kodowane za pomocą tabeli używanej do kodowania współczynników AC w I-obrazach.
191
Rozdział 11. Kompresja obrazów: MPEG
11.1.2. Kompensacja ruchu i estymacja ruchu Zasadniczym elemeniem większości metod kompresji ciągu obrazów jest kompen sacja ruchu. W metodzie tej zakładamy, że obszary bieżącego obrazu są transla cjami obszarów innego obrazu. Choć są możliwe i inne sposoby przekształcania obrazu - na przykład rotaq’a lub przeskalowanie - dla uproszczenia przetwarzania obrazów w metodzie MPEG używamy tylko translacji. Otóż kompresji makrobloku m x dokonujemy przez znalezienie w obrazie stanowiącym punkt odniesienia ma krobloku m 2, który jest najlepszym przybliżeniem makrobloku m u a następnie przez transmisję pozycji makrobloku m 2w stosunku do pozycji makrobloku m,. Na przykład makroblok z B-obrazu na rys. 11.4 zostaje zakodowany względem ma krobloku m 2z poprzedniego obrazu i makrobloku m3 z następnego obrazu. Ponie waż rozmiar makrobloku nie zmienia się, pozyq'a makrobloku jest wyznaczona jednoznacznie pozycją jego górnego lewego rogu. Jeśli współrzędnymi makrobloku mj jest para liczb (x,y), a współrzędnymi makrobloku m 2 liczby (xm2,y m2) to wektor przesunięcia równa się v = pozycja(m2) - pozycja{mj) = = (przesunięcie poziome, przesunięcie pionowe) = (xm2 - x ,y m2 —y) W tej konwencji dodatnie przesunięcie poziome oznacza, że makroblok w obra zie będącym punktem odniesienia znajduje się na prawo od kodowanego makroblo ku, a dodatnie przesunięcie pionowe oznacza, że makroblok referencyjny znajduje się poniżej kodowanego bloku. Konwencja ta odpowiada normalnemu przebiegowi przez obraz: przebieg ten odbywa się z góry do dołu od lewej do prawej. Przykład na rys. 11.4 ilustruje interesujący aspekt B-obrazów, a mianowicie przewidywanie do przodu i do tyłu, w odniesieniu do tego samego makrobloku. W tym wypadku m i [t][j] = ("*2[i + dxm2][j + dym2 ] + m3[i + dxm3][_/ + dym3])/2 przy czym dx i dy są przesunięciami poziomym i pionowym. W ten sposób bieżący piksel otrzymujemy w wyniku interpolaq’i za pomocą przeszłego i przyszłego pikse la, co umożliwia zmniejszenie szumu i rozwiązanie problemu aktualnie zakrytych obszarów, które będą znane w następnym obrazie, lecz których nie możemy prze widzieć na podstawie poprzedniego obrazu. W wypadku P-obrazów używamy tylko przyszłych obrazów jako punktów od niesienia. Jeśli bieżącym obrazem na rys. 11.4 był P-obraz, a nie B-obraz, to tylko odniesienie do przyszłego obrazu byłoby wzięte pod uwagę i w celu obliczenia war tości pikseli w makrobloku m u byłoby użyte równanie m \ [/][;'] = m 2[i + dxm2 ][j +dym2]
(
0, 0)
( 0,0)
'\(\n2.ym2) m2
Rys. 11.4. Przesunięcia ruchu dla B-obrazu
Wciąż jednak nie wiemy, jak określić przesunięcie makrobloków. Proces wy znaczenia wektorów przesunięcia nazywamy estymacją ruchu. Istnieje wiele metod wyznaczenia tych wektorów, które możemy podzielić na dwie kategorie: metody rekurencyjne na poziomie pikseli i metody dopasowywania bloków [5]. Metod rekurencyjnych na poziomie pikseli używamy wówczas, gdy wektory przesunięcia zmieniają się od jednego piksela do drugiego. Jeżeli zmiana ta zachodzi od jedne go obszaru do drugiego, to właściwsze jest użycie metod dopasowywania bloków. W systemie MPEG nie podaje się jako obowiązującej określonej metody es tymacji ruchu, lecz jest bardzo prawdopodobne, że w większości wypadków będą stosowane metody dopasowywania bloków. Szczególny problem polega tu na okre śleniu rozmiaru obszaru stowarzyszonego z jednym wektorem przesunięcia; w sys temie MPEG obszarem tym jest makroblok. Istnieje problem doboru kryterium podobieństwa. Za pomocą metody dopasowywania bloków próbujemy znaleźć dla określonego makrobloku m x makroblok m2, który jest do niego najbardziej podob ny. Istnieje jednak wiele sposobów pomiaru podobieństwa, na przykład błąd śred193
Rozdział 11. Kompresja obrazów: MPEG niokwadratowy albo błąd średniozupełny (mean absolute distortion, mad), zdefi niowany jako •++ j
mad(x, y ) = — -
15
15
i-0
j =0
V V | m x[x + i][y + ;'] - m 2[x + i + dxm2][y + j + dyml
] \
czyli w celu wyznaczenia błędu mad dla dwóch makrobloków m, i m 2, trzeba wyko nać 256 operacji odejmowania + 256 operacji wyznaczenia wartości bezwzględnej + 225 operacji dodawania + 1 operację dzielenia = 738 operaq'i, nie biorąc pod uwagę operacji dodawania przy obliczaniu indeksów. Dla określonego makrobloku m x trzeba sprawdzić wszystkie makrobloki z określonego obszaru. Obszar ten zo staje określony odległością w pionie i poziomie od pozycji (x, y) makrobloku m h a w systemie MPEG odległość ta może się równać 64. Oznacza to, że za pomocą miary mad porównujemy z makroblokiem m, każdy makroblok m2, którego pozy cja równa się (x + dxm2, y + dym2), przy czym -64 < dxm2, dym2 < +63 (rys. 11.5). Ob szar ten zawiera (2 x 64)2 = 16 384 pikseli, a każdy z nich jest pozycją makrobloku, z którym mamy porównać makroblok m,, a zatem liczba operacji potrzebna do wyznaczenia w tym obszarze najbliższego makrobloku m 2 w stosunku do makro bloku m, wynosi 738 x 16384 « 12000000. Mówimy teraz tylko o jednym makro bloku jednego obrazu, a jest możliwe, że jeden obraz zawiera aż 396 makrobloków i w 1 s możemy pokazać do 30 obrazów (dla ścisłości trzeba stwierdzić, że w syste mie MPEG-1: największa liczba bloków x liczba obrazów na sekundę < 396 x 25). Liczba operacji jest więc ogromna. W celu zredukowania tej liczby używamy wielu szybkich algorytmów do estymacji ruchu.
11.2. MPEG-2 Dotychczasowa dyskusja ograniczała się do pierwszego systemu MPEG, zwanego MPEG-1. Możliwości tego systemu są w pewnej mierze ograniczone. System MPEG-2, zapoczątkowany w 1991 r., jest drugą generaq'ą systemów MPEG do kompresji obrazów; został on stworzony jako ogólny standard koncentrujący się nie tylko na zapisie na dysku sygnałów fonicznych i wizyjnych, lecz również obej mujący transmisję telewizyjną, transmisję satelitarną obrazów, wideokonferencje, rozproszone bazy danych itd. MPEG-2 może wykonywać operacje, które są poza zasięgiem systemu MPEG-1. W MPEG-1 pozycja piksela się nie zmienia, jak to widzimy na rys. 11.2; w systemie MPEG-2 względne położenie pikseli może się zmieniać. MPEG-2 umożliwia również przetwarzanie większych obrazów z większą częstotliwością niż MPEG-1. Co ważniejsze, MPEG-2 umożliwia przetwarzanie obrazów z przeplotem, czego system MPEG-1 nie umożliwiał. Otóż wyświetlenie obrazu na ekranie telewizyjnym polega na tym, że wyrzutnia elektronowa emituje wiązkę elektronów, która pobudza do świecenia punkty na warstwie luminoforu, 194
11.2. MPEG-2
(x.y) m.
[ x -6 4 ,y + 6 3 ) ~
< x - 6 4 ,y - 6 4 )
1 1
1 1 ( x + 6 3 , y - 6 4 ) f ..............
3 .y + 6 3 ) *
1
1
1
1
Rys. 11.5. Obszar na znalezienie najlepszego dopasowania dla makrobloku m{, obszar zaznaczony linią kropkowaną oznacza pozycję makrobloków, z którymi jest porównywany makroblok m„ a linia przerywana oznacza położenie tych makrobloków
znajdującej się na przodzie wewnątrz kineskopu; wiązka ta przebiega ekran z góry do dołu od lewej do prawej, 525 wierszy 30 razy na sekundę (kineskop kolorowy używa trzech wyrzutni elektronowych). W celu uniknięcia migotania obraz telewi zyjny zostaje utworzony jako zestawienie dwóch przeplecionych części lub pól, przy czym każde pole jest emitowane w jednej sześćdziesiątej sekundy. Najpierw jest generowane pierwsze pole, a następnie drugie, którego linie są przeplecione z li niami pierwszego pola (rys. 11.6).
Rys. 11.6. Obraz telewizyjny pokazany jako złożenie dwóch przeplecionych pól, jedno zaznaczone linią ciągłą, drugie linią przerywaną 195
Rozdział 11. Kompresja obrazów: MPEG System MPEG-2 próbowano stworzyć jako standard ogólniejszy w większym stopniu niż MPEG-łj4fck by w różnych zastosowaniach wykorzystać odpowiadające im aspekty systemu MPEG-2. W tym celu dla systemu MPEG-2 zdefiniowano zakres swych zastosowań ze względu na profile i poziomy. W systemie MPEG-2 zdefiniowano pięć profili: prosty, główny, skalowalny ze względu na współczynnik sygnału do szumu, skalowalny przestrzennie i główny; dwa pierwsze profile są nieskalowalne. Profile skalowalne to takie, które nie ogra niczają się do jednego stopnia rozdzielczości i jakości. W tych profilach obrazy mogą być w całości zdekodowane na podstawie części strumienia bitów. Prócz profili w systemie MPEG-2 zdefiniowano cztery poziomy ograniczające zakres pewnych parametrów używanych w trakcie kompresji; poziomami tymi są poziom niski, główny, wysoki typu 1440 i wysoki. Tabela na rys. 11.7 podaje przy kłady ograniczeń górnych niektórych parametrów w poszczególnych poziomach. Poziom
Próbki/Wiersz
Wysoki Wysoki typu 1440 Główny Niski
1920 1440 720 352
Wiersze/Rama 1152 1152 576 288
Ramy/s 60 60 30 30
Próbki luminancji/s 62 668 800 47 001 600 10 368 000 3 041 280
Mb/s 80 60 15 4
Rys. 11.7. Przykłady górnych ograniczeń niektórych parametrów dla czterech poziomów systemu MPEG-2
Każdy dekoder MPEG-2 należy do określonej klasy lub punktu zgodności okre ślającego połączenie poziomu i profilu. Pięć profili i cztery poziomy teoretycznie umożliwiają utworzenie dwudziestu klas zgodności, jednakże system MPEG-2 za wiera tylko 11 z nich.
11.3. MPEG-4 i MPEG-7 Chociaż MPEG-2 jest ogromnym udoskonaleniem systemu MPEG-1, nie jest to jeszcze system najlepszy. Istniał również projekt MPEG-3, lecz wkrótce okazało się, że cele stawiane MPEG-3 zostały osiągnięte w obrębie MPEG-2, toteż projektu MPEG-3 zaniechano. Nowym projektem jest natomiast MPEG-4, w którym wpro wadzono nowe metody kodowania, nową architekturę i nowe modele operacyjne. Wersja 2 tego projektu stała się standardem w 2000 r. W MPEG-4 sceny audiowizu alne wchodzą w skład obiektów medialnych. Na najniższym poziomie hierarchii są obiekty podstawowe, takie jak tekst, obrazy (np. nieruchome tło), obiekty typu wideo (poruszający się pojazd) i obiekty foniczne (dźwięk jadącego pojazdu). Takie pod stawowe obiekty medialne mogą być dwu- i trójwymiarowe, naturalne i syntetyczne, a system MPEG-4 standaryzuje je i przez to samo standaryzuje sposób opisania scen wizyjnofonicznych. Obiekt medialny jest kodowany niezależnie od otoczenia i tła za 196
Literatura pomocą elementów deskiyptywnych, które umożliwiają operowanie na scenie wizyjnofonicznej. Obiekty podstawowe są zestawiane razem, tworząc obiekty złożone. MPEG-4 jest zatem treściowo zorientowanym systemem kodowania obrazów i wi deo, tak że obiekty mogą być kodowane oddzielnie. W końcu 1996 r. rozpoczęły się prace nad nowym standardem - MPEG-7. Sys tem ten składa się z trzech części: deskryptorów, schematów deskrypcyjnych i języka definicji deskrypcji. Deskryptory to reprezentacje podstawowych elementów informa cji audiowizualnej, takich jak amplituda i frekwencja sygnału oraz liczba źródeł obecnych w obrazie. Schematy deskrypcyjne to ustrukturyzowane zespoły deskrypto rów. Centralne miejsce MPEG-7 zajmuje język definicji deskrypcji, który określa re guły tworzenia schematów deskrypcyjnych i deskryptorów oraz reguły rozszerzania i modyfikowania istniejących schematów deskrypcyjnych. Języka tego używa się w szczególności w celu opisania pewnych relacji (przestrzennych, czasowych, struktu ralnych i pojęciowych) między składnikami schematów deskrypcyjnych i relaqi mię dzy schematami deskrypcyjnymi. Materiał zakodowany w MPEG-7 może być indek sowany i badany. Użytkownik może np. znaleźć obraz zawierający linie narysowane na ekranie, znaleźć utwór muzyczny na podstawie kilku zagranych nut czy też poka zać animację na podstawie deskrypqi czasowej i przestrzennej. Celem systemu MPEG-7 jest standaiyzaq'a opisu informacji multimedialnej na podstawie jej treści. Tak więc poprzednicy systemu MPEG-7 reprezentują informację audiowizualną, podczas gdy MPEG-7 przede wszystkim reprezentuje informację o informacji. Dzię ki temu, że MPEG-7 koncentruje się na reprezentacji informacji o treści, a nie na reprezentacji samej treści, nie zastępuje poprzednich systemów MPEG, lecz jest dodatkowym narzędziem do standaryzacji deskrypcji informacji multimedialnej. W roku 2000 rozpoczęły się prace nad nowym standardem - MPEG-21, który ma umożliwiać używanie multimediów niezależnie od rodzaju sieci i oprzyrządowania.
Literatura 1. Bhaskaran V., Konstantinides K.: Image and video compression standards: algorithms and archi tectures. Kluwer, Boston 1997. 2. Chiariglione L.: The development of an integrated audiovisual coding standard: MPEG. Pro ceedings o f the IEEE, 1995,83, s. 151-157. 3. Haskell B. G., Puri A., Netravali A. N.: Digital video: an introduction to MPEG-2. Chapman & Hill, New York 1997. 4. LeGall D.: MPEG: a video compression standard for multimedia application. Communications o f the ACM, 1994,34, No. 4, s. 47-58. 5. Musmann H. G., Pirsch P., Grallert H. J.: Advances in picture coding. Proceedings of the IEEE, 1985,73, s. 523-548. 6. Mitchell J. L., Pennebaker W. B., Fogg Ch. E., LeGall D. J. (red.): MPEG video compression standard. Chapman & Hill, New York 1997. 7. Reader C.: MPEG4: coding for content, interactivity, and universal accessibility. Optical Engi neering, 1996,35, s. 104-108. 8. Watkinson J.: MPEG2, Buttexworth-Heinemann, Woburn 1998.
Rozdział
Szeregi Fouriera i transformata Fouriera
W celu lepszego zrozumienia materiału pokazanego przede wszystkim w rozdz. 6 i 8 przedstawimy teraz niektóre informacje o analizie fourierowskiej, a mianowicie pojęcie szeregu Fouriera oraz transformaty Fouriera dla przypadków ciągłego i dyskretnego. Dowiedziemy również twierdzenia o próbkowaniu, z którego czyni liśmy użytek w rozdz. 6.
12.1. Szeregi Fouriera Szeregi Fouriera są niezwykle ważne w rozważaniach teoretycznych i praktycznych zastosowaniach. Szeregi te są powszechnie stosowane w matematyce, fizyce, che mii i w zastosowaniach inżynierskich. Umożliwiają one dogodną analizę skompli kowanych funkcji i rozwiązywanie problemów teoretycznych i praktycznych, które w przeciwnym razie pozostałyby nierozwiązane D e f in ic j a 12.1. Funkq'ę g nazywamy okresową o okresie p, jeśli g(x + p) = g(x) dla każdego x, a podstawowy okres p jest najmniejszym okresem funkcji g (zauważmy, że każda wielokrotność np okresup jest również okresem funkcji g). Liczbę/0 = Up nazywamy podstawową częstotliwością funkcji g.
□
Przykład 12.1. Rozważmy funkcję a sin(/x). Jeśli x oznacza czas, to \a \ jest amplitudą linii falowej stanowiącej wykres tej funkcji, / jest częstotliwością, a pod stawowy okresp = 2n/f (por. rys. 12.1 zawierający wykres funkcji 4 sin 3x). Znaczenie szeregów Fouriera zostało podsumowane w następujących słowach: „Można ulec pokusie sparafrazowania słów Wiktora Hugo mówiących, że gdyby kazano nam zniszczyć wszystkie dzieła literackie prócz jednego, to tym dziełem powinna być Księga Hioba. Podobnie można powiedzieć, że gdyby kazano nam porzucić wszystkie odkrycia matematyczne prócz jed nego, to trudno sobie wyobrazić, byśmy nie głosowali na rzecz szeregów Fouriera jako kandydata na przeżycie”. Cornelius Lanczos: Applied analysis. Prentice-Hall, Englewood Cliffs, 1956, s. VII.
198
Funkcję okresową możemy uważać za nałożenie na siebie szeregu składników si nusoidalnych, co umożliwia wyrażenie jej za pomocą funkcji trygonometrycznych, a analiza fourierowska jest zainteresowana m.in. wyznaczeniem rozwinięcia trygono metrycznego funkcji okresowej i występujących w tym rozwinięciu współczynników.
\l jf •j j | | §
DEFINICJA 12.2. Załóżmy, że funkcja g spełnia warunki Dirichleta, tj.: 1) g jest funkcją ograniczoną określoną w każdym punkcie podstawowego przedziału [-rc, 7t]; 2) funkcja g ma tylko skończoną liczbę punktów nieciągłości; 3) funkcja g może mieć tylko skończoną liczbę ekstremów w tym przedziale. Wówczas funkcję g możerny rozwinąć w przedziale [-jt, n] w szereg Fouriera, którym jest nieskończona suma sinusów i kosinusów (stanowiących jej składniki harmoniczne) w postaci j w g(x) = —ao + ^^{a k coskx + bk sinfct) (12.1) 2
*-i
j lub w równoważnej postaci zespolonej:
I
I £
g ( x ) = '^ c keikx (12.2) k=-o3 przy czym c0 =±a0,c k = Ą(ak - ib k ),c-k = \(a k +ibk ) dla k > 0. Parametry ak, bk
; i ck nazywamy współczynnikami Fouriera. )
□
[■ Szereg (12.1) zawiera składniki sinusoidalne dla wszystkich częstotliwości k \ (wszystkich możliwych wielokrotności częstotliwości podstawowej). Zauważmy, że t dla funkcji okresowej g o okresie 2n, tj. jeślig(r) =g(x + 2n), szereg (12.1) jest róws nież funkcją okresową. 199
Rozdział12.SzeregiFourieraitransformataFouriera ak i bk reprezentują
am plitudy. O kazuje si tym, że w s p ó łc z y n n ik i możemy wyznaczyć za pomocą funkcji g. W celu i< znaczenia całkujemy szereg (12.1) w przedziale [ - k , k ]: Współczynniki
nieokreślone
a zatem
(12.3 Pamiętając, że: TC
n j* s in n x ć £ c = :
J cos nx dx = 0 dla n = 1,2,...
-71
-71
71
71
cos nx cos mx dx = J sin nxsin mxdx = 0 dla n ± m
| sin nx cos mx -71 Tl
7t
Jsin2/u: dx = Jcos2ałt dx - n dla n = 1,2,... — TC
-71
po pomnożeniu (12.1) przez cos m: i po scałkowaniu obu stron w przedziale [-n, n] otrzymujemy TC
TC
Jg(;t)cosm:*£t = J —a0 + ^ (a * c°skx + bk sinAx)jcosnxdx = -71 1
-71 71
OO (
= —Oo Jcosm:*£t + ^ —TT
k=\
*
*
I a* JcosAxcos/tc
j
J sinkxcosrtxdx - nan —ItJ
—TT
tak więc 1 11 ak = — j g (x ) cos kxdx
(12.4)
Równanie to obejmuje również współczynnik a0 (dlatego też w równaniu (12.1) a0 jest podzielone przez dwa). Podobnie po pomnożeniu (12.1) przez sin nx i obliczeniu całki otrzymujemy 1 71 (12.5) bk = — g(x)s\nkxdx
j
12.1. Szeregi Fouriera Ponadto ck = — J g(x)e~ikx dx -n
(12.6)
Zauważmy, że
c* = ^ ]-ng{X)dX (12‘7) czyli jest to wartość średnia funkcji g w przedziale [-7t, u], (Tę średnią wartość na zywamy również wartością DC). Przykład 12.2. Rozważmy następującą funkcję: „w = j 1-W dla H <1 jo dla 1 < |;c| < 7t Dla tej funkcji współczynniki ak szeregu Fouriera są dane równaniem „f o i"\ cos kx dx = J(1 + *) cos kx dx + J(1 - x) cos kx dx ak ^-i o Ponieważ po całkowaniu przez części otrzymujemy | x cos kx dx = j x d
sin/cc^
x s in k x rsin /cc , x sin kx — ------ 1 — * -------
cos/cc
zatem '0 0 1 1 1 ak = — | cos kx dx + J* cos kx dx + j cos k x d x - [ x cos/cc dx 7t V-i 1 1 sin /cc 7t k
o
sin (-k ) Ti ( k
* kx 7 f * sin/er cos/cc^ 0 sin 1 ( x sin kx sin fcc^j ( k ' k 2 J- i ' k 0 < k k 2 Jo> 1sin (—k ) k2 k
cos (-k ) sin k sin k cos k 1 ^_ k2 k k k2 k 2) _ 2 ( l-co s/c'j ~ * l k2 ) przy czym cos k = cos (-k). Współczynnik a0wyznaczamy za pomocą równania (12.3) 1 1( o a0 = — jg (x )d x = — j ( l +x )d x + j ( l - x ) d x -n w* Możemy łatwo sprawdzić, że 201
1 n
Rozdział 12. Szeregi Fouriera i transformata Fouriera
= ^ J g ( * ) ssm i kxd x = Q a zatem rozwinięciem Fouriera naszej funkcji g jest szereg z N 1 2 1 —cos k . g(*) = — + - V — ----cos kx 27C *=1 k2 Ten szereg Fouriera składa się ze wszystkich składników sinusoidalnych funk cji g. Pierwsze cztery składniki pokazujemy na rys. 12.2a-d. Na rysunku 12.2e-h pokazujemy rozwinięcia zawierające różne liczby wyrazów sumy: pierwsze przybli żenie zawiera tylko pierwszy wyraz (rys. 12.2e), drugie rozwiniecie uzyskujemy przez nałożenie na siebie dwóch pierwszych sinusoid, czyli rozwinięcie to jest sumą pierwszych dwóch wyrazów szeregu Fouriera (rys. 12.2f) itd.
□
Rys. 12.2. Rozwinięcie funkcji g z przykładu 12.2wszereg Fouriera — + —T ’ -—— —cos kx. 271 ^ k2\ k 2 2 . 1N 2 1—cos 2 Składowe harmoniczne tego szeregu: a) —(1 -c o slj cos*; b ) ------- ----- cos2*;
n
7i
4
2 1 - cos 3 2 1 - c°s4 1 2 ^ 1 -c o s k , c ) -------cos 3*; d ) ------ ~ — cos 4*. Szereg cząstkowy: e) — + —JL — ^ — cos 9 7t 16 2n n ■ _
*
2
o — 2rt + ji •
1i- — cos cusk*
!■»- cos**:
— , .,1 2 - ^ 1 - c o s fc , ,. 1-cosfc 1 2 ^ - 1 cos kx; n) — + — > ----—---- cos kx k2 2n ji k2
12.1. Szeregi Fouriera Przykład ten ilustruje oczywisty fakt, że przybliżenie danej funkcji rozwinię ciem Fouriera rośnie w miarę włączania do niego coraz większej liczby wyrazów. Liczba wyrazów, które trzeba włączyć, by otrzymać zadowalające przybliżenie, jest dla każdej funkcji różna. Na rysunku 12.2 widzimy, że rozwinięcie Fouriera jest dość dobrym przybliżeniem funkcji, natomiast na rys. 12.3 widzimy, że przybliżenie jest raczej niezadowalające, czego powodem jest fakt, że funkcja nie jest ciągła.
Rys. 12.3. Rozwinięcie w szereg Fouriera funkcji z przykładu 12.3 dlap = 5
Omawialiśmy dotychczas funkcje, które spełniają warunki Dirichleta w pod stawowym przedziale [-rt, n]. Ograniczenie to możemy uogólnić i mówić o funk cjach określonych w skończonym przedziale [~p/2, p/2\. Dokonujemy tego przez normalizację przedziału argumentów funkcji g za pomocą przekształcenia x = -|£, tak że funkcja h(y) = g(x) = g
) jest funkcją o okresie 2n
h(y + 2n)=g\ P(y+2n) 2n Następnie, za pomocą rozwinięcia Fouriera dla funkcji h(y) ak cos ky + bk sin Ay) k= l
i podstawienia y = ■— wyznaczamy rozwinięcie Fouriera dla funkcji g w przedziale l~p/2,p/2\ 1
®^ COS
2nkx
203
Rozdział 12. Szeregi Fouriera i transformata Fouriera przy czym: P /t
p!2 ak =
27ifct
- JsW cos------ ar -P t 2
(12.9)
p /t
J g(.r) sin ■pit
dx
p it
/* (* ) g-i2idac/p P -pit
C k= —
Możemy udowodnić, że podobne równania są prawdziwe dla przedziału [0,p], kiedy to współczynniki Fouriera obliczamy zgodnie z równaniami:
oo ^ 0
2nAr , cos------ Or
ak ^ o
( 12. 10)
2 r , . . 27tfcc sindx 1 |f C/ę = — f g (r) e-‘2nkx'p dx
P{ Przykład 12.3. Wyznaczmy rozwinięcie Fouriera dla następującej funkcji o okresie p: \ - l dla - p / 2 < x <0 *(*) = 1 dla 0 < x p/2 Współczynniki Fouriera są dane równaniami (12.9): 2 p'r 2itkx . 2 r 2itkx ple 2ttkx , ak =— Jg(*) cos------ dx= — - cos------ ax + cos------- dx D J P P \ -Pit Pn P-In p sin (2itkxlp) p sin (2nkx/p) pn\ 2 P
2itk
=
-Pn
2itk
° ,
0
12.2. Transformata Fouriera Pa 2nkx 2nkx sindx+ J"sin “ tic f e - ^DT J* w s i » —o - f r - 1n - l f V
-P t 2
- P /2
^
O
2 p cos(2nkx/p) 0 p cos (2nkx/p) pa A 2nk -p/2 2nk PK o
J
- 1 - ( 2 - cos(-ibi)-cosfai)= — ( l - ( - l ) * ) = j^fe jeŚHjestnieparzySte ^ ^ [ 0 jeśli k jest parzyste a zatem 1 / 2nkx 2nkx +bk sin l W = T « 0 + X 'Ok cosz
*=l V
4 ^ s in (2 jc (2 fc -l)x ^ ) 2 k -\
= 1
Wykres szeregu Fouriera zawierającego 20 wyrazów dla p = 5 pokazujemy na rys. 12.3.
□
12.2. Transformata Fouriera Do tej chwili omówiliśmy funkcje określone w skończonym przedziale. Wielkie osiągnięcie Fouriera polegało na pokazaniu, że rozbiciu na składniki harmoniczne można poddać funkcje określone w przedziale nieskończonym [-<», +oo]. Dokonuje się tego przez rozszerzenie przedziału [-p/2,p/2\ w nieskończoność. Pozwalając, by p rosło w nieskończoność, powoduje się zarazem, że częstotliwość \/p zbliża się do zera. Dlatego też byłoby niemożliwe ponumerowanie liczbami całkowitymi wszyst kich częstotliwości dla takiej funkcji, gdyż zbiór tych częstotliwości jest równy con tinuum. Widzimy zatem, że podczas gdy funkcje okresowe były reprezentowane dotychczas nieskończonymi szeregami zawierającymi oscylacje określone dla każ dej wielokrotności podstawowej częstotliwości, to funkcje określone w całym prze dziale liczb rzeczywistych będą wymagać użycia całki wyznaczonej względem cią głego zbioru częstotliwości, co prowadzi do pojęcia transformaty Fouriera. Na czym dokładnie polega wpływ wzrostu okresu p do nieskończoności na współczynniki ck szeregu Fouriera (12.2)? Z równania (12.9) określającego c.k 1 P'r ck = — j g(x) e~i2,doc,p dx -P t2
otrzymujemy pi2
pck = — j g(x) e-i2’**/Pdx P - p /2
205
Rozdział 12. Szeregi Fouriera i transformata Fouriera
A zatem możemy przyjąć, że wszystkie te całki są skończone, czyli że funkcja g jest absolutnie całkowa lnmr*zy\i dla pewnego M pa pck = J*(*) e~i2nkx/p fa *ZM - Pa Jeśli p wzrasta teraz do nieskończoności, to ck musi maleć, tak by 00
lim pck = | g(x) £-«**»* dx —oo
Równocześnie k musi wzrastać do nieskończoności, jeśli częstotliwość f k = kip ma pozostać stała. A zatem co
oo
lim pck = Jg(x) e-‘2lda,p dx = J g(x) e~i2^ x dx —oo
—oo
Przechodząc teraz z dziedziny dyskretnej do ciągłej, tj. dopuszczając dowolną częstotliwość, otrzymujemy lim pck = [ g(x) e-nri* dx To raczej nieformalne rozumowanie prowadzi nas do następującej definicji trans formaty Fouriera. D e f in ic j a 12.3. Transformatę Fouriera G funkcji g, dla której J°° |g(x)|<£t < co,
określamy za pomocą całki Fouriera jako co G (/) = \g (x )e -i2* cbc
(12.11)
— oo
Funkcję g możemy odtworzyć z transformaty G za pomocą równania oo
*(*)= \G ( J ) e * + d f
(12.12)
—oo
Z powodu podobieństwa powyższych dwóch równań funkcję g nazywamy rów nież odwrotną transformatą Fouriera funkcji G. Uwaga. Czasami używa się nieco innych definicji transformaty Fouriera, a mia nowicie: 1 ” (12.13) Gi (co) = - j = Jg(x) dx1 1 *? g(x) = -==r \Gi(co)eiax dco -J2n J
12.2. Transformata Fouriera lub też
oo G2 (co)= jg (x )e~ ‘a* dx
(12.14)
1 W g(x) = — jG 2 (co)ei0x dco —co
przy czym zamiast częstotliwości / mierzonej w hercach występuje pulsacja co (czę stotliwość kątowa) mierzona w radianach na sekundę.
□
Transformata Fouriera funkcji g reprezentuje widmo tej funkcji, czyli ilość wy stępującej w funkcji g częstotliwości /. Przykład 12.4. Rozważmy impuls prostokątny
co
G (f) = J g(x) e~arF dx = j ce~2*F dx = —^ =
o -r (e ~ai4r - e i2"F) = _(-i2 sin(2j^r)) -i2izf -t2 ttf
czyli G (f) = 2cr
sin (2 ttfr) 2itfr
Funkcję g i jej transformatę G pokazujemy na rys. 12.4.
□
Definicję transformaty Fouriera możemy rozszerzyć do n wymiarów, jednakże w kontekście kompresji obrazów interesuje nas tylko dwuwymiarowa transformata Fouriera. D e f in ic j a 12.4. Dwuwymiarową transformatę Fouriera G funkqi g, dla której
1
I ” |g(*> y)\dxdy
G(u, v) = |
oo
| g(x, y) *-«■(«+>)-) dx dy
— oo — oo
207
(12.15)
R ozdział 12. Szeregi Fouriera i transformata Fouriera
a dwuwymiarową odwrotną transformatę Fouriera definiujemy jako g(x, y) =
J JG(u, v) e>2"(“ +>y) dudv
( 12. 16)
□
'c r
-2r -r
2r
x
2rc
'W W V V 1 1 12J 3* w v v ~
1
2~J~2r ~2r
Rys. 12.4. Funkqag i jej transformata G z przykładu 12.4
Przykład 12.5. Rozważmy dwuwymiarowy impuls prostokątny H * .y ) 4
f
d I a H < r, i M < r i .
[0 w przeciwnym razie
Transformata Fouriera tej funkcji CO OO
G(u, v) = J
T\
n.
Jg(x) e-nn(ux+vy) fa dy = j e~i2mx dx
=c C
-i2izu
1 . g - i 2my -i2izv -nj
^g-i2nur\ _ gi2iwr\
_ _ _ _ _ _ _ _ _
-i2tai 4n2uv
je~i2my dy =
^
2
Cj
t v
7
2
_
g-i2nvri
—i2m (-t'2 sin (2nur})) (-i2 sin (27cvr2))
^ _
.
.
.. L-I^triM W l.^i,,! ..... ............
n. .... ,
12.2. Transformata Fouriera
Rys. 12.5. Funkcja g i jej transformata G z przykładu 12.5 209
Rozdział 12. Szeregi Fouriera i transformata Fouriera
12.3. Dyskretna transformata Fouriera Aby możliwe było zastosowanie komputerów do obliczania transformaty Fouriera, konieczne jest użycie dyskretnego przybliżenia ciągłej transformaty. Przyjmijmy, że funkcja g ma wartości niezerowe tylko w przedziale [-p/2,p/2\; wówczas 00
p/2
G( f ) = | g(x) e i2^ dx= | g(x) e~i2^x dx — oo -p ! 2 Ponieważ funkcja g równa się zeru poza przedziałem \-p/2, p/2], zastosowanie twierdzenia o próbkowaniu (p. 12.4) do transformaty G umożliwia sformułowanie wniosku, że funkcję G można odtworzyć za pomocą jej wartości w punktach kip e - i 2iak!p f a
dla k = O,
Wp- 1
Jeśli przedział [O, p\ podzielimy również na N równych podprzedziałów repre zentujących czas próbkowania ciągłego sygnału g, a całkę zastąpimy sumą Riemanna, to N g - i 2-nkmlN P dla fc = 0 ,..., W p -l 2> N m—0 -1
PflTlip.WH7
£~i2nm —
g~i2n(k+N)km/N —g— i2iikmlN
. g— t'2nm
—g-i2itkm/N
q
wi^C
G(jfr)=G(~$L\ wnioskujemy, że wszelka niezbędna informacja jest zawarta w cią gu
g ($t) ,..., g ( - ^ ) .
Rozważania te prowadzą do następującej definicji.
DEFINICJA 12.5. N-punktową dyskretną transformatą Fouriera (DFT) nazywamy skończony ciąg liczb rzeczywistych lub zespolonych G(0), ..., G (N - 1) reprezentu jących dyskretne częstotliwości, odpowiadające skończonemu ciągowi liczb rzeczy wistych lub zespolonychg(0), ..., g(N - 1), reprezentującemu dyskretny czas okre ślony w następujący sposób:
N G(Jc) = Y J8 ( m ) e~i2l*m'N dla k = 0 , . . . , N - l m=0 -1
(12.17)
Odpowiadającą tej transformacie jest odwrotna dyskretna transformata Fouriera zdefiniowana jako suma N g(m) = — Y JG (k )e ‘2'*m'N dla m = 0 ,...,N - l (12.18) k =0 1
-1
□ 210
12.3.
Dyskretna transformata Fouriera
5 I Definicja ta określa N liczb zespolonych G(k); wyznaczenie każdej z nich wys maga N operacji dodawania, zatem wyznaczenie dyskretnej transformaty Fouriera | wymaga 0 ( N 2) operacji. Istnieją jednak algorytmy umożliwiające wyznaczenie dyskretnej transformaty Fouriera za pomocą mniejszej liczby operacji. Przykładem takiego algorytmu jest algorytm szybkiej transformaty Fouriera zaproponowany w 1965 r. przez J. W. Cooleya i J. W. Tukeya. f: Ponieważ transformata Fouriera jest funkcją zespoloną, dogodnie jest przedI stawić ją w postaci dwóch widm (p. 12.5 i rys. 12.9). £ S j D e f in ic j a 12.6. Widmem amplitudowym funkcji g nazywamy funkcję | G \ zdefinioI waną jako
( { |
|G(A:)| = V(R e(G(*)))2 + (Im(G(k)))2(12.19) natomiast widmem fazowym nazywamy zbiór {0k:k = 0,1, 2, ...}, przy czym G(A:) = |G(A:)|e^
(12.20)
□ Przykład 12.6. Rozważmy ciąg czterech próbek g = {1, 2, 3, 4}; współczynniki transformaty DTF wyznaczamy następująco: 3
G(0) = X S (™) e° = S(0) + g(l) + g(2) + g(3) = 1 + 2 + 3 + 4 = 10 m=0 3
G(l) = ^ g (m) e-in2ml* = le° + 2e-'*'2 + 3e-« + 4e-i3B/z = m =0 '
= l - 2 i - 3 + 4i = - 2 + 2r 3
f i,
I [■
G(2) = '£ g ( m ) m-0 G(3) = V ^ ( m ) m-0
= le° + 2e~in + 3e-'2* + 4e~i3n = l - 2 + 3 - 4 = -2 g -M m /4 = \ e 0 +
2e -3*/2 + 3 e - i3 n
+ Ą e - i9 n /2 =
l = 1 + 2/ —3 - 4/ = -2 - 2i i' ? Widmo amplitudowe jest dane wzorami:
I I
I |
s
|G(0)| = 10,
,- ---------
|G(l)| = V(-2)2 + 22 = 2V2,
|G(2)| = 2,
widmo fazowe równaniami: #o=0,
#i=37t/4,
#2 = it, 211
#3 =5tc/4
|G(3)| = 2V2
Rozdział 12. Szeregi Fouriera i transformata Fouriera b)
a) 9 .
4 3
2
*
(-2.2)
•
•
1
(IM)
(-2.0) 1 2
3 C zas
-2 -1 (-2 .-2 )
1 2 3 4 5 6 7 8 9
10
10
e)
C)
G
9 4 3 2 1
5 • * *
1 2
3
1 2 3
Rys. 12.6. Funkcja g z przykładu 12.6 (a); jej transformata Fouriera (b); widmo fazowe tej transformaty (c); jej widmo amplitudowe (d); dyskretna transformata kosinusowa funkcji g (e)
Próbki g, transformatę Fouriera i widma pokazujemy na rys. 12.6a-d. Pierwotne próbki możemy odtworzyć za pomocą odwrotnego przekształcenia: g(°) = ą k=0 1 3 4 *=o
*° = -(G (0 ) + G(l) + G(2) + G(3)) = 1 4
1 eMki* - —(10e° + (-2 + 2i)eml2 - 2 e m + (~2-2i)eM n = 4
= ^(10 + (-2 + 2f)ż + 2 - ( - 2 - 2 i ) / ) = —( 1 0 - 2 t - 2 + 2 + 2f + 2) = 2 212
12.3. Dyskretna transformata Fouńera i
3
1
g { 2 ) = - 'Y dG
4 i=0
4 = •-(1 0 -(-2 + 2 / ) - 2 - ( - 2 - 2 i ) = 3
i 3 -« g(3) = ~ Y JG { k )e iM ^ = i(1 0 e0 + (-2 + 2i>*'3*/2 - 2«°« + ( - 2 - 2i>®*«) = 4 i=0
4
= 1 (1 0 - (-2 + 2 0 i + 2 + (-2 - 2 0 i = 4
□ [
DEFINICJA 12.7. Dwuwymiarową dyskretną transformatę Fouriera G funkcji g defi
niujemy jako M N G (M ) = £ ^ g ( m ,n ) e - « " (fe" ^ +^ ) m=0 n=0 -1
-1
(12.21)
dla k = 0, 1, 2, ..., M - 1 oraz / = 0, 1, 2, N - 1. Dwuwymiarowa odwrotna dys kretna transformata Fouriera jest dana równaniem jY-1 1 M-\ ( 12. 22) g ( m , ri) = 2 > ( M ) £ i2n(km/M +ln/N) M N *=0 /=0
z
dla m = 0, 1, 2, M - 1 oraz « = 0, 1, 2, ..., JV - 1. Jeśli M - N, tj. jeśli dane są próbkowane w kwadracie , w-i w-i G (k,l) = — £ Y Jg(m ’n)e -i2* km+la),N (12.23) N
m=0
n=0
oraz ^ N-l N-l £(m ,>0=— X Y , G(k ’l'>ei2n(hn+ln)IN *=0
(=0
(12.24)
□
12.3.1. Dyskretna transformata kosinusowa Jeśli funkcja g ma niezerowe wartości tylko w obrębie pewnego przedziału I, to l możemy ją rozszerzyć poza ten przedział przez uczynienie z niej funkq'i o okresie I, czyli przez powielenie jej w nieskończoność poza tym przedziałem. Jest to ważne ze względu na zastosowanie do funkcji g przekształcenia Fouriera. Ważne jest jed nak, w jaki sposób dokonamy tego rozszerzenia, gdyż jeśli rozszerzenie to będzie 213
a)
Rys. 12.7. Wykres ilustrujący zjawisko Gibbsa: odtworzenie funkcji g = x + 1 określonej w przedziale [0, 3] (a); rozszerzonej do funkcji o okresie 3 (b); szereg Fouriera oo
2 , 5 ~ y ^ sin1™- będący rozwinięciem rozszerzonej funkcji i zawierający: (c) 20 oraz
/I*=l
(d) 40 składników harmonicznych; parzyste rozszerzenie funkcji g (c); rozwinięcie Fouriera tego rozszerzenia z 20 składnikami harmonicznymi (f)
12.3. Dyskretna transformata Fouriera
zawierać punkty nieciągłości, to w wyniku rozszerzenia wystąpi tzw. zjawisko Gibbsa. Otóż jeśli wynik rozszerzenia będzie przybliżany szeregiem Fouriera, to w punktach nieciągłości pojawią się oscylujące fale. Okazuje się przy tym, że fale te nie znikają po dodaniu nowych wyrazów szeregu. Tak więc uwzględnienie coraz to nowych wy razów rozwinięcia Fouriera nie daje w wyniku dobrego przybliżenia w punktach nieciągłości (rys. 12.7c-d). W celu uniknięcia tego problemu funkcję należy rozszerzyć za pomocą jej lustrzanego odbicia (tzw. parzystego rozszerzenia, por. ćwiczenie 12.3), jak na rys. 12.7e, którego rozwinięcie Fouriera szybko i gładko dąży do funkcji g. Przykład 12.7. Rozważmy funkcję g(*) = x + 1, jak na rys. 12.7a, oraz jej roz szerzenie do funkcji na rys. 12.7b. Rozszerzona funkcja ma wyraźne nieciągłości. Rozwinięcie Fouriera rozszerzonej funkcji znajdujemy za pomocą wzorów (12.10):
Uwzględnienie 20 i następnie 40 składników harmonicznych (rys. 12.7c-d) nie prowadzi do łagodnie zmieniającego się wykresu w punktach nieciągłości, gdyż fale zachowują tę samą wysokość, aczkolwiek ich szerokość maleje. Jeśli funkcję g roz szerzymy tak jak na rys. 12.7e, to otrzymamy funkcję bez punktów nieciągłości, której rozwinięcie Fouriera jest dane wzorem
n jest nieparzyste
ponieważ cos(«7i) = (-1)" i (-1)” - 1 = - 2 dla nieparzystych n i zero w przeciwnym razie. (Zauważmy, że tym razem okres rozszerzonej funkcji równa się 6, a nie 3; możemy dowieść, że w wypadku parzystego rozszerzenia
przy czym
oraz p = 3, a nie 6). Na rysunku 12.7e-f pokazujemy, jak dobrym przybliżeniem funkcji g jest ten szereg.
□
Podobny problem napotykamy w zastosowaniu DFT do kompresji danych, a mianowicie DFT nie daje dobrej kompresji w wypadku obecności punktów nie ciągłości, ponieważ energia próbek jest rozprzestrzeniona na wiele współczynni215
Rozdział 12. Szeregi Fouriera i transformata Fouriera ków transformaty DFT. By uniknąć tego problemu, zastępujemy DFT transforma tą interpretującą próbM tak, jakby ich liczba została podwojona przez dodanie takiej samej liczby w odwróconym porządku, czyli przez dodanie lustrzanego odbi cia istniejących próbek. Odbicie lustrzane ciągu próbekg(m) dla m =0, ..., N - 1 otrzymujemy przez odbicie istniejących próbek względem punktu N tak, że rozszerzony ciąg pró bek jest zdefiniowany jako ge(x) =
dla m = Q ,...,N - l g i l N - l - m ) dla m = N ,...,2 N - 1
Stosujemy teraz przekształcenie Fouriera (12.17) do próbek ge(m) dla m = 0, ..., 2N - 1, co daje 2N-\ N-\ 2N-\ Ge(k)= ^ ge(rn)e~i2vkml2N = ^^g{m )e~i2’dml2N + ' ^ g e{m)e-'2’*mj2N m m=N =0
m=0
dla k = 0, ..., 2N - 1. Po wprowadzeniu nowej zmiennej s = 2N - 1 - m widzimy, że s zmienia się od N - 1 do 0 w miarę, jak m zmienia się od N do 2N - 1, dzięki cze mu ge(2N - 1 - m ) = g(s), a zatem N-l N Ge(k) = + Y j g(s)e-i2«k(2N-^ ) n n m -0 s=0 -1
Ponieważ nazwa zmiennej nie ma znaczenia, użyjemy zmiennej m zamiast zmiennej s; ponadto wyraz wykładniczy w drugiej sumie możemy podzielić na dwa wyrazy, co prowadzi do N N Ge(k) = ^ g(m )e-‘2nkml2N + ^ g ( m ) e ~ i2lJc2NI2 ei2^ m^ d 2N = -1
-1
m=0
m=0 ty — i
=^ )(
+
m —0 — ^ ^ g ^ f n ^ ^ g - i n l c ( 2 m + l ) / 2 N + g in k (2 m + l)l2 N ^ _
N~
1
=
cos m=0
nk(2m +1) 2N
dla k = 0, ...,2 N - 1
12.3. Dyskretna transformata Fouriera
za pomocą tożsamości Eulera (12.32). Dyskretną transformatę kosinusową G(k) otrzymujemy z G£k) przez podzielenie G f k ) przez e_"*/2W k = 0, ..., 2N - 1 i przyrównanie Ge(A:) do zera k = N, ..., 2 N - 1. Ponadto po uwzględnieniu norma lizacji otrzymujemy następującą definicję: D efin icja 12.8. Dyskretną transformatą kosinusową (DCT) nazywamy skończony ciąg liczb rzeczywistych lub zespolonych G(0), ..., G ( N - 1), określonych dla skoń czonego ciągu liczb rzeczywistych lub zespolonychg(0), ...,g(N - 1) w następujący sposób:
Gm- w % s(m)
(12.25)
i«("*)cos—
—
2N
dla * = 1,2
przy czym G(k) nazywamy współczynnikami DCT. Odwrotną dyskretną transformatę kosinusową (IDCT) definiujemy następująco: N nk(2m + 1) N -l G(*)cos dla m = 0,1, 2N *( m ) = V N G(0) + m=0 (12.26) -1
□ Przykład 12.8. Rozważmy ciąg czterech próbek g = {1, 2, 3, 4} z przykładu 12.7. Pamiętając, że cos-f =
oraz cos-^- = ^ y ^ -, wyznaczamy następujące
współczynniki DFT: <*0) = ± X * ( in ) = ± ( l + 2 + 3 + 4) = 5 ' m-0 5 ti /-/i \ >/2 ^1 . . n(2m +1) V2 ( k 3ji * G v(l)>= -----?> g(m)'= cos—---------= ---8 2 cos—+ 8 2cos— 8 + 3cos m=0
& r 2
V
.V 2+ V 2 2
V 2-V2 2
= -2,2305 y
V2 ^-1 / tc2(2/m + 1) G(2) =— - 2 _lg(m) cos------ ------' = -J2( n 37i 5n ---- cos —+ 2cos— + 3cos— + 4cos— = 0 2 { 4 4 4 4) 217
Rozdział 12. Szeregi Fouriera i transformata Fouriera
■m£ ( 3 ) = ~ i > ( " 0 cos m=0 _
7t3(2w +1) 8
3n » 9n ~ 15ji . 2l7t 42 ( cos — + 2 cos— + 3cos----- + 4 cos----8
2 l'
A
2
8
V2 + V2 2
8
V 2-V 2 2
8
= -0,1585
Wykres transformaty DCT G pokazujemy na rys. 12.6e. Zauważmy, że ampli tudy G(2) i G(3) są bardzo małe w porównaniu z pierwszymi dwiema amplitudami, a zatem większość informacji dotyczącej próbek jest skoncentrowana w pierwszych dwóch współczynnikach G(0) i G (l), podczas gdy w przypadku DFT, |G(2)| i |G(3)| dla tych samych próbek (rys. 12.6d) mają tę samą wartość co |G(1)|, a zatem informaqa dotycząca próbek jest bardziej równomiernie podzielona mię dzy współczynniki, co oznacza, że wszystkie cztery współczynniki DFT są tak samo ważne. W wypadku kompresji danych, jak dyskutowaliśmy to w rozdz. 9, im więcej współczynników równa się zeru lub prawie zeru, tym lepsza jest kompresja. DEFINICJA 12.9. Dwuwymiarową dyskretną transformatę kosinusową macierzy pró bek o wymiarze N x N definiujemy jako macierz, której elementami są liczby
td(2m + 1) (12.27) G(fc,/) = - C ( * ) C ( / ) f ; | > ( m , W) cos- (^ +1) C O S 2N m=0 n=0 a odpowiadająca jej odwrotna dyskretna transformata kosinusową jest zdefiniowana jako macierz złożona z liczb
g(m, n) = — X C (k)^C (Z ) G(k, l) cos /i=0 przy czym 1 dla v = 0 C(v) = . V2 1
ttk{2m +1) td(2m +1) 2N ^ 2N
w przeciwnym razie
(12.28)
□
12.4. Twierdzenie o próbkowaniu Dowiedziemy teraz twierdzenia o próbkowaniu, które jest również nazywane twier dzeniem Nyquista, twierdzeniem Shannona lub twierdzeniem Kotielnikowa-Shannona. 218
12.4.
Twierdzenie o próbkowaniu
T w ie r d z e n ie 12.1. Jeśli funkcja g zawiera tylko częstotliwości mniejsze niż W oraz
okres próbkowania F = ~
(czyli g jest próbkowana w chwilach oddalonych
o -jljr s, co oznacza, że częstotliwość próbkowania jr - 21F, czyli jest dwukrotnie większa niż częstotliwość graniczna W), to funkcję g możemy określić w dowolnej chwili za pomocą następującego wzoru interpolacyjnego:
(l229) Dowód. Ograniczenie, by funkcja g nie zawierała częstotliwości większej niż W, oznacza, że dla transformaty Fouriera funkcji g oo G ( /)= fg (x )e -* * d x -oo
G(f) = 0 dla \ f \ >W, tak więc zgodnie ze wzorem (12.8) transformatę tę możemy rozwinąć w przedziale [- W, W] w szereg Fouriera co
G (/)= k=~co
przy czym zgodnie ze wzorem (12.9) 1 w
JG
( f ) e - ,2^ I2W d f
Ponadto funkcja g jest odwrotną transformatą Fouriera funkcji G 00
W
g(x) = | G( f ) e<**df = | G( f ) e * + d f —oo
co dla x
-W
jjy oznacza, że = ] G(f'>e‘2'*k,2Wdf
a zatem
°k = 2W 8 [ l w ) co oznacza, że jeśli funkcja g jest określona w punktach ...,
r , 0,
2^r, ..., to współczynniki ck są jednoznacznie określone, a więc transformatę G możemy wyznaczyć dla dowolnej częstotliwości/, co z kolei umożliwia wyznaczenie wartości funkcji g w dowolnej chwili. 219
Rozdział 12. Szeregi Fouriera i transformata Fouriera Rozważmy teraz sposób wyznaczenia wartości funkcji g w dowolnym punkcie, opierając się w yłącznica spróbkowanych wartościach. w w „ g(x) = JG( f ) ei2,&df = J e n v k fn w e n & df = -w k=-
-w! -W
Ph
k= -n
df
Jeśli zmienimy porządek sumowania i całkowania, by całkować każdy wyraz z osobna, to otrzymujemy
1
k ^ ę i nf f k I W +2x) 2W ) in(k! W + 2x)
2W , Y =
^
k sin n(2JVx + k) _ 2 łF ) n(2Wx + k) ~
f k ) sin n(2Wx - k ) ) n (2 W x -k )
Wskazuje to, że każda spróbkowana wartość jest ważona za pomocą funkcji ^ 4 , która osiąga maksimum w punkcie próbkowania. Tak więc każdą próbkę g(s) mo żemy uważać za generator funkcji mającej maksimum w punkcie s i równej zeru we wszystkich innych punktach próbkowania (rys. 12.8).
□
12.5. Dodatek: Liczby zespolone i tożsamość Eulera Z analizy matematycznej wiemy, że funkcje ex, sin x oraz cos x mają następujące rozwinięcia w szeregi potęgowe, przy czym x jest liczbą rzeczywistą lub zespoloną: 1! COS X
= 1
2!
3!
x2 2!
x4 4!
------- + ------
(12.30)
12.5. Dodatek: Liczby zespolone i tożsamość Eulera
Podstawienie ix zamiast x, przy czym i = 4 - 1 jest liczbą urojoną, prowadzi do rozwinięcia ex = 1
=
2!
+
ix 1!
+ — +
4!
(ix)2 (ix)3 7 + + 2! 3!
... =
N+ i ' ± + ? L
i i
^
vJ1! + 3! + 5! '
= cos x + 1 sin x
(12.31)
Równanie cos x + t sin *
(12.32)
nazywamy tożsamością Eulera. Za pomocą tej tożsamości dla -x otrzymujemy e"* = cos x - i sin x
(12.33)
ponieważ cos (- jc) = cos* oraz sin (-z) = ~sinx Dodanie stronami obu równań daje 4c o s x = ----------(12.34) a odjęcie stronami sin x
= ■
- e~u ~2i
(12.35)
Rozdział 12. Szeregi Fouriera i transformata Fouriera Wzory te są bardzo dogodne, ponieważ umożliwiają proste przekształcenie funkcji trygonometifo^iych o wartościach rzeczywistych w funkcję wykładniczą o wartościach zespolonych. Dowolną liczbę zespoloną z możemy przedstawić w postaci z = x + iy
(12.36)
przy czym x = Re(z) jest jej częścią rzeczywistą, a y = Im(z) - częścią urojoną, lub też w postaci pary (x, y) reprezentującej punkt na płaszczyźnie (rys. 12.9). Położe nie tego punktu jest wyznaczone jednoznacznie wartościami x i y lub długością r odcinka łączącego ten punkt z początkiem układu współrzędnych i kątem nachyle nia tego odcinka 0, przy czym r = \ x +iy\ = J x 2 + y2
(12.37)
0 = arc tg — x
dzięki czemu liczbę z możemy przedstawić w następujący sposób: z =
\x +
żyj
e‘&
Rys. 12.9. Postać trygonometryczna liczby zespolonej
*
Ćwiczenia 1. Za pomocą definicji 12.2 wyraź ak oraz bk w funkcji ch 2. Rozwiń w szereg Fouriera następujące funkcje okresowe w przedziale [-n, rc] a) sin2*; b) |sin*|; c)*2; d) x ( n - |*|); e) |*|; f)*; g) 1 dla * e (-0,25, 0,25) i 0 w przeciwnym razie. 3. Funkcję g nazywamy parzystą, jeśli g(x) = g(-x), oraz nieparzystą, jeśli -g(*) = = g(-x). Wykaż, że jeśli funkcja g jest parzysta, to w równaniach (12.1) współczyn nik bk = 0, a jeśli jest nieparzysta, to współczynnik ak = 0. 222
Literatura
4. Wyznacz zależności transformatami Fouriera G, G, i G2 zdefiniowanymi równaniami (12.11), (12.13) i (12.14). 5. Transformata Fouriera G i odwrotna transformata Fouriera g tworzą parę transformat, co zaznaczamy dwukierunkową strzałką: g(x) G(y). Pokaż, że dla par transformat zachodzą następujące zależności: a) zmiana skali: g(ax) <-> ^ g ( ^ ) oraz jJ|-g(£) <-> G(ay);
b) przesunięcie: g ( x - a ) <-> G (y )e '“°'oraz g(x)e^uu <-»G(y + a); c) liniowość: ag + bh <->aG + bH, jeśli h(x) H(y). 6. Wyznacz transformatę Fouriera dla następujących funkcji: a) e~ax1'2; b ) e ~ ^ \ c ) - ^ ; d )e -« dla * > 0 i 0 dla * < 0; e)
sinjce-" dla x >0 i 0 dla x < 0 ; /) - s in o x . 7. Wyznacz DFT i DCT dla następujących ciągów: a) g= {2,2, 2,2,0, 0,0, 0}; b) {2, 2,0,0, 0, 0, 2, 2}; c) {2, 2,0, 0, 2, 2, 0, 0}; d) {2, 2, 2, 2, 2, 2, 2, 2}.
jj
i
jj | jj Ś g
Literatura 1. Champeney D. C: Fourier transforms and their physical applications. Academic Press, London 1973. 2. Folland G. B.: Fourier analysis and its applications. Wadsworth, Pacific Grove 1992. 3. Hancock J. C.: An introduction to the principles of communication theory. McGraw-Hill 1961. 4. Leja F.: Funkcje zespolone. PWN, Warszawa 1979. 5. Oliver B. M., Pierce J. R., Shannon C. E.: The Philosophy of PCM. Proceedings of the IRE, 1948, 36, s. 1324-1331.
1
6. Osiowski J.: Zarys rachunku operatorowego. WNT, Warszawa 1981.
7. Phillips C. L., Part J. M., Riskin E. A.: Signals, systems, and transforms. Prentice-Hall, Upper Saddle River 2003. 8. Stuart R. D. :An introduction to Fourier analysis. Methuen, London 1961. 9. Walker J. S.: Fast Fourier transforms. CRC Press, Boca Raton 1996.
Rozwiązania ćwiczeń
Rozdział 1 1 /(* /) = -lg
= m bitów.
2. 256. 3. 3 lg 32 + 3 lg 10 * 34 bity. 4. lg (52!) = 221,4 bity/ciąg kart; liczba bitów na jedną kartę zależy od tego, czy bierzemy pod uwagę wartość karty, czy jej kolor. 5.
X p (“) te 2 ( “ ) - X U
U
te ^ ( “ ) = X
(lg G(«) - lg p (u)) =
U
= £ p (u) (lg (Q (u)/P (u)) < 0, ponieważ £ /*(«) lg (G(«0 / />(«)) U 6
O. a ;
~ 4 - >81
3 4- 9 4* 27 f
/*(«) (G(«) / / ’(m) - 1) lg « = M 1* 1,
-i-4-—+ - 2 - 4 - 1 *
U J 3 4- 9 -I- 27 4- g l <; 1 ,
Y^QM-^Piu)
lg c = 0
—4 - ~ = A* 1
W 3 + 9 + 27 + 81
7. Niech P = {pu p 2, p 3}; wówczas dla każdego ciągu s = x,xt w ó2, P(*ixj) = = P(x,)P(Xj) =p,pr Zatem //(S 2) = -p iP i l g ( p i p i) - p ip 2 lg(PlP2>-PlP3 lg(PlP3> + -P2Pl lg(P2Pl)-p2P2 lg(P2P2>-P2P3 lg(P2P3> + -P3Pl lg (P 3 P l)-p 3P2 lg(P3P2>-P3P3 lg(P3P3> 7/(52) = -2 p iP l lgpi - P i p 2 lgPl - P l P l lgP2 -P lP 3 IgPl -P lP 3 lgP3 + -PlP\ lgP2 —PlPl lgPl - 2 p 2p 2 lgP2 - P 2 P 3 lgP2 - P 2P3 lgP3 +
Rozdział 2
-PiPi lg p i -p iP \ I g A -P iP i >8^3-P iP i lg Pz - 2 p 3p 3 lg pi H (S2) = - 2 p lPl ]gP l - 2 P i P2 IgPi -2-PiPi lgpi + -2 P2P1 lgP2 —2p2P2 lgP2 ~ 2P2P3 lgP2 + - 2 P 3 P \ lgp3 - 2 P 3 P 2 lg P 3 ~ 2 P 3 P 3 lg P 3 H (S2) = ~2Pl (Pl + P2 + P3) lg Pl “ 2^2 (Pl +P2 + P3 ) lg Pl + - 2 P i{Pi + P2+ P3) lg P'2 = ~2P\ lg Pl - 2 P2 \gP2 - 2 P3 lg P3 = 2H(S). 8. Dla S = {a, b, c} i P = (0,1, 0,2, 0,7}, H(S) = -0,1 lg 0,1 - 0,2 lg 0,2 - 0,7 lg 0,7 = 1,147; dla długości Shannona T-lg 0,ll = 4, T-lg 0,2l = 3 oraz f-lg 0,7l = 1, L Sr = 0,1 • 4 + 0,2 • 3 + 0,7 • 1 = 1,7 bitów/literę; dla S2 = {aa, ab, ac, ba, bb, bc, ca, cb, cc} i P2 = {0,01, 0,02, 0,07, 0,02, 0,04, 0,14, 0,07, 0,14, 0,49}, H(S2) = 2H(S) = = 2,294; zaś L 2 = 0,01 ■7 + 2 • 0,02 • 6 + 0,04 • 5 + 2 ■0,07 ■4 + 2 • 0,14 • 3 + 0,49 ■2 = = 2,89, czyli L-J2 = 1,445 bitów/literę.
Rozdział 2 1. Prawdopodobieństwa kumulatywne Pt nie mogą się powtarzać, co zachodzi dla Pi > 0. 2. Jeżeli długości Shannona są ustawione w dowolnym porządku, to długość /, może powodować wyodrębnienie zbyt małej liczby bitów z rozwinięcia prawdo podobieństwa Ph nie dochodząc do miejsca, od którego Pt zaczyna różnić się od Pj-U w wyniku czego otrzymany kod nie byłby kodem przedrostkowym, na przykład: Sj
Pi
/,
P,
E D A B
0,09 0,12 0,39 0,21 0,19
4 4 2 3 3
0,0 0,09 0,21 0,6 0,81
C
Słowo kodu 0,0000000... 0,0001011... 0,0011010... 0,1001100... 0,1100011...
0000 0001 00 100 110
3. a) 0,10,110,1110,1111; b) 00, 01,101,1110. 4. Nieuporządkowanie liter względem prawdopodobieństw może powodować większą średnią długość słów kodowych, niż w wypadku uporządkowania liter; na przykład dla S x = (E , A , D, C, B) i P, = (0,09, 0,39, 0,12, 0,19, 0,21) słowami kodu są 00, 01, 100, 101, 11 o średniej długości równej 2,31, czyli większej niż 2,21 dla 225
Rozwiązania ćwiczeń
S = (A, B, C, D, E ) i P = (0,39, 0,21, 0,19, 0,12, 0,09). Użycie porządku nierosnącego powoduje, że wyłowach kodu zera są użyte zamiast jedynek i jedynki za miast zer.
Rozdział 3 1. Długości słów kodu dla źródła o prawdopodobieństwach -j, j ,
wy
noszą 2,2, 2, 2 lub 1,2, 3,3. Dla drugiego zbioru długości prawdopodobieństwu 1/4 odpowiada długość 3, większa niż długość Shannona - lg = 2. Rzecz w tym, że optymalność kodu zależy od długości średniej. 2. H(S) = 0,569, L Huffl = 1,1, efektywność = 51,7%; dla par liter L Huff2 = 1,545, efektywność wynosi 73,7%; rozważ wszystkie 27 trójek liter źródłowych. 3. Dla 2k liter źródłowych wszystkie prawdopodobieństwa są takie same lub Pn-1+Pn >Pl4. Dla kodów r-literowych w algorytmie Huffmana łączy się za każdym razem r prawdopodobieństw. Każdy węzeł drzewa ma r potomków, gdy istnieje począt kowo k(r - 1) + 1 prawdopodobieństw, przy czym k jest liczbą iteracji algorytmu. Gdyby w ostatniej iteracji nie było r prawdopodobieństw, kod byłby nieoptymal ny. Dlatego na początku do istniejących n prawdopodobieństw dodajemy i < r prawdopodobieństw równych zeru, przy czym n + i = k(r - 1) + 1. W przykładzie z niniejszego ćwiczenia r = 3 i n = 8, zatem dodajemy i = 2 prawdopodobieństwa równe zeru, dzięki czemu 8 + 2 = k(4 - 1) + 1 dla k = 3, co daje LHuff = 1,4, a bez czego L IJuff = 2. 5.
H(S) = 6,29, LHuff = 4 fe 4 )+ 12(1L6)+ 1 6 ( ^ 8)+ 32(1^ 7 ) + 6 4 (^ 8 )= 6 j =
= 6,333 i 952 bitów na wszystkie litery, natomiast LHank =4(j^4)+ 4(^5)+ + K"iV6)+ (48GMl + 7))+64(2L(l-t-7))) = 8-jŁ- i 148 bitów z 1-bitowym słowem ko du dla zbioru ELSE. 6. Gdy podział na małe i duże prawdopodobieństwa jest bardzo wyraźny i gdy liczba prawdopodobieństw jest duża. 7. RekurencyjnyAlgorytmHuffmana(zf>iÓ7- z) zadeklaruj zmienne fi, f2 i zmienną drzewo; ifjeśli pozostały tylko dwie częstości w zbiorze z 226
!
Rozdział 4 return drzewo z liczbami fi, f2 w liściach i U + f2 w korzeniu-, else usuń dwie najmniejsze częstości ze zbioru z i przypisz je zmiennym fi i f2; włącz fi + f2 do zbioru z; drzewo = RekurencyjnyAlgorytmHuffmana(z); w strukturze drzewo zrób liść z h + h rodzicem liści z fi i f2; return drzewo;
8. Pomnożenie licznika przez a < 1 powoduje jego zmniejszenie i jeśli jakiś symbol jest nieużywany przez długi czas, to po kilku takich pomnożeniach związa ny z nim licznik zostanie znacznie zmniejszony, dzięki czemu węzeł ten będzie przemieszczony w dół drzewa, dzięki czemu odpowiadać mu będzie dłuższe słowo kodowe, zwalniając krótsze słowo dla częściej używanych symboli. 9. Propozycja Vittera jest określona używaną przez niego implementacją; za tem operację przesunięcia możemy zastąpić operacją zamiany miejscami.
Rozdział 4 1. Nie zawsze, gdyż ograniczenie dolne może mieć nieskończone rozwinięcie, np. binarnym rozwinięciem liczby dziesiętnej 0,1 jest liczba 0,00(0110), przy czym część w nawiasie jest powtórzona nieskończoną liczbę razy. 2. bieżącyPrzedział może się nieustannie zmniejszać, jeśli podprzedział wybrany z odcinka bieżącyPrzedział zawsze jest zawarty w [0,25, 0,5], wskutek czego w koń cu, z powodu ograniczonej precyzji, bieżącyPrzedział = 0. Dla danych z przykła du 4.3 wszystko jest jednak w porządku i otrzymanym słowem kodu jest liczba 0,00111100102 = 0,236328125 e [0,23608, 0,2368], 3. bieżący Przedział
buforBitów/ /bity na wejściu
buforBitów w systemie dziesiętnym
(0,1) [0, 0,4) [0, 0,8) [0,32, 0,56) [0,14, 0,62)
0011111000111 0011111000111 011111000111 0111I1000111 01111000111
0,1875 0,1875 0,4375 0,4375 0,4375 (-0,25)
Wybrany podprzedział
Litera na wyjściu
[0,0,4)
A
[0,32, 0,56)
B
[0,332, 0,476)
B
Rozwiązania ćwiczeń bieżącyPrzedział [0,332, 0,476) [0,664,0,952) [0,328,0,904) [0,7312, 0,7888) [0,4624, 0,5776) [0,4248,0,6552) [0,3496,0,8104)
buforBitów/ /biljMa wejściu
buforBitów w systemie dziesiętnym
01111000111 1110|00111 110010111 110010111 1000|111 1001| 11 1011|1
0,4375 0,8750 0,7500 (-0,5) 0,7500 0,5000 (-0,5) 0,5625 (-0,25) 0,6875 (-0,25)
Wybrany podprzedział
Litera na wyjściu
[0,7312,0,7888)
C
[0,71824 0,8104)
C
Błąd! Przedział [0,3496,0,8104) zostaje podzielony na przedziały [0,3496 0,53392) [0,53392,0,67216) [0,67216,0,71824) [0,71824 0,8104), z których powinien być wybrany przedział [0,71824, 0,8104), odpowiadający symbolowi lecz zamiast tego został wybrany przedział [0,67216, 0,71824). Problem polega na tym, że najmniejszą liczbą, którą buforBitów może reprezento wać jest liczba 0,00012 = 0,0625, jednakże przedział [0,67216, 0,71824) ma dłu gość 0,04608.
4. Dla S = {A, #}, P = {0,9, 0,1} i komunikatu AAAA # otrzymujemy nas jący ciąg przetworzonych liter, przedziałów i bitów na wyjściu [0,1) A A A A #
[0,0,9) [0,0,81) [0,0,729) [0,0,6561) [0,59049, 0,6561) 1 [0,18098,0,3122) 0 [0,36196,0,6244) [0,22392, 0,7488) 011
słowo kodu = 10011. Dla S = {A, #}, P = {0,1, 0,9} i komunikatu AAAA mamy [0,1) A
A
[0,0,1) [0, 0, 2) [0,0,4) [0, 0,8) [0,0,08) [0,0,16) [0,0,32) [0,0,64)
0 0 0 0 0 0
228
Rozdział 5 [0, 0,064) [0,0,128) [0,0,256) [0,0,512) [0,0,0512) [0,0,1024) [0,0,2048) [0,0,4096) [0,0,8192) [0,08192,0,8192)
0 0 0 0 0 0 0 01
słowo kodu = 000000000000001, niemal trzykrotnie dłuższe niż poprzednio. 5. Na ogół nie. Np. w przykładzie 4.4 usunięcie pierwszego zera z buforu bitów dało na wyjściu zł, usunięcie drugiego zera dało B. 6. Opuszczenie, dodanie lub zmiana jednego bitu może powodować błąd w de kodowaniu pozostałej jeszcze części komunikatu, co jest problemem również w wy padku kodowania Huffmana i Ziva-Lempela. 7. Częstości kumulatywne muszą być aktualizowane dla wszystkich symboli na stępujących w źródle S po symbolu aktualnie przetwarzanym.
Rozdział 5 1. Każde inicjowanie jest do przyjęcia, pod warunkiem że koder i dekoder go używają. 2. Dla lx =l2= 16 = 24 informacja dotycząca pozycji p i długości / wymaga 8 bi tów = 1 bajt; na rysunku 5.1 wymaga ona 4 bitów, a zatem trójka < p ,l,s> wymaga 2 bajtów w pierwszym wypadku i 1,5 bajtu w drugim, co powoduje, że co druga trójka mieści się w dwóch sąsiednich bajtach. 3. Algorytm LZ77 działa najlepiej, gdy za każdym razem przesunięcie w bufo rze równa się /2 pozycji, a najgorzej, gdy pierwszy symbol w buforze kodowania nie ma odpowiednika w buforze słownikowym.
229
Rozwiązania ćwiczeń
4. Słowo kodu
Bufor
Wyjście
bbbb bbbbba bbbababb babbc abbcba bcbaaab
b 31a 23b 30c 21a 32b
ba babb c ba aab
Bufor po przesunięciu bbba babb abbc bcba aaab
wyjście: bababbcbaaab. 5. Wejście
Wyjście
a 022 1* 023 1c 012 004 1a u
aa b aba c ba acba a d
Wejście
1 2 4 3 1 4 9 5 8 12 2
Bufor aaaa aaaaaa aaaab aaababa babac abacba acbaacba acbaa cbaad
Wyjście
Indeks
a b ab c a ab aba ba aa aaa b 230
Bufor po przesunięciu aaaa aaab baba abac acba acba cbaa baad
1 2 3
Ciąg a b c
4 5 6 7 8 9 10 11 12 13
ab ba abc ca aa aba abab baa aaa aaab
i
Rozdział 6 7. Najdłuższy kodowalny ciąg zawiera l2 symboli; każdy dłuższy ciąg, który po nownie pojawia się na wejściu, nie będzie zakodowany w sposób efektywny. W ko munikacie abcdefghabcdefghiabcdefghi. .. długość ciągu abcdefghi > 8, gdzie 8 jest długością całego bufora (8 = l\ + /2), jeśli więc bufor zawiera abcdefgh, to osobne trójki trzeba utworzyć dla e, /, g itd. By poradzić sobie z tym problemem, należy zwiększyć długość bufora. 8. Nie, jeśli słownik zawiera pusty ciąg na pozycji 0. 9. Wejście
ab ba aba abac CC ccd dc ccd c ccdca
Wyjście
Indeks
1 2 5 7 3 9 4 10 12
Ciąg
1 2 3 4 5
a
6
ba
7 8 9 10 11 12 13
b c d ab ab a abac CC ccd dc ccd c c cd ca
Rozdział 6 1. Na filmie koła będą się obracać do przodu, lecz powoli, 6 obrotów na se kundę, jak na rys. 6.3a, a więc błąd rekonstrukcji nie znika. 2. Gdy wartości próbek równe są zeru. 3. a) 44100 • 8 • 3600 bitów = 151,4 MB. 4. Obliczeń możemy dokonać tylko dla połowy poziomów decyzyjnych i poło wy poziomów kwantyzacji na mocy symetrii funkcji rozkładu prawdopodobieństwa. Jeśli takiej symetrii funkcja ta nie wykazuje (np. rozkład Rayleigha), to optymali zacji tej nie możemy dokonać. 5. Z warunku najmniejszego błędu wynika, że dla próbki x, wartość y na wyj ściu minimalizuje \x - r, |, tj. x jest między poziomami rM i r„ i zostaje wybrany po ziom kwantyzacji bliższy*. Dokonujemy tego przypisaniem dhi = (rM + r,)/2. Jeśli 231
Rozwiązania ćwiczeń komórką jest przedział [dM, dt], to (6.4) jest warunkiem centroidów dla przypadku jednowymiarowego. 6. Ograniczenia te umożliwiają kwantyzatorowi zmianę kroku A„. Po pominię ciu warunku 1 > M 1 wartości M; mogą być większe niż 1, co powodowałoby zwięk szenie kroku dla każdej próbki. 7. a) Wektory kodu: [3,5 8,25] [7,33 5,33], pierwsza grupa: [4 6] [5 10] [3 9] [2 8], druga grupa: pozostałe pary. b) Wektory kodu: [4,33 5] [8 8,75], pierwsza grupa: [4 6] [3 9] [2 8] [8 4] [5 1] [9 2], druga grupa: pozostałe wektory; duży wektor [20 20] nie utworzy grupy, wynik jest taki sam jak bez tego wektora.
Rozdział 7 1. Gdy na wejściu jest długi prosty odcinek. 2. Dla e_i = 1, e_2 = -1, Amin = 1 oraz A-j = 5 (= pierwsza próbka), modulator generuje następujący ciąg liczb: 2,5, 3,75, 5, 7,5, 12,5, 22,5, 42,5, 82,5, 62,5, 42,5, 2.5, 22,5, 42,5, 82,5, 62,5, 42,5, 2,5, 22,5, 42,5, 32,5, 22,5, 2,5, 12,5, 7,5, 2,5, 5, 7,5, 12.5.17.5, 20,18,75 z kumulatywnym błędem predykcji E 31 = 271. 3. D la e_! =1, A_! = 5: a) M = 1,2: 0,8, 4,3, 8,5, 5,0, 7,9, 11,4, 15,5, 20,5, 26,5, 33,7, 42,4, 35,2, 41,2, 48.4, 57,0, 49,8, 41,2, 30,8, 18,4, 28,7, 20,1, 9,7, 18,4, 11,2, 2,5, 9,7, 18,4, 11,2, 17,2, 24.4, 18,4, 23,4; E 31 = 217; b) M = 1,6: 1,9, 3,8, 7,0, 12,0, 20,0, 32,8, 53,2, 40,4, 48,4, 43,4, 35,4, 40,4, 48,4, 43.4, 46,6, 51,6, 48,4, 43,4, 35,4, 22,6, 30,6, 25,6, 17,6, 4,8, 12,8, 7,8, 11,0, 16,0,24,0, 19,0, 22,1, 20,1; E 31 = 154; c) M = 2: 2,5, 3,8, 6,3, 11,3, 21,3, 41,3, 81,3, 61,3, 21,3, 41,3, 31,3, 36,3, 46,3, 66,3, 56,3, 36,3, -3,8,16,3, 56,3, 36,3, -3,8,16,3, 6,3, -13,8, -3,8,16,3, 6,3, 113,213, 163,18,8,23,8; = 335.
Rozdział 8 1. Logarytm przypisuje pojedynczym liczbom pojedyncze liczby, macierz trans formacji przypisuje ciągom liczb ciągi liczb. 2. Dla każdego z N ■N składników macierzy Y, wykonanych jest 2N operacji mnożenia i 2(N - 1) operacji dodawania, by pomnożyć macierze; do tego należy 232
Rozdział 9
dodać N2 operacji mnożenia parametru przez otrzymaną macierz, co daje N ■N ■ •(2N + 2(N - 1)) + N 2 = 0 ( N 3) operacji. W równaniu (8.4) Y jest wektorem o N 2 składnikach, a macierz transformacji ma wymiar N 2 x N 2, co wymaga wyko nania N 2 ■(N 2 + N 2- 1) + N 2= 0 ( N Ą) operacji. 3. F(m) =
f(lc) = J | X
cos 2 n +
C(m)f (m) cos 271
4. Dla [1 1 1 l]r i
^
dla m = 1,2,.... N -1,
+1} dla k =
'2 0 1 1 ; DCT: to transformata Hadamarda: [2 0 0 0]r i 0 0 1 1
samo. Dla [2 1 3 2]T i
2 1 transformata Hadamarda: [4 1 -1 1]T i 3 2
4 1 -1 0
4 1 10 1 transformata Ha. Dla [10 1 8 -5]r i -1 0 9 “ 5. 7 11 7 11 ; jedno- i dwu damarda: [7 114 -2]T i j; DCT: [7 7,9 -2 8,632]r i 4 -2 4 -2 DCT: [4 -0,541 0 l,3 0 7 f i
wymiarowe DCT są różne, gdyż różne są współczynniki mnożenia, jednakże od wrotna DCT odtwarza oryginał w obu wypadkach.
Rozdział 9 1. Zmiany krzywej stają się łagodniejsze ze wzrostem liczby uśrednianych próbek. 2. a) H (2nf) = \c o s 2 n f+ \ \ b ) H (2 x f) = ^ c o s 2 r r f ; c)H (2 n f) = =
-
^
c o s 2 ti f + \ .
3. Dla M interwałów trzeba R = Tlg M~| bitów do zakodowania każdego inter wału unikatowym słowem kodu. Dla kwantyzatora równomiernego, średnia M= f-srj dx = *f-, skąd a \ = Jb
a więc D = $ = i- ^ - = 2~2R crh
Rozwiązania ćwiczeń 4. a) Rk = R +± \g ( o 2m / ( 1 6 < 8 < 2 < <
)1/4) =
= R + i i g & D - i ;
zatem i?, = 5 ,R 2 = 4,5, R3 = 3,5 i /?4 = 3; b) R , = 4,75, /?2 = 4,25, = 3,75, fl4 = 3,25; c) R , = 5,5, /?2 = 4,5, = 3,5, /?4 = 2,5. 5. a) Użyj liczby bitów otrzymanej przez zaokrąglenie albo b) zmieniaj liczbę bitów, np. dla /?, = 1,5, użyj przemiennie /?, = 1 i i?, = 2.
Rozdział 12 1. ak —ck + C-k, bk —i(ck —c_fc), a0 —2c0. 2. a) i-^ c o s 2 x -, JX ^ V 100
> * £ s n=l
sin
c) ^ + 4 ^ ”=i^ c o s / « ;
(2n-\)x
(2n-l)3
.
S
>
cos(2n-l).« . 2
* Z j b=1
(2n-l)2
’
3. Należy zauważyć, że (a) iloczyn funkcji parzystej i nieparzystej jest funkcją nieparzystą; (b) sinus jest funkcją nieparzystą, a kosinus parzystą; (c) dla funkcji nieparzystej g,
ra J-a
g(x)dx = 0.
4. G (/) = G2(27rf) = V 2^G 1(2 ^ ). 5. a) Używając podstawienia s =x/a, otrzymujemy co
co
co
g(x)-o- jg (f)e ~ i2,'y* dx = jg (s) e i2ny(as>d(as) = a jg (s ) e-i2*(w)* ds = aG(ay) b) W powyższym równaniu należy zastąpić a wyrazem 1/a. 00
co
c) (ag +bh)(x) <-» ]"(«£ + 6/i)(jt) e~i2ny* dx = J(ag(;e) + M(;t)) e-i2nyx ć
„■ >
f H e-PI2a.
o. a; V
U\ _ 2 a
■
*. g - a | / | .
’W a e
_a~‘f
„ \_ _ _ _ _ _ _ _ _ _ _1_
’> ai+ p > e; ai+/2+1
f) n dla \f\ < a i 0 dla \f\ > a. 234
Rozdział 12 7. a) DFT = {8, 2 - 4,828i, O, 2 - 0,828j, O, 2 + 0,828i, O, 2 + 4,828i}, DCT = {2,828, 2,563, O, -0 ,9 ,0, 0,6, O, -0,5}; b) {8,4,828 + 2i, O, -0,828 - 2i, O, -0,828 + 2i, 0 ,4,828 - 2i}, {2,828, O, 2,613, O, O, O, -1,082,0}; c) {8, O, 4 - 4i, O, O, O, 4 + 4i, 0}, {2,828, 1,062, O, 2,173, O, -1,452, O, -
0 , 211 } ;
d) {16, O, O, O, O, O, O, 0}, {5,657, O, O, O, O, O, O, 0}.
Skorowidz
A AC 175 alfabet 14 algorytm centroidów 106 - Lloyda-Maxa 103 - najmniejszego kwadratu średniej 131 -zachłanny 77 amplituda 91,199 autoinformaq'a 14
B baza przestrzeni wektorowej 159 bit 14 błąd kwantyzacji 98 bufor kodowania 77 - słownikowy 77 C częstotliwość 91,198-199 - próbkowania 93 D DC 175 DCT 154, 217 decymacja 167 deskryptor 196 DFT 153, 210 długość Shannona 25 DPCM 123-132 drzewiasta książka kodów 110 dynamiczne kodowanie Huffmana 45-57 dyskretna transformata Fouriera 153-154, 210, 213 - - kosinusowa 154-155, 217-218
E efektywność 32 entropia 15 - indywidualna 14 F fala 91 falka podstawowa 155 faza 91 filtr 162-166 funkcja falkowa 155 G gradient 131 granulacja 116
I IDCT 217 J jądro transformacji 136-138 język definicji deskrypcji 196 JPEG 171 JPEG 2000 187
K kanał bezszumowy 12 - z szumem 12 KLT 147 kod jednoznacznie dekodowalny 19 - optymalny 19 - przedrostkowy 19
Skorowidz
1 I | %
£ ‘-5 " (
?
•= | I I 's ji i i
kodowanie arytmetyczne 59-74 - bezstratne 12 - Fallera-Gallagera-Knutha 46-51 - Huffmana 37-59 - piramidowe 184 - podpasmowe 161-170 - Shannona 33-34,59 - Shannona-Fano 34-36 - Vittera 51-56 - Weavera-Hankamera 44-45 - ze stratą 12 - z opóźnieniem 117-123 kompensacja ruchu 192 krok kwantyzacji 99 książka kodów 103 kumulatywny błąd predykcji 116 kwantyzaq'a 12, 92,96-111 - dynamiczna 100-101 - nierównomierna 101-103 - równomierna 99-101 -skalarna 97-103 - wektorowa 97,103-111 kwantyzator bez zera 97 - z zerem 97
L lg 14 litera 14 linia falowa 91 LZ77 77-79,88 LZ78 81-83, 87-88 LZSS 79-81 LZW 83-88 M macierz autokorelacji 146 - diagonalna 156 - Hadamarda 143,150 -jednostkowa 156 - kowariancji 146 - odwrotna 156 - ortogonalna 158 - symetryczna 156 - transformacji 136 - transponowana 156 metoda najszybszego spadku 131 miara błędu kwantyzacji 97, 105 mnożnik kroku 116 modulacja delta 114-123
MPEG-1 188 MPEG-2 195 MPEG-3 196 MPEG-4 196 MPEG-7 196 N nadpróbkowanie 167
O obiekt medialny 196 okres próbkowania 93 P podpróbkowanie 167 poziom decyzyjny 96 - kwantyzaqi 96 próbkowanie 12,92-96 przeciążenie zbocza 115
R rozkład jednostajny 111 - Laplace’a 112 -normalny 112 równanie charakterystyczne 157 - normalne 125 S schemat deskrypcyjny 196 sekwens 151 słownik dynamiczny 77 - statyczny 76 sygnał 91 - analogowy 11 - różnicowy 115 symbol 14 szereg Fouriera 199 szum kwantyzacji 98 Ś
średni błąd kwantyzacji 98 T transformata 135-145 - falkowa, dyskretna 155 - Fouriera 206, 207 - Hadamarda 150
Skorow idz
transformata Karhunena-Loevego 145-150 - separowalna 137 - # - Walsha-Hadamarda 152 transmitancja 163 twierdzenie Fallera-Gallagera 47 - Krafta 21 - o próbkowaniu 93,218-220 - Shannona 26 W wariancja 111 wartość oczekiwana 111 - własna macierzy 157 warunki Dirichleta 199 wektor treningowy 105 - własny 157 wektory liniowo niezależne 158 - ortogonalne 158 - ortonormalne 158 - znormalizowane 158
WHT152 widmo amplitudowe 211 - fazowe 211 właściwość rodzeństwa 46 współczynnik Fouriera 199 - kompresji 24 - predykcji 123 - transformaty 136 wyznacznik macierzy 156 Z zjawisko Gibbsa 215 zmienna losowa 111 zysk predykcyjny 125 Ź
źródło bez pamięci 14 - binarne 15 - dyskretne 12
WNT. Warszawa 2007 Wyd. II. Ark. wyd. 15,0. Ark. druk. 15,0 Symbol Et/84291/WNT
W skład serii „Klasyka Informatyki” wchodzą dzieła najwybitniejszych uczonych świata w dziedzinie informatyki - książki o nieprzemijającej wartości, stanowiące bazę solidnego, klasycznego wykształcenia każdego profesjonalnego informatyka. Wydawnictwa Naukowo-Techniczne przygotowały tę serię ze szczególną pieczołowitością, powierzając tłumaczenie poszczególnych tomów znakomitym specjalistom. Wyboru książek dokonano w ścisłej współpracy z polskim środowiskiem akademickim, dedykując serię głównie studentom informatyki i młodym pracownikom naukowym.