Podręcznik
1. Matematyczna modelowanie informacji
1.8. Proste przykłady kodowania
\\Jedną z najprostszych metod kodowania jest zastąpienie serii identycznych symboli liczbą powtórzeń danego symbolu . Niech sekwencja danych wejściowych będzie następująca:. Jeśli wyznaczymy model opisujący dane źródłowe seriami jednakowych symboli według schematu: $(\text{liczba powtórzeń}, \text{symbol})$, wówczas opis $\mathbf{s}_{we}$ źródła za pomocą takiego modelu jest następujący: $\mathcal{M}_{\mathbf{s}_{we}}^{\text{serie}}=\big((3,5),(2,2),(5,11),(1,8)\big)$. Ustalmy, że wynikająca z przyjętego modelu postać opisu jest kodowana binarnie w najprostrzy sposób według zasady, bazującej na przyjętych wstępnie ograniczeniach:
- przy założeniu długości serii nie dłuższej niż 8, na pierwszych trzech bitach zapisywana jest dwójkowo liczba (pomniejszona o jeden) powtórzeń symbolu,
- przy założeniu postaci alfabetu $A_S=\{0,\ldots,15\}$, na kolejnych czterech bitach kodu dwójkowego reprezentowany jest symbol tej serii.
Binarna postać sekwencji kodowej $\mathbf{s}_{wy}$ wygląda wówczas następująco: $\mathbf{s}_{wy}=(\texttt{0100101},\ \texttt{0010010},\ \texttt{1001011},\texttt{0001000})$. Uzyskano efekt redukcji długości reprezentacji danych z 44 bitów postaci źródłowej (przyjmując 4 bity na pojedynczy symbol) do 28 bitów wyjściowych. Efektywność tej metody rośnie, gdy pojawiają się długie serie powtórzeń symboli.
Inna metoda kodowania wykorzystuje fakt, że niektóre symbole źródłowe pojawiają się częściej, zaś pozostałe rzadziej. Różnicowanie długości słów kodowych poszczególnych symboli polega na przypisaniu krótszych słów symbolom wystepującym częściej. Model opisuje wówczas częstości wystapień symboli za pomocą wag $w(\cdot)$, równych sumie wystąpień poszczególnych symboli alfabetu. W przypadku rozważanej $\mathbf{s}_{wy}$ mamy więc: $\mathcal{M}_{\mathbf{s}_{we}}^{\text{wagi}}=\{w(5)=3,w(2)=2,w(11)=5$, $w(8)=1\}$. Jeśli na podstawie tych wag zróżnicujemy słowa kodowe w sposób następujący: $\varsigma (5)=\texttt{10},\varsigma (2)=\texttt{110},\varsigma (11)=\texttt{0},\varsigma (8)=\texttt{111}$, wówczas otrzymamy ciąg wyjściowy: $\mathbf{s}_{wy}=(\texttt{10},\texttt{10},\texttt{10},\texttt{110},\texttt{110},\texttt{0},\texttt{0},\texttt{0},\texttt{0},\texttt{0},\texttt{111})$ o długości 20 bitów. Druga forma modelowania okazała się skuteczniejsza, chociaż wymaga jeszcze szereg dookreśleń (w zakresie metody ustalania słów kodowych o zmiennej długości oraz konieczności przekazania w nagłówku pliku skompresowanego parametrów modelu $\mathcal{M}_{\mathbf{s}_{we}}^{\text{wagi}}$.
Przykładem wstępnej dekompozycji danych w celu uproszczenia modelu jest wyskorzystanie prostego mechanizmu liczenia różnic pomiędzy wartością kodowaną i wartością bezpośrednio ją poprzedzającą: $\mathcal{D}^{\text{różnice}}=\{r_i:\ r_i=s_i-s_{i-1}, i=1,\ldots,11,\ s_0=0 \}$. Dla rozważanej $\mathbf{s}_{we}$ mamy wtedy $\mathcal{D}_{\mathbf{s}_{we}}^{\text{różnice}}=\{5,0,0,-3,0,9,0,0,0,0,-3\}$. Dalej stosując modelowanie z wagami ustalamy: $\mathcal{M}_{\mathbf{s}_{we}}^{\text{wagi różnic}}=\{w(5)=1,w(0)=7,w(-3)=2,w(9)=1\}$. Przypisując tym symbolom zróżnicowane długością słowa kodowe: $\varsigma (5)=\texttt{110}$, $\varsigma (0)=\texttt{0}$, $\varsigma (-3)=\texttt{10}$, $\varsigma (9)=\texttt{111}$, uzyskamy 18 bitów postaci zakodowanej.
Modelowanie to użycie skutecznych modeli statystycznych i predykcyjnych, oszczędnego opisu lokalnych zależności danych, konstrukcja słownika z najczęściej występującymi frazami (ciągami danych wejściowych), wykorzystanie wiedzy dostępnej a priori na temat kompresowanego zbioru danych, poprzedzone niekiedy przekształceniem (dekompozycją) danych zwiększającą ich podatność na modelowanie, a w konsekwencji - na kodowanie binarne, itd. Istotne są przy tym kontekstowe zależności danych sąsiednich w sekwencji wejściowej lub też w oryginalnej przestrzeni danych kodowanych, np. pewne metryczne zależności w przestrzeni koloru i w przestrzeni geometrycznej w obrazach.
Na podstawie uzyskanej reprezentacji pośredniej tworzona jest binarna sekwencja wyjściowa (kodowa), poprzez przypisanie ciągów bitów (słów kodowych) poszczególnym danym (pojedynczym symbolom alfabetu źródła informacji), całej sekwencji danych wejściowych lub jej poszczególnym częściom.