Aufgabe 2.12: Run–Length Coding und RLLC: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
(Die Seite wurde neu angelegt: „ {{quiz-Header|Buchseite=Informationstheorie/Weitere Quellencodierverfahren }} right|Tabelle zu Run–Length Coding Wir…“)
 
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
}}
 
}}
  
[[Datei:P_ID2474__Inf_A_2_13_neu.png|right|Tabelle zu Run–Length Coding]]
+
[[Datei:P_ID2474__Inf_A_2_13_neu.png|right|frame|Tabelle zu Run–Length Coding]]
Wir betrachten eine Binärquelle mit dem Symbolvorrat <b>A</b> und <b>B</b>, wobei <b>B</b> allerdings nur sehr selten auftritt.
+
Wir betrachten eine Binärquelle mit dem Symbolvorrat&nbsp; $\rm A$&nbsp; und&nbsp; $\rm B$, wobei&nbsp; $\rm B$&nbsp; 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&nbsp; $N$&nbsp; für die Codebitfolge ebenfalls&nbsp; $N_\text{Bit} = N$&nbsp; gelten.
 +
* Entropiecodierung macht hier ohne weitere Maßnahme&nbsp; (Beispiel:&nbsp; Zusammenfassen mehrerer Symbole zu einem Tupel) wegen der ungünstigen Symbolwahrscheinlichkeiten wenig Sinn.
 +
* Abhilfe schafft&nbsp; [[Informationstheorie/Weitere_Quellencodierverfahren#Laufl.C3.A4ngencodierung_.E2.80.93_Run.E2.80.93Length_Coding|Run-Length Coding]]&nbsp; $(\rm RLC)$, das unter dem genannten Link im Theorieteil beschrieben ist.&nbsp; Zum Beispiel ergibt sich für die Symbolfolge &nbsp; $\rm ABAABAAAABBAAB\text{...}$ &nbsp; die entsprechende Ausgabe von&nbsp; "Run&ndash;Lenght Coding"': &nbsp; $ 2; \ 3; \ 5; \ 1; \ 3; \text{...}$
 +
* Natürlich muss man die Längen&nbsp; $L_1 = 2$,&nbsp; $L_2 = 3$, ...&nbsp; der einzelnen, jeweils durch&nbsp; $\rm B$&nbsp; getrennten Substrings vor der Übertragung binär darstellen.&nbsp; Verwendet man für alle&nbsp; $L_i$&nbsp; jeweils&nbsp; $D = 3$&nbsp; (Bit), so erhält man die RLC&ndash;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&ndash;Ergebnis.&nbsp; In Spalte 2 und 3 sind die Substringlängen&nbsp; $L_i$&nbsp; binär bzw. dezimal angegeben und in Spalte 4 in kumulierter Form&nbsp; (Werte von Spalte 3 aufsummiert).
 +
 
 +
*Ein Problem von&nbsp; "Run-Length Coding"&nbsp; $\rm (RLC)$&nbsp; ist der  unbegrenzte Wertebereich der Größen&nbsp; $L_i$.&nbsp; Mit&nbsp; $D = 3$&nbsp; kann kein Wert&nbsp; $L_i > 7$&nbsp; dargestellt werden und mit&nbsp; $D = 2$&nbsp; lautet die Beschränkung&nbsp; $1 \le L_i \le 3$.
 +
 
 +
*Das Problem umgeht man mit&nbsp; "Run&ndash;Length Limited Coding"&nbsp; $\rm (RLLC)$.&nbsp; Ist ein Wert&nbsp; $L_i \ge 2^D$, so ersetzt man&nbsp; $L_i$&nbsp; durch ein Sonderzeichen&nbsp; <b>S</b>&nbsp; und die Differenz&nbsp; $L_i - 2^D +1$.&nbsp; Beim RLLC&ndash;Decoder wird dieses Sonderzeichen&nbsp; <b>S</b>&nbsp; wieder expandiert.
 +
 
 +
 
  
* 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 Codebit folge folge ebenfalls $N_\text{Bit} = N$gelten.
 
* Entropiecodierung macht hier ohne weitere Maßnahme (Zusammenfassen mehrerer Symbole zu einem Tupel) wegen der ungünstigen Symbolwahrscheinlichkeiten wenig Sinn.
 
* Abhilfe schafft [[Informationstheorie/Weitere_Quellencodierverfahren#Laufl.C3.A4ngencodierung_.E2.80.93_Run.E2.80.93Length_Coding|Run-Length Coding]] (RLC), das unter dem genannten Link im Theorieteil beschrieben ist. Zum Beispiel ergibt sich für die Quellensymbolfolge: '''ABAABAAAABBAAB''' ... die entsprechende Ausgabe von ''Run&ndash;Lenght Coding'': &nbsp;&nbsp;''' 2; 3; 5; 1; 3;''' ...
 
* Natürlich muss man die Längen $L_1 = 2$, $L_2 = 3$, ... der einzelnen, jeweils durch <b>B</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&ndash;Binärfolge '''010&prime;011&prime;101&prime;001&prime;011&prime;'''...
 
  
Die Grafik zeigt das  das zu analysierende RLC&ndash;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'' (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 <i>Run&ndash;Length Limited Coding</i> (RLLC). Ist ein Wert $L_i \ge 2^D$, so ersetzt man $L_i$ durch ein Sonderzeichen <b>S</b> und die Differenz $L_i - 2^D +1$. Beim RLLC&ndash;Decoder wird dieses Sonderzeichen <b>S</b> wieder expandiert.
 
  
  
 
''Hinweise:''  
 
''Hinweise:''  
*Die Aufgabe gehört zum  Kapitel [[Informationstheorie/Weitere_Quellencodierverfahren|Weitere Quellencodierverfahren]].
+
*Die Aufgabe gehört zum  Kapitel&nbsp; [[Informationstheorie/Weitere_Quellencodierverfahren|Weitere Quellencodierverfahren]].
*Insbesondere wird  Bezug genommen auf die Seite [[Informationstheorie/Weitere_Quellencodierverfahren#Laufl.C3.A4ngencodierung_.E2.80.93_Run.E2.80.93Length_Coding|Lauflängencodierung &ndash; Run-Length Coding]].
+
*Insbesondere wird  Bezug genommen auf die Seite&nbsp; [[Informationstheorie/Weitere_Quellencodierverfahren#Laufl.C3.A4ngencodierung_.E2.80.93_Run.E2.80.93Length_Coding|Lauflängencodierung &ndash; Run-Length Coding]].
 
   
 
   
  
  
 
{{GraueBox|
 
{{GraueBox|
TEXT='''RLLC&ndash;Beispiel 2''':&nbsp; Wir gehen wieder von obiger Folge und dem Parameter $D = 2$ aus:
+
TEXT=$\text{RLLC-Beispiel}$:&nbsp; Wir gehen wieder von obiger Folge und dem Parameter&nbsp; $D = 2$&nbsp; aus:
* Quellensymbolfolge: &nbsp;&nbsp;'''ABAABAAAABBAAB''' ...
+
* Quellensymbolfolge: &nbsp;&nbsp; $\rm ABAABAAAABBAAB$...
 
* RLC&ndash;Dezimalfolge: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''2; 3; 5; 1; 3;''' ...
 
* RLC&ndash;Dezimalfolge: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''2; 3; 5; 1; 3;''' ...
* RLLC&ndash;Dezimalfolge: &nbsp;&nbsp;&nbsp; '''2; 3;'''<font color="#cc0000"><span style="font-weight: bold;"> S;</span></font>'''2; 1; 3;''' ...
+
* RLLC&ndash;Dezimalfolge: &nbsp;&nbsp;&nbsp; '''2;&nbsp; 3;&nbsp;'''<font color="#cc0000"><span style="font-weight: bold;"> S;</span></font>'''&nbsp;2;&nbsp; 1;&nbsp; 3;''' ...
* RLLC&ndash;Binärfolge: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''01&prime;11&prime;''' <font color="#cc0000"><span style="font-weight: bold;">00&prime;</span></font>'''10&prime;01&prime;11&prime;'''...
+
* RLLC&ndash;Binärfolge: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''10&prime;11&prime;''' <font color="#cc0000"><span style="font-weight: bold;">00&prime;</span></font>'''10&prime;01&prime;11&prime;'''...
 +
 
  
 
Man erkennt:  
 
Man erkennt:  
*Das Sonderzeichen <b>S</b> ist hier als <b>00</b> binär&ndash;codiert. Dies ist nur ein Beispiel &ndash; es muss nicht so sein.  
+
*Das Sonderzeichen&nbsp; <b>S</b>&nbsp; ist hier als&nbsp; <b>00</b>&nbsp; binär&ndash;codiert.&nbsp; Dies ist nur ein Beispiel &ndash; es muss nicht so sein.  
*Da mit $D = 2$ für alle echten RLC&ndash;Werte $1 \le L_i \le 3$ gilt, erkennt der Decoder das Sonderzeichen '''00'''.
+
*Da mit&nbsp; $D = 2$&nbsp; für alle echten RLC&ndash;Werte&nbsp; $1 \le L_i \le 3$&nbsp; gilt, erkennt der Decoder das Sonderzeichen&nbsp; '''00'''.
*Er  ersetzt dieses wieder durch $2^D -1$ (im Beispiel drei) <b>A</b>&ndash;Symbole.}}
+
*Er  ersetzt dieses wieder durch&nbsp; $2^D -1$&nbsp;  (im Beispiel drei)&nbsp; $\rm A$&ndash;Symbole.}}
  
  
Zeile 41: Zeile 49:
  
 
<quiz display=simple>
 
<quiz display=simple>
{Wieviele Bit würde man <i>ohne Quellencodierung</i> benötigen, also mit der Zuordnung <b>A</b>&nbsp;&#8594;&nbsp;<b>0</b> und <b>B</b>&nbsp;&#8594;&nbsp;<b>1</b>?
+
{Wieviele Bit würde man&nbsp; <u>ohne Quellencodierung</u>&nbsp; benötigen, also mit der Zuordnung&nbsp; $\rm A$ &nbsp; &#8594; &nbsp;<b>0</b>&nbsp; und&nbsp; $\rm B$ &nbsp; &#8594; &nbsp;<b>1</b>?
 
|type="{}"}
 
|type="{}"}
$\text{ohne Codierung:} \ N_\text{Bit} \ = \ $  { 1250 3% }
+
$N_\text{Bit} \ = \ $  { 1250 }
  
  
{Wie groß ist die relative Häufigkeit des Symbols <b>B</b>?
+
{Wie groß ist die relative Häufigkeit des Symbols&nbsp; $\rm B$?
 
|type="{}"}
 
|type="{}"}
 
$h_{\rm B}\ = \ $ { 2 3% } $\ \%$
 
$h_{\rm B}\ = \ $ { 2 3% } $\ \%$
  
  
{Wie viele Bit benötigt man für <i>Run&ndash;Length Coding</i> (RLC) entsprechend der angegebenen Tabelle mit 8 Bit&ndash;Codeworten ?
+
{Wie viele Bit benötigt man für&nbsp; <u>Run&ndash;Length Coding</U>&nbsp; $\rm (RLC)$&nbsp; nach der angegebenen Tabelle mit acht Bit pro Codewort&nbsp; $(D = 8)$?
 
|type="{}"}
 
|type="{}"}
$\text{RLC mit } D = 8\text{:} \ N_\text{Bit} \ = \ $ { 200 3% }  
+
$N_\text{Bit} \ = \ $ { 200 }  
  
  
{Ist hier <i>Run&ndash;Length Coding</i> mit 7 Bit&ndash;Codeworten möglich?
+
{Ist hier&nbsp; <u>Run&ndash;Length Coding</u>&nbsp; mit sieben Bit&ndash;Codeworten&nbsp; $(D = 7)$&nbsp; möglich?
|type="[]"}
+
|type="()"}
 
- Ja.
 
- Ja.
 
+ Nein.
 
+ Nein.
  
  
{Wie viele Bit benötigt man mit <i>Run&ndash;Length Limited Coding</i> (RLLC) mit 7 Bit pro Codewort?
+
{Wie viele Bit benötigt man für&nbsp; <u>Run&ndash;Length Limited Coding</U>&nbsp; $\rm (RLLC)$&nbsp; mit sieben Bit pro Codewort&nbsp; $(D = 7)$?
 
|type="{}"}
 
|type="{}"}
$\text{RLLC mit } D = 7\text{:} \ N_\text{Bit} \ = \ $ { 182 3% }
+
$N_\text{Bit} \ = \ $ { 182 }
  
  
{Wie viele Bit benötigt man mit <i>Run&ndash;Length Limited Coding</i> (RLLC) mit 6 Bit pro Codewort?
+
{Wie viele Bit benötigt man für&nbsp; <u>Run&ndash;Length Limited Coding</u>&nbsp; $\rm (RLLC)$&nbsp; mit sechs Bit pro Codewort&nbsp; $(D = 6)$?
 
|type="{}"}
 
|type="{}"}
$\text{RLLC mit } D = 6\text{:} \ N_\text{Bit} \ = \ ${ 204 3% }
+
$N_\text{Bit} \ = \ ${ 204 }
  
  
Zeile 77: Zeile 85:
 
===Musterlösung===
 
===Musterlösung===
 
{{ML-Kopf}}
 
{{ML-Kopf}}
'''(1)'''&nbsp; Die Binärfolge besteht aus insgesamt <i>N</i> = 1250 Binärsymbolen (ablesbar aus der letzten Spalte in der Tabelle). <br>Damit benötigt man ohne Codierung ebenso viele Bit: <i>N</i><sub>Bit</sub> <u>= 1250</u>.
+
'''(1)'''&nbsp; Die Binärfolge besteht aus&nbsp; $N = 1250$&nbsp; Binärsymbolen&nbsp; (ablesbar aus der letzten Spalte in der Tabelle).&nbsp; Damit benötigt man ohne Codierung ebenso viele Bit:  
 +
:$$N_\text{Bit}\hspace{0.15cm}\underline{= 1250}.$$
  
'''(2)'''&nbsp; Die gesamte Symbolfolge der Länge <i>N</i> = 1250 beinhaltet <i>N</i><sub>B</sub> = 25 Symbole <b>B</b> und somit   <i>N</i><sub>A</sub> = 1225 Symbole <b>A</b>. <br>Damit gilt für die relative Häufigkeit von <b>B</b>:
+
 
 +
'''(2)'''&nbsp; Die gesamte Symbolfolge der Länge&nbsp; $N = 1250$&nbsp; beinhaltet&nbsp; $N_{\rm B} = 25$&nbsp; Symbole&nbsp; ${\rm B}$&nbsp; und somit&nbsp; $N_{\rm A} = 1225$&nbsp; Symbole&nbsp; ${\rm A}$.&nbsp;
 +
*Die Anzahl&nbsp; $N_{\rm B}$&nbsp; der Symbole&nbsp; ${\rm B}$&nbsp; ist dabei gleich der Zeilenzahl in der vorne angegebenen Tabelle.  
 +
*Damit gilt für die relative Häufigkeit&nbsp; von&nbsp; ${\rm B}$:
 
:$$h_{\rm B} = \frac{N_{\rm B}}{N} = \frac{25}{1250} \hspace{0.15cm}\underline{= 0.02} = 2\%\hspace{0.05cm}. $$
 
:$$h_{\rm B} = \frac{N_{\rm B}}{N} = \frac{25}{1250} \hspace{0.15cm}\underline{= 0.02} = 2\%\hspace{0.05cm}. $$
  
'''(3)'''&nbsp; Wir betrachten nun <i>Run&ndash;Length Coding</i> (RLC), wobei jeder Abstand zwischen zwei <b>B</b>&ndash;Symbolen mit 8 Bit dargestellt wird (<i>D</i> = 8). Damit ergibt sich mit <i>N</i><sub>B</sub> = 25:
+
 
 +
'''(3)'''&nbsp; Wir betrachten nun&nbsp; "Run&ndash;Length Coding"&nbsp; $\rm (RLC)$, wobei jeder Abstand zwischen zwei&nbsp; ${\rm B}$&ndash;Symbolen mit acht Bit dargestellt wird&nbsp; $(D = 8)$.  
 +
*Damit ergibt sich mit&nbsp; $N_{\rm B} = 25$:
 
:$$N_{\rm Bit} = N_{\rm B} \cdot 8 \hspace{0.15cm}\underline{= 200} \hspace{0.05cm}.$$
 
:$$N_{\rm Bit} = N_{\rm B} \cdot 8 \hspace{0.15cm}\underline{= 200} \hspace{0.05cm}.$$
  
'''(4)'''&nbsp; <i>Run&ndash;Length Coding</i> mit <i>D</i> = 7 erlaubt für <i>L<sub>i</sub></i> nur Werte zwischen 1 und 127. Der Eintrag &bdquo;226&rdquo; in Zeile 19 ist aber größer &nbsp;&nbsp;&#8658;&nbsp;&nbsp; <u>NEIN</u>.
 
  
'''(5)'''&nbsp; Auch bei <i>Run&ndash;Length Limited Coding</i> (RLLC) sind für die &bdquo;echten&rdquo; Abstände <i>L<sub>i</sub></i> mit  <i>D</i> = 7 nur Werte zwischen 1 und 2<sup>7</sup> &ndash; 1 = 127 zulässig. Der Eintrag &bdquo;226&rdquo; in Zeile 19 wird bei RLLC ersetzt durch
+
'''(4)'''&nbsp; $\rm RLC$&nbsp;  mit&nbsp; $D = 7$&nbsp; erlaubt für&nbsp; $L_i$&nbsp; nur Werte zwischen&nbsp; $1$&nbsp; und&nbsp; $2^7-1 =127$.  
 +
*Der Eintrag &bdquo;226&rdquo; in Zeile 19 ist aber größer &nbsp; &nbsp; &#8658; &nbsp; &nbsp; <u>NEIN</u>.
 +
 
  
* Zeile 19a: <b>S</b> = <b>0000000</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Sonderzeichen, steht für &bdquo;+ 127&rdquo;,
 
  
* Zeile 19b: <b>1100011</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Dezimal 99.
+
'''(5)'''&nbsp; Auch bei Run&ndash;Length Limited Coding&nbsp;  $\rm (RLLC)$&nbsp; sind für die &bdquo;echten&rdquo; Abstände&nbsp; $L_i$&nbsp; mit&nbsp; $D = 7$&nbsp; nur Werte bis&nbsp; $127$&nbsp; zulässig.  
 +
*Der Eintrag &bdquo;226&rdquo; in Zeile 19 wird bei&nbsp;  $\rm RLLC$&nbsp; ersetzt durch
  
 +
:* Zeile 19a: &nbsp;  <b>S</b> = <b>0000000</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Sonderzeichen, steht für &bdquo;+ 127&rdquo;,
  
Damit erhält man insgesamt 26 Worte zu je 7 Bit:
+
:* Zeile 19b: &nbsp;  <b>1100011</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; 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}.$$
 
:$$N_{\rm Bit} = 26 \cdot 7 \hspace{0.15cm}\underline{= 182} \hspace{0.05cm}.$$
  
'''(6)'''&nbsp; Nun müssen bei RLLC gegenüber RLC (siehe Tabelle) folgende Änderungen vorgenommen werden:
 
  
* Zeile &nbsp;&nbsp;1: &nbsp;122 = 1 &middot; 63 + 59 &nbsp;&nbsp;(ein Wort mehr),
+
'''(6)'''&nbsp; Nun müssen bei&nbsp; $\rm RLLC$&nbsp; gegenüber&nbsp; $\rm RLC$&nbsp; (siehe Tabelle) folgende Änderungen vorgenommen werden:
 +
 
 +
* Zeile &nbsp;&nbsp;1: &nbsp; $122 = 1 &middot; 63 + 59$ &nbsp;&nbsp;(ein Wort mehr),
  
* Zeile &nbsp;&nbsp;6: &nbsp;&nbsp;&nbsp;70 = 1 &middot; 63 + 7 &nbsp;&nbsp;&nbsp;&nbsp;(ein Wort mehr),
+
* Zeile &nbsp;&nbsp;6: &nbsp;&nbsp;&nbsp; $70 = 1 &middot; 63 + 7$ &nbsp;&nbsp;&nbsp;&nbsp;(ein Wort mehr),
  
* Zeile &nbsp;&nbsp;7: &nbsp;&nbsp;&nbsp;80 = 1 &middot; 63 + 17 &nbsp;&nbsp;(ein Wort mehr),
+
* Zeile &nbsp;&nbsp;7: &nbsp;&nbsp;&nbsp; $80 = 1 &middot; 63 + 17$ &nbsp;&nbsp;(ein Wort mehr),
  
* Zeile 12: &nbsp;&nbsp;&nbsp;79 = 1 &middot; 63 + 18 &nbsp;&nbsp;(ein Wort mehr),
+
* Zeile 12: &nbsp;&nbsp;&nbsp; $79 = 1 &middot; 63 + 16$ &nbsp;&nbsp;(ein Wort mehr),
  
* Zeile 13: &nbsp;&nbsp;&nbsp;93 = 1 &middot; 63 + 30 &nbsp;&nbsp;(ein Wort mehr),
+
* Zeile 13: &nbsp;&nbsp;&nbsp; $93 = 1 &middot; 63 + 30$ &nbsp;&nbsp;(ein Wort mehr),
  
* Zeile 19: &nbsp;226 = 3 &middot; 63 + 37  &nbsp;&nbsp;(drei Worte mehr),
+
* Zeile 19: &nbsp; $226 = 3 &middot; 63 + 37$ &nbsp;&nbsp;(drei Worte mehr),
  
* Zeile 25: &nbsp;&nbsp;&nbsp;97 = 1 &middot; 63 + 34  &nbsp;&nbsp;(ein Wort mehr).
+
* Zeile 25: &nbsp;&nbsp;&nbsp; $97 = 1 &middot; 63 + 34$ &nbsp;&nbsp;(ein Wort mehr).
  
  
Damit erhält man insgesamt 34 Worte zu je 6 Bit:
+
Damit erhält man insgesamt&nbsp; $25 + 9 =34$&nbsp; Worte zu je sechs Bit:
 
:$$N_{\rm Bit} = 34 \cdot 6 \hspace{0.15cm}\underline{= 204} \hspace{0.05cm},$$
 
:$$N_{\rm Bit} = 34 \cdot 6 \hspace{0.15cm}\underline{= 204} \hspace{0.05cm},$$
also ein schlechteres Ergebnis als mit 7 Bit gemäß Teilaufgabe (5).
+
also ein schlechteres Ergebnis als mit sieben Bit gemäß Teilaufgabe '''(5)'''.
 
{{ML-Fuß}}
 
{{ML-Fuß}}
  

Aktuelle Version vom 12. August 2021, 17:55 Uhr

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).