Forum: FPGA, VHDL & Co. Optimale Länge einer Prüfsumme für unterschiedl. Wortbreiten


von Frank L. (franky83)


Lesenswert?

Hallo,

ich habe mal noch eine allg. Frage zu Prüfsummen. Gibt es eine 
Rechenregel mit der man für jede Wortbreite (32Bit,64Bit,128Bit,256Bit) 
die optimale Länge einer Prüfsumme berechnen kann? Bei einem 32Bit Wort 
ist ja eine 32Bit Prüfsumme sehr ineffizient. Es geht hier speziell um 
XOR, Fletcher, Adler und 1er Kompl. Prüfsummen.

Ich hoffe ihr könnt mich aufklären.

von lenz (Gast)


Lesenswert?

Das ist doch immer abhaengig davon, was man genau machen moechte.

Fehlererkennung oder auch Fehlerkorrektur?
Sprich, welche Hamming-Distanz ist angedacht?

Reden wir hier von Pruefsummen ueber EIN oder ueber MEHRERE Worte?

Und um die Frage etwas genauer zu beantworten:

Wirf mal einen blick auf "perfekte Codes" und "optimale Codes"

Aber dazu solltest Du ersteinmal noch die Aufgabenstellung 
konkretisieren...

von Frank L. (franky83)


Lesenswert?

Ich war der Meinung, dass die von mir genannten Verfahren ausschließlich 
zur Fehlererkennung sinnvoll sind und keine Fehlerkorrektur 
unterstützen.

Wir reden hier von Prüfsummen über EIN Wort.

Es sollen nur bestimmte Prüfsummen so implementiert werden, dass diese 
nicht unnötig Bandbreite verschwenden.

von lenz (Gast)


Lesenswert?

nun, ein XOR ueber ein einziges Wort ist aber erm, schwierig, bzw. 
ziemlich sinnfrei. Nachdem einen aber niemand zwingt ein 32-Bit wort 
nicht als 4  8-bit worte zu betrachten etc., ist die Aufgabe sicher 
nicht trivial zu loesen, es kommt sicher zumindest auch darauf an, wie 
viele Fehler man erkennen koennen moechte, wobei wir wieder bei der 
gewuenschten Hammingdistanz waeren?
Das hatte ich nicht erwaehnt, weil fuer mcih alles, was ueber mehr als 
einen Fehler erkennen rausgeht automatisch in 1 Fehler korrigieren 
uebergeht...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank L. schrieb:
> Wir reden hier von Prüfsummen über EIN Wort.
Da ist die einfachste Prüfsumme das Parity. Damit lässt sich eine 
ungerade Anzahl von Bitfehlern erkennen. Wenn das ausreicht, ist diese 
1-Bit-Prüfsumme genügend...
Und die einfachste Prüfsumme über ein Byte ist das Byte selber. Zweimal 
übertragen und zweimal gleich empfangen --> höchstwahrscheinlich 
fehlerfrei.

Frank L. schrieb:
> Gibt es eine Rechenregel mit der man für jede Wortbreite
> die optimale Länge einer Prüfsumme berechnen kann?
Nein, denn du hast hier die nötige Sicherheit, mit der ein Fehler 
erkannt werden kann, aussen vor gelassen. Die optimale Länge ist die, 
die wenig Aufwand bereitet und ausreichend sicher die Erkennung von 
Fehlern erlaubt.

von Frank L. (franky83)


Lesenswert?

OK, ich steh jetzt richtig auf dem Schlauch. Grundsätzlich war ich der 
Meinung, dass zur Fehlerbehebung CRC oder Hamming Code verwendet wird. 
Ist eine Prüfsumme (XOR, Fletcher, Adler) auch in der Lage Fehler zu 
korrigieren?
Wie würdet ihr eine Prüfsumme für ein Wort mit 128Bit nach XOR und 
Fletcher berechnen? Also die Berechnung ist mir klar aber ich weiß nicht 
wie ich die Länge der Prüfsumme wählen sollte. Da steig ich noch nicht 
hinter. 128Bit in 4Bit o. 8Bit o. 32Bit Wörter zerlegen?

von (prx) A. K. (prx)


Lesenswert?

Frank L. schrieb:

> Ist eine Prüfsumme (XOR, Fletcher, Adler) auch in der Lage Fehler zu
> korrigieren?

Bei grösseren Datenmengen: Beispielsweise 16 Blöcke zu je 512 Bytes mit 
einer normalen nicht korrekturfähigen CRC pro Sektor. Von den 16 sind 
die letzten 2 Blöcke abwechselnd aufsummierte XOR-Blöcke. Kann jeden 
Burst-Fehler bis zur Länge eines Blocks korrigieren und ist so einfach, 
dass es noch der dümmste embedded Controller schafft (QIC-1000 
Bandformat).

von Tilo (Gast)


Lesenswert?

Deine Frage kann man nicht pauschal beantworten. Du musst den 
Übertragungsweg und dessen Fehlerwahrscheinlichkeit kennen. Du musst 
auch wissen, wie viele Fehler tollerierbar sind.
Mit diesen Angaben kann dann die Kanalkodierung (bei dir Prüfsumme) 
bestimmt werden. nicht ohne Grund bleibt bei WLan von den 54MBit brutto 
netto nicht mehr viel übrig. Der Kanal ist sehr fehleranfällig. Bei 
RS232 mit 9600 baud muss man sich fast keine Gedanken machen. Bei 1Mbaud 
sieht die Sache wieder anders aus.

von Tilo (Gast)


Lesenswert?

Man kann mit Kanalkodierung Fehler erkennen und auch beheben. Das hängt 
von der Redundanz im Code ab.

von Frank L. (franky83)


Lesenswert?

Danke Tilo für deine Hilfe.

Der Übertragungsweg ist auf einem FPGA zwischen PowerPC und PCB. Bitte 
keine Fragen wie sinnvoll das ist, ist eben so.

Wie würde Redundanz in einem Code gebildet werden. Ich würde mich über 
ein Bsp. sehr freuen. VG

von Tilo (Gast)


Lesenswert?

Google mal nach Kanalkodierung

von lenz (Gast)


Lesenswert?

Das einfachste Beispiel für Redundanz würde bereits genannt: Ein 
"dummer" Wiederholungscode:
0xAA 0xAA
Hier kann man Fehler erkennen (und im rein digitalen) keinen Fehler 
beheben.

Ich denke das geläufigste Beispiel für Fehlerkorrektur dürften 
Reed-Solomon-Codes sein (zum Beispiel macht das der CD-Player).

Allgemein: was ist Redundanz: Zusätzliche Daten, die an die in den 
eigentlichen Nutzdaten enthalten sind oder gezielt an diese angefügt 
werden. Quasi "unnötige" Daten. Die kann man aber eben hervorragend 
nutzen, um kaputte Signale wieder zu reparieren.

Einfaches Beispiel: Wenn ich Datum A, Datum B und Datum A xor B 
übertrage, dann übertrage ich zwar drei Datenworte, kann aber wenn der 
Kanal oBdA Datum B verworfen hat (Beispiel Ethernet, UDP, Prüfsumme) 
trotzdem Datum B wiederherstellen (ja, das ist nicht, was Du suchst, ich 
weiss)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.