5.3.1 Gleiche Symbolhäufigkeit

Ein Wort aus m Zeichen eines Alphabets mit n Zeichen gleicher Wahrscheinlichkeit hat den Informationsgehalt m*log2(n) . Man benötigt also wenigstens ceil(m*log2(n)) Binärstellen zur Repräsentation. Die Wandlung in das Binärwort kann einfach dadurch erfolgen, dass man das ursprüngliche Wort als Stellen-orientierte Zahl zur Basis n auffasst mit dem gegebenen Alphabet als Ziffern. Diese Zahl wird in eine Binärzahl gewandelt. Als Beispiel dient hier ein beliebiges Wort aus 6 Zeichen des speziellen Fernschreib-Alphabets PUA-43 aus folgenden 43 Zeichen:

ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,?/# $

str2binrep('TEST.','ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,?/# $');

binrep2str([ 0 1 1 1 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0 ],...
           'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,?/# $')

Wie in jedem Stellen-orientierten System ist die Ordnung im Alphabet der Ziffern wichtig.

Häufig liegt der Fall vor, dass an verschiedenen Stellen verschiedene Alphabete verwendet werden. Für eine optimal komprimierte Repräsentation von 7-stelligen ganzen Dezimalzahlen oder 6-stelligen Dezimahlzahlen, deren Dezimalpunkt zwischen der ersten und letzten Stelle liegen darf, kann man für die erste und die letzte Stelle die 10 Dezimalziffern nehmen und für die übrigen Stellen die Dezimalziffern plus Punkt. Der Informationsgehalt ist dann

     log2(10*11*11*11*11*11*10) = 23.94    

Die Repräsentation kann also in einem 24 Bit-Wort erfolgen. Bei der Wandlung in eine Binärzahl ist zu beachten, dass sich die Basis mit der Stelle ändert. Bei der Funktion str2binrep kann man entsprechend der Reihe nach für jede Stelle ein eigenes Alphabet angeben:

str2binrep('7214.25',{'0123456789' ;'0123456789.';'0123456789.';'0123456789.';...
                      '0123456789.';'0123456789.';'0123456789' ;})

Mit Matlab ist das natürlich übersichtlicher:

zahl = '7214.25'                      % zu repräsentierende Dezimalzahl
z  = '0123456789';                    % Alphabet 1
zp = '0123456789.';                   % Alphabet 2
alphabete = {z; zp; zp; zp; zp; zp; z};
cw = str2binrep(zahl,alphabete);      % Binär-Codewort
zd = binrep2str(cw,alphabete)         % Decodierte Zahl
result2fig(zahl)                      % Ausgabe der zu codierenden Zahl
Codewort = binmatout(cw); result2fig(Codewort) % Ausgabe des Codewortes
result2fig(zd);                       % Ausgabe der decodierten Zahl

Prüfen Sie, ob die Zahlen 9999999, 99999.9 , 0.00000 und 0000000 tatsächlich auch 24 Bits ergeben.
Warum ist der Binärcode für 0.00000 nicht das Wort aus 24 Nullen?
Warum scheint die Binärzahl für 99999.9 größer zu sein als die für 9999999 ? Ohne Matlab müssen die Alphabete direkt eingegeben werden, z.B.: