WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Shannon Fano Code

 

Senzenberger
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 07.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2014, 13:57     Titel: Shannon Fano Code
  Antworten mit Zitat      
Hi,

ich sollte den Fano-Code rekursive programmieren. Ich habe bereits ein Textfile aus gelesen und einen Vektor mit den Wahrscheinlichkeiten mit den die Zeichen vorkommen erstellt. Der Vektor ist absteigend sortiert. Ich habe bereits im Internet nach einen Code gesucht und diesen zu verstehen. Ich wollte fragen ob jemand von euch eine Lösung hat die man leichter nach vollziehen kann.
Es wäre mir sehr geholfen wenn jemand einen Vorschlag hat.

Lg
Senzi
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.03.2014, 00:50     Titel: Re: Shannon Fano Code
  Antworten mit Zitat      
Hallo Senzenberger,

Welchen Copde hast Du denn im Internet gefunden? Es ist schwierig etwas zu empfehlen, was leichter zu verstehen ist, wenn man nicht weiß, was Dir bereits vorliegt. Vielleicht kannst Du ja auch eine konkrete Frage zu Deinem Code stellen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Senzenberger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 07.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2014, 09:41     Titel:
  Antworten mit Zitat      
Ja,dass stimmt. Ich verwenden folgenden Code
Code:

function [ codewoertersf ] = codeShannonFano( codewoerter )
%codeShannonFano Codiert nach dem Shannon-Fano-Verfahren
%   Liefert die codierten CWs zurueck
if (length(codewoerter) == 1)
    codewoertersf = {''};
else
    %% divided
    half = 1;
    % ermittle ungefaehre Mitte der Wahrscheinlichkeiten
    while (sum(codewoerter(1:half))) <= (0.5 * sum(codewoerter))
        half = half + 1;
    end
   
    if(sum(codewoerter(1:half))-sum(codewoerter(half+1:end))>abs(sum(codewoerter(1:half-1))-sum(codewoerter(half:end))))      
        half = half - 1;
    end
 
    %% conquerd
    % 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
 


Die if-Bedingung mit sum codewörter wurde bereits ergänzt weil die Teilung der Mitte nicht funktionierte. Dann habe ich aber immer noch das Problem , dass einige Codewörter in der Mitte kürzer sind. d.h die Codewörterlänge steigt nicht immer an. Ich denke es sollte so ein weil mit einem Testfile zum Bsp
Code:

codewoerter=[0.4 0.18 0.14 0.10 0.08 0.05 0.05];
 

ist es so.

Am meisten Verständnisprobleme bereitet mir der die Rekursive Programmierung und die die Verwendung von Cell Strukturen.

Vielen Dank
Senzi
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.