DE102020110787B3 - Schaltung und verfahren zum kodieren oder dekodieren eines datenworts - Google Patents

Schaltung und verfahren zum kodieren oder dekodieren eines datenworts Download PDF

Info

Publication number
DE102020110787B3
DE102020110787B3 DE102020110787.0A DE102020110787A DE102020110787B3 DE 102020110787 B3 DE102020110787 B3 DE 102020110787B3 DE 102020110787 A DE102020110787 A DE 102020110787A DE 102020110787 B3 DE102020110787 B3 DE 102020110787B3
Authority
DE
Germany
Prior art keywords
data word
circuit
bits
syndrome
column
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102020110787.0A
Other languages
English (en)
Inventor
Rainer Goettfert
Markus Dietrich
Bernd Meyer
Jan Otterstedt
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102020110787.0A priority Critical patent/DE102020110787B3/de
Application granted granted Critical
Publication of DE102020110787B3 publication Critical patent/DE102020110787B3/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)

Abstract

Gemäß einer Ausführungsform wird eine Schaltung zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code beschrieben aufweisend eine Syndromberechnungsschaltung zum Berechnen eines Syndroms des Datenworts, wobei die Syndromberechnungsschaltung eine Kontrollmatrixberechnungsschaltung, die eingerichtet ist, für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes einen Teil-Spaltenvektor auszugeben, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, und eine Akkumulierschaltung aufweist, die eingerichtet ist, die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, zu akkumulieren, wobei sie eingerichtet ist, zumindest einen Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und dem von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor zu bilden und das Ergebnis des Akkumulierens als Syndrom auszugeben.

