-
Der hier beschriebene Ansatz betrifft Lösungen zur Fehlerverarbeitung, umfassend z.B. die Erkennung oder Korrektur von Fehlern, insbesondere Bytefehlern. Die Erkennung kann auch betreffen eine Erkennung, ob (oder ob nicht) ein Fehler bestimmbar ist bzw. eine Fehlerposition bestimmbar ist. Insbesondere betrifft der hier beschriebene Vorschlag eine effiziente Korrektur eines weiteren Bytefehlers.
-
Es ist bekannt, Fehler in Daten, die in Form von Bytes vorliegen, byteweise zu erkennen und byteweise zu korrigieren. Ein Byte kann dabei mindestens zwei Bit umfassen. Mindestens ein Fehler in mindestens einem Bit eines Bytes wird als ein Bytefehler bezeichnet. Ist mindestens ein Bit eines Bytes fehlerhaft, liegt ein Bytefehler vor. Ist nur mindestens ein Bit eines einzelnen Bytes fehlerhaft, entspricht dies einem 1-Bytefehler.
-
Aus
DE 102021109391 B3 ist bekannt, einen Multibytefehler zu erkennen in einem Codewort eines verkürzten Fehlercodes.
-
Aus
DE 10 2017 125 617 A1 ist bekannt, parallel Bytefehlerpositionssignale zur Indentifikation von Bytefehlern zu bestimmen.
-
Die Korrektur von 1-Bytefehlern ist beispielsweise in [Bossen, D.: b-Adjacent Error Correction, IBM J. Res. Dev, July 1970, Seiten 402 bis 408] beschrieben.
-
Sind Bit von zwei unterschiedlichen Bytes fehlerhaft, entspricht dies einem 2-Bytefehler. Demnach gilt, dass ein k-Bytefehler vorliegt, wenn Bit in k Bytes fehlerhaft sind (d.h. mindestens ein Bit in jedem der k Bytes einen Fehler aufweist).
-
Es ist eine generelle Motivation, die Fehlerkorrektur eventuell fehlerhafter Bytes schnell durchzuführen. Dies gilt beispielsweise wenn in Bytes vorliegende Daten parallel aus einem Speicher ausgelesen und parallel bereitgestellt werden sollen. In so einem Szenario kann es vorteilhaft sein, auch die Fehlerkorrektur parallel durchzuführen.
-
Parallel bedeutet hierbei insbesondere, dass zumindest teilweise zeitgleich (beispielsweise auch zumindest teilweise zeitlich überlappend) eine Fehlerkorrektur oder ein Teil der Fehlerkorrektur für mindestens zwei Bytes durchgeführt wird.
-
Die Bytefehler-Korrektur kann beispielsweise mittels eines Reed-Solomon-Codes erfolgen.
-
In OKANO [Okano, H., Imai, H.: A Construction Method of High-Speed Decoders Using ROM's for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes, IEEE TRANSACTIONS ON COMPUTERS, VOL. C-36, NO. 10, OCTOBER 1987, Seiten 1165 bis 1171] ist eine Schaltungsanordnung zur Korrektur von 2-Bytefehlern unter Verwendung eines Reed-Solomon-Codes beschrieben. Hierbei ist es von Nachteil, dass die in OKANO beschriebene Korrektur von 2-Bytefehlern verhältnismäßig langsam ist.
-
Die Aufgabe der Erfindung besteht darin, Nachteile bekannter Lösungen zur Korrektur von Bytefehlern zu vermeiden und insbesondere eine effiziente Korrektur von Bytefehlern zu ermöglichen.
-
Diese Aufgabe wird gemäß den Merkmalen der unabhängigen Ansprüche gelöst. Bevorzugte Ausführungsformen sind insbesondere den abhängigen Ansprüchen entnehmbar.
-
Diese hierin vorgeschlagenen Beispiele können auf zumindest einer der nachfolgenden Lösungen basieren. Insbesondere können Kombinationen der nachfolgenden Merkmale eingesetzt werden, um ein gewünschtes Ergebnis zu erreichen. Die Merkmale des Verfahrens können mit (einem) beliebigen Merkmal(en) der Vorrichtung oder der Schaltung oder umgekehrt kombiniert werden.
-
Zur Lösung der Aufgabe wird ein Verfahren zur Fehlerverarbeitung vorgeschlagen,
- - wobei n Bytefehlerpositionen von n Bytefehlern vorgegeben sind, wobei n eine positive ganze Zahl ist,
- - bei dem bestimmt wird, ob es eine weitere Bytefehlerposition gibt anhand der n Bytefehlerpositionen und anhand von n + 1 Fehlersyndromkomponenten eines ersten Fehlercodes.
-
Es ist eine Weiterbildung, dass die weitere Bytefehlerposition durch die n Bytefehlerpositionen und die n + 1 Fehlersyndromkomponenten des ersten Fehlercodes bestimmt wird.
-
Es ist eine Weiterbildung, dass der erste Fehlercode ein Bytefehlercode, insbesondere ein Reed-Solomon-Code, ist.
-
Es ist eine Weiterbildung, dass erkannt wird, dass kein weiterer Bytefehler vorhanden ist, falls keine weitere Bytefehlerposition bestimmbar ist.
-
Es ist eine Weiterbildung, dass die weitere Bytefehlerposition in Abhängigkeit mindestens einer symmetrischen Funktion der n Bytefehlerpositionen bestimmt wird.
-
Es ist eine Weiterbildung, dass
- - im fehlerfreien Fall ein Byte des ersten Fehlercodes in ein Codewort eines zweiten Fehlercodes transformiert wird,
- - eine Bytefehlerposition bestimmt wird, falls ein Nicht-Codewort des zweiten Fehlercodes erkannt wird.
-
Es ist eine Weiterbildung, dass der zweite Fehlercode ein n1-aus-n-Code ist, wobei 1 ≤ n1 < n ≤ 2 gilt.
-
Es ist eine Weiterbildung, dass Codewörter des zweiten Fehlercodes in einem Speicher gespeichert werden.
-
Es ist eine Weiterbildung, dass im fehlerfreien Fall Codewörter des zweiten Fehlercodes aus dem Speicher ausgelesen und in Bytes des ersten Fehlercodes zurücktransformiert werden.
-
Es ist eine Weiterbildung, dass das Auslesen aus dem Speicher unter Berücksichtigung einer zeitlichen Reihenfolge erfolgt.
-
Es ist eine Weiterbildung, dass dann, wenn beim Auslesen aus dem Speicher ein Nicht-Codewort des zweiten Fehlercodes erkannt wird, eine Bytefehlerposition für dieses Byte des ersten Fehlercodes bestimmt wird.
-
Es ist eine Weiterbildung, dass die weitere Bytefehlerposition α
2 bestimmbar ist, so dass gilt:
wobei α
1 die vorgegebene Bytefehlerposition und s
1, s
2, s
3 Syndromkomponenten bezeichnen.
-
Auch wird eine Vorrichtung zur Fehlerverarbeitung vorgeschlagen, die eingerichtet ist zu bestimmen, ob es eine weitere Bytefehlerposition gibt anhand von n Bytefehlerpositionen und anhand von n + 1 Fehlersyndromkomponenten eines ersten Fehlercodes, wobei die n Bytefehlerpositionen von n Bytefehlern vorgegeben sind und wobei n eine positive ganze Zahl ist.
-
Es ist eine Weiterbildung, dass die Vorrichtung ferner eingerichtet ist, die weitere Bytefehlerposition durch die n Bytefehlerpositionen und die n + 1 Fehlersyndromkomponenten des ersten Fehlercodes zu bestimmen.
-
Ferner wird eine Schaltungsanordnung angegeben, umfassend mindestens eine der hierin beschriebenen Vorrichtungen.
-
Die Vorrichtung und/oder Schaltungsanordnung können Teile eines integrierten Schaltkreises oder Speicherbausteins oder separat zu diesem ausgeführt sein.
-
Die oben beschriebenen Eigenschaften, Merkmale und Vorteile dieser Erfindung sowie die Art und Weise, wie diese erreicht werden, werden nachfolgend beschrieben im Zusammenhang mit einer schematischen Beschreibung von Ausführungsbeispielen, die im Zusammenhang mit den Zeichnungen näher erläutert werden. Dabei können zur Übersichtlichkeit gleiche oder gleichwirkende Elemente mit gleichen Bezugszeichen versehen sein.
-
Es zeigen:
- 1 ein Beispiel der Verwendung eines ersten und eines zweiten Fehlercodes, wobei der zweite Fehlercode genutzt wird, um mindestens eine Bytefehlerposition bereitzustellen, die der erste Fehlercode zur Korrektur mindestens eines weiteren Bytefehlers nutzen kann;
- 2 ein symbolisches Schaltbild zur Bestimmung von α1 + α2 und α1 · α2;
- 3 ein symbolisches Schaltbild zur Bestimmung einer weiteren Bytefehlerposition α3.
-
Zur Fehlerkorrektur und Fehlererkennung von beispielsweise in Speicherzellen gespeicherten Daten können Bytefehler-erkennende und Bytefehler-korrigierende Codes (auch bezeichnet als Fehlercodes) verwendet werden. Ein Beispiel für einen Fehlercode ist der Reed-Solomon-Code (siehe dazu auch nachfolgende Ausführungen).
-
Bei einem Bytefehler ist die Position der fehlerhaften Bytes zu bestimmen und, sofern der Bytefehler korrigiert werden soll, ist auch der korrekte Wert des Bytes zu ermitteln.
-
Die Position des fehlerhaften Bytes wird anhand der Bytefehlerposition (auch bezeichnet als Bytefehlerpositionswert, der angibt welches Byte bzw. welche Bytes (möglicherweise) fehlerhaft sind) bestimmt. Beispielsweise kann ein Wert 1 für die Bytefehlerposition anzeigen, dass das Byte fehlerhaft ist und ein Wert 0 kann anzeigen, dass das Byte nicht fehlerhaft ist.
-
Ein Bytefehlerwert gibt an, um welchen Wert sich ein fehlerhaftes Byte von seinem korrekten Wert unterscheidet. Umfasst jedes Byte m Bits, so umfasst auch der Bytefehlerwert m Bits. Beispielweise kann eine Korrektur durchgeführt werden, indem die Bits des fehlerhaften Bytes komponentenweise mit den zugehörigen Bits des Bytefehlerwerts Exklusiv-Oder-verknüpft (XOR-verknüpft) werden.
-
Ein t-Bytefehler besagt, dass eine Anzahl von t Bytes fehlerhaft ist. Um einen t-Bytefehler zu korrigieren, sind t Bytefehlerpositionen und t Bytefehlerwerte erforderlich.
-
Für ein Byte mit m Bits kann das Byte als ein Element des Galoisfeldes GF(2m) beschrieben werden. Allgemein gilt: Bilden m p-wertige Werte mit p > 2 ein Byte und ist p eine Primzahl, kann ein Byte als ein Element des Galoisfeldes GF(pm) beschrieben werden. Hierbei ist m beispielsweise eine positive ganze Zahl größer als 2.
-
Im vorliegenden Beispiel werden Bytes mit m Bits verwendet. Entsprechend gibt es 2m verschiedene m-Bit Bytes.
-
Beispielsweise soll eine erste Anzahl von N Bytefehlern korrigiert werden. Entsprechend wird ein N-Bytefehler (N ≥ 1) korrigiert.
-
Für eine zweite Anzahl N1 von Bytefehlern kann die entsprechende Bytefehlerposition schon bestimmt sein, in denen ein Bytefehler aufgetreten ist. Bei einer Korrektur ist dann nur noch der Bytefehlerwert für diese N1 Bytefehler an den bekannten Bytefehlerpositionen zu bestimmen.
-
Für eine dritte Anzahl N2 von Bytefehlern kann sowohl der Bytefehlerwert als auch die Bytefehlerposition zu bestimmen sein. Dabei kann N1 + N2 = N gelten. Dabei ist N2 ≥ 1 und es kann N2 = 1 gelten.
-
Beispiel: Zwei Fehlercodes
-
Beispielsweise bildet das m-Bit Byte im fehlerfreien Fall ein Codewort des Reed-Solomon-Codes. Der Reed-Solomon-Code dient hier als ein erster Fehlercode.
-
Zusätzlich kann das m-Bit-Byte in ein Codewort eines zweiten Fehlercodes transformiert werden, bevor es in einem Speicher abgespeichert wird. Der zweite Fehlercode kann ein n1-aus-n-Code sein.
-
Ist beispielsweise m = 6, bilden eine Merhzahl von 6-Bit Bytes im fehlerfreien Fall das Codewort eines Reed-Solomon-Codes. Beispielsweise kann mindestens ein Byte des Codeworts ein Prüfbyte des Reed-Solomon-Codes sein. Pro Byte gibt es in diesem Beispiel 2m = 26 = 64 verschiedene Werte.
-
In diesem Beispiel ist der zweite Fehlercode ein 4-aus-8-Code mit
Codewörtern. Ein 6-Bit Byte des Reed-Solomon-Codes kann beispielsweise in ein Codewort des zweiten Fehlercodes transformiert und in acht Speicherzellen eines Speichers abgespeichert werden (vergleiche hierzu z.B.
US 10,903,859 B2 ). Jedes 6-Bit-Byte des ersten Fehlercodes wird dabei umkehrbar eindeutig in eines der 70 Codewörter des 4-aus-8-Codes des zweiten Fehlercodes transformiert.
-
Beim Auslesen aus dem Speicher werden im fehlerfreien Fall Codewörter des 4-aus-8-Codes ausgelesen und in 6-Bit Bytes zurück transformiert. Im fehlerfreien Fall ergeben die nach der Rücktransformation vorliegenden 6-Bit Bytes wieder ein Codewort des ersten Fehlercodes.
-
Bereits beim Auslesen aus dem Speicher kann überprüft werden, ob ein Codewort des 4-aus-8-Codes vorliegt: Sind nicht 4 Einsen und 4 Nullen gelesen worden, handelt es sich nicht um ein Codewort des 4-aus-8-Codes. In diesem Fall ist das ausgelesene Byte fehlerhaft, für dieses Byte wurde also eine Bytefehlerposition mittels des 4-aus-8-Codes bestimmt.
-
Das ausgelesene Nicht-Codewort des 4-aus-8-Codes wird in ein (fehlerhaftes) m-Bit Byte zurücktransformiert. Hierzu kann ein vorgegebener Wert aus den 64 möglichen Werten (z.B. der Wert 0) genutzt werden. Es ist jedoch von Vorteil, dass mit Erkennen eines Nicht-Codeworts des 4-aus-8-Codes eine Information bereitgestellt wird, dass dieses Byte fehlerhaft ist. Auf den zurücktransformierten 6-Bit Wert kommt es dann nicht mehr an, weil davon ausgegangen werden muss, dass dieses Byte mittels des zweiten Fehlercodes korrigiert werden muss. Gemäß den obigen Ausführungen muss für dieses fehlerhafte Byte nur noch der Bytefehlerwert bestimmt werden.
-
Somit kann durch die Überprüfung der aus den Speicherzellen ausgelesenen Werte des zweiten Fehlercodes mindestens eine Bytefehlerposition für die Bytes des ersten Fehlercodes bestimmt werden. Hierbei ist es von Vorteil, dass durch die Transformation und die Rücktransformation die Unterscheidbarkeit der Bytes erhalten bleibt: Jedem 6-Bit Byte ist ein 8-Bit Byte zugeordnet und umgekehrt. Damit identifiziert die Bytefehlerposition eindeutig das Byte, egal ob es 6 Bits oder 8 Bits aufweist.
-
Es ist ein Vorteil, dass der erste Fehlercode nicht verwendet werden muss, um diese Bytefehlerposition zu bestimmen. Damit können im ersten Fehlercode Prüfbytes eingespart werden.
-
1 veranschaulicht ein Beispiel der Verwendung eines ersten und eines zweiten Fehlercodes. In diesem Beispiel werden 43 Bytes Nutzdaten um 3 Prüfbytes ergänzt. Jedes Byte umfasst 6 Bits. Die (43 + 3 =) 46 Bytes ergeben (im fehlerfreien Fall) ein Codewort des ersten Codes, hier eines Reed-Solomon-Codes (RS-Codes).
-
In einem nächsten Schritt wird jedes der Bytes des Codeworts des RS-Codes in ein Codewort des zweiten Codes transformiert. Im vorliegenden Beispiel ist der zweite Code ein 4-aus-8-Code: Die Codewörter des 4-aus-8-Code weisen 4 Einsen und 4 Nullen auf. Nach der Transformation ergeben sich wieder 46 Bytes. Diese werden in einem Speicher abgelegt.
-
Beim Lesen aus dem Speicher werden die 46 Bytes ausgelesen. Hierbei wird geprüft, ob jedes der gelesenen Bytes ein Codewort des 4-aus-8-Codes ist.
-
Gemäß einer beispielhaften Implementierung können die einzelnen Bytes aus dem Speicher unter Nutzung einer zeitlichen Domäne gelesen werden. In diesem Fall kann vorteilhaft der Lesevorgang bereits beendet werden, wenn 4 Bits des gleichen Typs, also entweder 4mal der Wert 0 oder 4mal der Wert 1 gelesen wurde. Für die verbleibenden noch nicht eingetroffenen Bits wird dann der jeweils andere Wert angenommen. Dieser Ansatz nutzt die Eigenschaft des 4-aus-8-Codes, bei dem Codewörter 4 Einsen oder 4 Nullen aufweisen. Hierbei kann es zu Fehlern kommen dergestalt, dass fünf statt vier gleicher Werte gelesen werden und somit kein Codewort des zweiten Codes mehr vorliegt. Zu Details hinsichtlich des Auslesens von Speicherzellen in der Zeitdomäne sei beispielsweise auf
US 9,805,771 B2 verwiesen: Hierbei wird ein Lesestrom, der beim Auslesen in Abhängigkeit von einem in der Speicherzelle gespeicherten Widerstandswert gebildet wird, in einem Kondensator integriert. Den Speicherzellen, die in der zeitlichen Reihenfolge am schnellsten eine bestimmte Spannung des Kondensators erreichen, kann jeweils der Wert 1 zugeordnet werden und den Zellen, die als langsamsten die bestimmte Spannung erreichen, kann jeweils der Wert 0 zugeordnet werden.
-
Handelt es sich bei dem aus dem Speicher gelesenen 8-Bit Byte um ein Codewort des zweiten Fehlercodes, d.h. des 4-aus-8-Codes, dann erfolgt die Rücktransformation dieses Codeworts in einen 6-Bit Wert gemäß der vorstehend erwähnten Zuordnung. Sind alle 46 Bytes Codewörter des zweiten Fehlercodes, erfolgt die Rücktransformation in 46 6-Bit Bytes, die im fehlerfreien Fall ein Codewort des ersten Fehlercodes, d.h. des RS-Codes, sind.
-
Ist mindestens eines der gelesenen 8-Bit-Bytes kein Codewort des 4-aus-8-Codes, so gibt es mindestens eine Bytefehlerposition, die dem nachfolgenden Korrekturschritt mitgeteilt wird, um die Korrektur dieses mindestens einen fehlerhaften Bytes mittels des ersten Fehlercodes einzuleiten.
-
Der hier beschriebene Ansatz erlaubt auch die Erkennung der weiteren Bytefehlerposition durch den ersten Fehlercode (mit anschließender Korrektur), die mit einem 4-aus-8-Codewort assoziiert ist, das mittels mehrerer Fehler in ein weiteres 4-aus-8-Codewort verfälscht wurde. Zwar ist dieses falsche 4-aus-8-Codewort von dem zweiten Fehlercode nicht erkennbar und damit kann auch die Bytefehlerposition für dieses Codewort durch den zweiten Fehlercode nicht ermittelt werden. Allerdings kann ein zusätzlicher Bytefehler vorliegen, der von dem zweiten Fehlercode erkannt wird. Für diesen zusätzlichen Bytefehler liefert der zweite Fehlercode die Bytefehlerposition. Basierend auf dieser Bytefehlerposition kann nun der erste Fehlercode die weitere Bytefehlerposition (die dem verfälschten 4-aus-8-Codewort entspricht) ermitteln und korrigieren.
-
Alternative zweite Fehlercodes
-
Die Erfindung ist nicht darauf beschränkt, dass der zweite Fehlercode ein n1-aus-n-Code ist. Beispielsweise kann ein m-Bit Byte des ersten Fehlercodes auf ein (m + 1)-Bit Byte des zweiten Fehlercodes abgebildet werden, indem zusätzlich ein ParitätsBit aus den m Bits des Bytes des ersten Fehlercodes gebildet wird und an die m Bits des ersten Fehlercodes angehängt wird. Ein Codewort des zweiten Fehlercodes kann ein (m + 1)-Bit-Wort mit einer geraden Anzahl von Einsen sein.
-
Gemäß einem weiteren Beispiel können die m Bits eines Bytes des ersten Fehlercodes auch verdoppelt und somit redundant in dem Speicher gespeichert werden. Beim Lesen kann mittels des zweiten Fehlercodes kontrolliert werden, ob zweimal das gleiche m-Bit Byte erhalten wurde.
-
Auch können unterschiedliche m-Bit Bytes des ersten Fehlercodes nach unterschiedlichen Vorschriften in Codewörter des zweiten Fehlercodes (z.B. unterschiedliche Fehlercodes) transformiert werden. So kann beispielsweise ein erstes 6-Bit Byte in ein Codewort eines 4-aus-8 Codes transformiert werden und ein zweites 6-Bit Byte wird in ein 7-Bit Byte (6 Bits mit einem zusätzlichen Paritätsbit) transformiert.
-
Für den hier beschriebenen Ansatz ist der zweite Fehlercode nicht zwingend erforderlich. Es ist lediglich erforderlich, dass für ein fehlerhaftes Byte eine Bytefehlerposition bestimmbar ist, die bei der Bestimmung einer weiteren Bytefehlerposition durch den ersten Fehlercode verwendet werden kann und nicht von diesem bestimmt werden muss.
-
Beispielsweise können pro Nutzdatenbyte Messwerte gespeichert werden, die in einem bestimmten vorbekannten Wertebereich liegen. Bei dem Messwert kann es sich z.B. um Temperatur, Luftdruck, Länge von Bauteilen o.ä. handeln.
-
Die Nutzdatenbytes können zusammen mit Prüfbytes in einem Speicher abgespeichert werden, wobei die Nutzdatenbytes und die Prüfbytes (im fehlerfreien Fall) ein Codewort des ersten Fehlercodes bilden. Stellt sich beim Lesen aus dem Speicher heraus, dass ein Nutzdatenbyte nicht in dem bekannten Wertebereich liegt, so kann für dieses Byte eine Bytefehlerposition erkannt werden.
-
Die hier beschriebenen Beispiele ermöglichen insbesondere die Verbesserung der Fehlerkorrektur und Fehlererkennung eines ersten Fehlercodes. Dabei soll die weitere Bytefehlerposition effizient und mit geringem Aufwand bestimmt werden.
-
Allgemeine Beschreibung von Reed-Solomon-Codes
-
Nachfolgend werden einige Begriffe und Eigenschaften von Reed-Solomon-Codes erläutert.
-
Beispielsweise werden
- - t-Bytefehler-korrigierende Codes und
- - t-Bytefehler-korrigierende und (t + 1)-Bytefehler-erkennende Codes betrachtet. Insbesondere werden die Fälle t = 2 und t = 1 berücksichtigt.
Beispielsweise können als Bytefehler-korrigierende Codes bekannte Reed-Solomon-Codes verwendet werden. Für Reed-Solomon-Codes sei beispielhaft verwiesen auf [Lin, S., Costello, D.: Error Control Coding, Prentice Hall, 1983, Seiten 170 bis 177] oder [Wicker, S.: Error Control Systems for Digital Communication and Storage, Prentice Hall, 1995, Seiten 214 bis 224].
-
Ein 1-Bytefehler-korrigierender und 2-Bytefehler-erkennender Reed-Solomon-Code weist eine H-Matrix
auf wie folgt:
-
Hierbei sind αi Elemente des Galoisfelds GF(2m). Diese liegen beispielsweise in einer Exponentialdarstellung vor. α kann ein primitives Element des Galoisfelds GF(2m) sein. Die Exponenten j von αj sind modulo 2m - 1 zu interpretieren.
-
Es ist möglich, aus der H-Matrix gemäß Gleichung (1) eine H-Matrix
abzuleiten, indem für i = 0,..., (2
m - 2) die i-te Spalte mit α
-i multipliziert wird. Hierdurch ändert sich nur die Gestalt der H-Matrix, nicht der Code, da α
-i ≠ 0 ist. Dies ist beispielsweise auch in [Fujiwara, E.: Code Design for Dependable Systems, Wiley, 2006, Seite 65] beschrieben, wobei der Wert „1“ für α
0 verwendet wird, da α
0 das Einselement des verwendeten Galoisfelds ist.
-
Für einen 2-Bytefehler-korrigierenden und 3-Bytefehler-erkennenden Code wird die folgende H-Matrix verwendet:
-
Jede Spalte der in Gleichung (3) angegebenen H-Matrix entspricht einem Byte.
-
Ist die Länge des Codes gleich N Bytes oder m·N-Bit (wobei jedes Byte m-Bit aufweist), werden nur N Spalten der H-Matrizen gemäß Gleichung (1) oder Gleichung (3) verwendet. Beispielsweise können dann die verbleibenden (letzten) 2m - 2 - N Spalten gestrichen werden.
-
Allgemein kann für einen t-Bytefehler-korrigierenden und t + 1-Bytefehler-erkennenden Code die H-Matrix wie folgt angegeben werden:
-
Nachfolgend wird beispielhaft ein Code betrachtet, der 2-Bytefehler korrigieren und 3-Bytefehler erkennen kann.
-
Tritt ein Fehler auf, wird ein korrekter Vektor v = v0, ... , vN-1 in einen fehlerhaften Vektor v' = v'0, ... , v'N-1 gestört.
-
Die Komponenten v
0,...,v
N-1 des Vektors v sind Bytes, die jeweils m-Bit umfassen, so dass
für i= 0,..., N - 1 gilt.
sind somit die m-Bit des i-ten Bytes.
-
Ein m-Bit-Byte kann auch als ein Element des Galoisfelds GF(2m) bezeichnet werden.
-
Liegt ein 1-Bytefehler vor, ist nur ein einzelnes Byte fehlerhaft, d.h. für ein bestimmtes i ∈ {0,... ,7V — 1} ist das zugehörige i-te Byte fehlerhaft.
-
Wird das korrekte i-te Byte mit
und das fehlerhafte i-te Byte mit
bezeichnet, können sich 1 oder 2 oder bis zu m-Bit des korrekten i-ten Bytes von dem fehlerhaften i-ten Byte unterscheiden.
-
Ein Bytefehler im i-ten Byte kann durch
- - die fehlerhafte Byteposition i und
- - einen Bytefehlerwert
beschrieben werden. Hierbei sei angemerkt, dass „⊕“ die exklusiv-oder-Operation kennzeichnet.
-
Die Position eines i-ten Bytes kann auch mit αi bezeichnet werden.
-
Soll ein Bytefehler mit dem Bytefehlerwert ei in der Byteposition i korrigiert werden, so ist für die Byteposition i ein Bytefehlerkorrekturwert zu bestimmen, der gleich dem Bytefehlerwert ist.
-
In diesem Beispiel ist für einen zu korrigierenden Bytefehler der Bytefehlerwert gleich dem Bytefehlerkorrekturwert; insoweit können die Begriffe Bytefehlerwert und Bytefehlerkorrekturwert synonym verwendet werden.
-
Um eine unübersichtliche Anzahl von Indizes zu vermeiden, werden nachfolgend Bytefehlerwerte mit den alphabetischen Buchstaben a, b, c bezeichnet.
-
Ein Bytefehlerkorrekturwert für das i-te Bytes kann auch mit a(i) bezeichnet werden.
-
Bytepositionen können mit i, j, k, ... oder mit αi, αj, αk, ... bezeichnet werden, wobei α ein erzeugendes Element des Galoisfelds GF(2m) ist.
-
Ein Fehlersyndrom s weist Syndromkomponenten (auch bezeichnet als Komponenten, Fehlersyndromkomponenten, Teilfehlersyndrome oder Teilsyndrome) s
1, s
2, s
3, s
4, s
5 auf, die für die H-Matrix gemäß Gleichung (4) bestimmt sind zu:
-
Dabei ist
ein Spaltenvektor mit einer Anzahl von M Komponenten, die jeweils m Bits aufweisen. Dieser Spaltenvektor kann auch als transponierter Vektor des Zeilenvektors (v'
0, ... ,v'
M-1) bezeichnet werden.
-
Die Syndromkomponenten s1, s2, ..., s2t+1 sind jeweils ein Byte mit m Bits.
-
Liegt ein 1-Bytefehler vor, so gilt s
1 ≠ 0 und
-
Liegt ein 2-Bytefehler vor, so gilt
und
-
Liegt ein 3-Bytefehler vor, so gilt
und
-
Dies kann entsprechend fortgesetzt werden bis zu einem t-Bytefehler: So liegt ein t-Bytefehler dann vor, wenn gilt:
und
-
Die Anzahl der Bytefehler kann durch die Bestimmung der Werte der angegebenen Determinante bestimmt werden. Dies ist mit steigender Anzahl der möglichen Fehler aufwändig: So ist zur Feststellung, ob entsprechend den Gleichungen (10) und (11) ein t-Bytefehler vorliegt, der Wert einer Determinanten zu bestimmen, die 2·t Syndromkomponenten als Elemente aufweist. Diese sind zusätzlich zu den Nutzdatenbytes zu speichern. Jede Syndromkomponente entspricht einem Byte mit m Bits.
-
Eine Bytefehlerposition kann beispielsweise als Nullstellen des Lokatorpolynoms bestimmt werden.
-
Eine Nullstelle eines Lokatorpolynoms kann als ein Element des entsprechenden Galoisfeldes GF(2m) beschrieben werden.
-
Ein erstes, zweites, drittes Element, etc. des Galoisfeldes wird hierbei mit α1, α2, α3, etc. bezeichnet. Dabei ist nicht festgelegt, um welches Element des Galoisfeldes es sich konkret handelt.
-
Ist
beispielsweise die Menge der 2
m - 1 Elemente des Galoisfeldes ungleich 0 in ihrer Exponentialdarstellung, dann sind α
1, α
2, α
3, etc. Elemente dieser Menge. Beispielsweise kann
oder eine andere Zuordnung gelten.
-
Die Lokatorpolynome ergeben sich für die unterschiedlichen Anzahlen von Bytefehlern zu:
- - für einen 1-Bytefehler:
- - für einen 2-Bytefehler:
- - für einen 3-Bytefehler:
- - für einen 4-Bytefehler:
- - für einen n-Bytefehler:
-
Dabei bezeichnet der Koeffizient σ(j)
i eines Lokatorpolynoms für j = 1,...,n und i = 1,...,n eine bekannte elementarsymmetrische Funktion von j Variablen α
1 bis α
j. Dies kann durch Ausmultiplizieren von
verifiziert werden.
-
So gilt beispielsweise
-
Eine symmetrische Funktion σ(k)
i mit 1 ≤ i ≤ k hängt dabei, wie in den Beispielen dargestellt, von k Variablen α
1,...,α
k ab. Sie enthält alle möglichen (7) unterschiedlichen Produkte von ihrer Variablen, die mit der Operation „+“ im Galoisfeld GF(2
m) verknüpft sind. Ist i = 1, bestehen die
Produkte jeweils nur aus einer der Variablen. Die Addition erfolgt im Galoisfeld GF(2
m). Sie entspricht hier der komponentenweisen Addition modulo 2. Als Variablen der symmetrischen Funktionen werden hier die Variablen α
1, α
2, α
3, etc. verwendet.
-
Zwischen den Komponenten der Fehlersyndrome und den Komponenten der entsprechenden Lokatorpolynome ist die folgende Beziehung für einen t-Bytefehler bekannt:
-
Dies ist beispielsweise in [Wicker, S.: Error Control Systems for Digital Communication and Storage, Prentice Hall, 1995, Seiten 215] beschrieben, wobei dort für die Syndromkomponente si die Bezeichnung Si und für den Koeffizienten σ(t)i die Bezeichnung Λi verwendet wird.
-
Wird beispielhaft ein Galoisfeld GF(qm) mit q = 2 verwendet, können die negativen Vorzeichen in Gleichung (17) weggelassen werden, da in einem Galoisfeld GF(2m) Addition und Subtraktion gleich sind. Beispielhaft wird nachfolgend das Galoisfeld GF(2m) verwendet und die negativen Vorzeichen in Gleichung (17) werden weggelassen.
-
Weiterer (zusätzlicher) Bytefehler bei einem Bytefehler an einer gegebenen Bytefehlerposition
-
Im Folgenden wird beispielhaft ausgeführt, wie
- - eine weitere Bytefehlerposition bestimmt wird, sofern ein weiterer Bytefehler aufgetreten ist oder
- - bestimmt wird, dass kein weiterer Bytefehler aufgetreten ist, wenn eine Anzahl von N1 Bytefehlern bekannt ist.
-
Dabei ist die Anzahl der Bytefehler N1 größer oder gleich 1.
-
Es wird darauf abgestellt, dass vorab bereits ein Bytefehler oder mehrere Bytefehler aufgetreten ist/sind. Dann kann der mindestens eine weitere Bytefehler gemäß obiger Formulierung auftreten.
-
Sind beispielsweise N1 Bytefehlerpositionen bestimmt, dann kann eine weitere (N1 + 1)-te Bytefehlerposition bestimmt werden, wenn an dieser Position ein Bytefehler aufgetreten ist. Ist keine weitere Bytefehlerposition fehlerhaft, so ist auch kein weiterer Bytefehler aufgetreten.
-
Hierbei sei angemerkt, dass ein aufgetretener Bytefehler ein mittels eines Fehlercodes detektierbarer Bytefehler ist. Es ist denkbar, dass ein nicht erkennbarer Bytefehler vorliegt, der unerkannt bleibt und insofern gemäß den vorliegenden Ausführungen als nicht aufgetreten angesehen wird.
-
Beispielsweise ist eine erste Bytefehlerposition α1 gegeben. Die Bytefehlerposition besagt, dass für dieses Byte, dass mehrere Bits umfasst, ein Fehler detektiert wurde.
-
Sofern ein weiterer Bytefehler in einem anderen Byte aufgetreten ist, kann eine zweite Bytefehlerposition α2 bestimmt werden. Auch kann bestimmt werden, dass keine weitere Bytefehlerposition vorhanden ist, wenn kein zweiter Bytefehler aufgetreten ist.
-
Im Falle eines 1-Bytefehlers mit der vorgegebenen Bytefehlerposition α
1 und mit einem Bytefehlerwert a gilt
-
Es ist nicht erforderlich, dass der Bytefehlerwert a bekannt ist.
-
Im Falle eines 2-Bytefehlers mit
- - der bekannten Bytefehlerposition α1 mit einem Bytefehlerwert a und
- - einer weiteren (noch unbekannten) Bytefehlerposition α2 mit einem Bytefehlerwert b
gilt und damit
-
Es ist nicht erforderlich, dass die Werte α2, a und b bekannt sind.
-
Bei bekannter Bytefehlerposition α
1 kann anhand von
bestimmt werden, dass kein 2-Bytefehler vorliegt und anhand von
festgestellt werden, dass kein 1-Bytefehler vorliegt.
-
Liegt kein 1-Bytefehler vor, sondern liegt ein 2-Bytefehler mit bekannter Bytefehlerposition α
1 und zu bestimmender Bytefehlerposition α
2 vor, dann gilt
mit
und
und damit
-
Die Gleichung (27) ist nach der zu bestimmenden Bytefehlerposition α
2 auflösbar:
-
Die Bytefehlerposition α2 ist aus den drei Syndromkomponenten s1, s2 und s3 und der symmetrischen Funktionen σ(1)1 = α1 bestimmbar. Wie ausgeführt, ist die Bytefehlerposition α1 vorbekannt. Es ist daher nicht erforderlich, die Lösungen des entsprechenden Lokatorpolynoms zu bestimmen.
-
Weiterer (zusätzlicher) Bytefehler bei zwei Bytefehlern an zwei (unterschiedlichen) gegebenen Bytefehlerpositionen
-
Alternativ wird beschrieben, wie im Falle von zwei bekannten Bytefehlerpositionen α1 und α2 bestimmt wird, ob ein dritter Bytefehler vorliegt und wenn ein dritter Bytefehler vorliegt, wie dann eine dritte Bytefehlerposition bestimmt werden kann. Dabei unterscheiden sich die Bytefehlerpositionen α1, α2 und α3 voneinander.
-
Liegt ein 2-Bytefehler vor, gilt
-
Dies ergibt sich aus:
-
Dabei sind a und b die entsprechenden Bytefehlerwerte und α1 und α2 die Bytefehlerpositionen. Gilt die Gleichung (29), dann liegt kein 3-Bytefehler vor.
-
Liegt nun ein 3-Bytefehler mit den Bytefehlerwerten a, b und c und den Bytefehlerpositionen α
1, α
2 und α
3 vor, dann gilt:
-
Hieraus ergibt sich:
-
Ein Wert D = 0 ist nur möglich, wenn (mindestens) eine der folgenden Bedingungen erfüllt ist:
- - c = 0;
- - α3 = α1 oder α3 = α2, was im Widerspruch dazu steht, dass die Bytefehlerpositionen α1, α2 und α3 unterschiedlich sind.
-
Somit kann ein 3-Bytefehler an der Gültigkeit der Ungleichung
erkannt werden.
-
Liegt nun ein 3-Bytefehler vor, dann kann die dritte Bytefehlerposition α
3 unter Verwendung der bekannten Bytefehlerpositionen α
1, α
2 und aus den Syndromkomponenten s
1, s
2, s
3 und s
4 gemäß der Beziehung
bestimmt werden, wobei
gilt. Die Bytefehlerposition α
3 ist die fehlerhafte zu bestimmende weitere (d.h. zusätzliche) Bytefehlerposition. Aus Gleichung (30) ergibt sich
und damit für die zu bestimmende Bytefehlerposition α
3:
-
Die Bytefehlerposition α3 ist aus den vier Syndromkomponenten s1, s2, s3, s4 sowie den symmetrischen Funktionen σ(2)1, σ(2)2, die aus den bekannten Bytefehlerwerten α1 und α2 hervorgehen, bestimmbar. Es ist nicht erforderlich, die Lösungen des entsprechenden Lokatorpolynoms (hier: dritten Grades) zu ermitteln oder mehr als vier Syndromkomponenten zu verwenden. Dies reduziert den Aufwand in erheblichem Maße.
-
Weiterer (zusätzlicher) Bytefehler bei einer Vielzahl von Bytefehlern an unterschiedlichen gegebenen Bytefehlerpositionen
-
Entsprechend lässt sich dieser Ansatz erweitern: Es kann eine weitere Bytefehlerposition bestimmt werden, wenn drei oder mehr Bytefehlerpositionen vorbekannt sind. Sind k Bytefehlerpositionen bekannt, so sind k + 2 Fehlersyndromkomponenten bekannt.
-
Beispielsweise gelten für die zu bestimmenden Bytefehlerpositionen
- - α4, wenn drei Bytefehlerpositionen α1, ... , α3 bekannt sind:
- - α5, wenn vier Bytefehlerpositionen α1,..., α4 bekannt sind:
- - α6, wenn fünf Bytefehlerpositionen α1,...,α5 bekannt sind:
- - α7, wenn sechs Bytefehlerpositionen α1,...,α6 bekannt sind:
-
Allgemein ergibt sich für N
1 bekannte Bytefehlerpositionen α
1,...,α
N1 die weitere Bytefehlerposition α
N1+1 zu:
-
Hierbei kann es vorteilhaft sein, die nachfolgenden symmetrischen Funktionen σ(j)
i, mit j ≥ 1 und i ≤ j zu verwenden: Die Funktion σ(j)
i ergibt sich für j > 1 aus den Funktionen σ(j - 1)
k mit k ≤ j - 1 und einer weiteren Variablen α
k:
-
Somit können aus bereits ermittelten symmetrischen Funktionen σ(j)i und einer zusätzlichen Variablen schrittweise weitere symmetrische Funktionen bestimmt und zur Ermittlung der weiteren Bytefehlerposition genutzt werden.
-
Beispielhafte Implementierung
-
2 zeigt eine symbolische Anordnung, z.B. als Realisierung einer Schaltung, die es ermöglicht, die symmetrischen Funktionen σ(2)1 = α1 + α2 und σ(2)2 = α1 · α2 anhand der Bytefehlerpositionen α1 und α2 zu bestimmen.
-
Ein Addierglieder 21 mit zwei m-Bit breiten Eingängen und einem m-Bit breiten Ausgang ermöglicht die komponentenweisen Addition modulo-2 (XOR-Verknüpfung) der an den Eingängen anliegenden Bytefehlerpositionen α1 und α2. Ein Galoisfeldmultiplizierer 22 mit zwei m-Bit breiten Eingängen und einem m-Bit breiten Ausgang ermöglicht die Multiplikation α1 · α2.
-
3 zeigt eine beispielhafte Schaltungsanordnung zur Bestimmung einer Bytefehlerposition α3 unter Verwendung der Syndromkomponenten s1 bis s4 und zweier bekannter Bytefehlerpositionen α1, α2 entsprechend Gleichung (31). Die Bytefehlerpositionen α1, α2 wurden hierbei gemäß der in 2 gezeigten Anordnung zu den symmetrischen Funktionen σ(2)1 und σ(2)2 verknüpft, die Eingangssignale der in 3 gezeigten Anordnung sind.
-
3 weist Galoisfeldmultiplizierer 11 bis 15 auf, mit zwei m-Bit breiten Eingängen und einem m-Bit breiten Ausgang. Weiterhin sind zwei Addierglieder 16, 17 mit zwei m-Bit breiten Eingängen und einem m-Bit breiten Ausgang zur komponentenweisen Addition modulo-2 (XOR-Verknüpfung) sowie ein Invertierer 18 mit einem m-Bit breiten Eingang und einem m-Bit breiten Ausgang dargestellt. Die Komponenten 11 bis 18 sind derart angeordnet, dass sich aus ihrer Verschaltung im Ergebnis die Bytefehlerposition α3 ergibt.