DE102004006528A1 - Fehlerfassung und Korrektur in einer geschichteten dreidimensionalen Speicherarchitektur - Google Patents

Fehlerfassung und Korrektur in einer geschichteten dreidimensionalen Speicherarchitektur Download PDF

Info

Publication number
DE102004006528A1
DE102004006528A1 DE102004006528A DE102004006528A DE102004006528A1 DE 102004006528 A1 DE102004006528 A1 DE 102004006528A1 DE 102004006528 A DE102004006528 A DE 102004006528A DE 102004006528 A DE102004006528 A DE 102004006528A DE 102004006528 A1 DE102004006528 A1 DE 102004006528A1
Authority
DE
Germany
Prior art keywords
data storage
volume
dimensional data
storage volume
syndrome
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.)
Withdrawn
Application number
DE102004006528A
Other languages
English (en)
Inventor
Ron M. Roth
Gadlel Cupertino Seroussl
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE102004006528A1 publication Critical patent/DE102004006528A1/de
Withdrawn legal-status Critical Current

Links

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/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2945Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using at least three error correction codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • 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/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • H03M13/2909Product codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Ein Verfahren und ein System für platzsparende Fehlersteuercodierung zum Codieren von Daten in ein dreidimensionales Datenspeichermedium. Das Verfahren und das System ermöglichen die Erfassung und Korrektur einer begrenzten Anzahl von bestimmten Fehlertypen, die den bekannten Ausfallmodi einer Klasse von dreidimensionalen Datenspeichermedien entsprechen.