Description

  • Ausführungsbeispiele betreffen allgemein Schaltungen und Verfahren zum Kodieren oder Dekodieren eines Datenworts.
  • In Computer- und Kommunikationssystemen werden Daten mit redundanter Information ausgestattet, sodass bei der Übertragung oder Speicherung der Daten auftretende Fehler erkannt und korrigiert werden können. Hierzu werden Methoden aus der algebraischen Codierungstheorie verwendet. In der Praxis werden vor allem Blockcodes verwendet. Bei ihnen werden die Daten in Segmente gleicher Länge aufgeteilt und die Codierung wird durch eine feste lineare Transformation, angewandt auf die segmentierten Nutzdaten, realisiert.
  • Einbitfehler können mit Hamming-Codes effizient korrigiert werden. Bei Mehrbitfehlern ist es oft erforderlich Codes zu verwenden, deren Implementierung in Hardware teuer ist. Ein allgemeiner linearer Code kann (z.B. auf einer Chipkarte) implementiert werden, indem man die Kontrollmatrix des Codes hinterlegt. Für größere Codewortlängen (und diese sind attraktiv, weil für sie der Anteil der redundanten Information relativ zu den zu schützenden Nutzdaten klein ist) hat die Kontrollmatrix jedoch eine beträchtliche Größe. Es ist daher wünschenswert, eine effiziente Kodierung und/oder Dekodierung bereitzustellen, deren notwendige Operationen ohne Rückgriff auf eine explizit bereitgestellte Kontrollmatrix ausführbar sind.
  • Die Druckschrift US 2002 / 0 059 552 A1 beschreibt eine Kontrollmatrix, bei der jede Spalte aus einer Binärdarstellung der Spaltennummer, ergänzt durch das Komplement einer Komponente der Binärdarstellung der Spaltennummer, besteht.
  • Gemäß einer Ausführungsform wird eine Schaltung zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code bereitgestellt aufweisend eine Syndromberechnungsschaltung zum Berechnen eines Syndroms des Datenworts, wobei die Syndromberechnungsschaltung eine Kontrollmatrixberechnungsschaltung aufweist, die eingerichtet ist, für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes einen Teil-Spaltenvektor auszugeben, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wobei die Kontrollmatrixberechnungsschaltung eingerichtet ist, den Teil-Spaltenvektor durch eine quadratische Kombination der Bits der Binärdarstellung der Spaltennummer zu erzeugen, und eine Akkumulierschaltung aufweist, die eingerichtet ist, die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, zu akkumulieren, wobei sie eingerichtet ist, zumindest einen Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und dem von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor zu bilden und das Ergebnis des Akkumulierens als Syndrom auszugeben.
  • Die Figuren geben nicht die tatsächlichen Größenverhältnisse wieder, sondern sollen dazu dienen, die Prinzipien der verschiedenen Ausführungsbeispiele zu illustrieren. Im Folgenden werden verschiedene Ausführungsbeispiele mit Bezug auf die folgenden Figuren beschrieben.
    • 1 zeigt eine Datenverarbeitungsvorrichtung gemäß einem Ausführungsbeispiel.
    • 2 zeigt eine Schaltung zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code aufweisend eine Syndromberechnungsschaltung zum Berechnen eines Syndroms des Datenworts.
    • 3 zeigt ein Ablaufdiagramm, das ein Verfahren zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code veranschaulicht.
  • Die folgende detaillierte Beschreibung bezieht sich auf die beiliegenden Figuren, die Details und Ausführungsbeispiele zeigen. Diese Ausführungsbeispiele sind so detailliert beschrieben, dass der Fachmann die Erfindung ausführen kann. Andere Ausführungsformen sind auch möglich und die Ausführungsbeispiele können in struktureller, logischer und elektrischer Hinsicht geändert werden, ohne vom Gegenstand der Erfindung abzuweichen. Die verschiedenen Ausführungsbeispiele schließen sich nicht notwendig gegenseitig aus, sondern es können verschiedene Ausführungsformen miteinander kombiniert werden, so dass neue Ausführungsformen entstehen. Im Rahmen dieser Beschreibung werden die Begriffe „verbunden“, „angeschlossen“ sowie „gekoppelt“ verwendet zum Beschreiben sowohl einer direkten als auch einer indirekten Verbindung, eines direkten oder indirekten Anschlusses sowie einer direkten oder indirekten Kopplung.
  • Um die Korrektur von Fehlern in Daten, die beispielsweise bei der Datenübertragung oder beim Speichern oder Auslesen entstanden sind, zu ermöglichen, werden Daten typischerweise mittels eines Codes codiert. Ein Anwendungsbeispiel für eine solche Codierung (und zugehörige Dekodierung) ist in 1 gezeigt.
  • 1 zeigt eine Datenverarbeitungsvorrichtung 100 gemäß einem Ausführungsbeispiel.
  • Die Datenverarbeitungsvorrichtung 100 weist eine Datenverarbeitungseinheit 101, z.B. einen Prozessor (CPU), sowie einen Speicher 102 (z.B. einen nichtflüchtigen Speicher wie z.B. ein RRAM (Resistive Random Access Memory)) auf. Die Datenverarbeitungseinheit 101 kann Daten in dem Speicher 102 speichern und aus dem Speicher 102 auslesen. Dies erfolgt über eine Speicherzugriffsschaltung 103. Um Fehler, die beim Speichervorgang, während der Zeit, während der die Daten gespeichert sind, oder beim Auslesen zu detektieren und idealerweise zu korrigieren speichert die Speicherzugriffsschaltung 103 die Daten in codierter Form: Die Speicherzugriffseinheit 103 weist einen Kodierer 104 auf, der im Speicher 102 zu speichernde Daten codiert, bevor die Speicherzugriffseinheit 103 sie in dem Speicher 102 speichert. Für das Auslesen von Daten aus dem Speicher 102 weist die Speicherzugriffseinheit 103 einen Dekodierer 105 auf.
  • Es sollte beachtet werden, dass Ausführungsformen auch in anderen Anwendungsfällen angewendet werden können als das Speichern von Daten in einem Speicher und das Auslesen der Daten. Beispielsweise können Daten vor einer Übermittlung über einen Kommunikationskanal durch einen Sender codiert werden und nach der Übertragung von einem Empfänger decodiert werden. In diesem Fall weist der Sender den Kodierer 104 auf und der Empfänger weist den Dekodierer 105 auf. An die Stelle von zu speichernden Daten treten zu übertragende Daten und an die Stelle von ausgelesenen Daten treten empfangene Daten. Die Datenverarbeitungsvorrichtung 100 ist dann allgemeiner eine Datenverarbeitungsanordnung, da Sender und Empfänger nicht notwendigerweise in einem Gerät angeordnet sind, sondern sich entfernt voneinander befinden können und beispielsweise über ein Netzwerk (z.B. über das Internet und/oder eine Mobilfunk-Kommunikationsnetzwerk) miteinander verbunden sind.
  • Sei n eine positive ganze Zahl und V = F 2 n
    Figure DE102020110787B3_0001
    der kanonische n-dimensionale Vektorraum über dem binären Zahlenkörper F 2 = { 0,1 } .
    Figure DE102020110787B3_0002
    Ein binärer linearer Code C der Länge n und der Dimension k ist ein k-dimensionaler Unterraum von V. Die Elemente in C heißen Codewörter oder Codevektoren. Die Zahl r = n - k heißt Redundanz des Codes. Ein beliebiges Nachrichtenwort w = (w1, w2, ..., wk) der Länge k (z. B. ein Datenwort von im Speicher 102 zu speichernden Daten) wird mittels einer linearen Transformation L : F 2 k F 2 n
    Figure DE102020110787B3_0003
    in ein Codewort z = (z1, z2, ..., zn) der Länge n verwandelt. Der Vorgang heißt Codierung und wird von dem Kodierer 104 durchgeführt. Es gilt L ( F 2 k ) = C .
    Figure DE102020110787B3_0004
    Die Speicherzugriffseinheit 103 speichert dieses Codewort an Stelle des ursprünglichen Nachrichtenworts im Speicher 102.
  • Die Umkehrung, also die Rückgewinnung des Nachrichtenwortes w aus dem Codewort z oder einem fehlerhaften Codewort z' heißt Decodierung und wird von dem Dekodierer 105 durchgeführt.
  • Eine wichtige Unterklasse linearer Codes sind die sogenannten systematischen linearen Codes. Während bei einem allgemeinen linearen Code jede Koordinate zj des Codeworts z eine Linearkombination der Nachrichtenbits ist, sind bei einem systematischen Code k Koordinaten von z identisch mit den k Nachrichtenbits w1, ..., wk. Nur die verbleibenden r Koordinaten von z, sie heißten Kontrollbits, sind nichttriviale Linearkombinationen der Nachrichtenbits w1, ..., wk. Bei einem systematischen Code besteht der Vorgang der Codierung daher im Wesentlichen aus der Berechnung der r Kontrollbits. Und der Vorgang der Decodierung eines fehlerlosen Codeworts wird durch das Entfernen der r Kontrollbits aus dem Codewort bewerkstelligt. Was übrig bleibt, ist das Nachrichtenwort.
  • Ein Code C hat die Minimumdistanz d, wenn sich zwei beliebige verschiedene Codewörter aus C in mindestens d Koordinaten voneinander unterscheiden. Ein linearer (n, k, d)-Code ist ein Code der Länge n, der Dimension k, und der Minimumdistanz d.
  • Ein Code mit ungerader Minimumdistanz d = 2t + 1 ≥ 3 kann alle s-Bitfehler korrigieren mit 1 ≤ s ≤ t. Ein Code mit geradem d, also einer Minimumdistanz der Form d = 2t + 2, kann ebenfalls alle s-Bitfehler mit 1 ≤ s ≤ t korrigieren. Zum Beipiel können mit einem Code der Minimumdistanz d = 7 oder d = 8 alle 1-, 2- und 3-Bitfehler korrigiert werden.
  • Jeder binäre lineare (n, k, d)-Code kann durch eine binäre r × n-Matrix dargestellt werden, einer sogenannten Kontrollmatrix (die aber nicht eindeutig bestimmt ist). Alle Eigenschaften eines Codes spiegeln sich in der Kontrollmatrix wider:
    • • Die Länge n des Codes stimmt überein mit der Länge der Kontrollmatrix. Mit anderen Worten: Die Kontrollmatrix eines (n, k, d)-Codes hat genau n Spalten.
    • • Die Breite der Kontrollmatrix ist gleich n - k und stimmt überein mit der Redundanz r = n - k des Codes. Die Kontrollmatrix hat den Rang r. Mit anderen Worten: Die Kontrollmatrix eines (n, k, d)-Codes hat n - k Zeilen und diese sind linear unabhängig über F 2 .
      Figure DE102020110787B3_0005
    • • Der Code C ist der Nullraum der Kontrollmatrix H. D.h., C = { z F 2 n : Hz T = 0 } .
      Figure DE102020110787B3_0006
    • • Für einen (n, k, d)-Code mit d = 2t + 1 oder d = 2t + 2 gilt: alle möglichen Summen aus jeweils s Spalten der Kontrollmatrix H sind paarweise verschieden für 1 ≤ s ≤ t. Wobei die Summe zweier Spaltenvektoren definiert ist durch gliedweise Addition ihrer Koordinaten im Körper F 2
      Figure DE102020110787B3_0007
      (bitweises XOR).
    • • Alle Codierungs-relevanten Aufgaben wie Codierung, Decodierung, insbesondere Syndromberechnung und Fehlerkorrektur, können bei einem systematischen Code realisiert werden durch Operationen mit den Spaltenvektoren der Kontrollmatrix, wobei zu jedem Zeitpunkt immer nur eine Spalte der Kontrollmatrix benötigt wird.
  • Die Datenverarbeitungsvorrichtung 100 ist beispielsweise Teil einer Steuereinrichtung (z.B. in einem Fahrzeug) oder Teil einer Chipkarte (mit beliebigem Formfaktor).
  • Je nach Anwendungsfall ist es erforderlich, dass die Speicherzugriffseinheit 103 die Kodierung und/oder die Dekodierung sehr schnell durchführt, z.B. in 1 oder 2 Taktzyklen der Datenverarbeitungseinheit 101, um ein Ausbremsen der Datenverarbeitungseinheit 101 zu vermeiden. Dies gilt insbesondere für die Anwendung im Automobilbereich. Nichtsdestotrotz ist es typischerweise wünschenswert, dass die Speicherzugriffseinheit 103 eine geringe Komplexität aufweist und kostengünstig hergestellt werden kann.
  • Gemäß verschiedenen Ausführungsformen verwendet die Speicherzugriffseinheit 103 einen binären systematischen linearen Code für die Fehlerkontrolle (also zur Codierung und Dekodierung von zu speichernden bzw. gespeicherten Daten), der eine Kontrollmatrix der Form ( 1 2 n F ( 1 ) F ( 2 ) F ( n ) )
    Figure DE102020110787B3_0008
    mit einer einfach beschreibbaren Funktion F hat. Alle notwendigen Operationen werden mithilfe dieser Funktion F ausgeführt. Die Kontrollmatrix selbst wird dann nicht mehr benötigt.
  • Die fettgedruckten Zahlen 1, 2, ... repräsentieren binäre Spaltenvektoren der Dimension m: 1 = ( 1 0 0 0 ) ,   2 = ( 0 1 0 0 ) ,  3 = ( 1 1 0 0 ) ,   ,
    Figure DE102020110787B3_0009
    wobei 2m-1 ≤ n ≤ 2m - 1. Wenn n = 2m - 1 ist, dann definiert die Kontrollmatrix H in Gleichung (1) einen Untercode des binären Hamming Codes der Länge n.
  • Die Funktionswerte F(1), F(2), ... stellen binäre Spaltenvektoren der Länge l dar. Das heißt, F : F 2 m F 2 l .
    Figure DE102020110787B3_0010
    Eine notwendige (aber nicht hinreichende) Bedingung, dass die Kontrollmatrix H einen doppelfehlerkorrigierenden Code erzeugt, ist l ≥ m. Um einen tripelfehlerkorrigierenden Code zu erhalten muss l ≥ 2m sein. Um einen Code zu erhalten, mit dem alle s-Bitfehler mit 1 ≤ s ≤ t korrigiert werden können, muss l ≥ (t - 1)m gelten.
  • Es existieren Codes mit l = m, l = 2m und l = (t - 1)m für die genannten Fehlerkorrekturstärken, und solche Codes sind natürlich aus Effizienzgründen vorzuziehen.
  • Beispiele
  • Die 5 × 31-Matrix H 0 = ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
    Figure DE102020110787B3_0011
    ist die Kontrollmatrix des binären Hamming Codes der Länge n = 31. Die Spaltenvektoren der Matrix H0 sind - von links nach rechts gelesen - die Binärdarstellungen der natürlichen Zahlen 1,2, ... ,31. Der Hamming Code hat die Minimumdistanz d = 3, und es können daher mit ihm Einbitfehler korrigiert werden.
  • Da eine Kontrollmatrix mit fünf Zeilen die Einbitfehlerkorrektur in Codewörtern der Länge 31 ermöglicht, sollten zehn Zeilen ausreichen für die Zweibitfehlerkorrekur. Dazu wird die Matrix H0 durch Hinzufügen von fünf weiteren Zeilen erweitert, sodass die neue 10 × 31-Matrix einen Code mit der Minimumdistanz d = 5 definiert.
  • Die Matrix H 1 = ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 )
    Figure DE102020110787B3_0012
    hat diese Eigenschaft. (Die ( 31 1 ) + ( 31 2 ) + ( 31 3 ) + ( 31 4 ) = 31 + 465 + 4495 + 31465 = 36456
    Figure DE102020110787B3_0013
    Summen aus jeweils einer, zwei, drei oder vier Spalten der Matrix H1 sind alle verschieden vom Nullvektor. Andererseits kann es passieren, dass die Summe aus fünf Spaltenvektoren die Alles-Null-Spalte ergibt. Es gilt zum Beispiel h3 + h5 + h7 + h8 + h9 = 0. Daraus folgt, dass die Matrix H1 einen Code mit Minimumdistanz d = 5 definiert.)
  • Da die Matrix H1 die Kontrollmatrix H0 des Hamming Codes als Submatrix enthält, ist der durch H1 definierte Code ein Untercode des Hamming Codes der Länge 31. Die Kontrollmatrix H1 ist von der Form in Gleichung (1).
  • Die Matrix H1 kann formal dargestellt werden durch H 1 = ( v w x y z v w + x z v y + w x v x + w z + x y v x + w y + y z v z + w y + w z ) .
    Figure DE102020110787B3_0014
  • Wenn der 5-dimensionale Vektor (v, w, x, y, z)T der Reihe nach die Vektoren 1 = ( 1 0 0 0 0 ) ,   2 = ( 0 1 0 0 0 ) ,  3 = ( 1 1 0 0 0 ) ,   ,  31 = ( 1 1 1 1 1 )
    Figure DE102020110787B3_0015
    durchläuft, dann durchläuft der 10-dimensionale Vektor in Gleichung (2) die 31 Spalten der obigen Matrix H1.
  • Der durch die Kontrollmatrix H1 bzw. deren formale Beschreibung in Gleichung (2) definierte binäre Code ist ein (31,21,5) linearer systematischer Code. Die zehn Kontrollbits befinden sich in dem 31 Bit langen Codewort auf den Plätzen 1,2,4,8,16 und 3,6,12,24,17. Auf den verbleibenden 21 Plätzen im Codewort sitzen die Nachrichtenbits. (Die Positionen der zehn Kontrollbits sind nicht eindeutig bestimmt. Es gibt zahlreiche andere Möglichkeiten, die zehn Kontollbits zu platzieren. Jedoch ist nicht jede Platzierung möglich. Dies wird weiter unten noch genauer erläutert.)
  • Die 15 × 31-Kontrollmatrix H 2 = ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 )
    Figure DE102020110787B3_0016
    definiert einen linearen systematischen (31,16,7)-Code. Die Matrix H2 kann formelmäßig dargestellt werden durch den variablen Spaltenvektor H 2 = ( v w x y z v w w x x y y z v z v x w y x z v y w z ) .
    Figure DE102020110787B3_0017
  • Die 15 Kontrollbits können in dem 31 Bit langen Codewort auf die Plätze 1,2,4,8,16; 3,6,12,24,17 und 5,10,20,9,18 gelegt werden.
  • Ein doppelfehlerkorrigierender linearer Code der Länge n = 63, Dimension k = 51, und mit der Minimumdistanz d = 5 ist gegeben durch H 3 = ( u v w x y z u v + u x + v z + w y u w + v w + v y + x z u x + u y + v y + w x u w + v z + w z + x y u w + u x + v y + y z u z + v x + v y + x z ) .
    Figure DE102020110787B3_0018
  • Dieser (63,51,5)-Code ist ebenfalls systematisch. Die 12 Kontrollbits befinden sich auf den Plätzen 1,2,4,8,16,32 und 3,6,12,24,48,33. Auf den restlichen Plätzen in dem 63 Bit langen Codewort befinden sich die 51 Nachrichtenbits.
  • Der variable 18-dimensionale Spaltenvektor H 4 = ( u v w x y z u v + u x v w + v y w x + w z v y + x y u x + y z u z + w z u w + v y v x + w z u x + w y v y + x z u y + w z u x + v z ) .
    Figure DE102020110787B3_0019
    beschreibt die 18 × 63-Kontrollmatrix H4 eines (63,45,7) linearen systematischen Codes, der - wie auch der Code in Beispiel 3 - ein Untercode des Hamming Codes derselben Länge ist. Die 18 Kontrollbits sitzen auf den Plätzen 1,2,4,8,16,32; 3,6,12,24,48,33; 5,10,20,40,17,34.
  • Im Folgenden wird die Verwendung von Codes mit einer Kontrollmatrix von der Form von Gleichung (1) haben, z.B. durch die Speicherzugriffseinheit, beschrieben.
  • Man betrachte die Struktur der Kontrollmatrix in Gleichung (1). Die oberen Einträge in der Matrix, 1, 2, ..., n, repräsentieren die natürlichen Zahlen 1,2, ..., n. Jede natürliche Zahl ist dargestellt durch einen binären Vektor der Länge m. Um die Vektordarstellung zu betonen ist die natürliche Zahl in Fettdruck geschrieben. Die Länge m ergibt sich aus der Codewortlänge n durch m = [log2n] + 1. Mit anderen Worten, wenn der Code die Länge n hat, dann ist m die eindeutig bestimmte natürliche Zahl mit der Eigenschaft 2 m 1 n < 2 m .
    Figure DE102020110787B3_0020
  • Für die Codewortlängen n ∈ {8,9,10,11,12,13,14,15} folgt zum Beispiel, dass m = 4 ist.
  • In diesem Fall bedeutet 1 = ( 1 0 0 0 ) ,   2 = ( 0 1 0 0 ) ,  3 = ( 1 1 0 0 ) ,  4 = ( 0 0 1 0 ) ,  
    Figure DE102020110787B3_0021
  • Die Zahl m stimmt überein mit der Anzahl der Variablen in der algebraischen Darstellung der Kontrollmatrix des Codes. Es wird deshalb auch von einem m-Variable-Code gesprochen. Zum Beispiel ist der Code der Länge 31 mit der Kontrollmatrix H1 in Gleichung (2) ein 5-Variable-Code.
  • Man betrachte die allgemeine Kontrollmatrix in Gleichung (1). Die j-te Spalte hj der Matrix hat die Form h j = ( j F ( j ) ) .
    Figure DE102020110787B3_0022
    Angenommen j hat die Länge m. Dann hat der Spaltenvektor hj die Länge 2m, wenn es sich um einen doppelfehlerkorrigierenden Code handelt (Minimumdistanz d = 5). Wenn es sich um einen tripelfehlerkorrigierenden Code handelt (Minimumdistanz d = 7), dann hat hj die Länge 3m. Der obere Teil j des Spaltenvektors hj heißt die Spaltennummer. Der untere Teil F(j) ist der Funktionswertanteil von hj.
  • Die hier betrachteten linearen Codes werden durch eine Funktion F : F 2 m F 2 l
    Figure DE102020110787B3_0023
    beschrieben, wobei l = m ist für den doppel- und l = 2m für den tripelfehlerkorrigierenden Code.
  • Für den Code der Länge 31 aus dem obigen Beispiel, der durch die Kontrollmatrix H1 in Gleichung (2) definiert wird, ist beispielsweise F : F 2 5 F 2 5
    Figure DE102020110787B3_0024
    mit F : ( v w x y z ) ( v w + x z v y + w x v x + w z + x y v x + w y + y z v z + w y + w z ) .
    Figure DE102020110787B3_0025
  • Die Funktion F : F 2 m F 2 l
    Figure DE102020110787B3_0026
    wird durch l Boolsche Funktionen F i : F 2 m F 2
    Figure DE102020110787B3_0027
    beschrieben. Die Funktionen Fi = Fi(x1,...,xm), 1 ≤ i ≤ l, heißen die Komponenten von F. F ( x 1 , , x m ) = ( F 1 ( x 1 , , x m ) F 2 ( x 1 , , x m ) F l ( x 1 , , x m ) ) .
    Figure DE102020110787B3_0028
  • Die fünf Komponentenfunktionen der in diesem Beispiel angegebenen Funktion F sind F1(v, w, x, y, z) = vw + xz, F2(v, w, x, y, z) = vy + wx, F3(v, w, x, y, z) = vx + wz + xy, F4(v, w, x, y, z) = vx + wy + yz und F5(v, w, x, y, z) = vz + wy + wz.
  • Auf der Basis der Funktion F führt die Speicherzugriffseinheit die zum codierten Speichern und Auslesen von Daten erforderlichen Operationen - Codierung, Syndromberechnung, Fehlerkorrektur - aus. Im Folgenden wird erläutert, auf welche Weise dies gemäß einer Ausführungsform geschieht. Es wird im Folgenden Ausführungen vorausgesetzt, dass die Funktion F = F(x1,...,xm) und die Codewortlänge n bekannt sind.
  • Spaltenvektorberechnung
  • Sei j ∈ {1,2, ..., n} eine beliebige Spaltennummer. Es sei der zugehörige Spaltenvektor hj der Kontrollmatrix zu berechnen. Sei j = ( j 1 j 2 j m )
    Figure DE102020110787B3_0029
    die Binärdarstellung der natürlichen Zahl j in der Form eines Spaltenvektors j der Länge m, d.h., j = j1 + 2j2 + 4j3 + ... + 2m-1jm. Dann ist die j-te Spalte der Kontrollmatrix gegeben durch h j = ( j F ( j ) ) = ( j 1 j 2 j m F 1 ( j 1 , , j m ) F 2 ( j 1 , , j m ) F l ( j 1 , , j m ) ) .
    Figure DE102020110787B3_0030
  • Man betrachte als Beispiel den doppelfehlerkorrigierenden Code der Länge 31, der durch die Kontrollmatrix H1 in Gleichung (2) gegeben ist. Hier ist m = 5 und F ( v , w , x , y , z ) = ( F 1 ( v , w , x , y , z ) F 2 ( v , w , x , y , z ) F 3 ( v , w , x , y , z ) F 4 ( v , w , x , y , z ) F 5 ( v , w , x , y , z ) ) = ( v w + x z v y + w x v x + w z + x y v x + w y + y z v z + w y + w z ) .
    Figure DE102020110787B3_0031
  • Daraus kann jede einzelne Spalte der Kontrollmatrix berechnet werden. Zum Beispiel erhält man für die siebente Spalte h 7 = ( 7 F ( 7 ) ) = ( 1 1 1 0 0 F 1 ( 1,1,1,0,0 ) F 2 ( 1,1,1,0,0 ) F 3 ( 1,1,1,0,0 ) F 4 ( 1,1,1,0,0 ) F 5 ( 1,1,1,0,0 ) ) = ( 1 1 1 0 0 1 1 1 1 0 ) .
    Figure DE102020110787B3_0032
  • Im Folgenden wird ein Beispiel für ein Verfahren zur Berechnung der Spaltenvektoren der Kontrollmatrix, bezeichnet als „VEK“, in Pseudocode angegeben:
    • VEK
    • Eingabe: j ∈ {1, ..., n}
    • Schritt 1: Berechne j = (j1,...,jm)T
    • Schritt 2: Berechne F(j) = (F1(j), ...,Fl(j))T
    • Ausgabe: VEK ( j ) = h j = ( j F ( j ) )
      Figure DE102020110787B3_0033
  • Spaltenvektorverifikation
  • Gegeben sei ein binärer Spaltenvektor v der Länge r = m + l. v = ( a b ) = ( a 1 a 2 a m b 1 b 2 b l ) .
    Figure DE102020110787B3_0034
  • Bei der Spaltenvektorverifikation soll ermittelt werden, ob dieser Vektor v ein Spaltenvektor der Kontrollmatrix des zugrundeliegenden durch die Funktion F und die Codewortlänge n definierten Codes ist.
  • Eine notwendige Voraussetzung dafür, dass v ein Spaltenvektor der Kontrollmatrix ist, ist 1 a : = a 1 + 2 a 2 + 2 m 1 a m n .
    Figure DE102020110787B3_0035
  • Angenommen dies ist der Fall. Dann ist a bzw. a eine zulässige Spaltennummer. Berechne die a-te Spalte der Kontrollmatrix mithilfe von VEK: VEK ( a ) = h a ( a F ( a ) ) .
    Figure DE102020110787B3_0036
    Der gegebene Vektor v = (a, b)T ist ein Spaltenvektor der Kontrollmatrix genau dann, wenn v = VEK(a) gilt. Und das ist genau dann der Fall, wenn b = F(a) ist.
  • Wenn sich herausstellt, dass der untersuchte Vektor v ein Spaltenvektor der Kontrollmatrix ist, ist VER(v) = 1. Wenn v kein Spaltenvektor der Kontrollmatrix ist, ist VER(v) = 0.
  • Im Folgenden wird ein Beispiel für ein Verfahren zur Spaltenvektorverifikation, bezeichnet als „VER“, in Pseudocode angegeben:
    • VER
    • Eingabe: v = ( v 1 , , v m + l ) F 2 m + l
      Figure DE102020110787B3_0037
    • Ausgabe: VER(v) ∈ {0,1}
    • Schritt 1: Berechne a : = (v1, ..., vm)T
    • Schritt 2: Berechne b : = (vm+1,...,vm+l)T
    • Schritt 3: Berechne a : = i = 1 m v i 2 i 1
      Figure DE102020110787B3_0038
    • Wenn a = 0 oder a > n, dann gebe VER(v) = 0 aus.
    • Wenn 1 ≤ a ≤ n, dann gehe zu Schritt 4
    • Schritt 4: Berechne F(a)
    • Wenn F(a) = b, dann gebe VER(v) = 1 aus.
    • Wenn F(a) ≠ b, dann gebe VER(v) = 0 aus.
  • Syndromberechnung
  • Sei H die Kontrollmatrix für einen linearen (n, k, d)-Code. Dann ist H eine binäre Matrix mit n - k Zeilen und n Spalten. Sei y = ( y 1 , , y n ) F 2 n
    Figure DE102020110787B3_0039
    die empfangene Nachricht. Um eine Auskunft über die Fehlerfreiheit oder Fehlerhaftigkeit von y zu bekommen, berechnet der Dekodierer 105 das Syndrom von y: Syn ( y ) = H y T .
    Figure DE102020110787B3_0040
  • Das Syndrom des n Bit langen Zeilenvektors y ist also ein Spaltenvektor der Länge n - k. Wenn y fehlerfrei ist, dann ist Syn(y) der Nullvektor.
  • Seien h 1 , , h n F 2 n - k
    Figure DE102020110787B3_0041
    die Spalten der Kontrollmatrix H, das heißt H = ( h 1 , h 2 , , h n ) .
    Figure DE102020110787B3_0042
  • Dann folgt Syn ( y ) = H y T = y 1 h 1 + y 2 h 2 + + y n h n .
    Figure DE102020110787B3_0043
  • Sei I = (i1, ..., ir} die Menge aller Indizes i für die die i-te Koordinate des Nachrichtenvektors y gleich 1 ist. Mit anderen Worten, I ist die Teilmenge von {1, ..., n} mit der Eigenschaft i ∈ I genau dann, wenn yi = 1. Dann gilt Syn ( y ) = h i 1 + h i 2 + + h i r .
    Figure DE102020110787B3_0044
  • Die Syndromberechnung auf der Basis der Funktion F geschieht daher folgendermaßen: Betrachte den Nachrichtenvektor y = (y1, ..., yn). Die Koordinaten von y die gleich 0 sind, haben keinen Einfluss auf das Syndrom. Für jede Koordinate yi die gleich 1 ist, berechnet der Dekodierer 105 mit der Hilfe von VEK den Spaltenvektor h i = VEK ( i )
    Figure DE102020110787B3_0045
  • Alle diese Spaltenvektoren werden aufsummiert. Der Summenvektor ist dann das Syndrom von y. (Aufsummieren bedeutet, dass die Spaltenvektoren bitweise per XOR addiert werden.)
  • Im Folgenden wird ein Beispiel für ein Verfahren zur Syndromberechnung, bezeichnet als „SYN“, in Pseudocode angegeben:
    • SYN
    • Eingabe: y = ( y 1 , , y n ) F 2 n
      Figure DE102020110787B3_0046
    • Initialisiere: s : = 0 F 2 m + l
      Figure DE102020110787B3_0047
    • for i from 1 to n do
    • if yi = 1 then s : = s + VEK(i) else s : = send if
    • end do;
    • Ausgabe: s = Syn(y)
  • Codierung
  • Sei r der Rang der Kontrollmatrix H. Die Zahl r stimmt überein mit der Anzahl der Zeilen von H. Bei dem doppelfehlerkorrigierenden Code ist r = 2m. Bei dem tripelfehlerkorrigierenden Code ist r = 3m.
  • Ein Codewort der Länge n enthält r Kontrollbits c1, c2, ..., cr und n - r Nachrichtenbits a1, a2, ..., an-r. Bei einem systematischen Code treten die Nachrichtenbits direkt im Codewort auf.
  • Üblicherweise werden die Kontrollbits an die Nachrichtenbits angehängt, sodass ein Codewort der Form ( a 1 , a 2 , , a n r , c 1 , c 2 , , c r )
    Figure DE102020110787B3_0048
    entsteht. Diese Darstellung setzt allerdings voraus, dass die benutzte Kontrollmatrix H die Form H = ( A | I )
    Figure DE102020110787B3_0049
    hat mit der r × r-Einheitsmatrix I am Schluß. Insbesondere treten alle r Einheitsvektoren ( 1 0 0 0 0 ) ,   ( 0 1 0 0 0 ) ,   ,   ( 0 0 0 0 1 ) F 2 r
    Figure DE102020110787B3_0050
    als Spalten in der Kontrollmatrix H auf. Das ist bei den vom Kodierer 103 gemäß verschiedenen Ausführungsformen verwendeten Codes nicht der Fall. Diese Codes haben, wie mit Bezug auf Gleichung (1) erwähnt, eine Kontrollmatrix der Form H = ( 1 2 n F ( 1 ) F ( 2 ) F ( n ) ) .
    Figure DE102020110787B3_0051
  • In dieser Matrix treten nur die ersten m Einheitsvektoren aus F 2 r
    Figure DE102020110787B3_0052
    auf, und zwar tun sie das an den Stellen 1,2,4, ..., 2m-1. Daher ist die übliche Darstellung von Gleichung (4) für die Codewörter eines systematischen Codes hier nicht möglich. Im vorliegenden Fall werden stattdessen die r Kontrollbits c1, ..., cr an bestimmten Stellen im Codewort platziert. Auf den verbleibenden n - r Stellen werden der Reihe nach, von links nach rechts, die Nachrichtenbits a1, a2, ..., an-r platziert. Die r Stellen für die Kontrollbits müssen explizit angegeben werden in der Beschreibung des Codes.
  • Es gibt viele Möglichkeiten die Kontrollbits zu platzieren, jedoch können sie nicht beliebig platziert werden. Voraussetzung für die Wahl der Kontrollbitpositionen ist, dass die r Spaltenvektoren der Kontrollmatrix an den Positionen der Kontrollbits eine quadratische r × r-Matrix M bilden, die invertierbar ist. Es ist immer möglich - und aus Effizienzgründen wird dies gemäß einer Ausführungsform vorgenommen - die Stellen 1,2,4, ..., 2m-1 als Kontrollbitpositionen zu nutzen.
  • Seien p1, ..., pr die gewählten Kontrollbitpositionen mit 1 p 1 < p 2 < < p r n .
    Figure DE102020110787B3_0053
  • Die Kontrollbits c1, ..., cr berechnet der Kodierer 104 aus den vorgegebenen Nachrichtenbits a1, ..., an-r folgendermaßen: Berechne mit VEK die zugehörigen r Spaltenvektoren der Kontrollmatrix H: VEK ( p i ) = ( p i F ( p i ) ) ,       i = 1, , r .
    Figure DE102020110787B3_0054
  • Bilde die r × r-Matrix M gegeben durch M = ( VEK ( p 1 ) , , VEK ( p r ) ) .
    Figure DE102020110787B3_0055
  • Die Matrix M muss invertierbar sein, sonst sind die gewählten Kontrollbitpositionen p1, ..., pr nicht möglich. Sei M-1 die inverse Matrix zu M. Sei a = (a1, a2, ..., an-r) der Nachrichtenvektor. Der Nachrichtenvektor a wird, indem Platz geschaffen wird für die Kontrollbits, zu einem Vektor a' der Länge n erweitert. Der erweiterte Vektor a' enthält alle n - r Nachrichtenbits ai und zusätzliche r Nullen, die zwischen die Nachrichtenbits eingeschoben werden. Am Ende liegt auf jeder Kontrollbitposition pj eine der hinzugefügten Nullen.
  • Als nächstes berechnet der Kodierer 104 mittels SYN das Syndrom von a'. Sei SYN ( a ' ) = ( z 1 z 2 z r ) .
    Figure DE102020110787B3_0056
  • Die Kontrollbits c1, ..., cr werden erhalten durch ( c 1 c 2 c r ) = M 1 ( z 1 z 2 z r ) .
    Figure DE102020110787B3_0057
  • Die berechneten Kontrollbits cj werden nun im Vektor a' an die Stellen der zuvor eingebrachten Nullen gesetzt. Der entstehende Vektor a'' ist das endgültige Codewort.
  • Als Beispiel betrachte man den doppelfehlerkorrigierenden Code der Länge n = 31, der durch die Matrix H1 gegeben ist. Es ist m = 5 und r = 2m = 10. Die zehn Kontrollbitpositionen sind 1,2,3,4,6,8,12,16,17 und 24. Daher ist M = ( 1 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 ) .
    Figure DE102020110787B3_0058
  • Die Matrix M ist invertierbar und M 1 = ( 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 ) .
    Figure DE102020110787B3_0059
  • Aus (5) ergibt sich 5 c 1 c 2 c 3 c 4 c 5 = z 1 + z 6 + z 10 , = z 2 + z 6 + z 7 , = z 6 , = z 3 + z 7 + z 8 , = z 7 ,                    c 6 c 7 c 8 c 9 c 10 = z 4 + z 8 + z 9 , = z 8 , = z 5 + z 9 + z 10 , = z 10 , = z 9 .
    Figure DE102020110787B3_0060
  • Das Nachrichtenwort a = (a1, a2, a3, ..., a21) wird also codiert in das Codewort a ' ' = ( c 1 , c 2 , c 3 , c 4 , a 1 , c 5 , a 2 , c 6 , a 3 , a 4 , a 5 , c 7 , a 6 , a 7 , a 8 , c 8 , c 9 ,                 a 9 , a 10 , a 11 , a 12 , a 13 , a 14 , c 10 , a 15 , a 16 , a 17 , a 18 , a 19 , a 20 , a 21 ) .
    Figure DE102020110787B3_0061
  • Im Folgenden wird ein Beispiel für ein Verfahren zur Codierung eines Nachrichtenvektors a F 2 n r
    Figure DE102020110787B3_0062
    in sein Codewort a ' ' F 2 n ,
    Figure DE102020110787B3_0063
    bezeichnet als „ENC“ (für encoding), in Pseudocode angegeben. Es wird vorausgesetzt, dass die Kontrollbitpositionen p1, ..., pr und somit auch die Matrizen M und M-1 bekannt sind.
    • ENC
    • Eingabe: a = ( a 1 , a 2 , , a n r ) F 2 n r .
      Figure DE102020110787B3_0064
    • Schritt 1: Berechne a'
    • Schritt 2: Berechne z : = SYN(a')
    • Schritt 3: Berechne c = M-1z
    • Schritt 4: Berechne a''
    • Ausgabe: a''
  • Fehlerkorrektur
  • Die Speicherzugriffseinheit 103 speichert Codewörter im Speicher (oder im Falle eines Nachrichtenkanals werden Codewörter übertragen). Sei y = (y1, ..., yn) ein ausgelesenes Wort (bzw. ein empfangenes Nachrichtenwort). Aufgrund von möglichen Speicherfehlern oder Auslesefehlern (bzw. Übertragungsfehlern) ist y nicht notwendigerweise ebenfalls ein Codewort. Der Dekodierer 105 berechnet zunächst das Syndrom von y mithilfe von SYN. Das Syndrom s = SYN(y) ist ein Spaltenvektor der Länge r. Die empfangene Nachricht y ist ein Codewort genau dann, wenn ihr Syndrom s der Nullvektor in F 2 r
    Figure DE102020110787B3_0065
    ist. Wenn kein Fehler bei der Übertragung aufgetreten ist, dann ist die empfangene Nachricht identisch mit dem gesendeten Codewort und das Syndrom ist 0. Umgekehrt wird ein verschwindendes Syndrom als starker Hinweis für die Fehlerfreiheit von y gewertet und man geht dann davon aus, dass y mit dem gesendeten Codewort übereinstimmt (eine Annahme, die in den meisten Fällen richtig ist).
  • Wenn ein Ein-, Zwei- oder Dreibitfehler bei der Übertragung von y aufgetreten ist, dann ist das Syndrom von y mit Sicherheit ungleich 0 bei doppel- und tripelfehlerkorrigierenden Codes.
  • Bei einem aufgetretenen 1-Bitfehler an der Stelle i ∈ {1, ..., n} stimmt das Symptom s = Syn(y) überein mit der i-ten Spalte hi der Kontrollmatrix H. Es gilt also s = h i = ( i F ( i ) ) .
    Figure DE102020110787B3_0066
  • Bei zwei aufgetretenen Bitfehlern an den Stellen i und j gilt s = h i + h j = ( i F ( i ) ) + ( j F ( j ) ) .
    Figure DE102020110787B3_0067
  • Bei einem aufgetretenen Dreibitfehler in den Positionen i, j, k gilt s = h i + h j + h k = ( i F ( i ) ) + ( j F ( j ) ) + ( k F ( k ) ) .
    Figure DE102020110787B3_0068
  • Für eine Fehlerkorrektur berechnet der Dekodierer 105 aus dem bekannten Syndromvektor s die Fehlerpositionen i, (i,j) bzw. (i,j,k). Sind die Fehlerpositionen bekannt, dann korrigiert der Dekodierer 105 das ausgelesene Wort (bzw. die empfangene Nachricht) an den entsprechenden Stellen. (Dreibitfehler können natürlich nur in dem Code mit Minimumdistanz d = 7 korrigiert werden).
  • Im Folgenden wird ein Beispiel für ein Verfahren zur Einbitfehlerkorrektur, bezeichnet als „UNO“, in Pseudocode angegeben. Das Verfahren UNO liefert die Position j eines aufgetretenen Einbitfehlers. Es erhält als Eingabe das von Null verschiedene Syndrom s des ausgelesenen Worts (bzw. der empfangenen Nachricht) y.
    • UNO
    • Eingabe: s = ( s 1 , , s r ) T F 2 r \ { 0 }
      Figure DE102020110787B3_0069
    • Berechne b : = VER(s)
    • Wenn b = 0 dann schreite fort mit DUE
    • Wenn b = 1 dann berechne j : = s1 + 2s2 + 4s3 + ... + 2m-1sm Ausgabe: j
  • Wenn ein 2-Bitfehler aufgetreten ist, dann hat das Syndrom s die Form s = h i + h j ,
    Figure DE102020110787B3_0070
    wobei die Indizes i und j unbekannt sind.
  • Sei ht ein beliebiger Spaltenvektor der Kontrollmatrix H. Man betrachte den Vektor u : = s + h t = h i + h j + h t .
    Figure DE102020110787B3_0071
  • Für t ∈ {1, ..., n}\{i, j} ist u die Summe aus drei Spaltenvektoren und VER(u) = 0.
  • Dagegen ist für die Werte t = i und t = j der Vektor u identisch mit einem Spaltenvektor der Kontrollmatrix. Wenn t = i ist, folgt u = h j = ( j F ( j ) ) .
    Figure DE102020110787B3_0072
  • Und wenn t = j ist, dann folgt u = h i = ( i F ( i ) ) .
    Figure DE102020110787B3_0073
  • In diesen beiden Fällen ist VER(u) = 1.
  • Im Folgenden wird ein Beispiel für ein entsprechendes Verfahren zur Zweibitfehlerkorrektur, bezeichnet als „DUE“, in Pseudocode angegeben. Das Verfahren DUE erhält als Eingabe einen Syndromvektor s mit s ≠ 0 und VER(s) = 0. Wenn ein Zweibitfehler vorliegt, liefert das Verfahren die beiden Fehlerpositionen als Ausgabe. Wenn mehr als zwei Fehler aufgetreten sind, liefert DUE die Ausgabe „Mehrbitfehler“.
    • DUE
    • Eingabe: s F 2 r \ { 0 }  mit VER ( s ) = 0
      Figure DE102020110787B3_0074
    • Initialisiere: i = 1
    • Schritt 1: Berechne v : = VEK(i)
    • Schritt 2: Berechne w : = v + s = (w1, ..., wr)T
    • Schritt 3: Berechne b : = VER(w)
    • Wenn b = 1 dann berechne j : = i = 1 m w i 2 i 1
      Figure DE102020110787B3_0075
      und gebe (i,j) aus.
    • Wenn b = 0 und i < n dann i : = i + 1 und gehe zurück zu Schritt 1.
    • Wenn b = 0 und i = n dann gebe „Mehrbitfehler“ aus.
  • Wenn der zugrundeliegende Code die Minimumdistanz d = 5 hat, kann ein aufgetretener Mehrbitfehler (im Sinn von „mehr als zwei Bitfehler“, also z.B. ein Dreibitfehler) nicht korrigiert werden. Wenn der Code die Minimumdistanz d = 7 hat, können Dreibitfehler ebenfalls korrigiert werden.
  • Dazu geht der Dekodierer 105 folgendermaßen vor.
  • Bei einem aufgetretenen Dreibitfehler hat das Syndrom die Form s = h a + h b + h c
    Figure DE102020110787B3_0076
    mit unbekannten Fehlerpositionen a, b, c ∈ {1,2, ..., n}. Beginnend mit t = 1 - und wenn nötig für weitere Werte von t - berechnet der Dekodierer 105 h t = VEK ( t ) = ( t F ( t ) )
    Figure DE102020110787B3_0077
    und addiert den Spaltenvektor ht zu s hinzu. Der Summenvektor z : = s + ht wird dann DUE als Eingabe übergeben.
  • Wenn t ∉ {a, b, c}, dann wurde durch die Addition von ht die Lage verschlimmert (so als wäre ein 4-Bitfehler aufgetreten). In diesem Fall liefert DUE die Ausgabe „Mehrbitfehler“.
  • Wenn t ∈ {a, b, c}, dann ist z = s + ht die Summe aus nur mehr zwei Spaltenvektoren der Kontrollmatrix. In diesem Fall liefert DUE eine Ausgabe der Form (i,j) ∈ {(a, b), (a, c), (b, c)}. Die Positionen des Dreibitfehlers sind dann i, j und t.
  • Im Folgenden werden Beispiele für eine schnelle Syndromberechnung beschrieben, die vom Dekodierer 105 (aber auch vom Kodierer 105) eingesetzt werden kann.
  • Man betrachte die Matrix aus Gleichung (1). Sei n = 2m - 1. Der Matrix wird eine Alles-Null-Spalte auf der linken Seite hinzugefügt. Die so erweiterte Matrix ist H ^ = ( 0 1 2 n F ( 0 ) F ( 1 ) F ( 2 ) F ( n ) ) .
    Figure DE102020110787B3_0078
  • Die erweiterte Matrix Ĥ ist zwar nicht mehr Kontrollmatrix des zugrundeliegenden Codes, sie bietet jedoch einen Vorteil für die schnelle Syndromberechnung aufgrund der durch das Hinzufügen der Alles-Null-Spalte erzielten Übereinstimmung zwischen der linken und der rechten Hälfte der Matrix im oberen Bereich. Zum Beispiel wird die 10 × 31-Kontrollmatrix H1 zu der 10 × 32-Matrix H 1 ^ = ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1     0    1  0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0   1   1  0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1    1   1  0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1    1   1  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1    1   1  0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1    1   0  0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1    1   0  0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 1 0   0   1  0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 0 1 0   0   1  0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1   0   1  )
    Figure DE102020110787B3_0079
  • Die Matrix H 1 ^
    Figure DE102020110787B3_0080
    zerfällt in 6 Teilmatrizen. Man beachte, dass die beiden 4 × 16-Teilmatrizen im oberen Bereich der Matrix miteinander identisch sind. Die mittlere 1 × 16-Teilmatrix ist konstant 0. Die 1 × 16-Teilmatrix rechts daneben ist konstant 1.
  • Die beiden 5 × 16-Teilmatrizen im unteren Teil der Matrix H1 sind zwar nicht miteinander identisch, sie sind jedoch mit einander „verwandt“: Die rechte 5 × 16-Teilmatrix ist eine maskierte Version der linken 5 × 16-Teilmatrix, wobei eine „lineare Maske“ zum Einsatz kommt. Was damit gemeint ist, wird im Folgenden klar werden.
  • Sei y = ( y 1 , y 2 , , y n ) F 2 n
    Figure DE102020110787B3_0081
    ein Nachrichtenvektor und n = 2m - 1. Bei der Syndromberechnung von y werden alle Spalten hi der zugrundeliegenden Kontrollmatrix für die yi = 1 gilt berechnet und aufsummiert. Die oben (insbesondere im Verfahren SYN) beschriebene Syndromberechnung geschieht seriell: Es werden der Reihe nach die benötigten Spalten der Kontrollmatrix berechnet und miteinander aufsummiert. Die Idee bei der schnellen Syndromberechnung kann darin gesehen werden, die Spalten der Kontrollmatrix paarweise abzuarbeiten.
  • Aufgrund der genannten Beziehungen zwischen der linken und rechten Hälfte der erweiterten Matrix H ^ 1
    Figure DE102020110787B3_0082
    genügt es die Spaltenvektoren hi für die linke Hälfte zu berechnen, also für i = 0,1, ... ,15 im gerade betrachteten Fall und für i = 0,1, ..., 2m-1 - 1 im allgemeinen Fall. Die Vektoren in der rechten Hälfte der Matrix lassen sich aus denen der linken Hälfte berechnen.
  • Man betrachte den allgemeinen Fall eines Codes der Länge n = 2m - 1, gegeben durch die Funktion F(x1, ..., xm), wobei F : F 2 m F 2 l
    Figure DE102020110787B3_0083
    ist. Der j-te Spaltenvektor der zugehörigen erweiterten Kontrollmatrix Ĥ1 hat die Form h j = ( j F ( j ) ) = ( j 1 j 2 j m F 1 ( j 1 , , j m ) F 2 ( j 1 , , j m ) F l ( j 1 , , j m ) ) ,                  0 j 2 m 1.
    Figure DE102020110787B3_0084
  • In der linken Hälfte der Matrix Ĥ1 ist die Koordinate jm konstant 0. Daher können die Spaltenvektoren der linken Hälfte von Ĥ1 etwas einfacher beschrieben (und deshalb in Hardware etwas effizienter generiert) werden. Sei E ( x 1 ,..., x m 1 ) : = F ( x 1 ,..., x m 1 ,0 ) .
    Figure DE102020110787B3_0085
  • Das heißt, E ( x 1 ,..., x m 1 ) = ( E 1 ( x 1 ,..., x m 1 ) E 2 ( x 1 ,..., x m 1 ) E l ( x 1 ,..., x m 1 ) ) = ( F 1 ( x 1 ,..., x m 1 ,0 ) F 2 ( x 1 ,..., x m 1 ,0 ) F l ( x 1 ,..., x m 1 ,0 ) ) .
    Figure DE102020110787B3_0086
  • Von nun an werden die Spaltenvektoren hi = VEK(i) auf der linken Seite der Matrix Ĥ mit SP(i) bezeichnet. Für i = 0,1, ..., 2m-1 - 1 gilt also SP ( i ) = h i = ( E ( i ) i ) = ( i 1 i m 1 0 E 1 ( i 1 ,..., i m 1 ) E 1 ( i 1 ,..., i m 1 ) ) F 2 m + l .
    Figure DE102020110787B3_0087
  • Die Spaltenvektoren der rechten Hälfte der Matrix Ĥ1 können aus denen der linken Hälfte gewonnen werden durch Addition (d.h. koordinatenweisem XOR) einer affinen Maske MA, sodass für i = 0,1, ..., 2m-1 - 1 gilt h i + 2 m 1 = SP ( i ) + MA ( i ) .
    Figure DE102020110787B3_0088
  • Der Maskenvektor MA(i) hat die Form MA ( i ) = ( A ( i ) 2 m 1 ) = ( 0 0 1 A 1 ( i 1 ,..., i m 1 ) A l ( i 1 ,..., i m 1 ) ) F 2 m + l ,
    Figure DE102020110787B3_0089
    wobei ( i 1 ,..., i m 1 ) F 2 m 1
    Figure DE102020110787B3_0090
    die Binärdarstellung der ganzen Zahl i ist (d.h. i = i1 + 2i2 + ... + 2m-2im-1). Die Funktion A = A(x1, ..., xm-1) ist gegeben durch A ( x 1 ,..., x m 1 ) = F ( x 1 ,..., x m 1 ,1 ) F ( x 1,..., x m 1 ,0 ) .
    Figure DE102020110787B3_0091
  • Die Komponentenfunktionen E1(x1, ..., xm-1), ..., El(x1, ..., xm-1) von E(x1, ..., xm-1) sind durchwegs Boolsche Funktionen vom algebraischen Grad ≤ 2. Die Komponentenfunktionen A1(x1, ..., xm-1), ..., Al(x1, ... , xm-1) von A(x1, ..., xm-1) sind allesamt Boolsche Funktionen vom algebraischen Grad ≤ 1 (also linear oder affin oder konstant).
  • Die schnelle Syndromberechnung kann auch mit höheren Parallelisierungsgraden durchgeführt werden. So kann die Idee der schnellen Syndromberechnung mit dem Parallelisierungsgrad 2 darin gesehen werden, die Spaltenvektoren der Matrix Ĥ (der um den Nullvektor erweiterten Kontrollmatrix H) paarweise abzuarbeiten. Es werden die Paare ( h i , h i + 2 m 1 )
    Figure DE102020110787B3_0092
    für i = 0,1, ..., 2m-1 - 1 durchlaufen. Sei y = (y1, y2, ..., yn) der Nachrichtenvektor und ŷ = (y0, y1, …, yn) der verlängerte Nachrichtenvektor mit y0 = 0. (Es gelte weiterhin n = 2m - 1). Sei i ∈ {0,1, ..., 2m-1 - 1} und j = i + 2m-1.
  • Man betrachte s = y i h i + y j h j .
    Figure DE102020110787B3_0093
  • Der Beitrag dieser Summe zum Syndrom Syn(y) hängt von den konkreten Werten von yi und yj ab. Bei der Syndromberechnung unterscheidet die Speicherzugriffseinheit 103 vier Fälle:
    • Fall 1: (yi, yj) = (0,0). Dann ist yihi + yjhj = 0.
    • Fall 2: (yi, yj) = (1,0). Dann ist yihi + yjhj = hi = SP(i).
    • Fall 3: (yi, yj) = (0,1). Dann ist yihi + yjhj = hj = SP(i) + MA(i).
    • Fall 4: (yi, yj) = (1,1). Dann ist yihi + yjhj = hi + hj = MA(i).
  • Daraus ergibt sich das folgende Verfahren zur schnellen Syndromberechnung, bezeichnet als „SYN2“.
    • SYN2
    • Eingabe: y = ( y 0 , y 1 ,..., y n ) F 2 n + 1
      Figure DE102020110787B3_0094
    • Initialisiere: s : = 0 F 2 m + 1
      Figure DE102020110787B3_0095
    • for i from 0 to 2m-1 - 1 do
    • if (yi, yj) = (0,0) then s : = s end if;
    • if (yi, yj) = (1,0) then s : = s + SP(i) end if;
    • if (yi, yj) = (0,1) then s : = s + SP(i) + MA(i) end if;
    • if (yi, yj) = (1,1) then s : = s + MA(i) end if;
    • end do;
    • Ausgabe: s = Syn(y)
  • Als Beispiel betrachte man den durch H1 gegebenen Code, der durch die Funktion F ( v , w , x , y , z ) = ( v w + x z v y + w x v x + w z + x y v x + w y + y z v z + w y + w z )
    Figure DE102020110787B3_0096
    definiert ist. Wenn man in F die Variable z durch 0 ersetzt, erhält man die Funktion E ( v , w , x , y ) = ( v w v y + w x v x + x y v x + w y w y ) .
    Figure DE102020110787B3_0097
  • Wenn man in F in allen Monomen, die z enthalten, die Variable z durch 1 ersetzt, und alle Monome in denen z gar nicht vorkommt, entfernt, dann erhält man die Funktion A ( v , w , x , y ) = ( x 0 w y v + w ) .
    Figure DE102020110787B3_0098
  • Mit der Hilfe der Funktionen E und A werden sodann die benötigten Vektoren SP ( i ) = ( E ( i ) i )     u n d    MA ( i ) = ( A ( i ) 16 )
    Figure DE102020110787B3_0099
    gebildet. Hier ist i = (i1, i2, i3, i4) die Binärdarstellung des Index i ∈ {0,1, ... ,15} und 16 = ( 0 0 0 0 1 ) .
    Figure DE102020110787B3_0100
  • Man beachte, dass die Kosten für die Implementierung der Funktionen E(v, w, x, y) und A(v, w, x, y) in Hardware kleiner sind als die für die Funktion F(v, w, x, y, z). Das Ersetzen der Funktion F durch die Funktionen E und A verursacht also keine erhöhten Implementierungskosten.
  • Man beachte ferner, dass bei der Syndromberechnung mit SYN der Parameter i die Zahlen von 1 bis 31 durchlaufen muss. Bei der Syndromberechnung mit SYN2 durchläuft der Parameter i die Zahlen von 0 bis 15.
  • Man kann SYN2 als eine Art Parallelimplementierung von SYN bezeichnen. Aber es ist nicht nur eine Parallelimplementierung. Bei einer Parallelimplementierung mit dem Parallelisierungsgrad 2, zum Beispiel, möchte man typischerweise, dass ein Wert doppelt so schnell berechnet wird wie mit dem ursprünglichen Verfahren. Typischerweise nimmt man dafür in Kauf, eine doppelt so große Hardware-Fläche zu implementieren und einen doppelt so hohen Stromverbrauch zu haben. Bei dem beschriebenen Verfahren SYN2 erhöhen sich jedoch die Hardwarekosten und der Stromverbrauch nicht oder nur geringfügig.
  • Eine noch schnellere Syndromberechnung (Schnelle Syndromberechnung mit Parallelisierungsgrad 4) kann erreicht werden indem man jeweils vier Spalten der Matrix Ĥ gleichzeitig bearbeitet. Man betrachte die erweiterte Matrix Ĥ1 von Gleichung (6). Sie kann wie folgt in vier Bereiche unterteilt werden:                                                                                H ^ 1 = ( 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1    0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1    0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1    0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 )
    Figure DE102020110787B3_0101
  • Die vier 3 × 8-Teilmatrizen im oberen Bereich der Matrix Ĥ1 sind untereinander identisch. Die vier 2 × 8-Teilmatrizen in der Mitte enthalten jeweils konstante Spalten. Die zweite, dritte und vierte 5 × 8-Teilmatrix im unteren Bereich ist jeweils eine maskierte Version der ersten 5 × 8-Teilmatrix. Auf der Grundlage dieser speziellen Struktur ergibt sich das unten in Pseudocode angegebene, mit SYN4 bezeichnete Verfahren.
  • Sei E ( x 1 ,..., x m 2 ) ( E 1 ( x 1 ,..., x m 2 ) E 2 ( x 1 ,..., x m 2 ) E l ( x 1 ,..., x m 2 ) ) = ( F 1 ( x 1 ,..., x m 2 ,0,0 ) F 2 ( x 1 ,..., x m 2 ,0,0 ) F 1 ( x 1 ,..., x m 2 ,0,0 ) ) .
    Figure DE102020110787B3_0102
  • Dann gilt für i = 0,1, ..., 2m-2 - 1 SP ( i ) = h i = ( E ( i ) i ) = ( i 1 i m 2 0 0 E 1 ( i 1 ,..., i m 1 ) E 1 ( i 1 ,..., i m 1 ) ) F 2 m + l .
    Figure DE102020110787B3_0103
  • Es werden die zwei folgenden (lineare) Funktionen definiert: A ( x 1 ,..., x m 2 ) = F ( x 1 ,..., x m 2 ,1,0 ) F ( x 1 ,..., x m 2 ,0,0 ) ; B ( x 1 ,..., x m 2 ) = F ( x 1 ,..., x m 2 ,1,0 ) F ( x 1 ,..., x m 2 ,0,0 ) .
    Figure DE102020110787B3_0104
  • Mit den Funktionen A(x1, ..., xm-2) und B(x1, ..., xm-2) werden die Maskenvektoren MA(i) und MB(i) berechnet: MA ( i ) = ( A ( i ) 2 m 2 ) = ( 0 0 1 0 A 1 ( i 1 ,..., i m 2 ) A 1 ( i 1 ,..., i m 2 ) ) ;
    Figure DE102020110787B3_0105
    MB ( i ) = ( B ( i ) 2 m 1 ) = ( 0 0 0 1 B 1 ( i 1 ,..., i m 2 ) B 1 ( i 1 ,..., i m 2 ) ) ,
    Figure DE102020110787B3_0106
    wobei (i1, ..., im-2) die Binärdarstellung der ganzen Zahl i ∈ {0,1, ..., 2m-2 - ­1} bedeutet.
  • Die Spaltenvektoren SP(i) im ersten Viertel der Matrix Ĥ werden gemäß Gleichung (7) berechnet. Die Spaltenvektoren im zweiten, dritten und vierten Viertel der Matrix H erhält man durch h i = 2 m 2 = SP ( i ) + MA ( i ) ;
    Figure DE102020110787B3_0107
    h i + 2 m 1 = SP ( i ) + MB ( i ) ;
    Figure DE102020110787B3_0108
    h i + 3 2 m 2 SP ( i ) + MA ( i ) + MB ( i ) + K
    Figure DE102020110787B3_0109
    für i = 0,1, ..., 2m-2 - 1. Dabei ist K F 2 m + l
    Figure DE102020110787B3_0110
    ein konstanter Vektor (also ein Vektor, der nicht von i abhängt). Und zwar ist K : = ( 0 0 k 1 k l ) F 2 m + l
    Figure DE102020110787B3_0111
    definiert durch kt = 1 genau dann, wenn die Boolsche Komponentenfunktion Ft(x1, ..., xm) das Monom xm-1xm enthält (t ∈ {1, ..., l}).
  • Sei ŷ = (y0, y1, ..., yn) der verlängerte Nachrichtenvektor mit y0 = 0 und n = 2m - 1.
  • Für i ∈ {0,1,..., 2m-2 - 1} wird definiert j : = i + 1 2 m 2 ,     p : = i + 2 2 m 2 ,     q : = i + 3 2 m 2 .
    Figure DE102020110787B3_0112
  • Für die Syndromberechnung wird für jedes i ∈ {0,1, ..., 2m-2 - 1} die Summe y i h i + y j h j + y p h p + y q h q
    Figure DE102020110787B3_0113
    berechnet. Die Summe (8) kann 16 mögliche Formen annehmen entsprechend den 16 Möglichkeiten für das Quadrupel ( y i , y j , y p , y q ) F 2 4 .
    Figure DE102020110787B3_0114
    Die 16 möglichen Summenresultate sind in der nachfolgenden Tabelle dargestellt.
    (yi, yj, yp, yq) yihi + yjhj + yphp + yqhq
    (0,0,0,0) 0
    (0,0,0,1) SP(i) + MA(i) + MB(i) + K
    (0,0,1,0) SP(i) + MB(i)
    (0,0,1,1) MA(i) + K
    (0,1,0,0) SP(i) + MA(i)
    (0,1,0,1) MB(i) + K
    (0,1,1,0) MA(i) + MB(i)
    (0,1,1,1) SP(i) + K
    (1,0,0,0) SP(i)
    (1,0,0,1) MA(i) + MB(i) + K
    (1,0,1,0) MB(i)
    (1,0,1,1) SP(i) + MA(i) + K
    (1,1,0,0) MA(i)
    (1,1,0,1) SP(i) + MB(i) + K
    (1,1,1,0) SP(i) + MA(i) + MB(i)
    (1,1,1,1) K
  • Daraus ergibt sich das Verfahren SYN4, das im Folgenden in Pseudocode angegeben ist.
    • SYN4
    • Eingabe: y = ( y 0 , y 1 ,..., y n ) F 2 n + 1
      Figure DE102020110787B3_0115
    • Initialisiere: s : = 0 F 2 m + 1
      Figure DE102020110787B3_0116
    • for i from 0 to 2m-2 - 1 do
    • if yiyjypyq = 0000 then s : = s end if;
    • if yiyjypyq = 0001 then s : = s + SP(i) + MA(i) + MB(i) + K end if;
    • if yiyjypyq = 0010 then s : = s + SP(i) + MB(i) end if;
    • if yiyjypyq = 0011 then s : = s + MA(i) + K end if;
    • if yiyjypyq = 0100 then s : = s + SP(i) + MA(i) end if;
    • if yiyjypyq = 0101 then s : = s + MB(i) + K end if;
    • if yiyjypyq = 0110 then s : = s + MA(i) + MB(i) end if;
    • if yiyjypyq = 0111 then s : = s + SP(i) + K end if;
    • if yiyjypyq = 1000 then s : = s + SP(i) end if;
    • if yiyjypyq = 1001 then s : = s + MA(i) + MB(i) + K end if;
    • if yiyjypyq = 1010 then s : = s + MB(i) end if;
    • if yiyjypyq = 1011 then s : = s + SP(i) + MA(i) + K end if;
    • if yiyjypyq = 1100 then s : = s + MA(i) end if;
    • if yiyjypyq = 1101 then s : = s + SP(i) + MB(i) + K end if;
    • if yiyjypyq = 1110 then s : = s + SP(i) + MA(i) + MB(i) end if;
    • if yiyjypyq = 1111 then s : = s + K end if;
    • end do;
    • Ausgabe: s = Syn(y)
  • Als Beispiel wird der Code betrachtet, der durch die Kontrollmatrix H1 und die Funktion F ( v , w , x , y , z ) = ( v w + x z v y + w x v x + w z + x y v x + w y + y z v z + w y + w z )
    Figure DE102020110787B3_0117
    gegeben ist.
  • Die Funktion E(v, w, x) wird erhalten, indem die Variablen y und z gleich 0 gesetzt werden: E ( v , w , x ) = ( v w w x v x v x 0 )
    Figure DE102020110787B3_0118
  • Die Funktionen A(v, w, x) und B(v, w, x) erhält man durch A ( v , w , x ) = F ( v , w , x ,1,0 ) F ( v , w , x ,0,0 ) = ( 0 v x w w ) .
    Figure DE102020110787B3_0119
    und B ( v , w , x ) = F ( v , w , x ,0,1 ) F ( v , w , x ,0,0 ) = ( x 0 w 0 v + w ) .
    Figure DE102020110787B3_0120
  • Der konstante Vektor K ist K= ( 0 0 0 0 0 0 0 0 1 0 ) .
    Figure DE102020110787B3_0121
  • Die 1 in der neunten Koordinate von K muss gesetzt werden, weil die vierte Komponentenfunktion F4(v, w, x, y, z) = vx + wy + yz das Monom yz enthält. In den anderen Komponentenfunktionen von F (d.h., in F1, F2, F3 und F5) kommt dagegen das Monom yz nicht vor. Deshalb ist die sechste, siebente, achte und die zehnte Koordinate von K gleich 0.
  • Zusammenfassend wird gemäß verschiedenen Ausführungsformen eine Kodier/Dekodierschaltung bereitgestellt, wie sie in 2 dargestellt ist.
  • 2 zeigt eine Schaltung 200 zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code aufweisend eine Syndromberechnungsschaltung 201 zum Berechnen eines Syndroms des Datenworts.
  • Die Syndromberechnungsschaltung 201 weist eine Kontrollmatrixberechnungsschaltung 202 auf, die eingerichtet ist, für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes einen Teil-Spaltenvektor auszugeben, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet.
  • Die Syndromberechnungsschaltung 201 weist ferner eine Akkumulierschaltung 203 auf, die eingerichtet ist, die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, zu akkumulieren, wobei sie eingerichtet ist, zumindest einen Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und dem von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor zu bilden. Die Akkumulierschaltung 203 ist ferner eingerichtet, das Ergebnis des Akkumulierens als Syndrom auszugeben.
  • In anderen Worten werden die Beiträge von Bits in einem Datenwort, zu dem ein Syndrom berechnet werden soll, zum Syndrom berechnet, indem der Kontrollmatrixspaltenvektor für ein Bit aus der dem Spaltenvektor zugeordneten Spaltennummer erzeugt wird. Der Kontrollmatrixspaltenvektor für ein Bit (d.h. der Spaltenvektor der Kontrollmatrix, der zu einem Bit gehört) ist der Spaltenvektor der Kontrollmatrix mit der Position der Spalte in der Kontrollmatrix gleich der Position des Bits im Datenwort (und damit die Spalte mit der Spaltennummer gleich der Bitnummer des Bits, falls die Spalten der Matrix und die Bits des Datenworts gleich nummeriert werden). Der Kontrollmatrixspaltenvektor für ein Bit ist also der Spaltenvektor der Kontrollmatrix, mit der das Bit multipliziert wird, wenn das Datenwort (von rechts) mit der Kontrollmatrix multipliziert wird.
  • Der Teil-Spaltenvektor der Kontrollmatrix, der zusammen mit der Spaltennummer des Spaltenvektors den Spaltenvektor bildet, ist durch eine (z.B. quadratische) Kombination der Bits der Spaltennummern gegeben.
  • Eine der Erfindung zu Grunde liegende Idee kann somit darin gesehen werden, einen linearen (binären) Code zur Fehlerdetektion und Fehlerkorrektur zu verwenden, dessen zugehörige Kontrollmatrix eine formelhafte Beschreibung zulässt. Dann muss die Kontrollmatrix nicht explizit bereitgestellt werden (z.B. in einem Speicher der Schaltung 200 gespeichert werden), sondern sie ist implizit durch den formelhaften Ausdruck (d.h. die formelhafte Beschreibung) gegeben. Gemäß einer Ausführungsform werden alle erforderlichen Operationen, wie z.B. die Codierung, Syndromberechnung und Decodierung mittels Manipulationen mit einzelnen Spalten der Kontrollmatrix bewerkstelligt, wobei zu jedem Zeitpunkt immer nur eine Spalte der Kontrollmatrix benötigt wird. Entsprechend werden gemäß einer Ausführungsform die benötigten Spalten der relevanten Kontrollmatrix aus ihrem formelhaften Ausdruck bei Bedarf („on the fly“) berechnet und genutzt.
  • Die Herangehensweise von 2 ermöglicht eine beschleunigte Fehlerkorrektur: Die Einbitfehlerkorrektur ist praktisch gleich aufwändig wie die (immer notwendige) Syndromberechnung. Die Zweibitfehlerkorrektur erfordert nur n Spaltenoperationen (gegenüber n(n-1)/2 für einen allgemeinen linearen Code). Und die Dreibitfehlerkorrektur erfordert nur n(n-2)/2 Operationen (gegenüber n(n-1)(n-2)/6 Operation für den allgemeinen linearen Code der Länge n.)
  • Insbesondere im Vergleich mit der Verwendung von zyklischen Codes, die auch ohne explizite Hinterlegung einer Kontrollmatrix verwendet werden können, ermöglicht die Herangehensweise von 2 eine Implementierung mit deutlich reduzierter Komplexität, da für zyklische Codes sehr aufwändige Berechnungen erforderlich sind.
  • 3 zeigt ein Ablaufdiagramm 300, das ein Verfahren zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code veranschaulicht.
  • In dem Verfahren wird das Syndrom des Datenworts in 301 berechnet.
  • Dabei wird in 302 von einer Kontrollmatrixberechnungsschaltung für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes ein Teil-Spaltenvektor ausgegeben, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet.
  • Die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, werden in 304 akkumuliert, wobei zumindest ein Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden, in 303, des Spaltenvektors aus der Binärdarstellung der Spaltennummer und einem von der Kontrollmatrixberechnungsschaltung in 302 ausgegebenen Teil-Spaltenvektor gebildet werden.
  • In 305 wird das Ergebnis des Akkumulierens als Syndrom ausgegeben.
  • Im Folgenden werden verschiedene Ausführungsbeispiele angegeben.
  • Ausführungsbeispiel 1 ist eine Schaltung zum Kodieren oder Dekodieren eines Datenworts, wie sie mit Bezug auf 2 beschrieben ist, wobei die Kontrollmatrixberechnungsschaltung eingerichtet ist, den Teil-Spaltenvektor durch eine quadratische Kombination der Bits der Binärdarstellung der Spaltennummer zu erzeugen.
  • Ausführungsbeispiel 3 ist die Schaltung gemäß Ausführungsbeispiel 1 oder 2, wobei die Kontrollmatrixberechnungsschaltung für jede Zeile des Teil-Spaltenvektors eine jeweilige mittels Logik-Gattern in Hardware realisierte Boolesche Funktion zur Berechnung der Komponente des Teil-Spaltenvektors aus der Binärdarstellung der Spaltennummer aufweist.
  • Ausführungsbeispiel 4 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 3, wobei der Teil-Spaltenvektor zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wenn er daran angehängt ist.
  • Ausführungsbeispiel 5 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 4, wobei das Datenwort ein zu kodierendes Datenwort ist.
  • Ausführungsbeispiel 6 ist die Schaltung gemäß Ausführungsbeispiel 5, wobei das Datenwort über einen Kommunikationskanal zu übertragende Daten aufweist oder in einem Speicher zu speichernde Daten aufweist.
  • Ausführungsbeispiel 7 ist die Schaltung gemäß Ausführungsbeispiel 5 oder 6, wobei die Schaltung eine Kodierschaltung zum Kodieren des Datenworts aufweist, wobei die Kodierschaltung eingerichtet ist, aus dem Datenwort durch Einfügen von Positionen für Kontrollbits ein erweitertes Datenwort zu erzeugen, wobei sie die Positionen für die Kontrollbits mit Null initialisiert, das erweiterte Datenwort der Syndromberechnungsschaltung zur Berechnung des Syndroms des erweiterten Datenworts zuzuführen und die Kontrollbits aus dem von der Syndromberechnungsschaltung berechneten Syndrom des erweiterten Datenworts zu berechnen.
  • Ausführungsbeispiel 8 ist die Schaltung gemäß Ausführungsbeispiel 7, wobei die Kodierschaltung eingerichtet ist, die Kontrollbits durch Multiplikation des Syndroms des erweiterten Datenworts mit der Inversen der aus den Spalten der Kontrollmatrix zu den Positionen der Datenbits in dem erweiterten Datenwort gebildeten Matrix zu berechnen.
  • Ausführungsbeispiel 9 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 4, wobei das Datenwort ein zu dekodierendes Datenwort ist.
  • Ausführungsbeispiel 10 ist die Schaltung gemäß Ausführungsbeispiel 9, wobei das Datenwort ein über einen Kommunikationskanal empfangenes Nachrichtenwort ist oder ein aus einem Speicher ausgelesenes Datenwort ist.
  • Ausführungsbeispiel 11 ist die Schaltung gemäß Ausführungsbeispiel 9 oder 10, wobei die Schaltung eine Dekodierschaltung zum Dekodieren des Datenworts aufweist, wobei die Dekodierschaltung eingerichtet ist, das Datenwort der Syndromberechnungsschaltung zuzuführen, zu ermitteln, ob das von der Syndromberechnungsschaltung berechnete Syndrom gleich dem Nullvektor ist und festzustellen, dass ein Fehler aufgetreten ist, wenn das Syndrom ungleich dem Nullvektor ist.
  • Ausführungsbeispiel 12 ist die Schaltung gemäß Ausführungsbeispiel 11, wobei die Dekodierschaltung eingerichtet ist, die Position von ein oder mehreren Fehlern in dem Datenwort aus dem von der Syndromberechnungsschaltung berechneten Syndrom zu ermitteln.
  • Ausführungsbeispiel 13 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 12, wobei die Akkumulierschaltung eingerichtet ist, Bits des Datenworts abzuarbeiten, indem sie für jedes Bit überprüft, ob das Bit gleich 1 ist und, wenn das Bit gleich 1 ist, einen entsprechenden Beitrag des Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  • Ausführungsbeispiel 14 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 13, wobei die Akkumulierschaltung, eingerichtet ist, die Bits des Datenworts der Code-Kontrollmatrix in Paaren abzuarbeiten, wobei sie eingerichtet ist, je nach Kombination der Werte des Bits des Datenworts einen entsprechenden Beitrag des Paars von Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  • Ausführungsbeispiel 15 ist die Schaltung gemäß Ausführungsbeispiel 14, wobei die Paare von Bits, die gemeinsam abgearbeitet werden, Paare von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf eine vorgegebene Stelle gleich sind.
  • Ausführungsbeispiel 16 ist die Schaltung gemäß einem der Ausführungsbeispiele 1 bis 13, wobei die Akkumulierschaltung, eingerichtet ist, die Bits des Datenworts der Code-Kontrollmatrix in Viertupeln abzuarbeiten, wobei sie eingerichtet ist, je nach Kombination der Werte des Bits des Datenworts einen entsprechenden Beitrag des Viertupels von Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  • Ausführungsbeispiel 17 ist die Schaltung gemäß Ausführungsbeispiel 16, wobei die Viertupel von Bits, die gemeinsam abgearbeitet werden, Viertupel von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf zwei vorgegebene Stellen gleich sind.
  • Ausführungsbeispiel 18 ist die Schaltung gemäß einem der Ausführungsbeispiele 14 bis 17, wobei die Akkumulierschaltung eingerichtet ist, den Beitrag eines Paares oder eines Viertupels von Bits zum Syndrom für zumindest einen Teil von Wertkombinationen der Bits des Paares oder des Viertupels mittels einer Maske, die den Unterschied zwischen den Beiträgen von zwei Bits des Paares oder Viertupels, die gleich eins sind, zum Syndrom angibt, zu ermitteln.
  • Ausführungsbeispiel 19 ist ein Verfahren zum Kodieren oder Dekodieren eines Datenworts, wie es mit Bezug auf 3 beschrieben ist, wobei die Kontrollmatrixberechnungsschaltung den Teil-Spaltenvektor durch eine quadratische Kombination der Bits der Binärdarstellung der Spaltennummer erzeugt.
  • Ausführungsbeispiel 21 ist das Verfahren gemäß Ausführungsbeispiel 19 oder 20, wobei die Kontrollmatrixberechnungsschaltung für jede Zeile des Teil-Spaltenvektors eine jeweilige Boolesche Funktion zur Berechnung der Komponente des Teil-Spaltenvektors aus der Binärdarstellung der Spaltennummer mittels Logik-Gattern in Hardware realisiert.
  • Ausführungsbeispiel 22 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 21, wobei der Teil-Spaltenvektor zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wenn er daran angehängt ist.
  • Ausführungsbeispiel 23 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 22, wobei das Datenwort ein zu kodierendes Datenwort ist.
  • Ausführungsbeispiel 24 ist das Verfahren gemäß Ausführungsbeispiel 23, wobei das Datenwort über einen Kommunikationskanal zu übertragende Daten aufweist oder in einem Speicher zu speichernde Daten aufweist.
  • Ausführungsbeispiel 25 ist das Verfahren gemäß Ausführungsbeispiel 23 oder 24, aufweisend Kodieren des Datenworts, wobei die aus dem Datenwort durch Einfügen von Positionen für Kontrollbits ein erweitertes Datenwort erzeugt wird, wobei die Positionen für die Kontrollbits mit Null initialisiert werden, das erweiterte Datenwort einer Syndromberechnungsschaltung zur Berechnung des Syndroms des erweiterten Datenworts zugeführt wird und die Kontrollbits aus dem von der Syndromberechnungsschaltung berechneten Syndrom des erweiterten Datenworts berechnet werden.
  • Ausführungsbeispiel 26 ist das Verfahren gemäß Ausführungsbeispiel 25, aufweisend Berechnen der Kontrollbits durch Multiplikation des Syndroms des erweiterten Datenworts mit der Inversen der aus den Spalten der Kontrollmatrix zu den Positionen der Datenbits in dem erweiterten Datenwort gebildeten Matrix.
  • Ausführungsbeispiel 27 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 22, wobei das Datenwort ein zu dekodierendes Datenwort ist.
  • Ausführungsbeispiel 28 ist das Verfahren gemäß Ausführungsbeispiel 27, wobei das Datenwort ein über einen Kommunikationskanal empfangenes Nachrichtenwort ist oder ein aus einem Speicher ausgelesenes Datenwort ist.
  • Ausführungsbeispiel 29 ist das Verfahren gemäß Ausführungsbeispiel 27 oder 28, aufweisend Dekodieren des Datenworts, wobei das Datenwort einer Syndromberechnungsschaltung zugeführt wird, ermitteln wird, ob das von der Syndromberechnungsschaltung berechnete Syndrom gleich dem Nullvektor ist und festgestellt wird, dass ein Fehler aufgetreten ist, wenn das Syndrom ungleich dem Nullvektor ist.
  • Ausführungsbeispiel 30 ist das Verfahren gemäß Ausführungsbeispiel 29, aufweisend Ermitteln der Position von ein oder mehreren Fehlern in dem Datenwort aus dem von der Syndromberechnungsschaltung berechneten Syndrom.
  • Ausführungsbeispiel 31 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 30, aufweisend Abarbeiten von Bits des Datenworts abzuarbeiten, indem für jedes Bit überprüft wird, ob das Bit gleich 1 ist und, wenn das Bit gleich 1 ist, ein entsprechender Beitrag des Bits zum Syndrom in der Akkumulierung berücksichtigt wird.
  • Ausführungsbeispiel 32 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 31, aufweisend Abarbeiten der Bits des Datenworts der Code-Kontrollmatrix in Paaren, wobei je nach Kombination der Werte des Bits des Datenworts ein entsprechender Beitrag des Paars von Bits zum Syndrom in der Akkumulierung berücksichtigt wird.
  • Ausführungsbeispiel 33 ist das Verfahren gemäß Ausführungsbeispiel 32, wobei die Paare von Bits, die gemeinsam abgearbeitet werden, Paare von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf eine vorgegebene Stelle gleich sind.
  • Ausführungsbeispiel 34 ist das Verfahren gemäß einem der Ausführungsbeispiele 19 bis 31, aufweisend Abarbeiten der Bits des Datenworts der Code-Kontrollmatrix in Viertupeln, wobei je nach Kombination der Werte des Bits des Datenworts ein entsprechender Beitrag des Viertupels von Bits zum Syndrom in der Akkumulierung berücksichtigt wird.
  • Ausführungsbeispiel 35 ist das Verfahren gemäß Ausführungsbeispiel 34, wobei die Viertupel von Bits, die gemeinsam abgearbeitet werden, Viertupel von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf zwei vorgegebene Stellen gleich sind.
  • Ausführungsbeispiel 36 ist das Verfahren gemäß einem der Ausführungsbeispiele 32 bis 35, aufweisend Ermitteln des Beitrags eines Paares oder eines Viertupels von Bits zum Syndrom für zumindest einen Teil von Wertkombinationen der Bits des Paares oder des Viertupels mittels einer Maske, die den Unterschied zwischen den Beiträgen von zwei Bits des Paares oder Viertupels, die gleich eins sind, zum Syndrom angibt.
  • Gemäß einem weiteren Ausführungsbeispiel wird eine Schaltung zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code bereitgestellt, die Syndromberechnungsmittel zum Berechnen eines Syndroms des Datenworts aufweist, wobei die Syndromberechnungsmittel aufweisen:
    • Kontrollmatrixberechnungsmittel zum Ausgeben, für eine ihnen zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes, eines Teil-Spaltenvektors, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet;
    • Akkumuliermittel zum Akkumulieren der Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, wobei die Akkumuliermittel zum Bilden zumindest eines Teils der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und dem von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor und zum Ausgeben des Ergebnisses des Akkumulierens als Syndrom sind.
  • Die Komponenten der Schaltung zum Kodieren oder Dekodieren können durch ein oder mehrere Schaltkreise realisiert sein. In einer Ausführungsform ist ein „Schaltkreis“ als jegliche Einheit zu verstehen, die eine Logik implementiert, und die sowohl Hardware, Software, Firmware oder eine Kombination daraus sein kann. Somit kann ein „Schaltkreis“ in einer Ausführungsform ein hart-verdrahteter Logik-Schaltkreis oder ein programmierbarer Logik-Schaltkreis sein, wie beispielsweise ein programmierbarer Prozessor. Unter einem „Schaltkreis“ kann auch ein Prozessor, der Software ausführt, zu verstehen sein, z.B. jegliche Art von Computer-Programm. Unter einem „Schaltkreis“ kann in einer Ausführungsform jegliche Art der Implementierung der hierin beschriebenen Funktionen zu verstehen sein. Gemäß einer Ausführungsform wird die Schaltung zum Kodieren oder Dekodieren jedoch in Form fest-verdrahteter Hardware-Schaltungen realisiert, sodass die Schaltung zum Kodieren oder Dekodieren frei von einem programmierbaren Prozessor (zumindest frei von einem General Purpose Processor, d.h. Universalprozessor) implementiert wird. Insbesondere wird gemäß einer Ausführungsform die Kontrollmatrixberechnungsschaltung mittels hart-verdrahteter Schaltelemente implementiert, beispielsweise durch mehrere Anordnungen von Logik-Gattern, wobei jede Logik-Gatter-Anordnung eine Funktion realisiert, die eine Komponente der Teil-Spaltenvektoren (also eine Komponente der Funktion F in Gleichung (1)) berechnet.
  • Obwohl die Erfindung vor allem unter Bezugnahme auf bestimmte Ausführungsformen gezeigt und beschrieben wurde, sollte es von denjenigen, die mit dem Fachgebiet vertraut sind, verstanden werden, dass zahlreiche Änderungen bezüglich Ausgestaltung und Details daran vorgenommen werden können, ohne vom Wesen und Bereich der Erfindung, wie er durch die nachfolgenden Ansprüche definiert wird, abzuweichen. Der Bereich der Erfindung wird daher durch die angefügten Ansprüche bestimmt, und es ist beabsichtigt, dass sämtliche Änderungen, welche unter den Wortsinn oder den Äquivalenzbereich der Ansprüche fallen, umfasst werden.
  • Bezugszeichenliste
  • 100
    Datenverarbeitungsvorrichtung
    101
    Datenverarbeitungseinheit 101
    102
    Speicher
    103
    Speicherzugriffsschaltung
    104
    Kodierer
    105
    Dekodierer
    200
    Kodier/Dekodierschaltung
    201
    Syndromberechnungsschaltung
    202
    Kontrollmatrixberechnungsschaltung
    203
    Akkumulierschaltung
    300
    Ablaufdiagramm
    301-305
    Ablaufschritte

