Difference between revisions of "Exercise 2.12: Run–Length Coding and Run–Length Limited Coding"

From LNTwww
Line 26: Line 26:
  
 
Hints:  
 
Hints:  
*Die Aufgabe gehört zum  Kapitel  [[Information_Theory/Weitere_Quellencodierverfahren|Other source coding methods]].
+
*This exercise belongs to the chapter  [[Information_Theory/Weitere_Quellencodierverfahren|Other source coding methods]].
 
*In particular, reference is made to the page  [[Information_Theory/Weitere_Quellencodierverfahren#Run.E2.80.93Length_coding|Run-Length Coding]].
 
*In particular, reference is made to the page  [[Information_Theory/Weitere_Quellencodierverfahren#Run.E2.80.93Length_coding|Run-Length Coding]].
 
   
 
   
Line 91: Line 91:
 
'''(2)'''  The entire symbol sequence of length  $N = 1250$  contains  $N_{\rm B} =  25$  symbols  ${\rm B}$  and thus  $N_{\rm A} =  1225$  symbols  ${\rm A}$. 
 
'''(2)'''  The entire symbol sequence of length  $N = 1250$  contains  $N_{\rm B} =  25$  symbols  ${\rm B}$  and thus  $N_{\rm A} =  1225$  symbols  ${\rm A}$. 
 
*The number  $N_{\rm B}$  der Symbole  ${\rm B}$  ist dabei gleich der Zeilenzahl in der vorne angegebenen Tabelle.   
 
*The number  $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}$:
+
*Thus the following applies to the relative frequency of   ${\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&nbsp; <i>Run&ndash;Length Coding</i>&nbsp; $\rm (RLC)$, wobei jeder Abstand zwischen zwei&nbsp; ${\rm B}$&ndash;Symbolen mit acht Bit dargestellt wird&nbsp; $(D = 8)$.  
+
'''(3)'''&nbsp; We now consider&nbsp; <i>Run&ndash;Length Coding</i>&nbsp; $\rm (RLC)$, where each distance between two&nbsp; ${\rm B}$&ndash;symbols is represented by eight bits&nbsp; $(D = 8)$.  
*Damit ergibt sich mit&nbsp; $N_{\rm B} =  25$:
+
*Thus, with&nbsp; $N_{\rm B} =  25$, we get::
 
:$$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; $\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$.  
+
'''(4)'''&nbsp; $\rm RLC$&nbsp;  with&nbsp; $D = 7$&nbsp;only allows values between&nbsp; $1$&nbsp; und&nbsp; $2^7-1 =127$ for&nbsp; $L_i$&nbsp; .  
*Der Eintrag "226" in Zeile 19 ist aber größer &nbsp; &nbsp; &#8658; &nbsp; &nbsp; <u>NEIN</u>.
+
*However, the entry "226" in line 19 is greater &nbsp; &nbsp; &#8658; &nbsp; &nbsp; <u>NO</u>.
  
  
'''(5)'''&nbsp; Auch bei Run&ndash;Length Limited Coding&nbsp;  $\rm (RLLC)$&nbsp; sind für die "echten" Abstände&nbsp; $L_i$&nbsp; mit&nbsp;  $D = 7$&nbsp; nur Werte bis&nbsp; $127$&nbsp; zulässig.  
+
'''(5)'''&nbsp; Even with Run&ndash;Length Limited Coding&nbsp;  $\rm (RLLC)$&nbsp; , only values up to&nbsp; $127$&nbsp are permitted for the "real" distances&nbsp; $L_i$&nbsp; with&nbsp;  $D = 7$&nbsp; ;.
*Der Eintrag "226" in Zeile 19 wird bei&nbsp;  $\rm RLLC$&nbsp; ersetzt durch
+
*The entry "226" in line 19 is replaced by the following for&nbsp;  $\rm RLLC$&nbsp;
  
:* Zeile 19a: &nbsp;  <b>S</b> = <b>0000000</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Sonderzeichen, steht für "+ 127",
+
:* Line 19a: &nbsp;  <b>S</b> = <b>0000000</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; special character, stands for "+ 127",
  
:* Zeile 19b: &nbsp;  <b>1100011</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; Dezimal 99.
+
:* Line 19b: &nbsp;  <b>1100011</b> &nbsp;&nbsp;&#8658;&nbsp;&nbsp; decimal 99.
  
*Damit erhält man insgesamt $26$ Worte zu je sieben Bit:
+
*This gives a total of $26$ words of seven bits each:
 
:$$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&nbsp; $\rm RLLC$&nbsp; gegenüber&nbsp; $\rm RLC$&nbsp; (siehe Tabelle) folgende Änderungen vorgenommen werden:
+
'''(6)'''&nbsp; Now the following changes have to be made in&nbsp; $\rm RLLC$&nbsp; compared to&nbsp; $\rm RLC$&nbsp; (see table):
  
* Zeile &nbsp;&nbsp;1: &nbsp; $122 = 1 &middot; 63 + 59$ &nbsp;&nbsp;(ein Wort mehr),
+
* Zeile &nbsp;&nbsp;1: &nbsp; $122 = 1 &middot; 63 + 59$ &nbsp;&nbsp;(one word more),
  
* 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;(one word more),
  
* 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;(one word more),
  
* Zeile 12: &nbsp;&nbsp;&nbsp; $79 = 1 &middot; 63 + 18$ &nbsp;&nbsp;(ein Wort mehr),
+
* Zeile 12: &nbsp;&nbsp;&nbsp; $79 = 1 &middot; 63 + 18$ &nbsp;&nbsp;(one word more),
  
* 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;(one word more),
  
* Zeile 19: &nbsp; $226 = 3 &middot; 63 + 37$  &nbsp;&nbsp;(drei Worte mehr),
+
* Zeile 19: &nbsp; $226 = 3 &middot; 63 + 37$  &nbsp;&nbsp;(one word more),
  
* 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;(one word more).
  
  
Damit erhält man insgesamt $34$ Worte zu je sechs Bit:
+
This gives a total of $34$ words of six bits each:
 
:$$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 sieben Bit gemäß Teilaufgabe '''(5)'''.
+
i.e. a worse result than with seven bits according to subtask '''(5)'''.
 
{{ML-Fuß}}
 
{{ML-Fuß}}
  

Revision as of 13:06, 9 August 2021

Table on Run-Length Coding

We consider a binary source with the symbol set  $\rm A$  and  $\rm B$, where  $\rm B$  however, occurs only very rarely.

  • Without source coding, exactly one bit would be needed per source symbol, and accordingly, for a source symbol sequence of length  $N$  would also apply to the code bit sequence  $N_\text{Bit} = N$ .
  • Entropy coding makes little sense here without further measures  (example:  combining several symbols into a tuple) wbecause of the unfavourable symbol probabilities.
  • The remedy is  Run-Length Coding  $(\rm RLC)$, which is described in the theory section under the link mentioned.  For example, for the symbol sequence   $\rm ABAABAAAABBAAB\text{...}$   the corresponding output of Run–Length Coding:   $ 2; \ 3; \ 5; \ 1; \ 3; \text{...}$
  • Of course, the lengths  $L_1 = 2$,  $L_2 = 3$, ...  of the individual substrings, each separated by  $\rm B$ , must be represented in binary before transmission.  If one uses  $D = 3$  (bit) for all  $L_i$  one obtains the RLC binary sequence
$$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{...}$$

The graph shows the RLC result to be analysed.  Columns 2 and 3 show the substring lengths  $L_i$  in binary and decimal, respectively, and column 4 shows them in cumulative form  (values from column 3 added up).

  • One problem of Run-Length Coding  $\rm (RLC)$ is the unlimited range of values of the quantities  $L_i$.  With  $D = 3$ , no value  $L_i > 7$  can be represented and with  $D = 2$ , the restriction is  $1 \le L_i \le 3$.
  • The problem is circumvented with Run–Length Limited Coding  $\rm (RLLC)$.  If a value is  $L_i \ge 2^D$, one replaces  $L_i$  with a special character  S  and the difference  $L_i - 2^D +1$.  With the RLLC decoder, this special character  S  is expanded again.





Hints:


$\text{RLLC Example}$:  We again assume the above sequence and the parameter  $D = 2$ :

  • Source symbol sequence:    $\rm ABAABAAAABBAAB$...
  • RLC decimal sequence:        2; 3; 5; 1; 3; ...
  • RLLC decimal sequence:     2;  3;  S; 2;  1;  3; ...
  • RLLC binary sequence:           01′11′ 00′10′01′11′...


You can see:

  • The special character  S  is binary-coded here as  00 .  This is only an example – it does not have to be like this.
  • Since with  $D = 2$  for all real RLC values  $1 \le L_i \le 3$ , the decoder recognises the special character  00.
  • It replaces this again with  $2^D -1$  (three in the example)  $\rm A$–symbols.


Questions

1

How many bits would be needed  without source coding , i.e. with the assignment  $\rm A$   →  0  and  $\rm B$   →  1?

$N_\text{Bit} \ = \ $

2

What is the relative frequency of symbol  $\rm B$?

$h_{\rm B}\ = \ $

$\ \%$

3

How many bits are needed for  Run–Length Coding  $\rm (RLC)$  according to the given table with eight bits per codeword  $(D = 8)$?

$N_\text{Bit} \ = \ $

4

Is  Run–Length Coding  with seven bit code words  $(D = 7)$  possible here?

Yes.
No.

5

How many bits are needed for  Run–Length Limited Coding  $\rm (RLLC)$  with seven bits per code word  $(D = 7)$?

$N_\text{Bit} \ = \ $

6

How many bits are needed for  Run–Length Limited Coding  $\rm (RLLC)$  with six bits per codeword  $(D = 6)$?

$N_\text{Bit} \ = \ $


Solutions

(1)  The binary sequence consists of  $N = 1250$  binary symbols (can be read from the last column in the table).  This means that the same number of bits is needed without coding:

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


(2)  The entire symbol sequence of length  $N = 1250$  contains  $N_{\rm B} = 25$  symbols  ${\rm B}$  and thus  $N_{\rm A} = 1225$  symbols  ${\rm A}$. 

  • The number  $N_{\rm B}$  der Symbole  ${\rm B}$  ist dabei gleich der Zeilenzahl in der vorne angegebenen Tabelle.
  • Thus the following applies to the relative frequency of   ${\rm B}$:
$$h_{\rm B} = \frac{N_{\rm B}}{N} = \frac{25}{1250} \hspace{0.15cm}\underline{= 0.02} = 2\%\hspace{0.05cm}. $$


(3)  We now consider  Run–Length Coding  $\rm (RLC)$, where each distance between two  ${\rm B}$–symbols is represented by eight bits  $(D = 8)$.

  • Thus, with  $N_{\rm B} = 25$, we get::
$$N_{\rm Bit} = N_{\rm B} \cdot 8 \hspace{0.15cm}\underline{= 200} \hspace{0.05cm}.$$


(4)  $\rm RLC$  with  $D = 7$ only allows values between  $1$  und  $2^7-1 =127$ for  $L_i$  .

  • However, the entry "226" in line 19 is greater     ⇒     NO.


(5)  Even with Run–Length Limited Coding  $\rm (RLLC)$  , only values up to  $127$&nbsp are permitted for the "real" distances  $L_i$  with  $D = 7$  ;.

  • The entry "226" in line 19 is replaced by the following for  $\rm RLLC$ 
  • Line 19a:   S = 0000000   ⇒   special character, stands for "+ 127",
  • Line 19b:   1100011   ⇒   decimal 99.
  • This gives a total of $26$ words of seven bits each:
$$N_{\rm Bit} = 26 \cdot 7 \hspace{0.15cm}\underline{= 182} \hspace{0.05cm}.$$


(6)  Now the following changes have to be made in  $\rm RLLC$  compared to  $\rm RLC$  (see table):

  • Zeile   1:   $122 = 1 · 63 + 59$   (one word more),
  • Zeile   6:     $70 = 1 · 63 + 7$     (one word more),
  • Zeile   7:     $80 = 1 · 63 + 17$   (one word more),
  • Zeile 12:     $79 = 1 · 63 + 18$   (one word more),
  • Zeile 13:     $93 = 1 · 63 + 30$   (one word more),
  • Zeile 19:   $226 = 3 · 63 + 37$   (one word more),
  • Zeile 25:     $97 = 1 · 63 + 34$   (one word more).


This gives a total of $34$ words of six bits each:

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

i.e. a worse result than with seven bits according to subtask (5).