Description

  • Die vorliegende Erfindung bezieht sich auf das Erfassen und Korrigieren von Fehlern bei gespeicherten Daten und insbesondere auf ein raumeffizientes Verfahren zum Codieren von Daten in geschichteten dreidimensionalen Speichern zum Ermöglichen der Erfassung und Korrektur bestimmter Klassen von erwarteten Fehlern.
  • Die vorliegende Erfindung bezieht sich auf eine Fehlerkorrektur, die es im allgemeinen ermöglicht, daß Fehler, die während der Übertragung, Speicherung und Wiedergewinnung von elektronischen Daten auftreten, erfaßt und in vielen Fällen korrigiert werden. Viele Fehlersteuercodier-Verfahren und -Techniken mit linearer Blockcodierung sind gut bekannt zum Codieren seriell übertragener Daten, die in k-Länge-Mitteilungen unterteilt werden können. Im allgemeinen sind die Speichermodelle für Daten, an die die aktuell verfügbaren Fehlersteuercodiertechniken angelegt werden, lineare und zweidimensionale Anordnungen von Wörtern in einer Speichervorrichtung. Es wurden Techniken entwickelt zum Erkennen und Korrigieren bestimmter Typen von Fehlern in zweidimensionalen Speichern, einschließlich Kreuzfehlern (Criss-Cross-Fehlern), die in einem nachfolgenden Teilabschnitt beschrieben werden. Viele dieser Techniken verwenden systematische lineare Codes, die ebenfalls nachfolgend beschrieben sind. Eine Anzahl dieser Verfahren sind beschrieben in „Theory of Codes with Maximum Rank Distance", Gabidulin, Probl. Peredach. Inform., 21, S. 3–16 (1985); „Optimal Array Error-Correcting Codes", Gabidulin, Probl. Peredach. Inform., 21, S. 102–106 (1985); und „Reduced-Redundancy Product Codes for Burst Error Correction", Roth und Seroussi, IEEE Trans. Inform. Theory, 44, S. 1.395–1.406 (1998).
  • In jüngster Zeit wurde eine neue Klasse von dreidimensionalen Speichervorrichtungen entwickelt. Es wird erwartet, daß die Ausfallmodi für diese Klasse von dreidimensionalen Speichervorrichtungen eine effiziente dreidimensionale Datenfehlersteuercodiertechnik erfordern, die hohe Verhältnisse von Datenwörtern zu der Gesamtzahl von Wörtern von codierten Daten, die in dem dreidimensionalen Datenspeichermedium gespeichert sind, liefern, um eine größere maximale Speicherkapazität in einer dreidimensionalen Datenspeichervorrichtung einer bestimmten Größe zu liefern.
  • Es ist die Aufgabe der vorliegenden Erfindung, ein verbessertes Verfahren zum Codieren von Daten in ein dreidimensionales Datenspeichervolumen, Computerbefehle, die das Verfahren implementieren, und ein verbessertes Verfahren zum Decodieren von Daten in einem dreidimensionalen Datenspeichervolumen zu schaffen.
  • Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1, Befehle gemäß Anspruch 9 sowie ein Verfahren gemäß Anspruch 12 gelöst.
  • Ein Ausführungsbeispiel der vorliegenden Erfindung liefert eine raumsparende Fehlersteuercodiertechnik zum Codieren von Daten in ein dreidimensionales Datenspeichermedium unter Verwendung eines Produktcodes und mehrerer linearer Blockcodes. Diese Technik ermöglicht die Erfassung und Korrektur einer begrenzten Anzahl von bestimmten Fehlertypen, die den bekannten wahrscheinlichen Fehlermodi einer Klasse von dreidimensionalen Datenspeichermedien entsprechen.
  • Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
  • 1 ein dreidimensionales Datenspeichermedium, in das Daten durch ein Verfahren codiert werden, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 2 eine z-Zeile in dem dreidimensionalen Datenspeichervolumen V;
  • 3 eine xy-Scheibe in dem dreidimensionalen Datenspeichervolumen V;
  • 4 ein Kreuz von Datenspeichereinheiten in dem Datenspeichervolumen V;
  • 5 eine Datenspeichereinheit in einem Datenspeichervolumen, an dem ein Ausführungsbeispiel der vorliegenden Erfindung praktiziert wird;
  • 6 eine Datenspeichereinheit des dreidimensionalen Datenspeichervolumens V, das ein Vier-Bit-Element f des 16-Element-Felds F enthält;
  • 7 die Codier- und Decodierprozesse;
  • 8 das Layout eines Codearrays, das durch einen Produktcode erzeugt wird;
  • 9 bis 13 die Füllung eines dreidimensionalen Datenspei chervolumens V mit nz – 1 xy-Scheiben;
  • 14 und 15 die Speicherung additiver Inverser der Summen von z-Zeilenzellen in der xy-Scheibe des Volumens V mit der z-Koordinate „0";
  • 16 die Inhalte des dreidimensionalen Datenspeichervolumens V nach der Ausführung von verschachtelten For-Schleifen der Zeilen 11 – 24 in einer Pseudocodeimplementierung eines Ausführungsbeispiels der vorliegenden Erfindung;
  • 17 und 18 das Füllen von Teil-yz-Scheiben und Teil-xz- Scheiben des Volumens V';
  • 19 die Ergebnisse der Ausführung der verschachtelten For-Schleifen der Zeilen 25 – 30 und 31 – 36 der Routine „Codieren";
  • 20 die Berechnung eines Projektionsvektors;
  • 21 die Verwendung der berechneten Projektionsvektoren zum Speichern von Daten in z-Zeilen des dreidimensionalen Datenspeichervolumens V';
  • 22 einen Dateneintrag in die am weitesten rechts liegende yz-Scheibe des dreidimensionalen Datenspeichervolumens V';
  • 23 Paritätsprüfungssymbole in dem dreidimensionalen Datenspeichervolumen V';
  • 24 den Betrieb von verschachtelten For-Schleifen der Zeilen 51 – 55 einer Pseudocodeimplementierung eines Ausführungsbeispiels der vorliegenden Erfindung;
  • 25 das Endergebnis der Codieroperation, die durch die Routine „Codieren" ausgeführt wurde;
  • 26 die Berechnung eines Syndromvolumens Ŝx; und
  • 27 auf ähnliche Weise wie 26 die Berechnung eines Syndromvolumens Ŝy.
  • Ein Ausführungsbeispiel der vorliegenden Erfindung ist eine raumsparende Technik zum Codieren von Daten in ein dreidimensionales Datenspeichermedium. Ein Ausführungsbeispiel der vorliegenden Erfindung, das nachfolgend beschrieben ist, umfaßt die Erkennung und Charakterisierung von Ausfallmodi einer Klasse von dreidimensionalen Datenspeichermedien, die Auswahl und Kombination von bestimmten Fehlersteuercodiertechniken und die Implementierung eines Verfahrens unter Verwendung der ausgewählten und kombinierten Fehlersteuercodiertechniken zum Erfassen und Korrigieren bestimmter Ausfallmodi der Klasse von dreidimensionalen Datenspeichermedien. Folglich ist dieser Abschnitt in die folgenden drei Unterabschnitte unterteilt: (1) Beschreibung einer Klasse von dreidimensionalen Datenspeichermedien und Charakterisierung von Ausfallmodi der Klasse von dreidimensionalen Datenspeichermedien; (2) Mathematische Beschreibung von ausgewählten Fehlersteuercodiertechniken; und (3) Implementierung eines Verfahrens, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt.
  • Beschreibung einer Klasse von dreidimensionalen Datenspeichermedien und Charakterisierung von Ausfallmodi der Klasse von dreidimensionalen Datenspeichermedien
  • 1 stellt ein dreidimensionales Datenspeichermedium dar, in das Daten durch ein Verfahren codiert werden, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Das Datenspeichermedium kann als gefülltes Rechteck angesehen werden, das eine Anzahl von Zellen oder Datenspeichereinheiten, wie z. B. eine Zelle 102, umfaßt. Das Datenspeichermedium ist gekennzeichnet durch Abmessungen oder Anzahlen von Datenspeichereinheiten, entlang Kanten parallel zu den drei orthogonalen Achsen, x, y und z 104. Bei dieser und nachfolgenden Figuren und Beschreibungen wird ein unkonventionelles linksgerichtetes Koordinatensystem verwendet. Somit weist das in 1 dargestellte dreidimensionale Datenspeichermedium Abmessungen nx, ny und nz auf, wobei die x-Achse nach links 106 gerichtet ist, die y-Achse nach oben 108 gerichtet ist, und die z-Achse von der Ebene des Papiers 110 nach außen gerichtet ist. Bei den nachfolgenden Erörterungen kann ein dreidimensionales Datenspeichervolumen V notationsmäßig mit den Indizes i, j und l als ein Satz von Datenspeichereinheiten beschrieben werden, wie folgt: {[i, j, l) : 0 ≤ i < nx, 0 ≤ j < ny, 0 ≤ l < nz
  • Bei einer folgenden Pseudocodeimplementierung kann jedes Element des dreidimensionalen Datenspeichervolumens V durch Indizes x, y und z spezifiziert werden, die der x-Achse, der y-Achse und der z-Achse entsprechen, wie folgt: V[x][y][z]
  • Ein Ausführungsbeispiel der vorliegenden Erfindung ist bezüglich des Codierens von Daten in ein einzelnes dreidimensionales Datenspeichervolumen V beschrieben. Im allgemeinen umfaßt ein tatsächliches dreidimensionales Datenspeichermedium Hunderte von Tausenden, Millionen oder sogar Milliarden von einzelnen dreidimensionalen Datenvolumen, wie z. B. ein in 1 dargestelltes dreidimensionales Datenvolumen V, und das beschriebene Ausführungsbeispiel der vorliegenden Erfindung kann nacheinander in einer gut definierten Reihenfolge an jedes der dreidimensionalen Datenvolumen innerhalb des gesamten dreidimensionalen Datenspeichermediums angelegt werden.
  • Mehrere Typen von Teilsätzen der Datenspeichereinheiten in einem einzelnen dreidimensionalen Datenspeichervolumen V werden bei der folgenden Erörterung und bei einer Pseudocodeimplementierung verwendet, die nachfolgend geliefert wird. Der erste Teilsatztyp oder die erste Unterteilung wird als eine „z-Zeile" bezeichnet. 2 zeigt eine z-Zeile in dem dreidimensionalen Datenspeichervolumen V. Eine z-Zeile ist ein Satz von Datenspeichereinheiten, die alle identische x-Achsen- und y-Achsen-Koordinaten aufweisen, oder anders ausgedrückt, eine z-Zeile, die durch x- und y-Koordinaten „a" und „b" spezifiziert ist, kann notationsmäßig beschrieben werden als: {(i, j, l) : i = a, j = b, 0 ≤ l < nz}.
  • Eine z-Zeile kann auch notationsmäßig als „Vxy" spezifiziert werden, und eine spezielle Datenspeichereinheit in einer z-Zeile kann in den Pseudocoderoutinen unter Verwendung der Notation „Vxy[z]" spezifiziert und auf dieselbe zugegriffen werden. Wie es in 2 ersichtlich ist, ist eine z-Zeile 202 im wesentlichen ein lineares Array von Datenspeichereinheiten, die in der Richtung der z-Achse ausgerichtet sind.
  • Ein zweiter Typ von Teilsatz oder Unterteilung von Datenspeichereinheiten wird als eine „xy-Scheibe" bezeichnet. 3 stellt eine xy-Scheibe in dem dreidimensionalen Datenspeichervolumen V dar. Wie es in 3 gezeigt ist, ist eine xy-Scheibe eine Ebene von Datenspeichereinheiten in dem Datenspeichervolumen V senkrecht zu der z-Achse. Alle Datenspeichereinheiten in einer xy-Scheibe haben identische z-Indizes. Somit kann eine xy-Scheibe an der z-Achsenkoordinate „c" spezifiziert werden als: {[i, j, l) : 0 ≤ i < nx, 0 ≤ j < ny, l = c}oder alternativ als: Vz=c
  • Bei den Pseudocoderoutinen, die ein Ausführungsbeispiel der vorliegenden Erfindung beschreiben, kann ein Datenelement in einer xy-Scheibe über die Notation „Vz[y][z]" spezifiziert und auf dasselbe zugegriffen werden. Zusätzliche Teilsätze umfassen yz-Scheiben, Vx, xz-Scheiben, Vy, x-Zeilen Vyz und y-Zeilen Vxz.
  • Es gibt zwei unterschiedliche Typen von Ausfallmodi in einer Klasse von dreidimensionalen Datenspeichermedien, die über einen Fehlersteuercode erfaßt und korrigiert werden müssen. Ein erster Ausfallmodus wird als ein „Kreuzfehler" bezeichnet. 4 stellt ein Kreuz von Datenspeichereinheiten in dem Datenspeichervolumen V dar. Wie es in 4 gezeigt ist, schneiden sich eine x-Zeile 402 und eine y-Zeile 404 in dem dreidimensionalen Datenspeichervolumen an einer gemeinsamen Datenspeichereinheit 406. Die x-Zeile 402 und die y-Zeile 404 treten in einer speziellen xy-Scheibe auf. Ein erster Typ von Ausfallmodus umfaßt den Ausfall von einer oder mehreren Dateneinheiten in einem Kreuz, wie z. B. demjenigen, das in 4 gezeigt ist. Ein zweiter Typ von Ausfallmodus für ein dreidimensionales Datenspeichervolumen V ist der Ausfall einer gesamten xy-Scheibe. Bei den folgenden Erörterungen werden diese beiden unterschiedlichen Typen von Ausfallmodi als „Kreuzausfälle" und „Scheibenausfälle" oder alternativ „Typ-1-Ausfälle" und „Typ-2-Ausfälle" bezeichnet. Kreuzausfälle erzeugen Kreuz- oder Typ-1-Fehler und Scheibenausfälle erzeugen Scheiben- oder Typ-2-Fehler. Das beschriebene Ausführungsbeispiel der vorliegenden Erfindung ist entworfen, um so viel wie möglich von t Kreuzfehlern und höchstens einen einzelnen Scheibenfehler in einem dreidimensionalen Datenspeichervolumen V zu erfassen und zu korrigieren, die als die wahrscheinlichsten Fehler identifiziert sind, die in einer Klasse von dreidimensionalen Datenspeichermedien auftreten können.
  • Mathematische Beschreibung von ausgewählten Fehlersteuercodiertechniken
  • Das beschriebene Ausführungsbeispiel der vorliegenden Erfindung verwendet beim Fehlersteuercodieren eine Anzahl von gut bekannten Techniken. Eine exzellente Referenz für dieses Gebiet ist das Lehrbuch „Error Control Coding: The Fundamentals and Applications", Lin und Costello, Prentice-Hall, Incorporated, New Jersey, 1983. In diesem Unterkapitel wird eine kurze Beschreibung der Fehlererfassungs- und Fehlerkorrekturtechniken gegeben, die bei der vorliegenden Erfindung verwendet werden. Zusätzliche Einzelheiten können von dem oben angemerkten Lehrbuch oder vielen anderen Lehrbüchern, Abhandlungen und Zeitschriftartikeln auf diesem Gebiet erhalten werden.
  • Beim Beschreiben von Fehlererfassung und -korrektur ist es sinnvoll, die Daten, die übertragen, gespeichert und wiedergewonnen werden sollen, als eine oder mehrere Mitteilungen zu beschreiben, wobei eine Mitteilung μ eine geordnete Sequenz von Symbolen, μi, umfaßt, die Elemente eines Felds F sind. Eine Mitteilung μ kann ausgedrückt werden als: μ = (μ0, μ1, ..., μk–1)wobei μi ∊ F.
  • Das Feld F ist ein Satz, der unter Multiplikation und Addition geschlossen ist und der multiplikative und additive Inverse umfaßt. Bei der rechentechnischen Fehlererfassung und -korrektur ist es üblich, Felder zu verwenden, die einen Teilsatz von Ganzzahlen umfassen, mit Größen gleich einer Primzahl, wobei die Additions- und Multiplikationsoperatoren als Moduloaddition und Modulomultiplikation modifiziert sind. In der Praxis wird üblicherweise das binäre Feld verwendet. Felder mit einer Größe gleich einer Potenz einer Primzahl, meistens 2, werden ziemlich häufig verwendet. Für diese Felder werden Additions- und Multiplikationsoperatoren mit unzerlegbaren Modulopolynomen ausgeführt. Üblicherweise wird die ursprüngliche Mitteilung in eine codierte Mitteilung c codiert, die auch eine geordnete Sequenz von Elementen des Felds F umfaßt, ausgedrückt wie folgt: c = (c0, c1, ..., cn–1)wobei ci ∊ F.
  • Das beschriebene Ausführungsbeispiel der vorliegenden Erfindung verwendet Blockcodiertechniken, bei denen Daten in Blöcke codiert werden. Bei dieser Erörterung kann ein Block als eine Mitteilung μ betrachtet werden, die eine feste Anzahl von Symbolen k umfaßt, die in eine Mitteilung c codiert wird, die eine geordnete Sequenz von n Symbolen umfaßt. Die codierte Mitteilung c enthält im allgemeinen eine größere Anzahl von Symbolen als die ursprüngliche Mitteilung μ und daher ist n größer als k. Die r Zusatzsymbole in der codierten Mitteilung, wobei r gleich n – k ist, werden verwendet, um redundante Prüungsinformationen zu tragen, um es zu ermöglichen, daß Fehler, die während Übertragung, Speicherung und Wiedergewinnung entstehen, mit einer extrem hohen Erfassungswahrscheinlichkeit erfaßt werden und in vielen Fällen korrigiert werden.
  • Das Codieren von Daten für Übertragung, Speicherung und Wiedergewinnung und nachfolgende Decodierung der codierten Daten kann notationsmäßig wie folgt beschrieben werden, wenn während der Übertragung, Speicherung und Wiedergewinnung der Daten keine Fehler auftreten: μ → c(s) → c(r) → μwobei c(s) die codierte Mitteilung vor der Übertragung ist, und c(r) die anfangs wiedergewonnene oder empfangene Mitteilung ist. Somit wird eine Anfangsmitteilung μ codiert, um eine codierte Mitteilung c(s) zu erzeugen, die dann übertragen und gespeichert wird und dann nachfolgend als anfänglich empfangene Mitteilung c(r) wiedergewonnen oder empfangen wird. Wenn dieselbe nicht verfälscht ist, wird die anfangs empfangene Mitteilung c(r) dann decodiert, um die ursprüngliche Mitteilung μ zu erzeugen. Wie es oben angemerkt wurde, wenn keine Fehler entstehen, ist die ursprünglich codierte Mitteilung c(s) gleich der anfangs empfangenen Mitteilung c(r), und die anfangs empfangene Mitteilung c(r) wird einfach ohne Fehlerkorrektur, zu der ursprünglichen Mitteilung μ decodiert.
  • Wenn während der Übertragung, Speicherung oder Wiedergewinnung einer codierten Mitteilung Fehler entstehen, kann die Mitteilungscodierung und -decodierung wie folgt ausgedrückt werden: μ(s) → c(s) → c(r) → μ(r)
  • Somit, wie es oben angemerkt wurde, kann die Endmitteilung μr gleich oder nicht gleich der anfänglichen Mitteilung μs sein, abhängig von der Genauigkeit der Fehlererfassungs- und Fehlerkorrekturtechniken, die verwendet werden, um die ursprüngliche Mitteilung μs zu codieren, und die anfänglich empfangene Mitteilung c(r) zu decodieren oder zu rekonstruieren, um die als letztes empfangene Mitteilung μr zu erzeugen. Die Fehlererfassung ist der Prozeß des Bestimmens, daß: c(r) ≠ c(s)während Fehlerkorrektur ein Prozeß ist, der die anfänglich codierte Mitteilung von einer verfälschten anfänglich empfangenen Mitteilung rekonstruiert: c(r) → c(s)
  • Der Codierprozeß ist ein Prozeß, durch den Mitteilungen, die als μ symbolisiert sind, in codierte Mitteilungen c transformiert werden. Alternativ kann eine Mitteilung μ als ein Wort angesehen werden, das einen geordneten Satz von Symbolen von dem Alphabet umfaßt, das aus Elementen von F besteht, und die codierten Mitteilungen c können als ein Codewort angesehen werden, das auch einen geordneten Satz von Symbolen von dem Alphabet von Elementen von F umfaßt. Ein Wort μ kann jede geordnete Kombination von k Symbolen sein, die aus den Elementen von F ausgewählt sind, während ein Codewort c definiert ist als eine geordnete Sequenz von n Symbolen, die aus Elementen von F über den Codierprozeß ausgewählt werden: {c : μ → c}.
  • Lineare Blockcodiertechniken codieren Wörter mit der Länge k, indem dieselben das Wort μ als einen Vektor in einem k-dimensionalen Vektorraum betrachten, und den Vektor μ mit einer Generatormatrix multiplizieren, wie folgt: c = μ·G
  • Das notationsmäßige Erweitern der Symbole in der obigen Gleichung erzeugt eine der folgenden alternativen Gleichungen:
    Figure 00120001
    wobei gi = (gi,0, gi,1, gi,2 ... gi,n–1).
  • Die Generatormatrix G für einen linearen Blockcode kann die folgende Form aufweisen:
    Figure 00130001
    oder alternativ: Gk,n = [Pk,r[Ik,k].
  • Somit kann die Generatormatrix G in eine Form einer Matrix P plaziert werden, die mit einer k mal k Identitätsmatrix Ik,k vergrößert ist. Ein Code, der durch einen Generator auf diese Weise erzeugt wird, wird als ein „systematischer Code" bezeichnet. Wenn diese Generatormatrix an ein Wort μ angelegt wird, hat das resultierende Codewort c die folgende Form: c = (c0, c1, ..., cr–1, μ0, μ1, ..., μk–1)wobei ci = (μ0P0,i + μ1P1,i, ..., μk–1Pk–1,i).
  • Somit umfassen bei einem systematischen linearen Blockcode die Codewörter r Paritätsprüfungssymbole ci, gefolgt von den Symbolen, die das ursprüngliche Wort μ umfassen. Wenn keine Fehler auftreten, erscheint das ursprüngliche Wort oder die Mitteilung μ in einer Klartextform innerhalb des entsprechenden Codeworts und kann ohne weiteres von demselben extrahiert werden. Die Paritätsprüfungssymbole sind lineare Kombinationen der Symbole der ursprünglichen Mitteilung oder des Worts μ.
  • Eine Form einer zweiten sinnvollen Matrix ist die Paritätsprüfungsmatrix Hr,n, definiert als: Hr,n = [Ir,r| – PT]oder äquivalent
    Figure 00140001
  • Die Paritätsprüfungsmatrix kann für systematische Fehlererfassung und Fehlerkorrektur verwendet werden. Fehlererfassung und -korrektur umfaßt das Berechnen eines Syndroms S aus einer anfangs empfangenen oder wiedergewonnenen Mitteilung c(r) wie folgt: S = (s0, s1, ..., Sn–k) = c(r)·HT wobei HT die Transponierte der Paritätsprüfungsmatrix Hr,n ist, ausgedrückt als:
    Figure 00140002
  • Die Elemente des Syndromvektors S sind: si = (c(r)i – c(r)rp0,i – c(r)r+1p1,i – c(r)r+2p2,i – ... – c(r)n–1pk–1,i).
  • Der Fehlervektor e ist definiert als die Differenz zwischen oder das Ergebnis der Vektorsubtraktion von einer anfangs empfangenen Mitteilung c(r) und einem anfangs vorbereiteten und gesendeten Codewort c(s) wie folgt: e@c(r) – c(s) ⇒ c(r) = c(s) + e.
  • Der Syndromvektor S ist wie folgt mit dem Fehlervektor verwandt: S = c(r)HT = (c(s) + e)HT = c(s)HT + eHT = eHT.
  • Die Fehlerkorrektur umfaßt das Identifizieren der Fehler, die sich nach der Vorbereitung des Codeworts c(s) und bis hin zum Empfang oder der Wiedergewinnung der anfangs empfangenen Mitteilung c(r) ergeben haben, und das Problem der Fehlerkorrektur ist das Problem des Findens eines Fehlervektors e, so daß eHT = c(r)HT.
  • Dann wird eine Fehlerkorrektur ausgeführt, um ein korrigiertes Wort c zu erzeugen, das das wahrscheinlichste anfangs übertragene oder gespeicherte Codewort darstellt, durch: ĉ = c(r) – e
  • Implementierung eines Verfahrens, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt Bei dem beschriebenen Ausführungsbeispiel ist jede Datenspeichereinheit in einem dreidimensionalen Datenspeichervolumen V ein Element f eines Felds F mit q Elementen. Bei dem beschriebenen Ausführungsbeispiel kann f jeder der Ganzzahlwerte in dem Bereich von 0 – 15 sein, äquivalent zu dem Bereich von Ganzzahlen, die in 4 Bits gespeichert sein können. 5 stellt eine Datenspeichereinheit in einem Datenspeichervolumen dar, an dem ein Ausführungsbeispiel der vorliegenden Erfindung praktiziert wird. 5A zeigt, daß eine einzelne Datenspeichereinheit 502 so gesehen werden kann, daß dieselbe vier getrennte Bits A – D umfaßt. 5B stellt dar, daß jeder der möglichen Werte der Datenspeichereinheit f als eine unterschiedlich geordnete Kombination von Bitwerten für die Bits A – D gesehen werden kann. In 5B sind die unterschiedlichen Elemente f des Felds F mit den Zeichen „a" – „p" gekennzeichnet, äquivalent zu den Ganzzahlen „0" – „15". Der Deutlichkeit halber stellt 6 dar, daß jede Datenspeichereinheit des dreidimensionalen Datenspeichervolumens V ein Vier-Bit-Äquivalentelement f des 16-Element-Felds F ist.
  • Wie es oben erörtert wurde, umfaßt das Codieren einer Mitteilung oder eines Worts unter Verwendung eines linearen Blockcodes zum Erzeugen eines Codeworts, das Verwenden der Mitteilung oder des Worts zum Erzeugen eines Codeworts, das die Mitteilung oder das Wort in Klartextform umfaßt, zusammen mit zusätzlichen Paritätsprüfungssymbolen. 7 stellt die Codier- und Decodierprozesse dar. Wie es in 7 gezeigt ist, umfaßt jede Mitteilung und jedes Wort eine geordnete Sequenz von k Symbolen. Somit numeriert das linke Array 702 in 7 (wovon nur ein Teil in 7 gezeigt ist) die verschiedenen unterschiedlichen qk gültigen Mitteilungen oder Wörter der Länge k. In dem Array 702 stellt jede Zeile eine bestimmte Mitteilung oder ein Wort dar. Bei dem in 7 gezeigten Beispiel hat jedes Wort oder jede Mitteilung eine Länge k = 4. Die Mitteilungen oder Wörter werden in Codewörter codiert, die in dem rechten Array 704 in 7 enthalten sind. In 7 ist jede Zeile des rechten Arrays 704 ein bestimmtes Codewort, das der Mitteilung in der entsprechenden Zeile des linken Arrays entspricht. Wie es in 7 ersichtlich ist, entsprechen die letzten vier Symbole in jedem Codewort der Klartextmitteilung, aus der das Codewort erzeugt wurde. Somit beziehen sich für jedes spezielle Codier-/Decodierlinearblockschema die Parameter k, n und r auf die Länge der Mitteilungen oder Wörter, die Länge der codierten Mitteilungen oder Codewörter bzw. den minimalen Hamming-Abstand des Codes. Nachfolgend wird auf einen speziellen systematischen linearen Blockcode verwiesen durch die Notation „C[n, k, r]", wobei C der Name des Codes ist, n die Länge eines Codeworts ist, k die Länge des Wortes ist, aus dem ein Codewort der Länge n erzeugt wird, und r der minimale Hamming-Abstand des Codes ist.
  • Ein Ausführungsbeispiel der vorliegenden Erfindung ist nachfolgend mit gleichzeitiger Bezugnahme auf sowohl eine Pseudocodeimplementierung als auch eine große Anzahl von Darstellungen beschrieben. Die Pseudocodeimplementierung ist in einer höheren Pseudoprogrammiersprache geschrieben, unter Verwendung bestimmter Notationsregeln und Elemente der Programmiersprache C++, aber auch unter Verwendung einer mathematischen Notation eines höheren Pegels, die zum genauen und eindeutigen Spezifizieren der Operationen eines Verfahrens geeignet ist, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Es ist anzumerken, daß lokale Variablen und Umfangsregeln für Subroutinen bei dem folgenden Pseudocode nicht verwendet werden, aus Gründen der Kürze. Bei einer tatsächlichen Implementierung in einer normalen Programmiersprache, wie z. B. C++, würde erwartet, daß normale Programmierregeln, wie z. B. Eliminieren globaler Variablen und Steuern von Datenaustausch zwischen Routinen durch gut strukturierte Schnittstellen, eingehalten werden.
  • Zunächst ist eine Routine „Codieren" vorgesehen. Die Routine „Codieren" beginnt mit den folgenden Erklärungen:
    Figure 00180001
  • Die Routine „Codieren" umfaßt ein Verfahren zum Codieren von Daten in ein dreidimensionales Datenspeichervolumen, das eine Anzahl von Datenspeichereinheiten umfaßt. Das Verfahren umfaßt folgende Schritte: Empfangen einer Datensequenz und Codieren der Datensequenz unter Verwendung eines linearen Produktcodes zum Codieren von Daten in Codearrays von Datenwerten, und Verwenden von zwei linearen Blockcodes zum Codieren von Daten in Vektoren von Datenwerten.
  • Die Routine „Codieren" empfängt und codiert Wörter, die Elemente qi des Felds F enthalten, wie es oben in Zeile 3 erklärt ist. Zwei verschiedene dreidimensionale Volumen von Datenspeichereinheiten werden verwendet, Volumen V und V', wie es oben in Zeile 4 erklärt ist. Das beschriebene Ausführungsbeispiel verwendet fünf unterschiedliche systematische lineare Blockcodes Cx, Cy, CxCy, Cz und C'z, die oben in den Zeilen 6–10 erklärt sind. Die Parameter k, n und r für jeden der fünf unterschiedlichen systematischen linea ren Blockcodes sind in den Erklärungen spezifiziert. Der systematische lineare Blockcode CxCy ist ein Produktcode. Ein Produktcode ist eine Kombination aus zwei einfachen systematischen linearen Codes, die ein zweidimensionales Codearray erzeugt anstatt einem eindimensionalen Codewort. 8 stellt das Layout eines Codearrays dar, der durch einen Produktcode erzeugt wird. Wie es in 8 gezeigt ist, umfaßt das Codearray kxky Klartextsymbole in einer Klartextregion des Codearrays 802 zusammen mit drei Paritätsprüfungssymbolregionen 804–806, mit Abmessungen und Ausrichtungen, wie es in 8 gezeigt ist. Codearrays sind als Ebenen in einem dreidimensionalen Datenspeichervolumen gespeichert. Produktcodes sind in dem Fehlersteuercodierfeld gut bekannt und werden in dem oben erwähnten Text „Error Control Coding: Fundamentals and Applications" beschrieben. Die Routine „Codieren" verwendet vier unterschiedliche Vektoren von Elementen des Felds F, v0, v1, v2 und v3, die oben in den Zeilen 11–13 erklärt sind, die die in den Erklärungen spezifizierten Längen aufweisen. Die Variable „Summe", die oben in Zeile 14 erklärt ist, speichert ein Element des Felds F, das die Summe von zwei Elementen des Felds F darstellt. Die Routine „Codieren" verwendet vier unterschiedliche Ganzzahlvariablen „x", „y", „z" und „i", die oben in Zeile 15 erklärt sind. Schließlich verwendet die Routine „Codieren" die Funktion „getInfo", die eine spezifizierte Anzahl von Informationselementen des Felds F von einem Eingangsstrom zum Codieren erhält. Die Routine „Codieren" ruft die Funktion „getInfo" auf, die oben in Zeile 16 erklärt ist, um jeden nachfolgenden Satz von Informationselementen zu erhalten, der in dem dreidimensionalen Datenspeichervolumen V codiert werden soll.
  • Wie es nachfolgend gezeigt ist, verwendet die Routine „Codieren" die folgenden Notationsregeln:
    Figure 00200001
  • Die Routine „Codieren" verwendet vier Subroutinen, die nachfolgend getrennt beschrieben werden. Die erste Subroutine SubtractZLineFromInfoVector wird nachfolgend geliefert:
    Figure 00200002
  • SubtractZLineFromInfoVector ruft k'z-Informationseinheiten von dem Informationselementstrom ab, über die Funktion „getInfo" und subtrahiert von denselben die aktuellen Inhalte einer z-Zeile von einem dreidimensionalen Datenspeichervolumen V. Die Ergebnisse werden in dem Vektor v1 belassen.
  • Nachfolgend wird die Subroutine ComputeXZProjectionVector geliefert:
    Figure 00210001
  • ComputeXZProjectionVector projiziert die Inhalte einer xz-Scheibe oder xz-Ebene in einem dreidimensionalen Datenspeichervolumen V' in den Vektor „v0". Die Subroutine ComputeYZProjectionVector berechnet einen Projektionsvektor aus yz-Scheiben in einem dreidimensionalen Datenspeichervolumen V' auf ähnliche Weise wie die obige Routine:
    Figure 00210002
  • Die Subroutine ComputeProjectionVolumeDifference wird als nächstes geliefert:
    Figure 00210003
  • Diese Subroutine addiert die Inhalte einer z-Zeile von einem dreidimensionalen Datenspeichervolumen V mit den Inhalten eines Vektors „v0" und plaziert die Summe in den Vektor „v2".
  • Schließlich wird der Hauptabschnitt der Routine „Codieren" geliefert:
    Figure 00220001
    Figure 00230001
  • Diese Routine erhält grundsätzlich eine Anzahl von Informationselementen von einem Eingangsstrom, wobei die Anzahl oben auf Zeile 3 in einem Kommentar beschrieben ist, und codiert diese Informationselemente in ein dreidimensionalen Datenspeichervolumen V. Beim Abschluß der Codierung erscheinen diese Informationselemente in Klartextform in dem Datenspeichervolumen V, zusammen mit einer relativ kleinen Anzahl von Paritätsprüfungssymbolen.
  • Zunächst ruft die Routine in der For-Schleife der Zeilen 7 – 10 die Längen von kxky Informationselementen von dem Eingangsstrom ab und codiert denselben in Codearrays über den Produktcode CxCy, zum Bilden von nz – 1 xy-Scheiben in dem dreidimensionalen Datenspeichervolumen V. 913 stellen die Füllung des dreidimensionalen Datenspeichervolumens V mit nz – 1 xy-Scheiben durch die For-Schleife der Zeilen 7 – 10 dar. Es ist anzumerken, daß die xy-Scheibe mit der z-Achsenkoordinate „0" bei diesem anfänglichen Schritt nicht in das dreidimensionale Datenspeichervolumen V eingegeben wird. Wie es in 9 gezeigt ist, können die Paritätsprüfungssymbole für die Zeilen der ersten xy-Scheibe mit der z-Koordinate 1 so gesehen werden, daß dieselben durch Anlegen der Paritätsprüfungsregeln für Cx an die Zeilen der Informationssymbole 902 gefüllt werden zum Erzeugen codierter Zeilen der Länge nx 904 und Eingeben der codierten Zeilen, wie z. B. codierte Zeile 904, in das dreidimensionale Datenspeichervolumen V 100. Wie es in 10 gezeigt ist, kann eine spezielle xy-Scheibe 1002 so gesehen werden, daß sie teilweise aus ky Zeilen aufgebaut ist, durch Anlegen eines systematischen linearen Blockcodes Cx zum Erhalten codierter Zeilen der Länge nx. Wie es in 11 gezeigt ist, besteht eine spezielle xy-Scheibe ferner aus Spalten 1102, die erhalten werden durch Anlegen des systematischen linearen Blockcodes Cy an ky Informationselemente 1104. Die Inhalte der ersten kx Informationseinheiten in jeder Zeile und die ersten ky Informationseinheiten in jeder Spalte sind Klartextinformationssymbole, die von dem Informationseingangsstrom erhalten werden. Wie es in 12 gezeigt ist, ist die letzte xy-Scheibe 1002 ein Codearray, das das Produkt des Anlegens des Produktcodes CxCy an kxky Informationselemente darstellt. Es ist anzumerken, daß die xy-Scheibe 1002 kxky Klartextinformationseinheiten umfaßt (in 12 nicht schraffiert), zusammen mit vertikalen und horizontalen Regionen von Paritätsprüfungssymbolen (in 12 schraffiert) 1004 bzw. 1006. Wie es in 13 gezeigt ist, verläuft die For-Schleife der Zeilen 7 – 10 von der z-Koordinate 1 zu der z-Koordinate nz – 1 zum Erzeugen eines Volumens von Klartextinformationselementen 1302 über und nach links von den Volumen der Paritätsprüfungselemente 1304 und 1306 (die Paritätsprüfungselemente sind schraffiert). Es ist anzumerken, daß der Produktcode verwendet werden könnte, um das dreidimensionale Datenspeichervolumen V zu füllen, und Fehlererfassungs- und Korrekturfähigkeiten zu liefern, die in Einklang sind mit der Anzahl von Paritätsprüfungssymbolen nzrxry. Wie es nachfolgend ersichtlich ist, verwendet eine solche Technik je doch eine viel größere Anzahl von Paritätsprüfungssymbolen als erforderlich ist, um Fehler zu erfassen und zu korrigieren, die sich aus den zwei Typen von wahrscheinlichen Ausfallmodi ergeben, die oben beschrieben sind. Somit wird das beschriebene Ausführungsbeispiel der vorliegenden Erfindung verwendet, um einen größeren Anteil an Datenspeichereinheiten in einem dreidimensionalen Datenspeichervolumen V zum Speichern von Klartextinformationselementen zu verwenden, und zum entsprechenden Verringern des Anteils an Paritätsprüfungsinformationselementen in dem dreidimensionalen Datenspeichervolumen V.
  • Nachfolgend berechnet die Routine „Codieren" in den verschachtelten For-Schleifen der Zeilen 11 – 20 die Summe der Datenspeichereinheiten in jeder z-Zeile des dreidimensionalen Datenspeichervolumens V, das in 13 gezeigt ist, und speichert das additive Inverse dieser Summe in dem ersten Element jeder z-Zeile in dem dreidimensionalen Datenspeichervolumen V. Dieser Prozeß ist in 1415 dargestellt. Wie es in 14 gezeigt ist, wird eine erste z-Zeile 1402 mit x- und y-Koordinaten (0,0) in der ersten Iteration der verschachtelten For-Schleifen der Zeilen 11 – 24 in Betracht gezogen. Die Dateneinheiten in der z-Zeile 1402 werden unter Verwendung von Moduloaddition summiert und das additive Inverse dieser Summe wird in der ersten Datenspeichereinheit 1404 der z-Zeile gespeichert. Als Folge der Ausführung der verschachtelten For-Schleifen der Zeilen 11 – 20 wird die erste xy-Scheibe des dreidimensionalen Datenspeichervolumens V 100 mit den additiven Inversen der Summen der z-Zeilen gefüllt. 16 stellt die Inhalte des dreidimensionalen Datenspeichervolumens V nach der Ausführung der verschachtelten For-Schleifen der Zeilen 11 – 20 dar. Jede der z-Zeilen in den Paritätsprüfungsregionen des Volumens an der unteren und rechten Seite des Volumens, wie z. B. die z-Zeile 1602, enthalten nur Paritätsprüfungssymbole. Jede der internen z-Zeilen in dem überwiegend Klartextinformationssymbolabschnitt des Volumens, wie z. B. z-Zeile 1604, enthalten Klartextinformationssymbole in allen außer der ersten Datenspeichereinheit der z-Zeile. Die erste Datenspeichereinheit, wie z. B. die Datenspeichereinheit 1606 der z-Zeile 1604, enthält das additive Inverse der Summe der Informationselemente, die in den verbleibenden Datenspeichereinheiten der z-Zeile gespeichert sind.
  • Nachfolgend codiert die Routine „Codieren" in den verschachtelten For-Schleifen der Zeilen 21 – 26, zusätzliche Informationssymbole in ein zweites dreidimensionales Datenspeichervolumen V'. Die zusätzlichen Informationssymbole werden in z-Zeilen codiert, die eine Anzahl von vertikalen yz-Scheiben an der rechten Seite des dreidimensionalen Datenspeichervolumens V' bilden. Wie es in den For-Schleifenargumenten ersichtlich ist, wird in den verschachtelten For-Schleifen der Zeilen 21 – 26 eine Anzahl von vertikalen yz-Scheiben erzeugt, die gleich einer weniger als rx der Anzahl von Paritätsprüfungssymbolen sind, die durch den systematischen linearen Blockcode Cx erzeugt werden, beginnend von der x-Achsenkoordinate 1 bis zu der x-Achsenkoordinate rx – 1. Das Codieren umfaßt das Subtrahieren der aktuellen Inhalte des dreidimensionalen Datenspeichervolumens V für eine spezielle z-Zeile von einem Vektor, der neu erhaltene Informationselemente enthält, und Codieren des resultierenden Vektors unter Verwendung des systematischen linearen Blockcodes C'z auf der Zeile 29 zum Erzeugen eines Codeworts, das als z-Zeile in dem dreidimensionalen Datenspeichervolumen V' gespeichert ist. Dieser Prozeß ist in 1718 dargestellt. Wie es in 17 gezeigt ist, werden für die erste z-Zeile addiert mit dem dreidimensionalen Datenspeichervolumen V', k'z Informationselemente von dem Eingangsstrom erhalten und in den Vektor μ 1702 geladen. Die Inhalte der entsprechenden z-Zeile von dem dreidimensionalen Datenspeichervolumen V 1704 werden von dem Vektor μ 1702 subtrahiert und die Ergebnisse in den Vektor 1706 plaziert. Dieser Vektor wird dann unter Verwendung des Verwendung des systematischen linearen Blockcodes C'z auf der Zeile 29 der Routine „Codieren" codiert, um das Codewort oder den Vektor 1708 zu erzeugen. Dieses Codewort 1708 wird dann in dem dreidimensionalen Datenspeichervolumen V' 1710 an den x,y-Koordinaten gespeichert, die den x,y-Koordinaten der z-Zeile des dreidimensionalen Datenspeichervolumens V 1704 entsprechen, subtrahiert von den erhaltenen Informationselementen des Vektor μ 1702. Als eine Folge der Ausführung der For-Schleife der Zeilen 21 – 26 wird eine Anzahl von vertikalen yz-Scheiben, wie z. B. die yz-Scheibe 1802, in das dreidimensionale Datenspeichervolumen V' eingegeben. Obwohl in 18 nur eine yz-Scheibe gezeigt ist, plazieren die verschachtelten For-Schleifen der Zeilen 21 – 26 rx – 1 solcher yz-Scheiben in das dreidimensionale Datenspeichervolumen V'. Die verschachtelten For-Schleifen der Zeilen 27 – 32 führen auf ähnliche Weise einen horizontalen Block von z-Zeilen, der durch den systematischen linearen Blockcode „C'z" codiert wird, in das Datenspeichervolumen V ein. Das Ergebnis der Ausführung der verschachtelten For-Schleifen der Zeilen 21 – 26 und der Zeilen 27 – 32 ist eine Spiegelbild-L-Form-Region von z-Zeilen in dem Datenspeichervolumen V'. 19 zeigt die Ergebnisse der Ausführung der verschachtelten For-Schleifen der Zeilen 21 – 26 und 27 – 32 der Routine „Codieren". Obwohl in 19 nur eine einzelne yz-Scheibe und eine einzelne xz-Scheibe gezeigt sind, wie es oben beschrieben ist, erzeugen die verschachtelten For-Schleifen der Zeilen 21 – 26 und der Zeilen 27 – 32 im allgemeinen einen vertikalen und horizontalen Block von z-Zeilen in dem dreidimensionalen Datenspeichervolumen V'. Die vertikalen yz-Scheiben beginnen mit der x-Achsenkoordinate 1 und setzen sich nach links durch die x-Achsenkoordinate rx – 1 fort. Die horizontalen xz-Scheiben beginnen mit der y-Achsenkoordinate 1 und fahren nach oben durch die y-Achsenkoordinate ry – 1 fort. Es ist anzumerken, daß die am weitesten rechts liegende yz-Scheibe und die unterste xz-Scheibe des dreidimensionalen Datenspeichervolumens V' noch nicht gefüllt sind nach der Ausführung der verschachtelten For-Schleifen der Zeilen 27 – 32.
  • Nachfolgend werden in den For-Schleifen der Zeilen 33 – 39 und 40 – 46 die rechteste yz-Scheibe und die unterste xz-Scheibe des dreidimensionalen Datenspeichervolumens V' aufgefüllt über eine eher komplexe Operation, die das Berechnen und Codieren von Projektionsvektoren umfaßt. Diese Operation wird durch die Untersuchung des obigen Pseudocodes verständlich, aber kann vielleicht am besten verstanden werden durch Untersuchen des Pseudocodes, der übereinstimmt mit 2023. Die rechteste yz-Scheibe umfaßt die Berechnung von xz-Projektionsvektoren. 20 stellt die Berechnung von Projektionsvektoren dar. Wie es in 20 gezeigt ist, wird der Projektionsvektor ĉ0,1 der Länge kz berechnet durch Summieren der Werte aller Datenspeichereinheiten in der xz-Ebene mit der y-Achsenkoordinate 1 2002 und Plazieren der Summen in den Vektor ĉ0,1. Anders ausgedrückt, für jede spezielle z-Achsenkoordinate enthält die Datenspeichereinheit des Projektionsvektors ĉ0,1 mit einer speziellen z-Achsenkoordinate z die Summe aller Datenspeichereinheiten in der xz-Ebene 2002 mit der z-Achsenkoordinate z. Gleichartig dazu stellt der Projektionsvektor ĉ0,2 2004 die Summe aller z-Zeilen in der xz-Scheibe dar, mit der y-Achsenkoordinate 2 mit x-Achsenkoordinaten zwischen 1 und rx – 1. 21 stellt die Verwendung der berechneten Projektionsvektoren zum Erzeugen von z-Zeilen für die Speicherung in dem dreidimensionalen Datenspeichervolumen V' dar. Wie es in 21 gezeigt ist, wird die entsprechende z-Zeile von dem dreidimensionalen Datenspeichervolumen V 2102 von dem berechneten Projektionsvektor 2104 subtrahiert und das Ergebnis wird zu kz Informationselementen addiert, die von dem Eingangsstrom 2106 erhalten werden. Der resultierende Vektor wird codiert (auf den Zeilen 38 und 45 der Routine „Codieren") durch den systematischen linearen Code Cz zum Erzeugen eines Codewortvektors 2108, von dem der Projektionsvektor subtrahiert wird, der in dem dreidimensionalen Datenspeichervolumen V' gespeichert ist, in einer z-Zeile mit der x-Achsenkoordinate 0 und der y-Achsenkoordinate gleich der y-Achsenkoordinate der entsprechenden z-Zeile von dem dreidimensionalen Datenspeichervolumen V 2102, subtrahiert von dem berechneten Projektionsvektor.
  • Wie es in 22 gezeigt ist, führt der Abschluß der For-Schleifen der Zeilen 33 – 39 zum Auffüllen der rechtesten yz-Scheibe 2202, außer der ersten z-Zeile in der yz-Scheibe, des dreidimensionalen Datenspeichervolumens V'. Die Ausführung der For-Schleife der Zeilen 40 – 46 führt zum Speichern von z-Zeilen in der untersten horizontalen xz-Scheibe des dreidimensionalen Datenspeichervolumens V', das Codewörter des systematischen linearen Blockcodes Cz darstellt. Am Ende der Ausführung der For-Schleife der Zeilen 40 – 46 enthält das dreidimensionale Datenspeichervolumen V' yz-Scheiben mit x-Koordinaten zwischen 0 und rx – 1 und xz-Scheiben zwischen y-Achsenkoordinaten von 0 bis ry – 1. Wie es in 23 gezeigt ist, enthalten diese äußersten z-Zeilen des dreidimensionalen Datenspeichervolumens V', wie z. B. die äußerste z-Zeile 2303, kz Klartextinformationssymbole und rz 2304 Paritätsprüfungssymbole (in 23 schraffiert), und die inneren yz-Scheiben und xz-Scheiben enthalten z-Zeilen mit k'z Klartextinformationssymbolen 2306 und r'z Paritätsprüfungssymbolen 2308.
  • Schließlich werden in den verschachtelten For-Schleifen der Zeilen 47 – 51 die z-Zeilen des dreidimensionalen Datenspeichervolumens V' und V zusammenaddiert und in dem dreidimensionalen Datenspeichervolumen V gespeichert. 24 stellt den Betrieb der verschachtelten For-Schleifen der Zeilen 47 – 51 dar. 25 stellt das Endergebnis der Codierungsoperation dar, die durch die Routine „Codieren" ausgeführt wird. Wie es in 25 gezeigt ist, enthält die große Mehrheit von Datenspeichereinheiten in dem dreidimensionalen Datenspeichervolumen V 100 Klartextinformationssymbole, nicht schraffiert in 25. Nur die xy-Scheibe mit der z-Achsenkoordinate „0" 2502, eine kleine vertikale Region von Paritätsprüfungssymbolen 2504 und eine gleichermaßen kleine horizontale Region von Paritätsprüfungssymbolen (nicht sichtbar in 25) sind in dem dreidimensionalen Datenspeichervolumen V enthalten.
  • Nachfolgend wird die Routine „Decodieren" beschrieben. Diese Routine wird verwendet, um zu bestimmen, ob Fehler, die durch den Typ-1- und Typ-2-Ausfallmodus erzeugt wurden, die oben beschrieben sind, in einem empfangenen oder wiedergewonnenen dreidimensionalen Datenspeichervolumen Γ ∼ aufgetreten sind oder nicht. Die Routine „Decodieren" liefert ein Verfahren zum Decodieren von Daten in einem dreidimensionalen Datenspeichervolumen Γ ∼, das eine Anzahl von Datenspeichereinheiten umfaßt. Das Verfahren umfaßt folgende Schritte: Berechnen von Anfangssyndromvolumen unter Verwendung von Transponierten von Paritätsprüfungsmatrizen, die einem Produktcode zugeordnet sind, der verwendet wird, um Datenwerte in dem dreidimensionalen Datenspeichervolumen Γ ∼ zu speichern; Berechnen von Sekundärsyndromvolumen von den Anfangssyndromvolumen durch Anlegen eines Decodierers an Vektoren in den Anfangssyndromvolumen; Bestimmen einer Anzahl von Ebenenverfälschungsfehlern in dem dreidimensionalen Datenspeichervolumen Γ ∼ von den Sekundärsyndromvolumen und von einer Ebene von Γ ∼; und, wenn ein Ebenenverfälschungsfehler erfaßt wird, Korrigieren des Ebenenverfälschungsfehlers durch Berechnen eines Fehlervolumens und Subtrahieren des Fehlervolumens von dem dreidimensionalen Datenspeichervolumen Γ ∼.
  • Die Routine „Decodieren" umfaßt die folgenden Erklärungen:
    Figure 00300001
    Figure 00310001
    Figure 00320001
  • Die Konstante t ist, wie es oben in Zeile 4 erklärt ist, die Anzahl von Kreuzfehlern, die die beschriebene Codiertechnik erfassen und korrigieren soll, durch das beschriebene Ausführungsbeispiel der vorliegenden Erfindung. Die Syndromvolumen Sx, Ŝx, ΔSx, Sy, Ŝy und ΔSy, oben in Zeile 6 – 9 erklärt, sind alle Volumen von Datenspeichereinheiten, mit Abmessungen, die in den obigen Erklärungen spezifiziert sind, die verwendet werden, um berechnete Syndrome für das empfangene dreidimensionale Datenspeichervolumen Γ ∼ zu speichern, oben in den Zeilen 17 – 18 erklärt. Das dreidimensionale Datenspeichervolumen E, das oben in den Zeilen 10 – 11 erklärt ist, speichert ein Fehlervolumen, das ein 3-D-analog zu dem oben beschriebenen Fehlervektor e ist. Der Satz L, der oben in den Zeilen 12 – 16 erklärt ist, enthält z-Indizes von xy-Scheiben des empfangenen dreidimensional Datenspeichervolumens Γ ∼, von denen bestimmt ist, daß dieselben Fehler enthalten. Der Satz L verwendet Baugliedsfunktionen „Size", „getFirst" und „getNext" zum Berichten der Anzahl von enthaltenen z-Indizes und zum Zugreifen auf die enthaltenen z-Indizes. Eine Ebene von Zellen mit den Abmessungen nx mal ny wird als Zellarray „S" auf den Zeilen 19 – 20 erklärt. Dieses Zellarray wird zum Summieren von z-Ebenen von Γ ∼ verwendet. Die Decodierer D1x, D1y, D1z, DtZ, D1'z und Dt'z, die oben in den Zeilen 21 – 33 erklärt sind, sind lineare Blockdecodierer, die den systematischen linearen Blockcodierern entsprechen, die in der oben beschriebenen Routine „Codieren" verwendet werden. Diese Decodierer sind in den begleitenden Kommentaren in den obigen Erklärungen beschrieben. In Zeile 34 sind Ganzzahlen x, y und z für die Verwendung in der Routine „Decodieren" erklärt. Die Funktion „getData", die oben in der Zeile 35 erklärt ist, erhält codierte Informationselemente von einer Datenspeicherungs- oder Datenübertragungsquelle und plaziert dieselben in das dreidimensionale Datenspeichervolumen Γ ∼. Die Funktion „error", die oben in Zeile 37 erklärt ist, berichtet Decodierausfälle. Die Funktion „output", die oben in Zeile 38 erklärt ist, gibt korrigierte codierte Informationssymbole an einen Ausgangsstrom aus.
  • Die Routine „Decodieren" verwendet die Subroutine computeE, die nachfolgend geliefert wird:
    Figure 00330001
  • Diese Subroutine berechnet ein Fehlervolumen xy-Scheibe Ez, das die beiden Matrixgleichungen erfüllt, die in Zeile 4 und 5 der Routine geliefert werden. H T / x und H T / y werden erhalten durch Transponieren der Paritätsprüfungsmatrizen Hx und Hy für die systematischen linearen Blockcodes Cx und Cy, die in der oben beschriebenen Routine „Codieren" verwendet werden. Das Berechnen einer Fehlervolumen-xy-Scheibe, die die beiden Beschränkungsgleichungen erfüllt, ist ein gut bekanntes mathematisches Problem bei Fehlersteuercodierung und Decodierung und verschiedene gut bekannte Techniken können von einem Durchschnittsfachmann auf diesem Gebiet geliefert werden. Diese Berechnung umfaßt das Verwenden der Decodierer D1x und D1y. Dann berechnet D1x von jeder x-Zeile in ΔSxz die jeweilige x-Zeile in Ez. Dann berechnet D1y von jeder y-Zeile in Ŝyz die jeweilige y-Zeile in Ez. Mit Bezugnahme auf 4 lasse Ez die xy-Scheibe sein, die die Kreuzstruktur in dieser Figur enthält, wobei diese Struktur als eine Fehlerstruktur angesehen wird. Da jede x-Zeile in Ez, außer der x-Zeile 402 höchstens einen Fehler enthält, rekonstruiert der Decodie rer D1X alle Einträge der y-Zeile 404 in Ez außer möglicherweise 406, dennoch kann derselbe die x-Zeile 402 falsch decodieren. Dies läßt nur eine verfälschte x-Zeile in Ez, x-Zeile 402, übrig, die dann zu D1y korrigiert wird.
  • Der Hauptkörper der Routine „Decodieren" folgt:
    Figure 00340001
    Figure 00350001
    Figure 00360001
  • Zunächst werden auf der obigen Zeile 3 die empfangenen oder wiedergewonnen codierten Informationen erhalten und in das dreidimensionale Datenspeichervolumen Γ ∼ plaziert, über einen Aufruf zu der Routine getData. Nachfolgend werden in der For-Schleife der Zeilen 4 – 8 die beiden Anfangssyndromvolumen Ŝxz und Ŝyz berechnet durch Matrixmultiplikation von aufeinanderfolgenden xy-Scheiben in dem dreidimensionalen Datenspeichervolumen Γ ∼ durch die Transponierten der Paritätsprüfungsmatrizen Hx und Hy für die systematischen linearen Blockcodes Cx und Cy, die in der oben beschriebenen Routine „Codieren" verwendet werden. 26 stellt die Berechnung des Syndromvolumens Ŝx dar. Jede xy-Scheibe, wie z. B. die xy-Scheibe 2602 in dem dreidimensionalen Datenspeichervolumen Γ ∼ 2604 wird durch die nx mal rx Transponierte der Paritätsprüfungsmatrix Hx für den Code Cx 2606 multipliziert, um eine ny mal rx xy-Scheibe 2608 in dem Syndromvolumen Sx 2610 zu erzeugen. 27 stellt auf ähnliche Weise wie 26 die Berechnung des Syndromvolumens Sy dar.
  • Auf der Zeile 9 ist das Fehlervolumen E eingestellt, um den Wert „0" in allen Datenspeichereinheiten zu enthalten. Dann werden die sekundären Syndromvolumen aus den Anfangssyndromvolumen berechnet, durch Anlegen eines Decodierers an die Vektoren in den Anfangssyndromvolumen. In der For-Schleife der Zeilen 10 – 13 werden z-Zeilen für das Syndromvolumen Sx berechnet durch Decodieren entsprechender z-Zeilen von dem Syndromvolumen Sx. Gleichartig dazu werden z-Zeilen des Syndromvolumens Sy berechnet durch Decodieren entsprechender z-Zeilen des Syndromvolumens Sy in der For-Schleife der Zeilen 14 – 17. In der Zeile 19 wird der Satz L initialisiert, um keine z-Koordinaten zu enthalten. Nachfolgend wird in der For-Schleife der Zeilen 21 – 24 jede xy-Scheibe in den Syndromvolumen Sx und Sy untersucht, um verfälschte xy-Scheiben zu erfassen, und jede Erfassung einer verfälschten xy-Scheibe in einer z-Achsenkoordinate z führt dazu, daß die z-Achsenkoordinate z in den Satz L plaziert wird. Die Anzahl von Ebenenverfälschungsfehlern kann auf der Basis der Anzahl von z-Achsenkoordinaten, die in den Satz L plaziert werden, bestimmt werden.
  • In der Zeile 25 bestimmt die Routine „Decodieren", ob in der For-Schleife der Zeile 21 – 24 irgendwelche Fehler erfaßt wurden. Falls dies der Fall ist, dann stellt auf der Zeile 27 die Routine „Decodieren" das Zellenarray S ein, um 0 Werte zu enthalten, und summiert dann in der For-Schleife der Zeilen 28 – 31 die xy-Scheiben von Γ ∼ in S. Nachfolgend bestimmt die Routine „Decodieren" in Zeile 32, ob irgendwelche Paritätsfehler in dem dreidimensionalen Datenspeichervolumen Γ ∼ vorliegen oder nicht, angezeigt durch Nicht-Null-Werte in S. Falls dies der Fall ist, wird, falls der Wert von t 1 ist, ein Decodierfehler auf der Zeile 36 zurückgesendet und die Routine „Decodieren" endet auf der Zeile 37. Wenn t 1 ist, können keine Fehler korrigiert werden. Nachfolgend werden in den verschachtelten For-Schleifen der Zeilen 39 – 43 z-Zeilen der Syndromvolumen Ŝx und Ŝy geprüft, um Fehler zu erfassen, und falls Fehler gefunden werden, werden die z-Achsenkoordinaten der xy-Scheiben in dem Satz L gespeichert. Falls der Satz L nun eine Größe aufweist, die sich von 1 unterscheidet, wie es durch die Routine „Decodieren" in Zeile 44 erfaßt wird, dann wird ein Fehler auf der Zeile 46 zurückgesendet und die Routine „Decodieren" endet in der Zeile 47. Die Beendigung ist in diesem Fall angemessen, weil, wie es oben erörtert wurde, nicht mehr als eine verfälschte xy-Scheibe durch die Fehlersteuercodier- und Decodiertechnik korrigiert werden kann, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Andernfalls, wenn es keine erfaßten Fehler gibt, wie es oben in der Zeile 25 bestimmt wird, dann können die codierten Informationssymbole in dem dreidimensionalen Datenspeichervolumen Γ ∼ ausgegeben werden, in der Zeile 52, und die Routine „Decodieren" endet auf der Zeile 53. Es ist anzumerken, daß die Klartextinformationssymbole von den ausgegebenen codierten Informationssymbolen extrahiert werden können, durch einfaches Extrahieren der Klartextinformationssymbole in einer Reihenfolge entgegengesetzt zu der Reihenfolge, in der sie während dem Codieren durch die Routine „Codieren" gespeichert wurden.
  • Nachfolgend bestimmt die Routine „Decodieren", ob ein einzelner Fehler erfaßt wurde, in der Zeile 56. Falls dies der Fall ist, wurde ein einzelner Ebenenverfälschungsfehler erfaßt und der Ebenenverfälschungsfehler kann korrigiert werden durch Berechnen eines Fehlervolumens und Subtrahieren des Fehlervolumens von dem dreidimensionalen Datenspeichervolumen Γ ∼. Die xy-Scheibe in dem Fehlervolumen E kann berechnet werden durch Summieren aller xy-Scheiben in dem dreidimensionalen Datenspeichervolumen Γ ∼, und das Fehlervolumen kann von dem dreidimensionalen Datenspeichervolumen Γ ∼ berechnet und ausgegeben werden in der Zeile 59. Falls es mehr als einen und weniger oder gleich t erfaßte Fehler gibt, wie es in Zeile 61 bestimmt wird, dann beendet die Routine „Decodieren" in den For-Schleifen der Zeilen 63 – 67 und 68 – 72 die Berechnung der Syndromvolumen Sx und Sy durch Decodieren entsprechender z-Zeilen der Syndromvolumen Ŝx und Ŝy. Dann berechnet die Routine „Decodieren" in den Zeilen 73 und 74 die Differenzsyndromvolumen ΔSx und ΔSy durch Subtrahieren der berechneten Anfangssyndromvolumen von den berechneten sekundären Syndromvolumen. Dann berechnet die Routine „Decodieren" in der while-Schleife der Zeilen 76 – 80 xy-Scheiben des Fehlervolumens E und gibt schließlich das Ergebnis des Subtrahierens des Fehlervolumens E von dem dreidimensionalen Datenspeichervolumen Γ ∼ aus. Falls es jedoch mehr als t Fehler gibt, oder anders ausgedrückt, die Anzahl von Fehlern die bestimmten Begrenzungen der Fehlerkorrekturtechnik überschreiten, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, wird ein Fehler in der Zeile 83 zurückgesendet.
  • Obwohl die vorliegende Erfindung bezüglich eines speziellen Ausführungsbeispiels beschrieben wurde, ist nicht beabsichtigt, daß die Erfindung auf dieses Ausführungsbeispiel begrenzt ist. Modifikationen innerhalb der Wesensart der Erfindung sind für einen Fachmann auf diesem Gebiet offensichtlich. Beispielsweise kann das Verfahren der vorliegen den Erfindung auf eine beinahe unbegrenzte Anzahl von Weisen implementiert werden, unter Verwendung jeder einer großen Vielzahl von Programmiersprachen und einer beinahe unbegrenzten Anzahl von unterschiedlichen Steuerstrukturen, modularen Organisationen und anderen solchen Charakteristika. In speziellen Fällen können bestimmte Effizienzen erhalten werden durch Kurzschließen von For-Schleifen und durch Multiplizieren und anderweitiges Verarbeiten von Teilmatrizen anstatt von vollen Matrizen. Die Techniken der vorliegenden Erfindung können an dreidimensionale Datenspeichervolumen mit vielen unterschiedlichen Abmessungen angelegt werden, die Elemente von einer beinahe unbegrenzten Anzahl von unterschiedlichen Feldtypen enthalten. Eine große Vielzahl von geeigneten systematischen linearen Blockcodierern und entsprechenden Decodierern können durch die vorliegende Erfindung verwendet werden. Selbstverständlich kann die Ausrichtung der logischen x-, y- und z-Achsen und der anderen Komponenten und Teilkomponenten der dreidimensionalen Datenspeichervolumen beliebig bezüglich des physikalischen Datenspeichermediums ausgerichtet sein. Sollten zusätzliche Fehlererfassungs- und Korrekturfähigkeiten benötigt werden, können alternative Verfahren innerhalb des Schutzbereichs der vorliegenden Erfindung entwickelt werden. Beispielsweise können zwei oder mehr xy-Scheibenfehler korrigiert werden, wenn eine größere Anzahl von Paritätsprüfungssymbolen verwendet wird. Obwohl Verfahren, die Ausführungsbeispiele der vorliegenden Erfindung darstellen, oben beschrieben sind, umfaßt die vorliegende Erfindung verschiedene Softwareimplementierungen dieser Verfahren und Computersysteme, die diese Verfahren verwenden, um Informationen in dreidimensionale Speichervolumen zu codieren.

Claims (13)

  1. Verfahren zum Codieren von Daten in ein dreidimensionales Datenspeichervolumen (100), das eine Anzahl von Datenspeichereinheiten (102) umfaßt, wobei das Verfahren folgende Schritte umfaßt: Empfangen einer Datensequenz; und Codieren der Datensequenz unter Verwendung eines linearen Produktcodes (802, 804–806) zum Codieren von Daten (902, 1104) in Codearrays von Datenwerten (1002), und Verwenden von zwei linearen Blockcodes (704) zum Codieren von Daten (1702, 2106) in Vektoren von Datenwerten (1708, 2108).
  2. Verfahren gemäß Anspruch 1, bei dem das Empfangen einer Datensequenz ferner das Empfangen einer geordneten Sequenz von Datenwerten umfaßt, wobei jeder Datenwert (502) ein Element ist, das von einem Feld ausgewählt ist.
  3. Verfahren gemäß Anspruch 1 oder 2, das ferner das Speichern des codierten Datenblocks in dem dreidimensionalen Datenspeichervolumen (150) umfaßt, so daß die ursprünglich empfangenen Daten in Klartextform in einem Teilvolumen (1302) des dreidimensionalen Datenspeichervolumens erscheinen.
  4. Verfahren gemäß einem der Ansprüche 1 bis 3, bei dem die Codearrays (1002) als Ebenen in dem dreidimensionalen Datenspeichervolumen gespeichert sind.
  5. Verfahren gemäß einem der Ansprüche 1 bis 4, bei dem die Vektoren (1708, 2108) in Datenspeichereinheiten gespeichert sind, die bereits Codearraydatenwerte enthalten.
  6. Verfahren gemäß Anspruch 4 oder 5, bei dem die Datenspeichereinheiten (102) des dreidimensionalen Datenspeichervolumens (100) bezüglich der drei Koordinatenachsen x, y und z (106, 108, 110) indexiert sind, mit Datenspeicherindizes, die von 0 bis nx – 1 in einer x-Richtung, 0 bis ny – 1 in einer y-Richtung und 0 bis nz – 1 in einer z-Richtung reichen; und wobei die linearen Blockcodes folgende Merkmale umfassen: einen Produktcode CxCy (802, 804–806) , der kxky Datenwerte in ein Codearray von Abmessungen nxny mit rxry Paritätsprüfungswerten codiert, einen linearen Blockcode Cz (704), der kz Datenwerte (1706) in einen Vektor (1708) mit der Länge nz mit rz = nz – kz Paritätsprüfungswerten codiert, und einen linearen Blockcode C'z (704), der k'z Datenwerte (2106) in einen Vektor (2108) der Länge nz mit r'z Paritätsprüfungswerten codiert.
  7. Verfahren gemäß einem der Ansprüche 4 bis 6, bei dem kxky (nz – 1) Datenwerte in nz – 1 Ebenen (1002) codiert werden, senkrecht zu der z-Richtung beginnend mit der Ebene mit der z-Achsenkoordinate 0; wobei k'z(nxny – nx – ny + 1 – kxky) Datenwerte in Ebenen (1802) codiert werden, die senkrecht zu der x-Richtung sind, mit x-Achsenkoordinaten von zwischen 1 und rx – 1 und Ebenen (2002) senkrecht zu der y-Richtung mit y-Achsenkoordinaten von zwischen 1 und ry – 1; und wobei kz(nx + ny + 1) Datenwerte codiert werden in eine Ebene (2202) senkrecht zu der x-Richtung mit der x-Achsenkoordinate 0 und einer Ebene senkrecht zu der y-Richtung mit der y-Achsenkoordinate 0.
  8. Computerbefehle, die das Verfahren gemäß einem der Ansprüche 1 bis 7 implementieren, die in einem computerlesbaren Medium codiert sind.
  9. Computer, der die Computerbefehle ausführt, die das Verfahren gemäß einem der Ansprüche 1 bis 8 implementieren, um Datenwerte in ein dreidimensionales Datenspeichervolumen (100) zu codieren.
  10. Dreidimensionales Datenspeichervolumen, das Daten enthält, die durch das Verfahren gemäß einem der Ansprüche 1 bis 8 codiert werden.
  11. Verfahren zum Decodieren von Daten in einem dreidimensionalen Datenspeichervolumen Γ ∼ (2604), das eine Anzahl von Datenspeichereinheiten umfaßt, wobei das Verfahren folgende Schritte umfaßt: Berechnen von Anfangssyndromvolumen (2610) unter Verwendung von Transponierten von Paritätsprüfungsmatrizen (2606), die einem Produktcode (802, 804, 806) zugeordnet sind, der verwendet wird, um Datenwerte in dem dreidimensionalen Datenspeichervolumen Γ ∼ zu codieren; Berechnen von Sekundärsyndromvolumen aus den Anfangssyndromvolumen durch Anlegen eines Decodierers an Vektoren in den Anfangssyndromvolumen; Bestimmen einer Anzahl von Ebenenverfälschungsfehlern in dem dreidimensionalen Datenspeichervolumen Γ ∼ von dem sekundären Syndromvolumen und von einer Ebene von Γ ∼; und wenn ein Ebenenverfälschungsfehler erfaßt wird, Korrigieren des Ebenenverfälschungsfehlers durch Berechnen eines Fehlervolumens und Subtrahieren des Fehlervolumens von dem dreidimensionalen Datenspeichervolumen Γ ∼.
  12. Verfahren gemäß Anspruch 11, das ferner das Berechnen von Differenzsyndromvolumen aus den Anfangssyndromvolumen und den Sekundärsyndromvolumen umfaßt, die unter Verwendung eines linearen Blockdecodierers abgeschlossen werden, und Korrigieren von Kreuzfehlern (402, 404, 406) in dem dreidimensionalen Datenspeichervolumen Γ ∼ durch Berechnen eines Fehlervolumens aus den Differenzsyndromvolumen und Subtrahieren des Fehlervolumens von dem dreidimensionalen Datenspeichervolumen Γ ∼.
  13. Verfahren gemäß Anspruch 12, bei dem die Datenspeichereinheiten des dreidimensionalen Datenspeichervolumens Γ ∼z bezüglich der drei Koordinatenachsen x, y und z (106, 108, 110) indexiert werden, mit Datenspeicherindizes, die von 0 bis nx – 1 in einer x-Richtung, 0 bis ny – 1 in einer y-Richtung und 0 bis nz – 1 in einer z-Richtung reichen; wobei Ebenen der Anfangssyndromvolumen Ŝx (2608) und Ŝy senkrecht zu der z-Richtung von Transponierten der Paritätsprüfungsmatrizen (2606) berechnet werden durch Ŝxz = Γ ∼zH T / x und durch Ŝyz = Γ ∼zH T / y; wobei sekundäre Syndromvolumen Sx und Sy von den Anfangssyndromvolumen berechnet werden durch Decodieren von Vektoren in Sx und Sy in der z-Richtung unter Verwendung eines linearen Blockdecodierers Dtz; wobei eine Anfangsanzahl von Ebenenverfälschungsfehlern bestimmt wird durch die Anzahl von Ebenen in Sx und Sy senkrecht zu der z-Richtung, die Nicht-Null-Werte enthält; und wobei, wenn die Ebene von Γ ∼z senkrecht zu der z-Richtung mit der z-Achsenkoordinate 0 nicht Null ist, die Anzahl von Ebenenverfälschungsfehlern ferner die Anzahl von Nicht-Null-Vektoren in der z-Richtung von Ŝx und Ŝy umfaßt, decodiert durch den linearen Blockdecodierer D1'z.
DE102004006528A 2003-04-30 2004-02-10 Fehlerfassung und Korrektur in einer geschichteten dreidimensionalen Speicherarchitektur Withdrawn DE102004006528A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/427525 2003-04-30
US10/427,525 US7206987B2 (en) 2003-04-30 2003-04-30 Error detection and correction in a layered, 3-dimensional storage architecture

Publications (1)

Publication Number Publication Date
DE102004006528A1 true DE102004006528A1 (de) 2004-12-09

Family

ID=33310172

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102004006528A Withdrawn DE102004006528A1 (de) 2003-04-30 2004-02-10 Fehlerfassung und Korrektur in einer geschichteten dreidimensionalen Speicherarchitektur

Country Status (3)

Country Link
US (1) US7206987B2 (de)
JP (1) JP2004334845A (de)
DE (1) DE102004006528A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ITRM20080037A1 (it) * 2008-01-23 2009-07-24 Uni Degli Studi Perugia Procedimento per la ultrapurificazione di alginati.
JP5166074B2 (ja) * 2008-02-29 2013-03-21 株式会社東芝 半導体記憶装置、その制御方法、および誤り訂正システム
US8151172B2 (en) * 2008-07-10 2012-04-03 Lsi Corporation Adjustable error-correction for a reed solomon encoder/decoder
TWI500272B (zh) * 2012-12-03 2015-09-11 Nat Univ Tsing Hua 資料偵錯系統及其方法
US9070436B2 (en) 2013-01-30 2015-06-30 Hewlett-Packard Development Company, L.P. Memory controller using crisscross error-correcting codes
US9600365B2 (en) 2013-04-16 2017-03-21 Microsoft Technology Licensing, Llc Local erasure codes for data storage
JP2015103159A (ja) * 2013-11-27 2015-06-04 アイシン精機株式会社 データ記憶装置
US9804925B1 (en) * 2014-02-25 2017-10-31 Google Inc. Data reconstruction in distributed storage systems
KR20160017820A (ko) * 2014-08-06 2016-02-17 에스케이하이닉스 주식회사 코딩 방법 및 코딩 장치
JP6520755B2 (ja) 2016-02-23 2019-05-29 富士通株式会社 情報処理装置、半導体装置、及びメモリ検査方法
US10505719B2 (en) 2016-04-28 2019-12-10 International Business Machines Corporation Method and system for rateless and pollution-attack-resilient network coding
WO2017200527A1 (en) * 2016-05-16 2017-11-23 Hewlett-Packard Development Company, L.P. Generating a shape profile for a 3d object
US10484171B2 (en) * 2016-06-17 2019-11-19 International Business Machines Corporation Method for efficient and practical key distribution in network coding systems

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2905368B2 (ja) * 1993-08-10 1999-06-14 富士通株式会社 誤り検出・訂正方法
WO1997001167A1 (en) * 1995-06-21 1997-01-09 Massachusetts Institute Of Technology Apparatus and method for accessing data on multilayered optical media
US6160787A (en) * 1996-01-11 2000-12-12 Wea Manufacturing, Inc. Multiple layer optical recording medium for use with two different wavelength laser beams
US6678237B1 (en) * 1997-03-27 2004-01-13 Imation Corp. Dual layer optical storage medium having partially reflecting layer comprising amorphous selenium
US5920578A (en) * 1997-04-23 1999-07-06 Cirrus Logic, Inc. Method and apparatus for efficiently processing a multi-dimensional code
JPH11328735A (ja) * 1998-05-13 1999-11-30 Sony Corp 光ディスクとこれを利用した光学ピックアップ
US7014815B1 (en) * 1998-10-30 2006-03-21 Burstein Technologies, Inc. Trackable optical discs with concurrently readable nonoperational features
KR100277764B1 (ko) * 1998-12-10 2001-01-15 윤종용 통신시스템에서직렬쇄상구조를가지는부호화및복호화장치
JP3698905B2 (ja) * 1999-01-11 2005-09-21 日本電気株式会社 光学的情報記録媒体、その情報記録方法、その情報消去方法
JP2000215619A (ja) * 1999-01-26 2000-08-04 Matsushita Electric Ind Co Ltd デ―タ誤り訂正装置
US6581178B1 (en) * 1999-02-15 2003-06-17 Nec Corporation Error correction coding/decoding method and apparatus
BR0010777A (pt) * 1999-03-23 2002-01-15 Matsushita Electric Ind Co Ltd Disco regravável com diversas camadas e dispositivo de gravação/reprodução de informação para o referido disco
CA2337877C (en) * 1999-05-17 2011-06-21 Sony Corporation Disk-like multilayer information recording medium and production method thereof
JP3363112B2 (ja) * 1999-06-30 2003-01-08 株式会社東芝 積層光記録媒体、積層光記録媒体の再生方法および積層光記録媒体の再生装置
JP2001118331A (ja) * 1999-10-19 2001-04-27 Sony Corp 記録装置、記録再生装置、記録方法
JP2001319344A (ja) * 2000-03-03 2001-11-16 Sony Computer Entertainment Inc フォーカス制御装置、記録媒体および光ディスク再生装置
FR2808632B1 (fr) * 2000-05-03 2002-06-28 Mitsubishi Electric Inf Tech Procede de turbo-decodage avec reencodage des informations erronees et retroaction
US20030120858A1 (en) * 2000-09-15 2003-06-26 Matrix Semiconductor, Inc. Memory devices and methods for use therewith
US6700862B2 (en) * 2000-10-03 2004-03-02 Matsushita Electric Industrial Co., Ltd. Optical disc and manufacturing method for the same
JP3805614B2 (ja) * 2000-11-01 2006-08-02 株式会社日立製作所 ディジタル信号の生成方法並びに記録媒体
US7107505B2 (en) * 2001-03-27 2006-09-12 Comtech Aha Corporation Concatenated turbo product codes for high performance satellite and terrestrial communications
US20030093740A1 (en) * 2001-10-19 2003-05-15 Nebojsa Stojanovic Iterative hard decoding method for multidimensional SPC
EP1317070A1 (de) * 2001-12-03 2003-06-04 Mitsubishi Electric Information Technology Centre Europe B.V. Verfahren zur Erlangung eines Fehlerkorrekturkodes mit gewünschten Parametern aus einem Blockturbokode

Also Published As

Publication number Publication date
JP2004334845A (ja) 2004-11-25
US20040221220A1 (en) 2004-11-04
US7206987B2 (en) 2007-04-17

Similar Documents

Publication Publication Date Title
DE3854393T2 (de) Verfahren und gerät zur fehlerkorrektur mit mehrfachdurchlauf für produktkode.
DE10133595B4 (de) Pufferschaltung, Speicherzugriffsverfahren und Reed-Solomon-Decoder
DE2106314C3 (de) Anordnung zur Fehlererkennung und -korrektur in einem aus b Bits bestehenden Byte eines K Datenbytes enthaltenden Datenblocks
DE102004006528A1 (de) Fehlerfassung und Korrektur in einer geschichteten dreidimensionalen Speicherarchitektur
DE69121307T2 (de) Mehrfachpegel-Fehlerkorrektursystem
DE2162833C3 (de) Einrichtung zum Codieren und Decodieren eines aus k Bytes mit je b Bits bestehenden Datenblocks und Korrektur zweier fehlerhafter Bits
DE102007038114A1 (de) Fehlerkorrekturschaltung, Halbleiterspeicherelement und Fehlerkorrekturverfahren
US8775860B2 (en) System and method for exact regeneration of a failed node in a distributed storage system
DE60220341T2 (de) Verfahren zum Erzeugen eines Burstfehlermusters sowie Burst- und Bytefehlerermittlungs- und-korrekturvorrichtung
DE2834963A1 (de) Verfahren und einrichtung zur fehlerkorrektur von uebertragenen daten
DE19963683A1 (de) Architektur zum Decodieren von linearen Blockfehler-Korrekturcodes mit Soft Decision
DE4220196C2 (de) Halbleiterspeichervorrichtung und Verfahren zum Korrigieren eines Datenfehlers in einer Halbleiterspeichervorrichtung entsprechend einer vorbestimmten Hamming-Matrix
DE102004003353A1 (de) Verfahren und System zum Minimieren der Länge einer Defektliste für eine Speichervorrichtung
DE102012208711B4 (de) Vorrichtung zum Erzeugen einer Prüfsumme
DE102013016681A1 (de) Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102016102590B4 (de) Datenverarbeitungseinrichtungen und verfahren zum rekonstruieren eines puf-werts
DE102005022107B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines Bitfehlers in einer Bitfolge
DE102013109315B4 (de) Verfahren und Datenverarbeitungseinrichtung zum Rekonstruieren eines Vektors
DE4105860A1 (de) Schaltungsanordnung zum erkennen und korrigieren von fehlern in datenworten
DE69837784T2 (de) Verbessertes fünf-fehler-korrektursystem
DE3882175T2 (de) Fehlerkorrektur-Kode für einen B-bit-pro-Chip-Speicher mit verminderten Redundanz.
DE102020110787B3 (de) Schaltung und verfahren zum kodieren oder dekodieren eines datenworts
DE102018131613A1 (de) Fehlererkennung mittels Gruppenfehler
DE102013219088B9 (de) Schaltungsanordnung und Verfahren zur Realisierung von Prüfbitkompaktierung für Cross-Parity-Codes
DE102019119753A9 (de) Generalisiertes verkettetes Fehlerkorrektur-Codierschema mit Lokalität

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8130 Withdrawal