Implementierung der Shannon-Fano-Codierung in MATLAB
codeShannonFano nimmt die Auftrittswahrscheinlichkeit der Buchstaben eines beliebigen Alphabets als Eingabe und erzeugt eine Codierung nach Shannon-Fano als Ausgabe.
Aufruf der Shannon-Fano-Codierung
codeShannonFano([0.5 0.2 0.2 0.1]);
Implementierung der Shannon-Fano-Codierung
function [ codewoertersf ] = codeShannonFano( codewoerter ) %codeShannonFano Codiert nach dem Shannon-Fano-Verfahren % Liefert die codierten CWs zurueck if (length(codewoerter) == 1) codewoertersf = {''}; else %% divide half = 1; % ermittle ungefaehre Mitte der Wahrscheinlichkeiten while (sum(codewoerter(1:half))) < (0.5 * sum(codewoerter)) half = half + 1; end %% conquer % rufe die Methode rekursiv auf und speichere die sf-codewoerter ersterteil = codeShannonFano(codewoerter(1:half)); zweiterteil = codeShannonFano(codewoerter((half+1):end)); %% combine % erstelle eine cell mit der selben groesse wie die variable % codewoerter codewoertersf = cell(size(codewoerter)); % setze an anfang der sf-codewoerter des ersten teils eine 0 j = 1; for i=1:half codewoertersf{i} = ['0', ersterteil{j}]; j = j + 1; end %setze an anfang der sf-codewoerter des zweiten teils eine 1 j = 1; for i=(half+1):length(codewoerter) codewoertersf{i} = ['1', zweiterteil{j}]; j= j + 1; end end end