Claims (18)

  1. Schaltung zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code aufweisend eine Syndromberechnungsschaltung zum Berechnen eines Syndroms des Datenworts, wobei die Syndromberechnungsschaltung aufweist: Eine Kontrollmatrixberechnungsschaltung, die eingerichtet ist, für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes einen Teil-Spaltenvektor auszugeben, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wobei die Kontrollmatrixberechnungsschaltung eingerichtet ist, den Teil-Spaltenvektor durch eine quadratische Kombination der Bits der Binärdarstellung der Spaltennummer zu erzeugen; Eine Akkumulierschaltung, die eingerichtet ist, die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, zu akkumulieren, wobei sie eingerichtet ist, zumindest einen Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und dem von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor zu bilden; und das Ergebnis des Akkumulierens als Syndrom auszugeben.
  2. Schaltung gemäß Anspruch 1, wobei die Kontrollmatrixberechnungsschaltung für jede Zeile des Teil-Spaltenvektors eine jeweilige mittels Logik-Gattern in Hardware realisierte Boolesche Funktion zur Berechnung der Komponente des Teil-Spaltenvektors aus der Binärdarstellung der Spaltennummer aufweist.
  3. Schaltung gemäß einem der Ansprüche 1 bis 2, wobei der Teil-Spaltenvektor zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wenn er daran angehängt ist.
  4. Schaltung gemäß einem der Ansprüche 1 bis 3, wobei das Datenwort ein zu kodierendes Datenwort ist.
  5. Schaltung gemäß Anspruch 4, wobei das Datenwort über einen Kommunikationskanal zu übertragende Daten aufweist oder in einem Speicher zu speichernde Daten aufweist.
  6. Schaltung gemäß Anspruch 4 oder 5, wobei die Schaltung eine Kodierschaltung zum Kodieren des Datenworts aufweist, wobei die Kodierschaltung eingerichtet ist, aus dem Datenwort durch Einfügen von Positionen für Kontrollbits ein erweitertes Datenwort zu erzeugen, wobei sie die Positionen für die Kontrollbits mit Null initialisiert, das erweiterte Datenwort der Syndromberechnungsschaltung zur Berechnung des Syndroms des erweiterten Datenworts zuzuführen und die Kontrollbits aus dem von der Syndromberechnungsschaltung berechneten Syndrom des erweiterten Datenworts zu berechnen.
  7. Schaltung gemäß Anspruch 6, wobei die Kodierschaltung eingerichtet ist, die Kontrollbits durch Multiplikation des Syndroms des erweiterten Datenworts mit der Inversen der aus den Spalten der Kontrollmatrix zu den Positionen der Datenbits in dem erweiterten Datenwort gebildeten Matrix zu berechnen.
  8. Schaltung gemäß einem der Ansprüche 1 bis 3, wobei das Datenwort ein zu dekodierendes Datenwort ist.
  9. Schaltung gemäß Anspruch 8, wobei das Datenwort ein über einen Kommunikationskanal empfangenes Nachrichtenwort ist oder ein aus einem Speicher ausgelesenes Datenwort ist.
  10. Schaltung gemäß Anspruch 8 oder 9, wobei die Schaltung eine Dekodierschaltung zum Dekodieren des Datenworts aufweist, wobei die Dekodierschaltung eingerichtet ist, das Datenwort der Syndromberechnungsschaltung zuzuführen, zu ermitteln, ob das von der Syndromberechnungsschaltung berechnete Syndrom gleich dem Nullvektor ist und festzustellen, dass ein Fehler aufgetreten ist, wenn das Syndrom ungleich dem Nullvektor ist.
  11. Schaltung gemäß Anspruch 10, wobei die Dekodierschaltung eingerichtet ist, die Position von ein oder mehreren Fehlern in dem Datenwort aus dem von der Syndromberechnungsschaltung berechneten Syndrom zu ermitteln.
  12. Schaltung gemäß einem der Ansprüche 1 bis 11, wobei die Akkumulierschaltung eingerichtet ist, Bits des Datenworts abzuarbeiten, indem sie für jedes Bit überprüft, ob das Bit gleich 1 ist und, wenn das Bit gleich 1 ist, einen entsprechenden Beitrag des Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  13. Schaltung gemäß einem der Ansprüche 1 bis 12, wobei die Akkumulierschaltung, eingerichtet ist, die Bits des Datenworts der Code-Kontrollmatrix in Paaren abzuarbeiten, wobei sie eingerichtet ist, je nach Kombination der Werte des Bits des Datenworts einen entsprechenden Beitrag des Paars von Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  14. Schaltung gemäß Anspruch 13, wobei die Paare von Bits, die gemeinsam abgearbeitet werden, Paare von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf eine vorgegebene Stelle gleich sind.
  15. Schaltung gemäß einem der Ansprüche 1 bis 12, wobei die Akkumulierschaltung, eingerichtet ist, die Bits des Datenworts der Code-Kontrollmatrix in Viertupeln abzuarbeiten, wobei sie eingerichtet ist, je nach Kombination der Werte des Bits des Datenworts einen entsprechenden Beitrag des Viertupels von Bits zum Syndrom in der Akkumulierung zu berücksichtigen.
  16. Schaltung gemäß Anspruch 15, wobei die Viertupel von Bits, die gemeinsam abgearbeitet werden, Viertupel von Bits sind, zu denen Spalten der Kontrollmatrix gehören, deren Spaltennummern bis auf zwei vorgegebene Stellen gleich sind.
  17. Schaltung gemäß einem der Ansprüche 13 bis 16, wobei die Akkumulierschaltung eingerichtet ist, den Beitrag eines Paares oder eines Viertupels von Bits zum Syndrom für zumindest einen Teil von Wertkombinationen der Bits des Paares oder des Viertupels mittels einer Maske, die den Unterschied zwischen den Beiträgen von zwei Bits des Paares oder Viertupels, die gleich eins sind, zum Syndrom angibt, zu ermitteln.
  18. Verfahren zum Kodieren oder Dekodieren eines Datenworts gemäß einem linearen Code aufweisend: Berechnen eines Syndroms des Datenworts, wobei eine Kontrollmatrixberechnungsschaltung für eine ihr zugeführte Binärdarstellung der Spaltennummer einer Spalte einer Code-Kontrollmatrix des Codes einen Teil-Spaltenvektor ausgibt, der zusammen mit der Binärdarstellung der Spaltennummer die Spalte der Code-Kontrollmatrix bildet, wobei die Kontrollmatrixberechnungsschaltung den Teil-Spaltenvektor durch eine quadratische Kombination der Bits der Binärdarstellung der Spaltennummer erzeugt; die Spalten der Code-Kontrollmatrix für alle Bits des Datenworts, die gleich 1 sind, akkumuliert werden, wobei zumindest einen Teil der Spalten durch Zuführen der Binärdarstellung der Spaltennummer der Spalte zu der Kontrollmatrixberechnungsschaltung und Bilden des Spaltenvektors aus der Binärdarstellung der Spaltennummer und einer von der Kontrollmatrixberechnungsschaltung ausgegebenen Teil-Spaltenvektor gebildet werden, und wobei das Ergebnis des Akkumulierens als Syndrom ausgegeben wird.
