Aufgabe 2.12: Run–Length Coding und RLLC

Aus LNTwww
Version vom 12. August 2021, 16:55 Uhr von Guenter (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

Tabelle zu Run–Length Coding

Wir betrachten eine Binärquelle mit dem Symbolvorrat  $\rm A$  und  $\rm B$, wobei  $\rm B$  allerdings nur sehr selten auftritt.

  • Ohne Quellencodierung würde man pro Quellensymbol genau ein Bit benötigen, und dementsprechend würde bei einer Quellensymbolfolge der Länge  $N$  für die Codebitfolge ebenfalls  $N_\text{Bit} = N$  gelten.
  • Entropiecodierung macht hier ohne weitere Maßnahme  (Beispiel:  Zusammenfassen mehrerer Symbole zu einem Tupel) wegen der ungünstigen Symbolwahrscheinlichkeiten wenig Sinn.
  • Abhilfe schafft  Run-Length Coding  $(\rm RLC)$, das unter dem genannten Link im Theorieteil beschrieben ist.  Zum Beispiel ergibt sich für die Symbolfolge   $\rm ABAABAAAABBAAB\text{...}$   die entsprechende Ausgabe von  "Run–Lenght Coding"':   $ 2; \ 3; \ 5; \ 1; \ 3; \text{...}$
  • Natürlich muss man die Längen  $L_1 = 2$,  $L_2 = 3$, ...  der einzelnen, jeweils durch  $\rm B$  getrennten Substrings vor der Übertragung binär darstellen.  Verwendet man für alle  $L_i$  jeweils  $D = 3$  (Bit), so erhält man die RLC–Binärfolge
$$010\hspace{0.05cm}\text{'}\hspace{0.05cm}011\hspace{0.05cm}\text{'}\hspace{0.05cm}101\hspace{0.05cm}\text{'}\hspace{0.05cm}001\hspace{0.05cm}\text{'}\hspace{0.05cm}011\hspace{0.05cm}\text{'}\hspace{0.05cm}\text{...}$$

Die Grafik zeigt das das zu analysierende RLC–Ergebnis.  In Spalte 2 und 3 sind die Substringlängen  $L_i$  binär bzw. dezimal angegeben und in Spalte 4 in kumulierter Form  (Werte von Spalte 3 aufsummiert).

  • Ein Problem von  "Run-Length Coding"  $\rm (RLC)$  ist der unbegrenzte Wertebereich der Größen  $L_i$.  Mit  $D = 3$  kann kein Wert  $L_i > 7$  dargestellt werden und mit  $D = 2$  lautet die Beschränkung  $1 \le L_i \le 3$.
  • Das Problem umgeht man mit  "Run–Length Limited Coding"  $\rm (RLLC)$.  Ist ein Wert  $L_i \ge 2^D$, so ersetzt man  $L_i$  durch ein Sonderzeichen  S  und die Differenz  $L_i - 2^D +1$.  Beim RLLC–Decoder wird dieses Sonderzeichen  S  wieder expandiert.





Hinweise:


$\text{RLLC-Beispiel}$:  Wir gehen wieder von obiger Folge und dem Parameter  $D = 2$  aus:

  • Quellensymbolfolge:    $\rm ABAABAAAABBAAB$...
  • RLC–Dezimalfolge:        2; 3; 5; 1; 3; ...
  • RLLC–Dezimalfolge:     2;  3;  S; 2;  1;  3; ...
  • RLLC–Binärfolge:           10′11′ 00′10′01′11′...


Man erkennt:

  • Das Sonderzeichen  S  ist hier als  00  binär–codiert.  Dies ist nur ein Beispiel – es muss nicht so sein.
  • Da mit  $D = 2$  für alle echten RLC–Werte  $1 \le L_i \le 3$  gilt, erkennt der Decoder das Sonderzeichen  00.
  • Er ersetzt dieses wieder durch  $2^D -1$  (im Beispiel drei)  $\rm A$–Symbole.


Fragebogen

1

Wieviele Bit würde man  ohne Quellencodierung  benötigen, also mit der Zuordnung  $\rm A$   →  0  und  $\rm B$   →  1?

$N_\text{Bit} \ = \ $

2

Wie groß ist die relative Häufigkeit des Symbols  $\rm B$?

$h_{\rm B}\ = \ $

$\ \%$

3

Wie viele Bit benötigt man für  Run–Length Coding  $\rm (RLC)$  nach der angegebenen Tabelle mit acht Bit pro Codewort  $(D = 8)$?

$N_\text{Bit} \ = \ $

4

Ist hier  Run–Length Coding  mit sieben Bit–Codeworten  $(D = 7)$  möglich?

Ja.
Nein.

5

Wie viele Bit benötigt man für  Run–Length Limited Coding  $\rm (RLLC)$  mit sieben Bit pro Codewort  $(D = 7)$?

$N_\text{Bit} \ = \ $

6

Wie viele Bit benötigt man für  Run–Length Limited Coding  $\rm (RLLC)$  mit sechs Bit pro Codewort  $(D = 6)$?

$N_\text{Bit} \ = \ $


Musterlösung

(1)  Die Binärfolge besteht aus  $N = 1250$  Binärsymbolen  (ablesbar aus der letzten Spalte in der Tabelle).  Damit benötigt man ohne Codierung ebenso viele Bit:

$$N_\text{Bit}\hspace{0.15cm}\underline{= 1250}.$$


(2)  Die gesamte Symbolfolge der Länge  $N = 1250$  beinhaltet  $N_{\rm B} = 25$  Symbole  ${\rm B}$  und somit  $N_{\rm A} = 1225$  Symbole  ${\rm A}$. 

  • Die Anzahl  $N_{\rm B}$  der Symbole  ${\rm B}$  ist dabei gleich der Zeilenzahl in der vorne angegebenen Tabelle.
  • Damit gilt für die relative Häufigkeit  von  ${\rm B}$:
$$h_{\rm B} = \frac{N_{\rm B}}{N} = \frac{25}{1250} \hspace{0.15cm}\underline{= 0.02} = 2\%\hspace{0.05cm}. $$


(3)  Wir betrachten nun  "Run–Length Coding"  $\rm (RLC)$, wobei jeder Abstand zwischen zwei  ${\rm B}$–Symbolen mit acht Bit dargestellt wird  $(D = 8)$.

  • Damit ergibt sich mit  $N_{\rm B} = 25$:
$$N_{\rm Bit} = N_{\rm B} \cdot 8 \hspace{0.15cm}\underline{= 200} \hspace{0.05cm}.$$


(4)  $\rm RLC$  mit  $D = 7$  erlaubt für  $L_i$  nur Werte zwischen  $1$  und  $2^7-1 =127$.

  • Der Eintrag „226” in Zeile 19 ist aber größer     ⇒     NEIN.


(5)  Auch bei Run–Length Limited Coding  $\rm (RLLC)$  sind für die „echten” Abstände  $L_i$  mit  $D = 7$  nur Werte bis  $127$  zulässig.

  • Der Eintrag „226” in Zeile 19 wird bei  $\rm RLLC$  ersetzt durch
  • Zeile 19a:   S = 0000000   ⇒   Sonderzeichen, steht für „+ 127”,
  • Zeile 19b:   1100011   ⇒   Dezimal 99.
  • Damit erhält man insgesamt $26$ Worte zu je sieben Bit:
$$N_{\rm Bit} = 26 \cdot 7 \hspace{0.15cm}\underline{= 182} \hspace{0.05cm}.$$


(6)  Nun müssen bei  $\rm RLLC$  gegenüber  $\rm RLC$  (siehe Tabelle) folgende Änderungen vorgenommen werden:

  • Zeile   1:   $122 = 1 · 63 + 59$   (ein Wort mehr),
  • Zeile   6:     $70 = 1 · 63 + 7$     (ein Wort mehr),
  • Zeile   7:     $80 = 1 · 63 + 17$   (ein Wort mehr),
  • Zeile 12:     $79 = 1 · 63 + 16$   (ein Wort mehr),
  • Zeile 13:     $93 = 1 · 63 + 30$   (ein Wort mehr),
  • Zeile 19:   $226 = 3 · 63 + 37$   (drei Worte mehr),
  • Zeile 25:     $97 = 1 · 63 + 34$   (ein Wort mehr).


Damit erhält man insgesamt  $25 + 9 =34$  Worte zu je sechs Bit:

$$N_{\rm Bit} = 34 \cdot 6 \hspace{0.15cm}\underline{= 204} \hspace{0.05cm},$$

also ein schlechteres Ergebnis als mit sieben Bit gemäß Teilaufgabe (5).