DE102020110787.0A 2020-04-21 2020-04-21 Schaltung und verfahren zum kodieren oder dekodieren eines datenworts Active DE102020110787B3 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE102020110787.0A DE102020110787B3 (de) 2020-04-21 2020-04-21 Schaltung und verfahren zum kodieren oder dekodieren eines datenworts

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102020110787.0A DE102020110787B3 (de) 2020-04-21 2020-04-21 Schaltung und verfahren zum kodieren oder dekodieren eines datenworts

Publications (1)

Publication Number Publication Date
DE102020110787B3 true DE102020110787B3 (de) 2021-09-02

Family

ID=77271085

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020110787.0A Active DE102020110787B3 (de) 2020-04-21 2020-04-21 Schaltung und verfahren zum kodieren oder dekodieren eines datenworts

Country Status (1)

Country Link
DE (1) DE102020110787B3 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102022111624A1 (de) 2022-05-10 2023-11-16 Infineon Technologies Ag Fehlerkorrektur mit schneller Syndromberechnung
DE102022118280A1 (de) 2022-07-21 2024-02-01 Infineon Technologies Ag Fehlerverarbeitung und Korrektur benachbarter 2-Bitfehler

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020059552A1 (en) 2000-09-26 2002-05-16 Laurent Murillo High-efficiency error detection and/or correction code

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020059552A1 (en) 2000-09-26 2002-05-16 Laurent Murillo High-efficiency error detection and/or correction code

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102022111624A1 (de) 2022-05-10 2023-11-16 Infineon Technologies Ag Fehlerkorrektur mit schneller Syndromberechnung
DE102022111624B4 (de) 2022-05-10 2024-06-13 Infineon Technologies Ag Fehlerkorrektur mit schneller Syndromberechnung
DE102022118280A1 (de) 2022-07-21 2024-02-01 Infineon Technologies Ag Fehlerverarbeitung und Korrektur benachbarter 2-Bitfehler

Similar Documents

Publication Publication Date Title
DE102015201384B4 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE102017130591B4 (de) Verfahren und Vorrichtung zur Fehlerkorrekturkodierung auf Basis einer Datenkomprimierung
DE102014215252B9 (de) Wirksame fehlerkorrektur von mehrbitfehlern
DE102018103408B3 (de) Integrierte schaltung und verfahren zum verarbeiten eines codierten nachrichtenworts
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102020110787B3 (de) Schaltung und verfahren zum kodieren oder dekodieren eines datenworts
DE2262070A1 (de) Mit schieberegistern arbeitendes fehlerkorrektursystem
DE102005022107B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines Bitfehlers in einer Bitfolge
DE102018131613A1 (de) Fehlererkennung mittels Gruppenfehler
DE69317766T2 (de) Fehlerkorrekturgerät für digitale Daten zur Korrektur von Einfachfehlern (sec), von Doppelfehlern (ded) und Vielfacheinzelbytefehlern (sbd) und zur Korrektur von Einzelbytefehlern ungerader Anzahl (odd sbc)
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102013219088B9 (de) Schaltungsanordnung und Verfahren zur Realisierung von Prüfbitkompaktierung für Cross-Parity-Codes
DE102010041680B4 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines 1-Bit-Fehlers in einer codierten Bitsequenz, Vorrichtung und Verfahren zur Korrektur eines 1-Bit-Fehlers in einer codierten Bitsequenz und Decodierer und Verfahren zum Decodieren einer fehlerhaften, codierten Bitsequenz
DE102021109391B3 (de) Multibytefehler-Erkennung
DE102015111729B4 (de) Verfahren und decoder zum bestimmen eines fehlervektors für ein datenwort gemäss einem reed-muller-code
DE102014118531B4 (de) Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort
DE102019113970B4 (de) Erkennung von adressfehlern
DE102022111624B4 (de) Fehlerkorrektur mit schneller Syndromberechnung
DE69619329T2 (de) System zur richtigen Binärformatdekodierung eines auf einer magnetischen Spur gespeicherten magnetischen Codes
DE102013112020B4 (de) Verfahren und Vorrichtung zum Erkennen von Bitfehlern
DE102017107431B4 (de) Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes
DE102015121646B4 (de) Fehlerkorrektur
DE102015118668B4 (de) Fehlerkorrektur
DE102021123727B4 (de) Bytefehlerkorrektur

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R082 Change of representative