DE102017110389A1 - Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes - Google Patents

Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes Download PDF

Info

Publication number
DE102017110389A1
DE102017110389A1 DE102017110389.9A DE102017110389A DE102017110389A1 DE 102017110389 A1 DE102017110389 A1 DE 102017110389A1 DE 102017110389 A DE102017110389 A DE 102017110389A DE 102017110389 A1 DE102017110389 A1 DE 102017110389A1
Authority
DE
Germany
Prior art keywords
decoding
code
codes
level
data
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.)
Granted
Application number
DE102017110389.9A
Other languages
English (en)
Other versions
DE102017110389B4 (de
Inventor
Jürgen Freudenberger
Jens Spinner
Christoph Baumhof
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.)
Hyperstone GmbH
Original Assignee
Hyperstone GmbH
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 Hyperstone GmbH filed Critical Hyperstone GmbH
Priority to US15/594,830 priority Critical patent/US10230403B2/en
Publication of DE102017110389A1 publication Critical patent/DE102017110389A1/de
Priority to US16/252,604 priority patent/US10812112B2/en
Application granted granted Critical
Publication of DE102017110389B4 publication Critical patent/DE102017110389B4/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/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/2927Decoding strategies
    • H03M13/293Decoding strategies with erasure setting
    • 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/11Error 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 using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1191Codes on graphs other than LDPC codes
    • 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/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes
    • 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/25Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM]
    • H03M13/253Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM] with concatenated codes
    • 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
    • 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
    • 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/2927Decoding strategies
    • 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/2948Iterative decoding
    • 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/2957Turbo codes and decoding
    • H03M13/2993Implementing the return to a predetermined state, i.e. trellis termination
    • 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/35Unequal or adaptive error protection, e.g. by providing a different level of protection according to significance of source information or by adapting the coding according to the change of transmission channel characteristics
    • H03M13/356Unequal error protection [UEP]
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/3944Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes for block codes, especially trellis or lattice decoding thereof
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/45Soft decoding, i.e. using symbol reliability information
    • H03M13/458Soft decoding, i.e. using symbol reliability information by updating bit probabilities or hard decisions in an iterative fashion for convergence to a final decoding result
    • 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/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/618Shortening and extension of codes
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • G11B20/1833Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
    • G11B2020/1836Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information using a Reed Solomon [RS] code
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • G11B20/1833Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
    • G11B2020/1859Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information wherein a trellis is used for decoding the error correcting code
    • 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/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • 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

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Error Detection And Correction (AREA)

Abstract

Die Erfindung betrifft ein Softinput-Decodierungsverfahren und einen Decoder für verallgemeinerte verkettete (GC) Codes. Die GC-Codes werden aus inneren verschachtelten Blockcodes, wie beispielsweise binären Bose-Chaudhuri-Hocquenghem, BCH, -Codes und äußeren Codes, wie etwa Reed-Solomon, RS, -Codes konstruiert. Um ein Softinput-Decodieren für die inneren Blockcodes zu ermöglichen, wird ein sequenzieller Stapeldecodierungsalgorithmus verwendet. Gewöhnliches Stapeldecodieren von binären Blockcodes erfordert den kompletten Trellis des Codes. Gemäß einem Aspekt wendet die vorliegende Erfindung stattdessen eine Darstellung des Blockcodes beruhend auf den Trellisen von Supercodes auf, um die Speicheranforderungen für die Darstellung der inneren Codes zu reduzieren. Dies ermöglicht eine effiziente Hardware-Implementierung. Gemäß einem anderen Aspekt stellt die vorliegende Erfindung ein Softinput-Decodierungsverfahren sowie eine Vorrichtung bereit, die einen sequenziellen Stapeldecodierungsalgorithmus in Kombination mit Liste-aus-Zwei-Decodierung einsetzen, was besonders gut für solche Anwendungen geeignet ist, die sehr niedrige Restfehlerraten erfordern.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft das Gebiet der Fehlerkorrekturdecodierung (engl. Error Correction Coding, ECC), insbesondere für Anwendungen für nichtflüchtige Speicher wie beispielsweise Flashspeicher. Genauer betrifft die Erfindungsverfahren und einen entsprechenden Decoder zur Softinput-Decodierung von verallgemeinerten verketteten Codes (engl. Generalized Concatenated Codes, GCC, GC-Codes), insbesondere von GCC-codierten und in einer Speichervorrichtung gespeicherten Daten, ein Speichersystem mit einem solchen Decoder und ein korrespondierendes Computerprogramm, das konfiguriert ist, dieses Verfahren auf dem Decoder auszuführen.
  • HINTERGRUND
  • Eine auf GC-Codes beruhende Fehlerkorrekturcodierung (ECC) weist ein hohes Potenzial für verschiedenste Anwendungen im Bereich der Datenkommunikation und Datenspeichersysteme auf, beispielsweise für digitale magnetische Speichersysteme, wie in [1] beschrieben (siehe unten angegebene Liste von Literaturquellen [...]), für nichtflüchtige Flashspeicher [2], sowie für zweidimensionale Strichcodes [3]. GCC-Codes werden typischerweise aus inneren verschachtelten binären Bose-Chaudhuri-Hocquenghem (BCH) – Codes und äußeren Reed-Solomon(RS)-Codes konstruiert [4], [5], und [6]. Bei algebraischer Decodierung weisen GC-Codes im Vergleich zu langen BCH-Codes eine geringe Decodierungskomplexität auf. Derartige Codes sind gut für schnelle hardwarebasierte Decoderarchitekturen geeignet [7]. In der Theorie der Codierungen, bilden die BCH-Codes eine Klasse von linearen, zyklischen Fehlerkorrekturcodes, die unter Verwendung von finiten Feldern (Galois-Feldern, GF) konstruiert werden, während die RS-Codes zur Klasse der nicht binären, zyklischen Fehlerkorrekturcodes gehören und auf univarianten Polynomen über finiten Feldern (d. h. GF) beruhen.
  • Ein Codewort eines GC-Codes kann als eine Matrix aufgefasst werden. Zur Codierung wird die Information in der Matrix gespeichert. In dem ersten Codierungsschritt werden die Zeilen der Matrix durch Blockcodes (die äußeren Codes) über dem Galois-Feld GF(2m) geschützt, wobei m > 0 eine positive ganze Zahl ist. Danach wird jede Spalte durch binäre Codes, die inneren Codes, geschützt. Typischerweise werden binäre BCH-Codes als innere Codes und RS-Codes als äußere Codes verwendet [8].
  • Flashspeicher, insbesondere NAND-Flashspeicher, stellen wichtige Komponenten von eingebetteten Systemen sowie in der Consumer-Elektronik dar. Flashspeicher benötigen ECC, um Datenintegrität und Zuverlässigkeit für die Nutzdaten sicherzustellen (vgl. [8]). Bei vielen Flash Technologien, kann man als statistisches Fehlermodell einen Binären Symmetrischen Kanal (engl. Binary Symmetric Channel, BSC) annehmen. Daher werden typischerweise BCH-Codes zur Fehlerkorrektur verwendet. Flashspeicher reservieren typischerweise einen Extra-Speicherbereich, der dazu verwendet wird, die für die ECC benötigten Redundanzen zu speichern. Dieser Extra-Speicherbereich bestimmt die Coderate für den Fehlerkorrekturcode. GC-Codes haben gegenüber langen BCH-Codes eine geringe Decodierungskomplexität.
  • Ein Decoder verarbeitet die potenziell fehlerhaften Daten in mehreren Decodierungsschritten. In [7] wird algebraische Decodierung in jedem Decodierungsschritt verwendet. Dies ist angemessen, wenn der Kanal keine Softinformation über die übertragenen oder gespeicherten Bits liefert. Wenn der Kanal jedoch Zuverlässigkeitsinformationen liefert, wenn also beispielsweise bekannt ist, dass er sich, zumindest im Wesentlichen, wie ein Kanal mit additivem weißen Gaußschem Rauschen (engl. Additive White Gaussian Noise, AWGN) verhält, kann diese bekannte Softinformationen durch den Decodierer ausgenutzt werden. Im Falle von GC-Codes, ist es ausreichend, die Softinformationen dazu zu nutzen, die inneren Codes zu decodieren. In [7] wurde eine Pipeline-Decoderarchitektur für GC-Codes vorgeschlagen, die auf einer algebraischen Hardinput-Decodierung der Komponentencodes beruht. Es existieren zahlreiche Softinput-Decodierungsalgorithmen für binäre Blockcodes (vgl. [5] für eine Übersicht). Beispielsweise zuverlässigkeitsbasierte Decodierungsalgorithmen wie die Chase Decodierung [9], [10], die geordnete statistische Decodierung [11], und der Dorsch-Algorithmus [12], [13], [14], um nur einige zu nennen. Derartige Algorithmen können eine Performanz anbieten, die ähnlich der von Maximum-Likelihood(ML)-Decodierung ist, aber normalerweise garantieren sie nicht, dass das ML-Codewort erfolgreich gefunden wird. Viele dieser Verfahren sind jedoch nicht für eine schnelle Hardwareimplementierung geeignet. Des Weiteren liefern viele Kanäle mit einem quantisierten Ausgang nur eine geringe Anzahl von Entscheidungsschwellen und somit nur 2 oder 3 Bits an Softinformation pro Codebit, was für viele zuverlässigkeitsbasierte Decodierungsalgorithmen nicht ausreichend ist.
  • In [15] wurde ein sequenzieller Stapeldecodierungsansatz vorgeschlagen. Sequenzielles decodieren weist eine geringe Rechenkomplexität auf, wenn der Rauschpegel niedrig ist. Dies ist für viele Anwendungen von GC-Codes erfüllt, beispielsweise für Fehlerkorrekturcodierungen in Speichersystemen. Sequenzielle Decodierung wurde ursprünglich für Baumcodes eingeführt. Um binäre Blockcodes zu decodieren, kann der Syndrom-Trellis als Repräsentation des Codes verwendet werden [16]. Für Blockcodes steigt die Anzahl von Trellis-Zuständen jedoch exponentiell mit der Anzahl von Redundanzbits an. Daher ist das Trellis-basierte sequenzielle Decodieren, wie es in [15] vorgeschlagen wird, nur für Codes mit geringen Fehlerkorrekturfähigkeiten praktikabel.
  • Traditionell wird ein binärer symmetrischer Kanal (BSC) als Kanalmodell für Flashspeicher verwendet, und BCH-Codes werden zur Fehlerkorrektur eingesetzt [20], [21], [22], [23]. Vor kurzem wurden für NAND-Flashspeicher verkettete Codes vorgeschlagen, die aus langen BCH-Codes konstruiert sind [24], [25]. Diese Codes können geringe Restfehlerraten liefern, doch verlangen sie sehr lange Codes und somit eine hohe Decodierungslatenz, was möglicherweise nicht in allen Anwendungen von Flashspeichern akzeptabel ist.
  • Die Performanz von Fehlerkorrekturcodierung kann verbessert werden, wenn Zuverlässigkeitsinformation über den Zustand der Zelle verfügbar ist [26]. In diesem Fall kann der Kanal als Kanal mit binärem Eingang und additivem weißen Gaußschen Rauschen (AWGN) betrachtet werden, wobei der Kanalausgang unter Verwendung einer geringen Anzahl von Bits quantisiert ist [24]. Um die Zuverlässigkeitsinformation auszunutzen, sind Softinput-Decodierungsalgorithmen erforderlich. Beispielsweise können Low-Density-Parity-Check(LDPC)-Codes eine höhere Fehlerkorrekturperformanz bei NAND-Flashspeicher liefern [27], [28], [29], [30]. LDPC-Codes haben jedoch hohe Restfehlerraten (die Fehler-Untergrenze) und sind nicht für Anwendungen geeignet, die sehr geringe Wahrscheinlichkeiten für Decodierungsfehler erfordern [2]. Beispielsweise empfiehlt der JEDEC Standard für Festspeicherlaufwerke (engl. Solid State Drives, SSD) eine nicht mehr korrigierbare Bitfehlerrate von weniger als 10–15 für Client-Anwendungen und von weniger als 10–16 für Unternehmenslösungen [31]. Für einige Anwendungen sind Blockfehlerraten von weniger als 10–16 vorgeschrieben [32].
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Es ist eine Aufgabe der vorliegenden Erfindung, die Effizienz bei der Decodierung von GCC-codierten Daten zu verbessern. Speziell ist es eine Aufgabe der Erfindung, ein Verfahren sowie einen Decoder zur Ermöglichung einer effizienten, insbesondere platzeffizienten, Implementierung eines Decodierers zur Decodierung von GCC-codierten Daten bereitzustellen, wobei der Decodierer vorzugsweise für Anwendungen geeignet ist, die sehr geringe Restfehlerraten, beispielsweise Bitfehlerraten von weniger als 10–15 oder sogar weniger als 10–16 erfordern.
  • Eine Lösung für dieses Problem wird durch die Lehre der unabhängigen Ansprüche bereitgestellt. Verschiedene bevorzugte Ausführungsformen der vorliegenden Erfindung sind Gegenstand der abhängigen Ansprüche.
  • Ein erster Aspekt der Erfindung betrifft ein Softinput-Decodierungsverfahren für einen verallgemeinerten verketteten Code, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes B(...), vorzugsweise binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, -Codes und L äußeren Codes – vorzugsweise Blockcodes wie etwa Reed-Solomon, RS, -Codes – konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist. Das Verfahren verwendet eine oder mehrere Decodierungsvorrichtungen, d. h. Decoder, um iterativ Ebene für Ebene von einem Datenkanal, beispielsweise von einer nichtflüchtigen Speichervorrichtung wie etwa einem Flashspeicher, empfangene Originaldaten zu decodieren. Für jede Ebene weist das Verfahren die folgenden Schritte auf:
    • (i) einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene beruhend auf den inneren Blockcodes der aktuellen Ebene und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und
    • (ii) einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird.
  • Hierbei weist der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene auf, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren. Das sequenzielle Stapeldecodieren beruht auf einem ersten Trellis, der einen ersten Supercode B1 (l) des inneren Blockcodes B(l) der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B2 (l) von B(l) repräsentiert, mit B(l) = B1 (l) ⋂ B2 (l), wobei ein Supercode von B(l) ein Code ist, der sämtliche Codewörter von B(l) aufweist, und die jeweilige Redundanz des ersten Supercodes B1 (l) und des zweiten Supercodes B2 (l) geringer ist als die von B(l). Der korrespondierende innere Code
    Figure DE102017110389A1_0002
    der unmittelbar vorausgehenden Ebene l – 1 wird als einer der Supercodes B1 (l) und B2 (l) wiederverwendet. Das sequentielle Stapeldecodieren ist konfiguriert, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
  • Der Begriff „erweiterter BCH-Code”, wie hier verwendet, bezieht sich auf einen Code, dessen Codeworte im Allgemeinen sowohl ein BCH-Codewort als auch ein zusätzliches Einfachparitätsprüfungs-(SPC)-Symbol (d. h. ein Paritätsbit, falls das SPC-Symbol nur ein einziges Bit ist) aufweisen. Allerdings, ist bereits ein bloßer SPC-Code (ohne weitere BCH-Paritätssymbole) ein erweiterter BCH-Code und stellt sogar seine einfachste Form dar. Während ein BCH-Code (der nicht bloß ein SPC-Code ist) die Korrektur einer bestimmten Anzahl von Fehlern in einem Codeword beim Decodieren ermöglicht, erlaubt ein SPC-Code nur das Erkennen bestimmter Fehler, speziell dann, wenn in dem Codewort eine ungerade Anzahl von Fehlern vorliegt.
  • Der Begriff „Subcode” eines bestimmten (Mutter-)Codes, wie hier verwendet, bezieht sich auf einen Code, der aus einer echten Untermenge der Codeworte des (Mutter-)Codes besteht. So ist ein Code eine Untermenge eines anderen Codes B(m), falls die Menge der Code Worte von B(n) eine echte Untermenge der Menge von Codeworten von B(m) ist. Speziell kann der Subcode der Code einer bestimmten Verschachtelungsebene der verschachtelten Struktur der inneren verschachtelten Blockcodes sein, wobei dieser Subcode eine Untermenge eines Blockcodes einer unteren Ebene der verschachtelten Struktur ist. Demgemäß ist in der verschachtelten Struktur B(L-1) ⊆ B(L-2) ⊆ ... ⊆ B(0) der Blockcode B(L-q) mit L > q > 0 und der Ganzzahl q ein Subcode zumindest des Blockcodes B(0) der niedrigsten Verschachtelungsebene 0 und, falls q < L – 1, auch von jedem höheren verschachtelten Blockcode, der zwischen B(0) und B(L-q) in der verschachtelten Struktur definiert ist.
  • Unter dem Begriff „Softinput-Decodierung” ist im Sinne der Erfindung eine Art der Decodierung von aus einem Kanal erhaltenen Originaldaten zu verstehen, bei der Informationen, welche die Zuverlässigkeit des Kanals charakterisieren, durch einen Algorithmus, der zur Durchführung der Decodierung verwendet wird, als Eingangsvariable(en) für den Algorithmus berücksichtigt werden.
  • Der Begriff „Trellis” bezieht sich auf eine Darstellung eines Codes, wobei ein Trellis T = (S, W) ein beschrifteter gerichteter Graph ist, wobei W = {w} die Menge aller Äste in dem Graphen bezeichnet und S = {σ} die Menge aller Knoten ist. Die Menge S ist in n +1 disjunkte Untermengen S = S0 ⋃ S1 ⋃ ... ⋃ Sn zerlegbar, die als „Ebenen” des Trellis bezeichnet werden. Auf ähnliche Weise existiert eine Partitionierung der Menge W = W1 ⋃ W2 ⋃ ... ⋃ Wn. Ein Knoten σ ∊ St der Ebene t kann mit einem Knoten σ ~ ∊ St+1 der Ebene t + 1 durch einen oder mehrere Äste verbunden sein. Jeder Ast wt ist von einem Knoten σ der Ebene t – 1 zu einem Knoten σ ~ der nächsten Ebene t gerichtet. Hierbei wird angenommen, dass die Endebenen jeweils nur einen Knoten aufweisen, nämlich S0 = {σ0} und Sn = {σn}. Ein Trellis stellt eine kompakte Methode zur Darstellung aller Codewörter eines Codes dar. Jeder Ast wt des Trellis ist mit einem Codesymbol νt(wt) bezeichnet. Jedes Codewort korrespondiert zu einem eindeutigen Pfad in dem Trellis, d. h. es liegt eine Eins-zu-Eins-Korrespondenz zwischen jedem Codeword v des Codes und einem Pfad w in dem Trellis vor: v(w) = ν1(w1), ..., νn(wn).
  • Hierbei werden Codesequenz-Segmente und Pfadsegmente durch v[i,j] = νi, ..., νj bzw. w[i,j] = wi, ..., wj bezeichnet. Bezeichnend der sogenannte „Syndrom-Trellis” kann unter Verwendung seiner Paritätsprüfungsmatrix erhalten werden [16]. Der Syndrom-Trellis ist in dem Sinne minimal, als dieser Trellis die minimal mögliche Anzahl |S| von Knoten unter allen möglichen Trellis-Darstellungen desselben Codes aufweist.
  • Der Begriff „Trellis-basiertes sequenzielles Stapeldecodieren” bezieht sich auf einen Stapelalgorithmus, d. h. ein iteratives Decodierungsverfahren, wie das in [15] vorgestellte, wobei ein Stapel erforderlich ist, um Zwischenergebnisse zu speichern. Der Stapel enthält Codesequenzen verschiedener Längen. Sei vt eine Codesequenz der Länge t, d. h. vt = ν1, ..., νt. Jede Codesequenz ist mit einer Metrik und einem Knoten σt assoziiert. Der Knoten σt ist derjenige Knoten in dem Trellis, der erreicht wird, wenn man dem Pfad folgt, der zu der Codesequenz durch den Trellis korrespondiert. In jeder Iteration bewertet die Metrik jede Codesequenz und der Stapel wird gemäß diesen metrischen Werten geordnet, wobei die Codesequenz an der Spitze des Stapels diejenige mit dem größten metrischen Wert ist. Die Codesequenz, die nach der abschließenden Iteration zu dem obersten Pfad im Stapel korrespondiert, stellt das geschätzte Codewort dar. Eine genauere Erläuterung der Trellis-basierten sequenziellen Stapeldecodierung wird nachfolgend unter Bezugnahme auf die 3 bis 8 beruhend auf speziellen einfachen Beispielcodes gegeben. Hierbei wird die Trellis-basierte sequenzielle Stapeldecodierung verwendet, um die inneren Blockcodes des übergeordneten GCC für eine gegebene aktuelle Ebene des GCC zu decodieren, wobei die Decodierung Ebene für Ebene erfolgt.
  • Im Allgemeinen hängt die Menge an Speicherplatz, die ein Trellis-basierter Decodierer zum Speichern eines Trellis benötigt, von der Anzahl der Knoten in dem Trellis ab. Beispielsweise könnte jeder Knoten zumindest Speicherplatz zum Speichern von zwei Adressen benötigen, die zu zwei verschiedenen Zeigern auf Knoten in der nachfolgenden Ebene des Trellis korrespondieren. Des Weiteren ist die maximale Anzahl von Knoten bei einer gegebenen Tiefe des Trellis gleich der Anzahl von Redundanzbits, d. h. Paritätsbits, des Codes. Dementsprechend benötigt ein Code der Länge n und der Dimension k und somit (n – k) Redundanzbits eine maximale Anzahl von n·2(n-k) Knoten und ausreichenden Speicherplatz um den entsprechenden Trellis zu speichern. Bei dem oben genannten Beispiel mit zwei Zeigern pro Knoten ergeben sich somit insgesamt 2n·2(n-k) Zeiger.
  • Da bei dem hier diskutierten GCC die Anzahl der Redundanzbits von Ebene zu Ebene ansteigt, wächst der erforderliche Speicherplatz mit jeder zusätzlichen (höheren) Ebene drastisch an und somit sinkt die Platzeffizienz eines entsprechenden Decodierers entsprechend, je mehr Ebenen und Redundanzbits in dem Code verwendet werden.
  • Die Lösung gemäß dem ersten Aspekt der vorliegenden Erfindung tritt dieser wachsenden Platzineffizienz durch Verwendung des Konzepts der Supercodes entgegen, wobei ein innerer Code B(l) einer aktuellen Ebene durch eine Schnittmenge B(l) = B1 (l) ⋂ B2 (l) von zwei Supercodes B1 (l) und B2 (l) repräsentiert wird. Jeder der Supercodes weist eine geringere Anzahl von Redundanzbits als der innere Code B(l) der aktuellen Ebene und somit weniger zu speichernde Trellis-Knoten auf. Das Konzept der Supercode-Decodierung ist sehr gut zur Decodierung von GC-Codes geeignet, weil aufgrund der Konstruktion der GC-Codes, bei denen ein innerer Code einer niedrigeren Ebene stets ein Supercode jedes nachfolgenden höheren inneren Codes ist, das Konzept der Wiederverwendung bereits gespeicherter Subcodes der vorausgehenden niedrigeren Ebenen als Supercodes zur Decodierung nachfolgender höherer Ebenen eine signifikante Einsparung von Speicherplatz und somit eine erhöhte Platzeffizienz liefert. Ein numerisches Beispiel zur Demonstration dieses Speichereinspareffekts wird nachfolgend im Abschnitt ”Detaillierte Beschreibung” der Erfindung gegeben.
  • Ein zweiter Aspekt der vorliegenden Erfindung betrifft ebenso ein Softinput-Decodierungsverfahren für verallgemeinerte verkettete Codes, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes B(...), vorzugsweise binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, -Codes und L äußeren Codes – vorzugsweise Blockcodes wie etwa Reed-Solomon, RS, -Codes – konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist. Das Verfahren verwendet eine oder mehrere Decodierungsvorrichtungen, d. h. Decoder, um iterativ Ebene für Ebene von einem Datenkanal, beispielsweise von einer nichtflüchtigen Speichervorrichtung wie etwa einem Flashspeicher, empfangene Originaldaten zu decodieren.
  • Für jede Ebene weist das Verfahren die folgenden Schritte auf:
    • (i) einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene l beruhend auf den inneren Blockcodes der aktuellen Ebene l und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und
    • (ii) einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird.
  • Hierbei weist der erste Decodierungsschritt wenigstens einer der Ebenen auf: (a) sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene l, beruhend auf einem Trellis des inneren Blockcodes der aktuellen Ebene l, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren, wobei das sequenzielle Stapeldecodieren konfiguriert ist, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die durch den Trellis repräsentiert werden; und (b) Auswählen, als Ausgangsdaten des ersten Decodierungsschritts der aktuellen Ebene l: (1) eine erste Schätzung der Ausgangsdaten, die aus der sequenziellen Stapeldecodierung der Eingangsdaten der aktuellen Ebene resultiert, falls ihr gemäß einer vorbestimmten Metrik bewerteter metrischer Wert eine vorbestimmte Schwelle überschreitet oder gemäß der Metrik besser ist als der entsprechende metrische Wert einer zweiten Schätzung der Ausgangsdaten, die aus einem zweiten Durchlauf des sequenziellen Stapeldecodierens resultiert, bei dem die erste Schätzung der Ausgangsdaten ausgeschlossen ist, und (2) andernfalls die zweite Schätzung der Ausgangsdaten.
  • Das Verfahren gemäß dem zweiten Aspekt der vorliegenden Erfindung betrifft die sogenannte „Listen-Decodierung” (engl. list decoding), insbesondere die ”Liste-aus-Zwei”(engl. list-of-two)-Decodierung, wobei es sich um eine Alternative gegenüber der eindeutigen (engl. unique) Decodierung von Fehlerkorrekturcodes für hohe Fehlerraten handelt. Während die eindeutige Decodierung nur ein einziges Ergebnis, beispielsweise ein einziges Codewort, als Decodierungsergebnis liefert, besteht die Hauptidee bei der Listen-Decodierung darin, dass der Decodierungsalgorithmus anstelle eines einzigen möglichen Ergebnisses (beispielsweise Codewords) eine Liste möglicher Ergebnisse ausgibt, von denen eines korrekt oder aber zumindest eine bevorzugte Schätzung ist. Dies ermöglicht es, eine größere Anzahl von Fehlern zu behandeln als sie bei eindeutiger Decodierung erlaubt wären. Im Falle der Liste-aus-Zwei-Decodierung ist die Liste möglicher Ergebnisse auf zwei Ergebnisse begrenzt. Die spezifische Form der Liste-aus-Zwei-Decodierung, wie sie gemäß dem zweiten Aspekt der vorliegenden Erfindung verwendet wird, kann als „sequenzielle Liste-aus-Zwei-(Stapel)-Decodierung” bezeichnet werden.
  • Um einen Ausgleich zwischen Performanz und Komplexität zu ermöglichen, führt das Verfahren eine Schwelle ρ für die Metrik des geschätzten Codeworts ein, die im Vergleich zu ähnlichen eindeutigen Codierungsalgorithmen mit vergleichbarer Komplexität eine Reduktion der Restwortfehlerrate ermöglicht, und somit auch die Verwendung von höheren Coderaten bei vergleichbarer Fehlerrate erlaubt. Die Verwendung einer Kombination aus sequenzieller Stapeldecodierung von GCCs mit einer Liste-aus-Zwei-Decodierung ist durch die Tatsache motiviert, dass das Verfahren gemäß dem ersten Aspekt der Erfindung kein Maximum-Likelihood-Decodierungsverfahren ist. Folglich ist eine Suche nach weiteren Codeworten zum Auffinden von sogar noch besseren Codewordkandidaten gerechtfertigt, insbesondere bei Anwendungen, wo sehr geringe Restfehlerraten oder sehr hohe Coderaten erreicht werden müssen. Dies kann insbesondere auf die Decodierung von Daten zutreffen, die aus einem Kanal mit einem nicht flüchtigen Speicher, wie etwa einem Flashspeicher, gelesen werden, insbesondere falls ein solcher Speicher in Verbindung mit Applikationen verwendet wird, die sich auf Sicherheit im Sinne von Sicherung oder von Gefahrlosigkeit oder auf kritische Infrastruktur beziehen.
  • Gemäß einer bevorzugten Ausführungsform des Verfahrens gemäß dem zweiten Aspekt weist der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene auf, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren. Das sequenzielle Stapeldecodieren beruht auf einem ersten Trellis, der einen ersten Supercode B1 (l) des inneren Blockcodes B(l) der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B2 (l) von B(l) repräsentiert, mit B(l) = B1 (l) ⋂ B2 (l), wobei ein Supercode von B(l) ein Code ist, der sämtliche Codewörter von B(l) aufweist und die jeweilige Redundanz des ersten Supercodes B1 (l) und des zweiten Supercodes B2 (l) geringer ist als die von B(l). Der korrespondierende innere Code
    Figure DE102017110389A1_0003
    der unmittelbar vorausgehenden Ebene l – 1 wird als einer der Supercodes B1 (l) und B2 (l) wiederverwendet. Des Weiteren ist das sequentielle Stapeldecodieren konfiguriert, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
  • Auf diese Weise können die Verwendung von Supercodes zur Erhöhung der Platzeffizienz und die Verwendung von Liste-aus-Zwei-Decodierung zur Erhöhung der verfügbaren Coderate und/oder zur Reduktion der Restfehlerraten kombiniert und beide realisiert werden.
  • Nachfolgend werden bevorzugte Ausführungsformen der Verfahren gemäß dem ersten und gemäß dem zweiten Aspekt der vorliegenden Erfindung beschrieben, die beliebig miteinander oder mit weiteren Aspekten der vorliegenden Erfindung kombiniert werden können, soweit eine solche Kombination nicht explizit ausgeschlossen oder technisch unmöglich ist.
  • Gemäß einer bevorzugten Ausführung weist das Verfahren des Weiteren ein Anwenden einer Hard-Decodierung zur Decodierung der inneren Blockcodes im ersten Decodierungsschritt einer ersten Ebene des GCC auf, wobei die erste Ebene vorzugsweise die niedrigste Ebene ist, bevor sequenzielles Stapeldecodieren bezüglich einer höheren Ebene, beruhend auf einem Trellis des inneren Blockcodes der höheren Ebene und unter Verwendung von die Zuverlässigkeit des Datenkanals charakterisierenden Softinputinformationen angewandt wird. Dies erlaubt eine Reduktion der Komplexität für das Decodieren der inneren Codes der genannten ersten Ebene im Vergleich zur Softinput-Decodierung und somit kürzere Verarbeitungszeiten.
  • In einer bevorzugten Variante davon, weist der erste Decodierungsschritt für zumindest ein in den Eingangsdaten der aktuellen Ebene enthaltenes Datenwort ein Feststellen dahingehend auf, ob das aus einer Hard-Entscheidungsdecodierung des Datenworts resultierende Codeword zu einem gültigen Codeword des inneren Blockcodes B der aktuellen Ebene korrespondiert. Auf diese Weise kann Softinput-Decodierung und ihre zugehörige Verarbeitungszeit und auf Wände in solchen Fällen vermieden werden, wo die Hard-Entscheidung-Decodierung eines empfangenden Worts in den Eingangsdaten der ersten Ebene (insbesondere in den Originaldaten, falls die erste Ebene die niedrigste Ebene ist) zu einem gültigen Codeword des entsprechenden inneren Codes der genannten Ebene korrespondiert. Falls des Weiteren, wie im nachfolgenden Abschnitt „detaillierte Beschreibung” gezeigt werden wird, ein Wort in den Eingangsdaten zu einem gültigen Codewort korrespondiert, repräsentiert dieses Codewort tatsächlich die Maximum-Likelihood-Schätzung und somit ein optimales Decodierungsergebnis für den genannten inneren Blockcode.
  • Gemäß einer weiteren bevorzugten Ausführungsform ist die Metrik, die während des sequenziellen Stapeldecodierens angewandt wird, um während des Decodierens auftretende Codesequenzen zu bewerten und den Stapel anhand der aus dieser Bewertung resultierenden metrischen Werte zu sortieren, entweder die Fanometrik oder die quadratische Euklidische Entfernungsmetrik, oder eine Kombination daraus. Des Weiteren dient der Softinput, der die Zuverlässigkeit des Datenkanals charakterisiert, als eine Eingangsvariable der Metrik.
  • Die Fanometrik ist definiert, wie nachfolgend beschrieben. Sei νi das i-te Codebit und ri das i-te empfangene Symbol zur Übertragung über einen diskreten speicherlosen Kanal. Die Fanometrik für ein Codebit νi ist definiert durch:
    Figure DE102017110389A1_0004
    wobei p(rii) die Kanalübergangswahrscheinlichkeit und p(ri) die Wahrscheinlichkeit dafür, am Kanalausgang ri zu beobachten, sind. Der Term
    Figure DE102017110389A1_0005
    ist ein Eichterm, der typischerweise so gewählt wird, dass er gleich der Coderate R ist [34]. Die Fanometrik einer Codesequenz vt ist
    Figure DE102017110389A1_0006
    wobei rt die Sequenz der ersten t empfangenen Symbole ist. Es ist zu beachten, dass die Fanometrik gemäß den vorausgehenden Gleichungen nur für diskrete speicherlose Kanäle (engl. discrete memoryless channel, DMC) definiert ist. Wir betrachten den quantisierten AWGN-Kanal, wobei es sich um einen DMC handelt. Binäre Blockcodes weisen typischerweise keine Baumstruktur auf. Folglich ist die Fanometrik nicht notwendigerweise die beste Metrik für sämtliche binären Blockcodes. Beispielsweise wurde in [35] eine Metrik mit einem variablen Eichterm für lineare Blockcode vorgeschlagen. Jedenfalls insbesondere dann, wenn speziell binäre BCH-Codes als innere Blockcodes ausgewählt werden, liefert
    Figure DE102017110389A1_0007
    = R gute Ergebnisse für alle betrachteten Kanalbedingungen.
  • Die quadratische Euklidische Entfernungsmetrik ist definiert als:
    Figure DE102017110389A1_0008
    wobei der übertragene Symbolvektor x durch einen Rauschvektor n gestört wird, sodass die empfangene Sequenz, d. h. die aus dem Kanal empfangenen Originaldaten, r = x + n ist. Eine Auswahl der quadratischen Euklidischen Entfernungsmetrik als die in Verbindung mit dem hier beschriebenen Decodierungsverfahren verwendete Metrik ist insbesondere dann nützlich, wenn der Kanal als ein AWGN Kanal betrachtet werden kann.
  • Gemäß einer weiteren bevorzugten Ausführungsform ist der Blockcode der niedrigsten Ebene der inneren verschachtelten Blockcodes ein Einfachfehlerkorrekturcode, d. h. ein Code, dessen Fehlerkorrekturfähigkeit auf die Korrektur eines einzigen Fehlers in dem empfangenen zu decodierenden Datenwort begrenzt ist. Dies ermöglicht eine besonders zeit- und platzeffiziente Implementierung, weil die Gesamtanzahl von Redundanzbits, die in dem GCC für die inneren Blöcke verwendet wird, auf diese Weise minimiert werden kann, was sowohl die Verarbeitungszeit für den Decodierungsalgorithmus als auch den benötigten Speicherplatz, insbesondere für die Speicherung der involvierten Trellise, beeinflusst.
  • Gemäß einer weiteren bevorzugten Ausführungsform sind die inneren Codes verschachtelte binäre erweiterte Bose-Chaudhuri-Hocquenghem, BCH, -Codes und der erweiterte BCH-Code in der niedrigsten Ebene der inneren verschachtelten BCH-Codes ist ein bloßer Einfachparitätsprüfungs-, SPC, -Code. Des Weiteren weist der erweiterte BCH-Code wenigstens einer höheren Ebene der inneren verschachtelten BCH-Codes eine Fehlerkorrekturfähigkeit auf und ist ein Subcode des BCH-Codes der niedrigsten Verschachtelungsebene. BCH-Codes sind lineare binäre Blockcodes, die eine besonders geeignete Auswahl für die inneren Codes des genannten GCC darstellen. Während Codekonstruktionen, bei denen auch die inneren Blockcodes der niedrigsten Ebene eine Fehlerkorrekturfähigkeit aufweisen, typischerweise auf Codes mit einer Gesamtcoderate von weniger oder gleich 0,9 beschränkt sind, was für Flashspeicher, die nur einen kleinen Extraspeicherbereich zum Speichern der für die ECC benötigten Redundanz aufweisen, nicht geeignet ist, ermöglicht das Codierungsverfahren gemäß dieser Ausführungsform hochratige GC-Codes mit Coderaten oberhalb von 0,9. Dementsprechend können solche GC-Codes verwendet werden, um Daten zu codieren, die in Speichern, beispielsweise Flashspeichern, welche nur einen kleinen Extraspeicherbereich bereitstellen, zu speichern sind. Trotz der Verwendung eines bloßen SPC anstelle von höheren BCH-Codes in der niedrigsten Verschachtelungsebene können vergleichbare ECC-Fehlerkorrekturniveaus erreicht werden und somit die Effizienz (Coderate) des Codes erhöht werden. In anderen Worten, aufgrund der erhöhten Coderate kann die Effizienz solcher Speicher bezüglich ihrer Speicherkapazität für Nutzdaten verbessert werden. Weitere Varianten und Verbesserungen zu dieser Ausführungsform sind in DE 10 2017 107 431.7 der gleichen Anmelderin beschrieben, deren Offenbarung hiermit vollumfänglich per Verweis aufgenommen wird.
  • Gemäß einer weiteren bevorzugten Ausführungsform sind die aus einem Datenkanal empfangenen Originaldaten in einer zweidimensionalen Originaldaten Matrix angeordnet, die eine erste Dimension na gleich der Länge der äußeren Codes sowie eine zweite Dimension nb gleich der Länge der inneren Blockcodes aufweist, wobei eine Linie der ersten Dimension einer Matrix eine Zeile der Matrix und eine Linie ihrer zweiten Dimension eine Spalte der Matrix ist, oder andersherum. Die äußeren Codes sind über ein Galois-Feld GF(2m) definiert, sodass m Elemente jeder Linie der zweiten Dimension ein Symbol des Galois-Felds GF(2m) repräsentieren. Des Weiteren:
    • (a) eine erste Iteration, die zu der niedrigsten Ebene der inneren Blockcodes der Originaldaten Matrix korrespondiert, wobei der erste Decodierungsschritt aufweist: – Anwenden eines Decodierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die Linien der zweiten Dimension der Originaldatenmatrix bezüglich der niedrigsten Ebene der inneren verschachtelten Blockcodes, in denen die Linien einer zweiten Dimension der Originaldatenmatrix codiert sind, um eine vorläufige Decodierdatenmatrix der ersten Iteration zu erhalten und Löschinformationen zu bestimmen, welche die Linien der zweiten Dimension der Originaldatenmatrix charakterisieren, in denen beruhend auf der Decodierung der inneren Blockcodes eine Löschung detektiert wurde; – Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration enthalten sind, um Codesymbole (ai,j) der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind; und der zweite Decodierungsschritt aufweist: – Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration, um eine Teildecodierungsergebnismatrix der ersten Iteration zu erhalten, wobei die Löschinformationen während der äußeren Decodierung verwendet werden, um fehlerhafte Symbole des äußeren Codes in der vorläufigen Decodierdatenmatrix der ersten Iteration zu identifizieren; – Zurückcodieren der Teildecodierungsergebnismatrix der ersten Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der ersten Iteration zu erhalten; – Subtrahieren der zurückcodierten Matrix der ersten Iteration von der Originaldatenmatrix, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten; und
    • (b) für jede der weiteren Ebenen der inneren Blockcodes, eine entsprechende weitere Iteration, wobei der erste Decodierungsschritt jeder entsprechenden Ebene aufweist: – Anwenden eines Decodierungsschemas des inneren Blockcodes der aktuellen Ebene auf die Linien der zweiten Dimension der Startmatrix der aktuellen Iteration bezüglich der aktuellen Ebene der inneren Blockcodes, in denen die Linien einer zweiten Dimension der Startmatrix der aktuellen Iteration codiert sind, um eine vorläufige Decodierdatenmatrix der aktuellen Iteration zu erhalten; – Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration enthalten sind, um Codesymbole der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind; – Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, welche zur Erzeugung der ursprünglichen Originaldatenmatrix während des Codierens verwendet wurden, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration, um eine Teildecodierungsergebnismatrix der aktuellen Iteration zu erhalten; – falls die aktuelle Iteration zu der höchsten Verschachtelungsebene der inneren Blockcodes in der Originaldatenmatrix korrespondiert, Ausgeben der Teildecodierungsergebnismatrix der aktuellen Iteration als die decodierten Daten, und – andernfalls, Zurückcodierung der Teildecodierungsergebnismatrix der aktuellen Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der aktuellen Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der aktuellen Iteration zu erhalten, und Subtrahieren der zurückcodierten Matrix der aktuellen Iteration von der Startmatrix der aktuellen Iteration, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten.
  • Auf diese Weise kann eine besonders zeiteffiziente Implementierung der Decodierungsverfahren gemäß dem ersten und dem zweiten Aspekt erreicht werden, wobei die Matrix Darstellung verwendet wird, um eine geeignete Struktur bereitzustellen, auf der beruhend die einzelnen Verfahrensschritte des Verfahrens ausgeführt werden.
  • Gemäß einer weiteren bevorzugten Ausführungsform wird in zumindest einem, bevorzugt jedem, ersten Decodierungsschritt, der ein sequenzielles Stapeldecodieren einsetzt, das decodieren eines Datenworts aus den Eingangsdaten des inneren Codes der aktuellen Ebene beendet, wenn (i) die maximale mögliche Pfadlänge erreicht ist, wobei der Trellis Pfad mit dem besten metrischen Wert unter allen bislang im Stapel angesammelten Pfaden als das decodierte Codewort, das zu dem Datenwort korrespondiert, ausgewählt wird; oder (ii) eine vorbestimmte maximal Anzahl von Iterationen durchlaufen wurden. Während der Fall (i) zu einer regulären Vollendung des Decodierungsalgorithmus korrespondiert, kann der Fall (ii) verwendet werden, um einen fehlgeschlagenen Decodierungslauf zu beenden und somit einen Zeitverlust aufgrund eines Decodierungsfehlers vermeiden, der andernfalls die Ausführung weiterer dann zweckloser Decodierungszyklen verursachen würde.
  • Speziell werden in einer bevorzugten Variante, falls die Beendigung deshalb erfolgt, weil eine vorbestimmte maximale Anzahl von Iterationen durchlaufen wurde, die Ausgangsdaten des aktuellen ersten Decodierungsschritts als Löschsymbol für den korrespondierenden, im zweiten Decodierungsschritt der aktuellen Ebene verwendeten äußeren Code markiert. Dies ermöglicht den Einsatz sowohl von Fehler- als auch Lösch-Decodierung der äußeren Codes, wobei die Decodierfehler der inneren Codes als gelöschte Symbole des äußeren Codes, beispielsweise eines äußeren RS-Codes, betrachtet werden.
  • Ein dritter Aspekt der vorliegenden Erfindung betrifft eine Decodierungsvorrichtung, die eingerichtet ist, das Decodierungsverfahren gemäß dem ersten und/oder dem zweiten Aspekt der vorliegenden Erfindung, insbesondere einschließlich einer oder mehrerer von deren hierin beschriebenen bevorzugten Ausführungsformen, auszuführen.
  • Gemäß einer bevorzugten Ausführungsform weist die Vorrichtung eine Mehrzahl von einzelnen Speichern oder Speicherbereichen auf, vorzugsweise vom Nur-Lesen-(ROM)-Typ, auf die gleichzeitig zugegriffen werden kann, und von denen jeder konfiguriert ist, eine Datenrepräsentation eines in dem Decodierungsverfahren verwendeten Trellis zu speichern. Auf diese Weise ist ein paralleler Zugriff auf die verschiedenen Speicher bzw. Speicherbereiche ermöglicht, insbesondere zum Lesen von Daten, welche verschiedene bei der Decodierung verwendete Trellise darstellen, was eine sogar noch schnellere Verarbeitung fördert und somit verwendet werden kann, und zumindest teilweise den im Vergleich zur einfachen Hard-Decodierung und/oder zur eindeutigen Decodierung zusätzlichen Zeitaufwand für die Softinput-Decodierung und/oder die Liste-aus-Zwei-Decodierung zu kompensieren. Die Verwendung eines ROM-Speichers zum Speichern von Datenrepräsentation des Trellis ist aufgrund von dessen typischerweise sehr hoher Speicherdichte besonders vorteilhaft. Dies kann verwendet werden, um die Platzeffizienz der Decodierungsvorrichtung bzw. eines Speichersystems, das eine solche Decodierungsvorrichtung sowie damit in Beziehung stehende Speichervorrichtungen aufweist, weiter zu erhöhen.
  • Ein vierter Aspekt der vorliegenden Erfindung betrifft ein nichtflüchtiges Speichersystem, aufweisend (i) ein Speicherfeld mit einer Mehrzahl von Zellen, die konfiguriert sind, eine Mehrzahl von Datenbits und eine Mehrzahl von Paritätsbits, die aus der Mehrzahl von Datenbits gemäß einem Codierungsschema beruhend auf verallgemeinerten verketteten Codes, GCC, berechnet sind, zu speichern, wobei der GCC aus inneren verschachtelten linearen binären Blockcodes, vorzugsweise aus binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, Codes, und äußeren Codes, vorzugsweise Reed-Solomon-, RS, -Codes, konstruiert ist; und (ii) eine die Codierungsvorrichtung gemäß dem dritten Aspekt der vorliegenden Erfindung oder einer oder mehreren von deren hierin beschriebenen bevorzugten Ausführungsformen, wobei die Codierungsvorrichtung konfiguriert ist, die GCC-codierten Originaldaten von dem Speicherfeld zu empfangen und zu decodieren.
  • Schließlich betrifft ein fünfter Aspekt der vorliegenden Erfindung ein Computerprogramm oder ein Computerprogrammprodukt, welches Instruktionen enthält, die bei ihrer Ausführung auf einem oder mehreren Prozessoren einer Decodierungsvorrichtung, beispielsweise gemäß dem dritten Aspekt der Erfindung, die Decodierungsvorrichtung veranlassen, das Verfahren gemäß dem ersten und/oder dem zweiten Aspekt der vorliegenden Erfindung auszuführen, insbesondere gemäß einer oder mehrerer seiner hierin beschriebenen bevorzugten Ausführungsformen.
  • Das Computerprogrammprodukt kann insbesondere in der Form eines Datenträgers implementiert sein, auf denen ein oder mehrere Programme zur Ausführung des Verfahrens gespeichert sind. Vorzugsweise handelt es sich dabei um einen Datenträger wie etwa eine CD, eine DVD oder ein Flashspeichermodul. Dies kann vorteilhaft sein, wenn das Computerprogrammprodukt dazu vorgesehen ist, als individuelles Produkt unabhängig von der Prozessorplattform, auf der das eine bzw. die mehreren Programme auszuführen sind, vermarktet zu werden. In einer anderen Implementierung wird das Computerprogrammprodukt als eine Datei auf einer Datenverwaltungseinheit, die insbesondere ein Server sein kann, bereitgestellt und sie kann über eine Datenverbindung, beispielsweise über das Internet oder eine dedizierte Datenverbindung wie etwa ein proprietäres oder lokales Netzwerk, heruntergeladen werden.
  • Die hier im Zusammenhang mit den Verfahren gemäß dem ersten bzw. dem zweiten Aspekt der vorliegenden Erfindung beschriebenen Vorteile und Nutzen gelten mutatis mutandis auch für ihre weiteren Aspekte.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Weitere Vorteile Merkmale und Anwendungen der vorliegenden Erfindung sind in der nachfolgenden detaillierten Beschreibung und den angehängten Figuren enthalten, wobei:
  • 1 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung schematisch eine Konstruktion eines GC-Codes illustriert, beginnend mit in einer Datenmatrix angeordneten Originaldaten, die in eine korrespondierende Codewortmatrix zu codieren ist;
  • 2 schematisch eine vereinfachte Version des Codierungsschemas aus 1 in größerem Detail illustriert;
  • 3 Trellise eines Beispielcodes sowie von zwei seiner Supercodes illustriert. Trellis a) ist eine Darstellung des kompletten Codes, während die Trellise b) und c) die Darstellungen der Supercodes sind;
  • 4 einen Vergleich von Algorithmus 1 und Algorithmus 3 bezüglich der Restwortfehlerrate (WER) zeigt;
  • 5 einen Vergleich von Algorithmus 1 und Algorithmus 3 bezüglich der Anzahl von Iterationen zeigt;
  • 6 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung schematisch ein Decodierungsschema für eine Codewortmatrix illustriert, die gemäß dem Codierungsschema aus 2 erhältlich ist;
  • 7 ein Diagramm zeigt, das bei einer beispielhaften Ausführungsform für eine Wahrscheinlichkeit Pe = 10–10 für das Auftreten des Ereignisses, dass zumindest eine Ebene fehlerhaft ist, die Coderate gegenüber dem Rausch-zu Signal-Verhältnis aufträgt;
  • 8 ein Diagramm zeigt, das bei einer beispielhaften Ausführungsform für eine Wahrscheinlichkeit Pe = 10–16 für das Auftreten des Ereignisses, dass zumindest eine Ebene fehlerhaft ist, die Coderate gegenüber dem Rausch-zu Signal-Verhältnis aufträgt;
  • 9 schematisch gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung ein Speichersystem mit einer Codierungsvorrichtung, insbesondere einer Decodierungsvorrichtung, welche in einem Speichercontroller enthalten ist, illustriert;
  • 10 ein Blockdiagramm einer Decodierungsvorrichtung für sequenzielles Decodieren gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung zeigt;
  • 11 ein Blockdiagramm eines Prioritäts-Queueelements der Decodierungsvorrichtung aus 10 zeigt; und
  • 12 ein Diagramm, das die durchschnittliche Anzahl von Iterationen für die auf Algorithmus 2 beruhende Decodierung der ersten und der zweiten Ebene, gemäß einer bevorzugten Ausführung der vorliegenden Erfindung, als Funktion des Signal-zu-Rausch-Verhältnisses zeigt.
  • DETAILLIERTE BESCHREIBUNG
  • I. GC-KONSTRUKTION
  • Die hier illustrierten Codierungsverfahren beruhen auf der Verwendung von GC-Codes zur Fehlerkorrektur in Speichern, wie etwa Flashspeichern, die hochratige Codes erfordern. Die GC-Codes sind aus inneren verschachtelten binären Bose-Chaudhuri-Hocquenghem(BCH)-Codes und äußeren Reed-Solomon (RS) Codes konstruiert. Für die inneren Codes werden erweiterte BCH-Codes verwendet, wobei Einfachparitätsprüfungscodes in der ersten Ebene des GCC-Codes angewandt werden (vgl. 1 und 2). Diese Konstruktion ermöglicht hochratige GC-Codes. Eine detaillierte allgemeine Diskussion von GC-Codes findet sich in [5].
  • Nun wird auf 1 Bezug genommen, die eine Konstruktion eines GC-Codes beginnend mit Originaldaten, die in einer Datenmatrix angeordnet sind, welche in eine korrespondierende Codewortmatrix zu codieren ist, illustriert, d. h. einen Codierungsprozess der zu einem GC-Code führt, der geeignet ist durch die Decodierungsverfahren und -vorrichtungen gemäß der vorliegenden Erfindung decodiert zu werden. Die Originaldaten sind in einer nb×na Matrix angeordnet, wobei na und nb die Längen des äußeren bzw. des inneren Codes sind. Die Codierung beginnt mit den äußeren Codes. Die Zeilen sind durch L äußere Codes, beispielsweise Reed-Solomon Codes, der Länge na geschützt, d. h. L bezeichnet die Anzahl der Ebenen. m Elemente jeder Spalte repräsentieren ein Symbol des Galois-Felds GF(2m). Dementsprechend bilden m benachbarte Zeilen ein Codewort eines äußeren Codes A(i), i = 0, ..., L – 1. Es ist zu vermerken, dass die Coderate der äußeren Codes von Ebene zu Ebene ansteigt. Die äußeren Codes schützen Lm Zeilen der Matrix. Die verbleibenden nb – Lm Zeilen werden für die Redundanz der inneren Codes verwendet.
  • Die schraffierte Fläche in 1 illustriert die Redundanzen der Codekomponenten, die durch die äußere und innere Codierung befüllt werden. Nach der äußeren Codierung werden die Spalten der Codewortmatrix mit den binären inneren Codes der Länge nb codiert. Jede Spalte der Codewortmatrix ist die Summe von L Codeworten der verschachtelten linearen BCH-Codes. B(L-1) ⊆ B(L-2) ⊆ ... ⊆ B(0) (1)
  • Somit ist ein Code einer höheren Ebene ein Subcode seines Vorgängers, wobei die höheren Ebenen höhere Fehlerkorrekturfähigkeiten aufweisen, d. h. tb,L-1 ≥ tb,L-2 ≥ ... ≥ tb,0, wobei tb,i die Fehlerkorrekturfähigkeit der Ebene i ist. Die Codedimensionen sind k(0) = Lm, k(1) = (L – 1)m, ..., k(L-1) = m. Das Codewort bj der j-ten Spalte ist die Summe von L Codeworten.
  • Figure DE102017110389A1_0009
  • Diese Codeworte bj (i) werden durch Codierung der Symbole aj,i mit dem korrespondierenden Subcode B(i) gebildet, wobei aj,i das j-te Symbol (m Bits) des äußeren Codes A(i) ist. Für diese Codierung werden dem Symbol aj,i (L – i – 1)m Null-Bits vorangestellt. Es ist zu vermerken, dass die j-te Spalte bj wegen der Linearität der verschachtelten Codes ein Codewort von B(0) ist.
  • 2 illustriert dieses Codierungsschema in größerem Detail, beruhend auf einem einfachen beispielhaften Fall (Beispiel 0), bei dem L = 2, m = 3 und na = nb = 7 gewählt ist. Demnach gibt es in diesem Beispiel nur L = 2 Ebenen und mit m1 = m = 3 Bits pro Symbol sind die äußeren Codes, die für dieses Beispiel als RS-Codes gewählt sind, über dem Galois-Feld GF(23) konstruiert, während zum Zwecke der Vereinfachung die inneren Blockcodes, die für diese Beispiel als erweiterten BCH-Codes ausgewählt sind, über GF(23) definiert sind, d. h. m2 = 3. In einem ersten Schritt S1 wird eine Datenstruktur, welche eine nb×na Matrix (hier 7×7 Matrix) D repräsentiert, mit zu codierenden Daten befällt, welche aus 24 Informationsbits i0 bis i23 bestehen. Das Befüllungsschema korrespondiert zu demjenigen der Datenmatrix D in 2. Dementsprechend ist in der ersten Ebene (i = 0) die Anzahl der Informationsbits geringer als in der zweiten Ebene (i = 1) und die verbleibenden vorangestellten Bits beider Ebenen werden für die Redundanz reserviert, die in einem nachfolgenden Schritt S2 mittels der äußeren Codierung hinzugefügt wird.
  • Jedes Symbol weist drei benachbarte Bits derselben Spalte auf, sodass beispielsweise in der fünften Spalte von D die Bits i0, i3 und i6 ein erstes Symbol der Spalte bilden und die Bits i11, i16 i21 ein anderes Symbol bilden. Zusätzlich wird die letzte Zeile der Matrix D für Redundanz reserviert, die mittels der inneren Codierung in einem weiteren Schritt S3 hinzugefügt wird.
  • In dem Schritt S2 zur äußeren Codierung wird die Information in jeder der beiden Ebenen i = 0 und i = 1 mittels eines entsprechenden RS-Codes codiert, wobei die Codedimension des äußeren RS-Codes für die Ebene 0 nur ka (0) = 3 beträgt, während die Code Dimension der Ebene 1 auf ka (1) = 5 erhöht ist. Die Ausführung der äußeren Codierung im Schritt S2 resultiert in einer Zwischenmatrix A, welche die Codesymbole ai,j aufweist, wobei jedes dieser Symbole ai,j m1 = 3 Bits aufweist und die Zeilen der Matrix A Codewörter des äußeren Codes darstellen.
  • Bei dem Schritt S3 zur inneren Codierung wird jedes der Symbole ai,j der Zwischenmatrix A individuell mittels eines korrespondierenden inneren Codes in Form eines erweiterten BCH-Codes codiert. In der ersten Ebene i = 0 kann der entsprechende erweiterte BCH-Code B(0) insbesondere, wie in diesem Beispiel, auch ein bloßer Einfachparitätsprüfungs-(SPC)Code sein. Dementsprechend wird, wie in 2 für das Symbol a4,0 beispielhaft illustriert, jedes Symbol a0,j der Ebene 0 (j = 0, ..., 6) durch Voranstellen von (L – i – 1)·m1, d. h. (2 – 0 – 1)·3 = 3 Null-Bits (d. h. „0” Symbole) vor das Symbol und Anwenden eines SPC-Codes auf die zwei Symbole codiert, der in der letzten Zeile der Spalte hinzu addiert wird, die ein resultierendes Codewort bj (0) für die Spalte j und die Ebene 0 repräsentiert.
  • In der zweiten Ebene i = 1 wird der entsprechende erweiterte BCH-Code B(1), der anders als der SPC-Code eine Fehlerkorrekturfähigkeit von 1 Bit aufweist, in jeder Spalte der Matrix A auf das entsprechende Symbol aj,1 angewandt. Da dies in diesem einfachen Beispiel bereits die letzte Ebene ist, ist ein Voranstellen von „0”-Symbolen nicht erforderlich. Wiederum wird ein SPC-Code auf das resultierende BCH-Codeword angewendet und in der letzten Zeile der entsprechenden Spalte j hinzugefügt.
  • Um die abschließende GC-Codewortmatrix C zu erhalten, werden Spalte für Spalte sämtliche der individuellen Codeworte bj (i) aller Ebenen die der Spalte j gemäß der vorstehenden Formel (2) addiert, um das korrespondierende Codewort bj zu erhalten, das dann die Spalte j der sich ergebenden GC-Codewortmatrix C darstellt, wie nochmals beispielhaft in 2 für die Spalte j = 4 illustriert.
  • In einem weiteren Beispiel (Beispiel 1), das zu 1 korrespondiert, betrachten wir einen GC-Code, der zur Fehlerkorrektur bei Flashspeichern geeignet ist. Der GC-Code ist für 2 KB-Informationsblöcke entworfen, d. h. es ist ein Code, der verwendet werden kann, um 2 KB an Daten und zusätzlich Metainformationen zu speichern. Für diesen GC-Code nutzen wir L = 6 Ebenen mit inneren verschachtelten BCH-Codes über GF(26), d. h. m2 = 6, sowie äußere RS-Codes über GF(29) (d. h. m1 = 9). In der ersten Ebene i = 0 kann der innere Code einen einzigen Fehler korrigieren und daher sind sechs Redundanzbits erforderlich. Somit ist die Anzahl der Zeilen nb = 6·9 + 6 = 60. Alle inneren Codes sind binäre BCH-Codes der Länge nb = 60, wobei der Code B(0) eine Dimension kb,0 = 54 und eine Minimaldistanz db,0 = 3 aufweist. Die äußeren RS-Codes sind über dem Galois-Feld GF(29) konstruiert. Somit wird die Codedimension der inneren Codes von Ebene zu Ebene um m1 = 9 Bits reduziert. Der GC-Code wird aus L = 6 äußeren RS-Codes der Länge na = 343 konstruiert. Die Parameter des Codes sind in Tabelle I zusammengefasst. Der Code hat insgesamt die Codedimension
    Figure DE102017110389A1_0010
    und die Länge n = na·nb = 20580. Der Code weist eine Coderate R = 0,806 auf. Das Design dieses Codes wird weiter unten erläutert.
    j kb,j db,j ka,j da,j
    0 54 3 187 157
    1 45 5 321 23
    2 36 9 333 11
    3 27 11 331 13
    4 18 15 335 9
    5 9 17 337 7
    TABELLE I
  • Parameter des Codes aus Beispiel 1. kb,j und db,j sind die Codedimension bzw. die minimale Hammingdistanz des binären Codes der Ebene j. ka,j und da,j sind die Codedimension bzw. die minimale Hammingdistanz der äußeren RS-Codes.
  • Dieser Code ist auch in der Lage, Burstfehler zu korrigieren. Die minimale Distanz aller äußeren RS-Codes ist größer oder gleich fünf. Folglich kann jeder der äußeren Codes wenigstens zwei fehlerhafte Symbole korrigieren, und somit können zwei Spalten der Codewortmatrix durch eine beliebige Anzahl von Fehlern korrumpiert sein.
  • II. SEQUENZIELLE STAPELDECODIERUNG
  • Der GC-Decodierer verarbeitet Ebene für Ebene, wobei zuerst die inneren Codes und nachfolgend die äußeren Codes decodiert werden. Um ein Softinput-Decodierung des gesamten GC-Codes zu ermöglichen, ist ein Softinput-Decodierungsalgorithmus für die inneren Codes erforderlich. Dieser Abschnitt beschreibt Prozeduren zum sequenziellen Decodieren unter Verwendung des Stapelalgorithmus für Blockcodes. Diese Decodierungsverfahren werden verwendet, um die binären inneren Codes zu decodieren.
  • A. Sequenzielles Stapeldecodieren unter Verwendung eines einzigen Trellis
  • Zuerst wird ein sequenzielles Stapeldecodierungsverfahren unter Verwendung eines einzigen Trellis, wie in [15] dargestellt, in größerem Detail und unter Bezugnahme auf den nachfolgend dargestellten Algorithmus 1 erläutert, um einen Startpunkt für die vorläufige liegende Erfindung besser zu illustrieren. Sämtliche Decodierungsverfahren gemäß der vorliegenden Erfindung beruhen auf diesem Decodierungsverfahren, welches einen Trellis, wie vorausgehend definiert, verwendet, um den Code zu repräsentieren. Gemäß der vorliegenden Erfindung bereitgestellte Verbesserungen dieses Decodierungsalgorithmus werden in den nachfolgenden Abschnitten diskutiert.
  • Das in [15] dargestellte sequenzielle Decodierungsverfahren ist ein Stapelalgorithmus, d. h. zum Speichern von Zwischenergebnissen ist ein Stapel erforderlich. Der Stapel enthält Codesequenzen verschiedener Längen. Sei vt eine Codesequenz der Länge t, d. h. vt = ..., νt. Jede Codesequenz ist mit einer Metrik und einem Knoten σt assoziiert. Der Knoten σt ist derjenige Knoten in dem Trellis, der erreicht wird, wenn man dem Pfad folgt, der zu der Codesequenz durch den Trellis korrespondiert. Die Metrik bewertet jede Codesequenz und der Stapel wird gemäß diesen metrischen Werten geordnet, wobei die Codesequenz an der Spitze des Stapels diejenige mit dem größten metrischen Wert ist.
  • Die Fanometrik ist definiert, wie nachfolgend beschrieben. Sei νi das i-te Codebit und ri das i-te empfangene Symbol zur Übertragung über einen diskreten speicherlosen Kanal. Die Fanometrik für ein Codebit νi ist definiert durch:
    Figure DE102017110389A1_0011
    wobei p(rii) die Kanalübergangswahrscheinlichkeit und p(ri) die Wahrscheinlichkeit dafür, am Kanalausgang ri zu beobachten, sind. Der Term
    Figure DE102017110389A1_0012
    ist ein Eichterm, der typischerweise so gewählt wird, dass er gleich der Coderate R ist [34]. Die Fanometrik einer Codeseuenz vt ist
    Figure DE102017110389A1_0013
    wobei rt die Sequenz der ersten t empfangenen Symbole ist. Es ist zu beachten, dass die Fanometrik gemäß den vorausgehenden Gleichungen nur für diskrete speicherlose Kanäle (DMC) definiert ist. Wir betrachten den quantisierten AWGN-Kanal, wobei es sich um einen DMC handelt. Binäre Blockcodes weisen typischerweise keine Baumstruktur auf. Folglich ist die Fanometrik nicht notwendigerweise die beste Metrik für sämtliche linearen Blockcodes. Jedenfalls insbesondere dann, wenn speziell binäre BCH-Codes als innere Blockcodes ausgewählt werden, liefert
    Figure DE102017110389A1_0014
    = R gute Ergebnisse für alle betrachteten Kanalbedingungen.
  • Algorithmus 1 wird in dem nachfolgenden Beispiel (Beispiel 2) demonstriert, wobei zum Zwecke der Vereinfachung eine Übertragung über einen binären symmetrischen Kanal (BSC) angenommen wird:
    Man betrachte beispielsweise den Code B = {(0000), (1110), (1011), (0101)} mit der Paritätsrüfmatrix
    Figure DE102017110389A1_0015
  • Der korrespondierende Trellis ist in 3A graphisch dargestellt. Es wird eine Übertragung über einen binären symmetrischen Kanal mit einer Fehlerwahrscheinlichkeit von 0,1 angenommen. Somit sind die Ergebnisse für die Fanometrik wie folgt:
    Figure DE102017110389A1_0016
  • Algorithmus 1 kann in Pseudocode-Form wie folgt beschrieben werden: Algorithm 1: Sequentielles Stapeldecodieren unter Verwendung eines einzigen Trellis
    Figure DE102017110389A1_0017
    Figure DE102017110389A1_0018
  • Die nachfolgende Tabelle repräsentiert den Stapel für die empfangenen Sequenz r = (0010) für die vier Iterationen, die zur Berechnung des geschätzten Codeworts v ^ benötigt werden:
    1 Iteration 2. Iteration 3. Iteration 4. Iteration
    vt M(rt|vt) vt M(rt|vt) vt M(rt|vt) vt M(rt|vt)
    0 0.3 00 0.6 000 –2.2 0000 –1.9
    1 –2.8 01 –2.5 01 –2.5 01 –2.5
    1 –2.8 1 –2.8 1 –2.8
  • Dementsprechend wird nach der vierten und letzten Iteration das oberste Wort als das geschätzte Codewort v ^ = 0000 ausgegeben. Ein negativer Wert zeigt an, dass das empfangene Wort fehlerhaft war. Ein positiver Wert zeigt an, dass das empfangene Wort fehlerfrei ist. Mehr Fehler in dem empfangenen Wort führen zu einem größeren negativen Wert, der eine geringe Zuverlässigkeit des geschätzten Codeworts anzeigt. Diese Anzeige kann dann im Rahmen der nachfolgenden Decodierung der äußeren Codes genutzt werden, um den bzw. die verbleibenden Fehler zu korrigieren.
  • B. Supercode-Decodierung für verschachtelte BCH-Codes
  • Dieser Abschnitt beginnt mit einer Beschreibung des Supercode-Decodierungsverfahrens gemäß bevorzugter Ausführungsformen, gefolgt von einer Diskussion der vorgeschlagenen Anwendung von Supercode-Decodierung für die in dem GC-Code verwendeten verschachtelten BCH-Codes.
  • Ein Supercode ist eine Obermenge B1 des ursprünglichen Codes B ⊂ B1. Um den ursprünglichen Code B zu decodieren, müssen zwei Supercodes B1 und B2 so konstruiert werden, dass B1 ⋂ B2 = B. Die Supercodes haben weniger Redundanzbits und somit weniger Trellis-Zustände. Die Supercodes können so konstruiert werden, dass jeder Code die Hälfte der ursprünglichen Redundanzbits aufweist. Dies reduziert die Anzahl der Zustände von O(2p) auf O(2p/2) gemäß der Standardnotation für Ordnung, wobei p die Anzahl der Paritätsbits ist. Das Konzept der Supercode-Decodierung ist gut zur Decodierung von GC-Codes geeignet, weil die höheren Ebene der verschachtelten BCH-Codes Supercodes der niedrigeren Ebenen sind (vgl. Gleichung (1)).
  • Ein Supercode Bi des Blockcodes B ist ein Code, der sämtliche Codewörter von B enthält. Für einen linearen Code B mit einer Paritätsprüfmatrix H kann man zwei Supercodes B1 und B2 so konstruieren, dass B = B1 ⋂ B2 gilt.
  • Sei
    Figure DE102017110389A1_0019
    die Paritätsprüfmatrix des Codes B. Das bedeutet, dass H1 und H2 zwei Untermatrizen H sind. Die Untermatrizen H1 und H2 definieren dann die Supercodes B1 bzw. B2.
  • Beispiel 3: Man betrachte beispielsweise den Code B aus Beispiel 2.
  • Man erhält
    H1 = (1 1 0 1) ⇒ B1 = {(0000), (1100), (1110), (0010), (1011), (1001), (1011), (0101)} und
    H2 = (0 1 1 1) ⇒ B2 = {(0000), (1000), (0110), (1110), (1011), (1101), (0011), (0101)},
    wobei die unterstrichenen Vektoren die Codeworte des Codes B sind. Die korrespondierenden Supercode-Trellise sind in 3(b) bzw. 3(c) grafisch dargestellt.
  • Als nächstes wird der vorgeschlagene sequenzielle Decodierungsalgorithmus erläutert. Jeder in dem Stapel gespeicherte Pfad ist mit einem metrischen Wert sowie mit zwei Zuständen (σt,1 und σt,2, welche die Zustände in dem Trellis für den Supercode B1 bzw. B2 sind, assoziiert. In dem nachfolgenden Beispiel wird der Algorithmus 2 zum Decodieren erläutert, wobei die gleiche Situation wie in Beispiel 2 betrachtet wird. Algorithmus 2 kann in Pseudocode-Form wie folgt beschrieben werden: Algorithmus 2: Sequentielles Stapeldecodieren unter Verwendung von Supercode Trellisen
    Figure DE102017110389A1_0020
  • Beispiel 4: Die nachfolgende Tabelle repräsentiert den Stapel für die empfangene Sequenz r = (0010) für Algorithmus 2 für die fünf Iterationen, die zur Berechnung des geschätzten Codeworts v ^ benötigt werden:
    1. Iteration 2. Iteration 3. Iteration 4. Iteration 5. Iteration
    vt M(rt|vt) vt M(rt|vt) vt M(rt|vt) vt M(rt|vt) vt M(rt|vt)
    0 0.3 00 0.6 001 0.9 000 –2.2 0000 –1.9
    1 –2.8 01 –2.5 000 –2.2 01 –2.5 01 –2.5
    1 –2.8 01 –2.5 1 –2.8 1 –2.8
    1 –2.8
  • Dementsprechend wird das nach der fünften und letzten Iteration oberste Wort als das geschätzte Codewort v ^ = 0000 ausgegeben. Ein negativer Wert zeigt an, dass das empfangene Wort fehlerhaft war. Ein positiver Wert zeigt an, dass das empfangene Wort fehlerfrei ist. Mehr Fehler in dem empfangenen Wort führen zu einem betragsmäßig größeren negativen Wert, der eine geringe Zuverlässigkeit des geschätzten Codeworts anzeigt. Diese Anzeige kann dann im Rahmen der nachfolgenden Decodierung der äußeren Codes genutzt werden, um den bzw. die verbleibenden Fehler zu korrigieren. Es ist anzumerken, dass der Stapel in der dritten Iteration von Beispiel 2 abweicht, weil die Codesequenz 001 in beiden Supercode-Trellisen aber nicht in dem tatsächlichen Code existiert. Diese Codesequenz wird in der nächsten Iteration gelöscht, da sie nicht in beiden Supercode-Trellisen fortgeführt werden kann.
  • Wie das vorausgehende Beispiel demonstriert, kann die Zeitkomplexität des vorgeschlagenen Algorithmus größer sein als bei Algorithmus 1. Dies ergibt sich aufgrund von Codesequenzen, die in den Supercodes existieren, aber nicht in dem tatsächlichen Code gültig sind. Nichtsdestotrotz resultieren beide Algorithmen in demselben Codewort:
    Theorem 1: Algorithmus 1 und Algorithmus 2 resultieren in demselben geschätzten Codewort.
  • Beweis: beide Algorithmen unterscheiden sich nur bezüglich der Repräsentation des Codes. Um die These zu prüfen, reicht es aus zu zeigen, dass beide Repräsentationen äquivalent sind. Zunächst wird durch Induktion gezeigt, dass das geschätzte Codewort in beiden Supercode-Trellisen zu einem gültigen Pfad korrespondiert, d. h., dass es ein Codewort beider Supercodes ist. Der Ausgangsfall ist der initiale Schritt, bei dem die Codebits 0 und 1 in den Stapel eingefügt werden. Es ist anzumerken, dass ein linearer Code keine Codebit-Positionen mit konstanten Werten aufweist. Daher existieren die Übergänge ν1 = 0 und ν1 = 1 in beiden Supercode-Trellisen. Für den Induktionsschritt nimmt man an, dass ein Pfad für die Codesequenz vt in beiden Supercode-Trellisen existiert. Es folgt aus Algorithmus 2, dass dieser Pfad nur erweitert wird, wenn der erweiterte Pfad in beiden Supercode-Trellisen existiert. Dies beweist die Behauptung, dass das geschätzte Codewort zu einem gültigen Pfad in beiden Supercode-Trellisen korrespondiert. Es ist nun anzumerken, dass B = B1 ⋂ B2, d. h. ein Pfad ist dann und nur dann in beiden Supercode-Trellisen gültig, wenn er ein gültiges Codewort des Codes B ist. Algorithmus 2 reduziert die Platzkomplexität, die zur Repräsentation des Codes erforderlich ist. Dies wird im folgenden Beispiel demonstriert.
  • Beispiel 5: Man betrachte drei BCH-Codes aus Tabelle I. Alle Codes haben eine Länge n = 60. In der ersten Ebene verwenden wir einen Code, der nur einfache Fehler korrigiert. Dieser Code hat 3.262 Knoten in dem Trellis. Dieser Code ist ein Supercode des BCH-Codes der zweiten Ebene. Der Trellis der zweiten Ebene hat 159.742 Knoten. Wenn man allerdings den Trellis des Codes der ersten Ebene verwendet, benötigt man nur einen einzigen zusätzlichen Supercode Trellis mit 2.884 Knoten, um den Code auf der zweiten Ebene zu repräsentieren. Schließlich hat der Code auf der dritten Ebene einen Trellis mit 7.079.886 Knoten. Unter Verwendung von Supercode-Decodierung, werden die Trellise der ersten und der zweiten Ebene verwendet und nur ein zusätzlicher Supercode-Trellis mit 2.410 Knoten ist erforderlich, um den dritten Code zu repräsentieren. Beim sequenziellen Decodieren hängt die Anzahl der besuchten Knoten in dem Trellis (die Anzahl der Iterationen) von der Anzahl von Übertragungsfehlern ab. Es ist anzumerken, dass mit den vorgestellten Codes die Zeitkomplexität für Algorithmus 2 höchstens 1,75-mal größer ist, als für Algorithmus 1.
  • C. Selektives Softinput-Decodieren und Liste-aus-Zwei-Decodierung
  • Als nächstes werden zwei Techniken zur Verbesserung der Performanz und der Komplexität von Algorithmus 1 beschrieben, beginnend mit einer Erläuterung dafür, dass das Softinput-Decodieren in solchen Fällen ausgelassen werden kann, wo die harte Entscheidung (engl. hard decoding) bezüglich des empfangenen Vektors zu einem gültigen Codewort korrespondiert (selektive Softinput-Decodierung, siehe entsprechenden Unterabschnitt). Danach wird der vorgeschlagene sequenziellen Liste-von-Zwei-Decodierungsalgorithmus beschrieben. Liste-aus-Zwei-Decodierung ist durch die Tatsache motiviert, dass Algorithmus 1 kein Maximum-Likelihood-Decodierungsverfahren darstellt. Daher kann man nach weiteren Codewörtern suchen, um bessere Kandidaten als das Ergebnis von Algorithmus 1 zu finden.
    • (a) Selektive Softinput-Decodierung: im Folgenden wird ein Kanal mit additivem weißen Gaußschem Rauschen bei binärer Phasenmodulation betrachtet. Man nehme an, dass ein binäres Codesymbol νt ∊
      Figure DE102017110389A1_0021
      auf das Übertragungssymbol xt ∊ {+1, –1) durch xt = 1 – 2νt abgebildet wird. Der übertragene Symbolvektor x wird durch einen Rauschvektor n gestört, sodass die empfangene Sequenz r = x + n ist. Der Rauschvektor n ist ein Vektor aus unabhängigen, identisch verteilten Gaußschen Zufallsvariablen mit einem Mittelwert von Null. Somit gilt:
      Figure DE102017110389A1_0022
      wobei σ2 für die Varianz der Gaußschen Verteilung steht. Für diesen Kanal ist es allgemein üblich, die quadratische euklidische Distanz
      Figure DE102017110389A1_0023
      als Metrik zuverwenden weil
      Figure DE102017110389A1_0024
  • Allerdings gilt
  • Figure DE102017110389A1_0025
  • Sei r ~t = sgn(rt) die Bezeichnung für das Vorzeichen, d. h. die harte Entscheidung (engl. hard decision) bezüglich rt. Unter Verwendung von
    Figure DE102017110389A1_0026
    erhält man
  • Figure DE102017110389A1_0027
  • Es ist anzumerken, dass
    Figure DE102017110389A1_0028
    der einzige Term in (9) ist, der von x abhängt. Folglich kann man anstelle der quadratischen euklidischen Distanz auch
    Figure DE102017110389A1_0029
    minimieren. Dazu sei bemerkt, dass
    Figure DE102017110389A1_0030
    falls der Vektor r ~ = (r ~1, ...,r ~n) zu einem gültigen Codewort korrespondiert. Folglich gibt in diesem Fall r ~ die Maximum-Likelihood-Schätzung an.
    • (b) Nun betrachten wir die Liste-aus-Zwei-Decodierung. Um einen Ausgleich zwischen Performanz und Komplexität zu ermöglichen, führen wir eine Schwelle ρ für die Metrik des geschätzten Codeworts ein, wie beispielhaft im nachfolgenden Algorithmus 3 beschrieben. Algorithmus 3: Sequentielle Liste-aus-Zwei-Decodierung.
      Figure DE102017110389A1_0031
  • In Algorithmus 3, wird Algorithmus 1 angewandt, um die inneren Codes auf der ersten Ebene zu decodieren, d. h. die Codewörter des Codes B(0), während Algorithmus 2 für die niedrigeren Ebenen verwendet wird. 4 stellt die Performanz von Algorithmus 1 und Algorithmus 3 bezüglich der Restwortfehlerrate (engl. Word Error Rate, WER) für eine Übertragung über den AWGN-Kanal dar. Der Code ist ein einzelfehlerkorrigierender binärer BCH-Code der Länge n = 60. Dieser Code wird später in der ersten Ebene des GC-Codes als innerer Code verwendet. Die Decodierungsperformanz und die Anzahl der Decodierungsiterationen hängen von der Schwelle ρ ab.
  • 5 stellt einen Vergleich bezüglich der Anzahl von Iterationen dar, wobei zwei verschiedene, als ρ1 bzw. ρ2 bezeichnete Schwellenwerte verwendet wurden. Die Werte von ρ2 wurden mittels einer Computersuche erhalten, um die Wortfehlerrate für ein gegebenes Signal-zu-Rausch-Verhältnis zu minimieren. Die Werte von ρ1 wurden im Hinblick darauf gewählt, zu demonstrieren, dass Algorithmus 3 die Wortfehlerrate im Vergleich zu Algorithmus 1 bei vergleichbarer Komplexität reduzieren kann.
  • III. GC-DECODIERUNG UND DECODIERFEHLERWAHRSCHEINLICHKEIT
  • Der Decodierer verarbeitet Ebene für Ebene, beginnend mit i = 0, wozu er von einem Kanal, wie etwa einer Flashspeichervorrichtung, empfangene Originaldaten als Input nimmt, wobei die Originaldaten in einer Datenmatrix angeordnet sind, die wie in 1 illustriert strukturiert ist.
  • 6 stellt die Decodierungsschritte bildlich dar. Sei i der Index der aktuellen Ebene. Zunächst werden die Spalten der Matrix bezüglich B(i) decodiert und die Informationsbits müssen entnommen (rückabgebildet) werden, um die Codesymbole ai,j von A(i) zu entnehmen, wobei j der Spaltenindex ist. Wenn alle Symbole des Codes A(i) entnommen sind, kann der äußere Code (z. B. RS-Code) decodiert werden. An diesem Punkt ist ein Teildecodierungsergebnis a ^i verfügbar. Schließlich muss dieses Ergebnis unter Verwendung von B(i) zurückcodiert werden. Die geschätzten Codeworte des inneren Codes B(i) werden von der Matrix subtrahiert, bevor die nächste Ebene decodiert werden kann.
  • Der detaillierte Codierungs- und Hardinput-Decodierungsprozess ist in [36] beschrieben. In der ersten Ebene i = 0 wird die Softinput-Decodierung gemäß Algorithmus 1 verwendet. Beginnend mit der zweiten Ebene, können die Struktur der verschachtelten BCH-Codes ausgenutzt und Algorithmus 2 verwendet werden, wobei der Code in der Ebene i – 1 als Supercode des Codes der Ebene i verwendet werden kann. Zur Implementierung kann die Anzahl der Decodierungsiterationen für jeden inneren Code limitiert werden. Falls die Anzahl der Iterationen eine Schwelle überschreitet, wird ein Decodierungsfehler erklärt. Für die äußeren (z. B. RS) Codes wird Fehler- und Löschdecodierung angewandt [37], wobei die Decodierungsfehler der inneren Codes als gelöschte Symbole des äußeren (z. B. RS) Codes betrachtet werden.
  • A. Wahrscheinlichkeit eines Decodierungsfehlers
  • Im Folgenden wird eine Analyse der Wahrscheinlichkeit eines Decodierungsfehlers bei dem GC-Decodierer vorgestellt, gefolgt von einem Beispiel, das die Performanz des vorgeschlagenen Decodierungsverfahrens illustriert.
  • Die Performanz der Softinput-Decodierung der inneren Codes kann unter Verwendung einer Monte Carlo-Simulation bestimmt werden. Sei Pb,j die Fehlerwahrscheinlichkeit für die Decodierung des inneren Codes B(j). Des Weiteren sei Pe,j die korrespondierende Wahrscheinlichkeit für ein Versagen des Decoders. Die Wahrscheinlichkeit eines Decodierungsfehlers hängt mit dem Mehrfachstufen-Decodierungsalgorithmus zusammen.
  • Sei Tj = na – ka,j die Anzahl der Redundanzsymbole für den äußeren RS-Code A(j) in der j-ten Ebene. Die Wahrscheinlichkeit Pa,j für das Auftreten eines Decodierungsfehlers beim Fehler- und Löschdecodieren in der j-ten Ebene kann wie folgt berechnet werden [37]:
    Figure DE102017110389A1_0032
    wobei Pq die Wahrscheinlichkeit für q Löschungen ist.
  • Figure DE102017110389A1_0033
  • Unter Verwendung der Vereinigungsgrenze, kann die Blockfehlerrate PGC für den GC-code, d. h. die Wahrscheinlichkeit für das Ereignis, dass zumindest eine Ebene fehlerhaft ist, geschätzt werden
    Figure DE102017110389A1_0034
  • Beispiel 6: Betrachtet wird der Code aus Beispiel 1. Dieser Code hat eine Coderate R = 0,806 und wurde entworfen, um Pe ≤ 10–16 für EB/N0 ≥ 4,7 dB gemäß (12) zu garantieren, wobei Softinput-Decodierung in den ersten drei Ebenen und Hardinput-Decodierung in den verbleibenden Ebenen verwendet wird.
  • B. Vergleich der Fehlerkorrektur-Performanz
  • Es wird die Fehlerkorrekturperformanz des GC-Codes in verschiedenen Decodierungsmodi mit der Performanz von langen BCH-Codes mit Hardinput-Decodierung verglichen. Als Performanzmaß wird diejenige Coderate verwendet, die erforderlich ist, um für ein vorgegebenes Signal-zu-Rausch-Verhältnis eine Gesamtwortfehlerrate von weniger als 10–10 bzw. 10–16 zu garantieren. Sämtliche Codes sind ähnlich dem in Beispiel 1 präsentierten Code konstruiert. Insbesondere sind die inneren Codes gemäß Tabelle I gewählt, während die Fehlerkorrekturfähigkeit der äußeren Codes angepasst ist, um die höchstmögliche Coderate für eingegebene Signal-zu-Rausch-Verhältnis zu erhalten. Es ist anzumerken, dass in diesem Beispiel die gesamte Coderate des GC-Codes aufgrund der Wahl der inneren Codes höchstens R = 0,9 beträgt.
  • 7 stellt die Coderate gegenüber dem Signalrauschverhältnis für Pe = 10–10 dar, während die Ergebnisse für Pe = 10–16 in 8 dargestellt sind. Der GC-Code mit Softinput-Decodierung ist dem GC-Code mit Hardinput-Decodierung für sämtliche Fehlerwahrscheinlichkeiten und dem BCH-Code für Coderaten unterhalb von 0,88 überlegen. Die Softinput-Decodierung wurde mit einer 3-Bit-Quantisierung simuliert. Die drei Kurven mit Softinput-Decodierung verwenden verschiedene Decodierungsstrategien, wobei die Softinput-Decodierung nur auf der ersten Ebene bzw. auf der ersten und der zweiten Ebene bzw. auf den Ebenen 0 bis 2 eingesetzt wird. Die Softinput-Decodierung verbessert die Performanz um bis zu 1,3 dB. Beispielsweise erreicht der GC-Code mit einer Coderate R = 0,8 eine Blockfehlerrate von weniger als 10–16 bei einem Signal-zu-Rausch-Verhältnis von Eb/N0 ≥ 4,6 dB, was nur ein dB von der Kanalkapazität des quantisierten AWGN-Kanals entfernt liegt. Für Pe = 10–10 ist die Coderate R = 0,8 für ein Signal-zu-Rausch-Verhältnis (SNR) von Eb/N0 ≥ 4,6 dB ausreichend. Es ist anzumerken, dass die Softinput-Decodierung der ersten und zweiten Ebene für sämtliche SNR-Werte oberhalb von Eb/N0 = 5,5 dB ausreichend ist.
  • IV. SPEICHERSYSTEM UND ARCHITEKTUR DER DECODIERUNGSVORRICHTUNG
  • Dieser Abschnitt beschreibt ein beispielhaftes Speichersystem, das eine Decodierungsvorrichtung aufweist, die eingerichtet ist, wenigstens eines der vorausgehend in den Abschnitten II.B und II.C beschriebenen Decodierungsverfahren auszuführen, sowie eine diesbezügliche Decoderarchitektur für einen GC-Softinput-Decodierer wie er in dem genannten Speichersystem verwendet wird.
  • 9 zeigt ein beispielhaftes Speichersystem 1, aufweisend einen Speichercontroller 2 und eine Speichervorrichtung 3, die insbesondere eine Flashspeichervorrichtung sein kann, beispielsweise vom NAND-Typ. Das Speichersystem 1 ist über einen Satz von Adressleitungen A1, einen Satz von Datenleitungen D1 und einen Satz von Steuerleitungen C1 mit einem Host 4 verbunden, der etwa ein Computer sein kann, zu dem das Speichersystem 1 gehört. Der Speichercontroller 2 weist eine Prozessoreinheit 2a und einen internen Speicher 2b, typischerweise vom eingebetteten (Embedded)-Typ auf, und ist über einen Adressbus A2, einen Datenbus D2 und einen Steuerbus C2 mit dem Speicher 3 verbunden. Dementsprechend hat der Host 4 über seine Verbindungen A1, D1 und C1 zu dem Speichercontroller 2 indirekten Lese- und/oder Schreib-Zugriff auf den Speicher 3, der wiederum über die Busse A2, D2 und C2 direkt auf den Speicher 3 zugreifen kann. Jeder der Sätze aus Leitungen bzw. Bussen A1, D1, C1, A2, D2 und C2 kann mittels einer oder mehrere einzelner Kommunikationsleitungen implementiert sein. Der Bus A2 kann auch entfallen.
  • Der Speichercontroller 2 ist auch als eine Codierungsvorrichtung konfiguriert und eingerichtet, die die Decodierungserfahren der vorliegenden Erfindung auszuführen, insbesondere auch wie vorausgehend unter Bezugnahme auf die 1 bis 8 beschrieben. Auf diese Weise ist der Speichercontroller 2 in der Lage, aus der Speichervorrichtung 3 gelesene Daten zu decodieren. Typischerweise wird der Speichercontroller 2 außerdem eingerichtet sein, eine entsprechende Codierung zur Erzeugung von in die Speichervorrichtung 3 zu schreibenden codierten Daten auszuführen. Zu diesem Zweck kann der Speichercontroller 2 ein Computerprogramm aufweisen, das in seinem internen Speicher 2b abgelegt und konfiguriert ist, bei seiner Ausführung auf der Prozessoreinheit 2a des Speichercontrollers 2 ein oder mehrere dieser Decodierungs-(und Codierungs-)Verfahren durchzuführen. Alternativ kann das Programm beispielsweise ganz oder teilweise in der Speichervorrichtung 3 oder einem zusätzlichen Programmspeicher (nicht gezeigt) abgelegt sein oder es kann sogar ganz oder teilweise mittels einer hartverdrahteten Schaltung implementiert sein.
  • Als nächstes wird eine bevorzugte Integration des Stapelalgorithmus als innerer Decodierer in die Implementierung des in [36] vorgestellten GC-Decodierers erläutert. Danach wird die Implementierung des Stapelalgorithmus zur Supercode-Decodierung einschließlich ihrer Subsysteme vorgestellt und erläutert. Die ursprüngliche Implementierung eines Hardinput-GC-Decodierers aus [36] verwendet algebraische Syndromdecodierung. Bei dieser Implementierung können die ersten Ebenen von B tb,0 = 1 und tb,1 = 2 Fehler decodieren. Folglich sind höhere Fehlerkorrekturfähigkeiten der äußeren Codes A(0) und A(1) erforderlich. Dies führt zu niedrigeren Coderaten und einer höheren Decodierungskomplexität für diese äußeren Codes. Andererseits nimmt die Softinput-Decodierungskomplexität für die Spaltencodes mit jeder Codeebene signifikant zu. Folglich ist die Soft-Decodierung für die niedrigeren Ebenen von Interesse. Dem nachfolgend bleibt die algebraische Decodierung Logik für die Spaltencodes in der Implementierung erhalten. Daher ist es möglich, zu prüfen, ob das Syndrom gleich Null ist. Ist dies der Fall, kann das Codewort als korrekt angenommen werden, d. h. weder eine algebraische Decodierung noch ein sequenzielles Decodieren resultieren dann in einem anderen Codewort.
  • A. Decodierungslogik
  • In 10 ist ein kurzer Überblick über ein beispielhaftes Decodierungssystem gemäß einer bevorzugten Ausführungsform dargestellt, das insbesondere in Form einer einzigen Decodierungsvorrichtung implementiert sein kann. Das System besteht aus einem Wortfeld 5 der Größe nb und einer gewünschten Breite, welches das q-näre Wort speichert. Des Weiteren ist ein die Multiplexer 6 vorgesehen, der die gegenwärtig verarbeitete Bitposition in Abhängigkeit von dem obersten Pfad in dem Stapel auswählt und diesen Wert an einen Metrikberechner 7 liefert. Beruhend auf dem empfangenen Codewortsymbol ri und der vorausgegangenen Metrik M(rt-1t-1) gibt das Metrikmodul 7 M(rtt) an einen Prioritätsqueue-Block 8 aus, der verwendet wird, um einen Stapel für das sequenzielle Stapeldecodieren zu implementieren. Um die Supercode-Trellise zu repräsentieren, wird asynchrones ROM verwendet, wobei vorzugsweise jeweils ein separates ROM 9a, 9b für jeden Trellis verwendet wird. Für jeden Supercode repräsentiert jedes Wort aus dem entsprechenden ROM 9a, 9b einen Trellis Knoten σt,i des entsprechenden Trellis. Die Daten bestehen aus zwei Zeigern für die Nachfolgeknoten νt+1 = 0 und νt+1 = 1. In Abhängigkeit von dem obersten Eintrag in der Prioritätsqueue 8 wird das gewünschte Codewortsymbol ausgewählt und die nächsten Äste für die aktuellen Knoten σt,1 und σt,2 werden aus dem entsprechenden Trellis-Raum 9a bzw. 9b geladen. Innerhalb eines einzigen Taktzyklus entlädt die Prioritätsqueue 8 den obersten Eintrag und lädt die neuen Pfade.
  • Jeder Eintrag in der Prioritätsqueue 8 enthält mehrere Elemente. Das erste Element ist der metrische Wert. Der Pfad innerhalb des Trellis, die Länge des Pfads und ein Zeiger auf den aktuellen Knoten sind gespeichert. Sämtliche Einträge müssen anhand der metrischen Werte geordnet werden, sodass der oberste Eintrag den höchsten Wert aufweist. Der Prozess für die Prioritätsqueue 8 beginnt mit ihrer Initialisierung. Der Startknoten, sein initialer metrischer Wert und die Pfadlänge werden gesetzt. Jeder Aktualisierungszyklus beginnt mit der Ladephase, in der der nächste Knotenzeiger aus dem Trellis-ROM 9a, 9b geladen wird. Gleichzeitig wird beruhend auf dem Pfadlängenindex das nächste Codewortsymbol geladen. Der nächste metrische Wert kann basierend auf dem Codesymbol und den verfügbaren Ästen bestimmt werden. Für binäre Codes existieren zumindest ein möglicher Ast und höchstens zwei Äste. Die resultierenden Äste werden unter Verwendung von kombinatorische Logik vorsortiert. Im Folgenden werden diese beiden Einträge als Haupt- bzw. Nebeneintrag bezeichnet, wobei der Haupteintrag den besseren metrischen Wert aufweist.
  • Sämtliche Elemente der Prioritätsqueue werden sukzessiv in einer Kette geordnet. 11 zeigt eine mögliche Implementierung eines Prioritätsqueue-Elements. Jedes Element kann seine Daten mit seinem vorausgehenden oder nachfolgenden Nachbar austauschen. Des Weiteren kann jedes Element entscheiden, ob es seine eigenen Daten behält, die Daten seines Nachbars übernimmt oder die neuen Hauptdaten oder die neuen Nebendaten lädt. In jedem Element wird der metrische Wert mit dem neuen Wert verglichen. Das Ergebnis dieses Vergleichs wird an seine Vorgänger- und Nachfolgerelemente signalisiert. Falls das Signal eines Vorgängers ”unwahr” ist und der Komparator für den metrischen Hauptwert ein positives Signal ausgibt, wird der neue Hauptwert gespeichert. Auf ähnliche Weise werden, falls ein Element ein „unwahr”-Signal von seinem Vorgänger erhält und der Komparator für den metrischen Nebenwert einen neuen metrischen Wert signalisiert, der geringer ist als der aktuelle Wert, die neuen Nebendaten gespeichert. In dem Fall, dass ein Element ein Signal von seinen Nachbarn erhält, muss für die neuen Daten Platz geschaffen werden, indem sämtliche Einträge zum nächsten Element verschoben werden. Hier existieren zwei Spezialfälle, die berücksichtigt werden müssen. Der erste Spezialfall tritt auf, wenn ein Knoten nur einen einzigen ausgehenden Ast aufweist. In diesem Fall muss das Verschieben von Elementen mittels einer Signalisierung verhindert werden. Der zweite Spezialfall tritt auf, wenn die neuen Haupt- und Nebenelemente dazu vorgesehen sind, in denselben Registereintrag eingefügt zu werden. Dieser Fall kannte detektiert und verhindert werden, indem dieser Wert an das nächste Element weitergegeben wird.
  • Der Algorithmus endet, wenn die maximal mögliche Pfadlänge erreicht ist. Der gespeicherte Pfad in dem obersten Element ist das decodierte Codewort. In einer praktischen Implementierung kann ein Iterationszähler verwendet werden, der nach einer vorbestimmten Maximalanzahl von Iterationen das Ende einleitet. Dieser Abbruch kann verwendet werden, um diese decodierte-GCC-Spalte als ein Löschsymbol für die äußeren (RS)-Codes zu markieren. Um die Supercodes zu decodieren (vgl. Algorithmus 2 oder Algorithmus 3 beruhend auf Algorithmus 2) müssen die folgenden Erweiterungen implementiert werden. Die metrische Berechnung muss sämtliche Trellis-Äste jedes der Supercodes berücksichtigen. Des Weiteren müssen sämtliche Knotenzeiger in den Prioritätsqueueelementen gespeichert werden. Vorzugsweise wird für jeden Supercode ein separates ROM, insbesondere eine andere ROM-Vorrichtung, verwendet, das bzw. die seinen Trellis repräsentiert.
  • B. Flächenvergleich
  • Dieser Abschnitt beschreibt eine beispielhafte FPGA-Implementierung des vorgeschlagenen Softinput-Decodierers gemäß einer bevorzugten Ausführungsform und vergleicht diese mit dem in [36] vorgestellten Hardinput-Decodierer. Der Hardinput-Decodierer verwendet algebraisches Decodieren. Er besteht aus der Syndromberechnung, dem Berlekamp-Massey Algorithmus (BMA), und dem Chien-Suchmodul. Der Softinput-Decodierer wird wie in Abschnitt II-B oben vorgeschlagen implementiert. Er weist zwei Limitierungen auf. Erstens ist die Länge der Prioritätsqueue auf 64 Elemente limitiert. Darüber hinaus ist die Genauigkeit der Metrikberechnung auf 16 Bits limitiert und eine 3-Bit-Quantisierung wird für die Eingangssymbole verwendet.
  • Der Stapelalgorithmus weist eine in Abhängigkeit von dem Fehlermuster variable Ausführungszeit auf. Dieser Algorithmus benötigt zumindest 61 Zyklen, um den gesamten Trellis zu durchlaufen, wenn kein Fehler aufgetreten ist. Dieser Fall kann vermieden werden, indem geprüft wird, ob das Syndrom eines Spaltenworts gleich null ist. Falls kein Fehler detektiert wurde, kann die Soft-Decodierung vermieden werden, sodass dann nur ein einziger Zyklus erforderlich ist. 12 vergleicht die für den Stapelalgorithmus benötigten durchschnittlichen Zyklenanzahlen. Es zeigt die Abhängigkeit zwischen der Kanal-Bitfehlerrate und der Berechnungskomplexität, d. h. weniger Fehler führen zu weniger Decodierungszyklen. Es ist zu bemerken, dass der algebraische Hardinput-Decodierer vier Zyklen für die erste Ebene und sechs Zyklen für die zweite Ebene benötigt.
  • Als nächstes wird ein FPGA-Syntheseergebnis für den Stapelalgorithmus vorgestellt. Die Synthese wurde mit einem Xilinx Vivado- und einem Virtex-7-Zielbaustein ausgeführt. Tabelle II zeigt die Anzahl von Logikelementen (engl. slices) und Look-up-Tabellen (LUT) jeweils des Hardinput- und des Softinput-Decodierers mit 3-Bit-Quantisierung. Aus diesen Ergebnissen entnimmt man, dass die Anzahl der für den Stapelalgorithmus benötigten Logikelemente etwa 80% der Anzahl der Logikgatter beträgt, die für den GC-Hardinput-Decodierer benötigt werden.
    Modul LUT Logikelemente
    RS-Modul (t = 78)
    Syndrom 1701 1395
    BMA 21701 6662
    Forney alg. 1046 729
    Chien-Suche 854 712
    BCH Modul (n = 60, t = 8)
    Syndrom 184 46
    BMA 2006 732
    Chien-Suche 1557 240
    Rückabbildung 148 336
    GESAMT 29197 10852
    Stapelalgorithmus 23896 9885
    Tabelle II – Ergebnisse der FPGA-Analyse
  • Während vorausgehend wenigstens eine beispielhafte Ausführungsform der vorliegenden Erfindung beschrieben wurde, ist zu bemerken, dass eine große Anzahl von Variationen dazu existiert. Es ist dabei auch zu beachten, dass die beschriebenen beispielhaften Ausführungsformen nur nichtlimitierende Beispiele dafür darstellen, wie die vorliegenden Erfindung implementiert werden kann, und es nicht beabsichtigt ist, dadurch den Umfang, die Anwendbarkeit oder die Konfiguration der hier beschriebenen Vorrichtungen und Verfahren zu beschränken. Vielmehr wird die vorausgehende Beschreibung dem Fachmann eine Anleitung zu Implementierung mindestens einer beispielhaften Ausführungsform liefern, wobei sich versteht, dass verschiedene Änderungen in der Funktionsweise und der Anordnung der in einer beispielhaften Ausführungsform beschriebenen Elemente vorgenommen werden können, ohne dass dabei von dem in den angehängten Ansprüchen jeweils festgelegten Gegenstand sowie seinen rechtlichen Äquivalenten abgewichen wird.
  • LITERATURANGABEN
    • [1] A. Fahrner, H. Griesser, R. Klarer, und V. Zyablov, Low-complexity GEL codes for digital magnetic storage systems, in IEEE Transactions on Magnetics, Bd. 40, Nr. 4, S. 3093–3095, Juli 2004.
    • [2] J. Freudenberger, U. Kaiser, und J. Spinner, Concatenated code constructions for error correction in non-volatile memories, in Int. Symposium on Signals, Systems, und Electronics (ISSSE), Potsdam, Okt. 2012, S. 1–6.
    • [3] J. Freudenberger, J. Spinner, und S. Shavgulidze, Generalized concatenated codes for correcting two-dimensional clusters of errors und independent errors, in Int. Conference on Communication und Signal Processing (CSP), Castelldefels-Barcelona, Feb. 2014, S. 1–5.
    • [4] I. Dumer, Concatenated codes und their multilevel generalizations, in Handbook of Coding Theory, Bd. II, Elsevier, Amsterdam, 1998.
    • [5] M. Bossert, Channel coding for telecommunications. Wiley, 1999.
    • [6] V. Zyablov, S. Shavgulidze, und M. Bossert, An introduction to generalized concatenated codes, in European Transactions on Telecommunications, Bd. 10, Nr. 6, S. 609–622, 1999.
    • [7] J. Spinner und J. Freudenberger, Decoder architecture for generalized concatenated codes, in IET Circuits, Devices & Systems, Bd. 9, Nr. 5, S. 328–335, 2015.
    • [8] A. Neubauer, J. Freudenberger, und V. Kühn, Coding Theory: Algorithms, Architectures and Applications, John Wiley & Sons, 2007.
    • [9] D. Chase, Class of algorithms for decoding block codes with channel measurement information, in IEEE Transactions on Information Theory, S. 170–182, 1972.
    • [10] C. Argon, S. McLaughlin, und T. Souvignier, Iterative application of the Chase algorithm on Reed-Solomon product codes, in Proceedings IEEE ICC 2001, S. 320–324, 2001.
    • [11] M. Fossorier und S. Lin, Soft-decision decoding of linear block codes based on ordered statistics, in IEEE Trans. Inform. Theory, Bd. IT-41, S. 1379–1396, Sep. 1995.
    • [12] B. Dorsch, A decoding algorithm for binary block codes und J-ary output channels in Information Theory, in IEEE Transactions on, Bd. 20, Nr. 3, S. 391–394, Mai 1974.
    • [13] M. Tomlinson, C. Tjhai, und M. Ambroze, Extending the Dorsch decoder towards achieving maximum-likelihood decoding for linear codes, in IET Communications, Bd. 1, Nr. 3, S. 479–488, June 2007.
    • [14] A. Gortan, R. Jasinski, W. Godoy, und V. Pedroni, Achieving near-MLD performance with soff information-set decoders implemented in FPGAs, in 2010 IEEE Asia Pacific Conference on Circuits und Systems (APCCAS), Dez. 2010, S. 312–315.
    • [15] L. Aguado und P. Farrell, On hybrid stack decoding algorithms for block codes in Information Theory, in IEEE Transactions on, Bd. 44, Nr. 1, S. 398–409, Jan. 1998.
    • [16] J. Wolf, Efficient maximum likelihood decoding of linear block codes using a trellis, in IEEE Transactions on Information Theory, Bd. 24, Nr. 1, S. 76–80, Jan. 1978.
    • [17] J. Freudenberger, T. Wegmann, und J. Spinner, An efficient hardware implementation of sequential stack decoding of binary block codes, in IEEE 5th International Conference on Consumer Electronics – Berlin (ICCE-Berlin), Sept 2015, S. 135–138.
    • [18] J. Freudenberger und M. Bossert, Maximum-likelihood decoding based on supercodes, in Proc. 4th. International ITG Conference Source und Channel Coding, Erlangen, Germany, Jan. 2004, S. 185–190.
    • [19] J. Freudenberger, Bounded Distance Decoding und Decision Feedback, Düsseldorf, Germany, VDI Verlag, 2004.
    • [20] R. Micheloni, A. Marelli, und R. Ravasio, Error Correction Codes for Non-Volatile Memories, Springer, 2008.
    • [21] X. Zhang und K. K. Parhi, High-speed architectures for parallel long BCH encoders, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 13, Nr. 7, S. 872–877, 2005.
    • [22] F. Sun, S. Devarajan, K. Rose, und T. Zhang, Design of on-chip error correction systems for multilevel NOR und NAND flash memories, in IET Circuits, Devices Systems, Bd. 1, Nr. 3, S. 241–249, Juni 2007.
    • [23] J. Freudenberger und J. Spinner, A configurable Bose-Chaudhuri-Hocquenghem codec architecture for flash controller applications, in Journal of Circuits, Systems, und Computers, Bd. 23, Nr. 2, S. 1–15, Feb. 2014.
    • [24] S. Cho, D. Kim, J. Choi, und J. Ha, Block-wise concatenated BCH codes for NAND flash memories, in IEEE Transactions on Communications, Bd. 62, Nr. 4, S. 1164–1177, April 2014.
    • [25] D. Kim und J. Ha, Quasi-primitive block-wise concatenated BCH codes for NAND flash memories, in IEEE Information Theory Workshop (ITW), Nov 2014, S. 611–615.
    • [26] G. Dong, N. Xie, und T. Zhang, On the use of soff-decision error-correction codes in NAND Flash memory, in IEEE Transactions on Circuits und Systems I: Regular Papers, Bd. 58, Nr. 2, S. 429–439, Feb. 2011.
    • [27] K. Zhao, W. Zhao, H. Sun, X. Zhang, N. Zheng, und T. Zhang, LDPC-in-SSD: Making advanced error correction codes work effectively in solid state drives, in Presented as part of the 11th USENIX Conference on File und Storage Technologies (FAST 13). San Jose, CA: USENIX, 2013, S. 243–256. [Online]. Verfügbar unter: https://www.usenix.org/conference/fast13/technical-sessions/presentation/zhao
    • [28] J. Wang, K. Vakilinia, T.-Y. Chen, T. Courtade, G. Dong, T. Zhang, H. Shankar, und R. Wesel, Enhanced precision through multiple reads for ldpc decoding in flash memories, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 880–891, Mai 2014.
    • [29] W. Lin, S.-W. Yen, Y.-C. Hsu, Y.-H. Lin, L.-C. Liang, T.-C. Wang, P.-Y. Shih, K.-H. Lai, K.-Y. Cheng, und C.-Y. Chang, A low power und ultrahigh reliability LDPC error correction engine with digital signal processing for embedded NAND flash controller in 40 nm coms, in Symposium on VLSI Circuits Digest of Technical Papers, Juni 2014, S. 1–2.
    • [30] K. Haymaker und C. A. Kelley, Structured bit-interleaved LDPC codes for MLC flash memory, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 870–879, Mai 2014.
    • [31] Solid-State Drive (SSD) Requirements und Endurance Test Method (JESD218), JEDEC SOLID STATE TECHNOLOGY ASSOCIATION, 2010.
    • [32] S. Li und T. Zhang, Improving multi-level NAND flash memory storage reliability using concatenated BCH-TCM coding, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 18, Nr. 10, S. 1412–1420, Okt. 2010.
    • [33] S. Qi, D. Feng, und J. Liu, Optimal voltage signal sensing of NAND flash memory for LDPC code," in Signal Processing Systems (SiPS), 2014 IEEE Workshop on, Okt. 2014, S. 1–6.
    • [34] J. Massey, Variable-length codes und the Fano metric, in IEEE Transactions on Information Theory, Bd. 18, Nr. 1, S. 196–198, 1972.
    • [35] V. Sorokine und F. Kschischang, A sequential decoder for linear block codes with a variable bias-term metric, in IEEE Transactions on Information Theory, Bd. 44, Nr. 1, S. 410–416, 1998.
    • [36] J. Spinner und J. Freudenberger, Design and implementation of a pipelined decoder for generalized concatenated codes, in Proceedings of 27th Symposium on Integrated Circuits und Systems Design (SBCCI), Aracaju, Brazil, Sept. 2014, S. 1–16.
    • [37] L. Weiburn und J. Cavers, Improved performance of Reed-Solomon decoding with the use of pilot signals for erasure generation, in Vehicular Technology Conference, 1998, VTC 98. 48th IEEE, Bd. 3, Mai 1998, S. 1930–1934, Bd. 3.
    • [38] C. Yang, Y. Emre, und C. Chakrabarti, Product code schemes for error correction in MLC NAND flash memories, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 20, Nr. 12, S. 2302–2314, Dez. 2012.
    • [39] J. Oh, J. Ha, J. Moon, und G. Ungerboeck, RS-enhanced TCM for multilevel flash memories, in IEEE Transactions on Communications, Bd. 61, Nr. 5, S. 1674–1683, Mai 2013.
    • [40] E. Yaakobi, J. Ma, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Error characterization und coding schemes for flash memories, in IEEE GLOBECOM Workshops, Dez. 2010, S. 1856–1860.
    • [41] E. Yaakobi, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Characterization und error-correcting codes for TLC flash memories, in Computing, Networking and Communications (ICNC), 2012 International Conference on, Jan. 2012, S. 486–491.
    • [42] R. Gabrys, E. Yaakobi, und L. Dolecek, Graded bit-error-correcting codes with applications to flash memory, in IEEE Transactions on Information Theory, Bd. 59, Nr. 4, S. 2315–2327, April 2013.
    • [43] R. Gabrys, F. Sala, und L. Dolecek, Coding for unreliable flash memory cells, in IEEE Communications Letters, Bd. 18, Nr. 9, S. 1491–1494, Sept. 2014.
  • Bezugszeichenliste
  • 1
    Speichersystem
    2
    Speichercontroller, einschließlich Codierungsvorrichtung
    2a
    Prozessoreinheit
    2b
    eingebetteter Speicher des Speichercontrollers
    3
    nicht-flüchtiger Speicher (NVM), insbesondere Flashspeicher
    4
    Host
    5
    Wortfeld
    6
    Demultiplexer
    7
    Metrikberechner
    8
    Prioritätsqueue-Block, implementiert den Stapel
    9a, b
    Nur-Lese-Speicher, ROM
    A
    Adressleitungen der ROMs
    D
    Datenleitungen der ROMs
    A1
    Adressleitung(en) zum/vom Host
    D1
    Datenleitung(en) zum/vom Host
    C1
    Steuerleitung(en) zum/vom Host
    A2
    Adressbus des NVM, z. B. Flashspeichers
    D2
    Datenbus des NVM, z. B. Flashspeichers
    C2
    Steuerbus des NVM, z. B. Flashspeichers
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • DE 102017107431 [0036]

Claims (15)

  1. Softinput-Decodierungsverfahren für einen verallgemeinerten verketteten Code, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes B(...) und L äußeren Codes konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist; wobei das Verfahren eine oder mehrere Decodierungsvorrichtungen verwendet, um iterativ Ebene für Ebene von einem Datenkanal empfangene Originaldaten zu decodieren und für jede Ebene die folgenden Schritte aufweist: einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene l beruhend auf den inneren Blockcodes der aktuellen Ebene und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird; wobei: der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene aufweist, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren; das sequenzielle Stapeldecodieren auf einem ersten Trellis, der einen ersten Supercode B1 (l) des inneren Blockcodes der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B2 (l) von B(l) mit B(l) = B1 (l) ∩ B2 (l) repräsentiert, beruht, wobei ein Supercode von B(l) ein Code ist, der sämtliche Codewörter von B(l) aufweist und die jeweilige Redundanz des ersten Supercodes B1 (l) und des zweiten Supercodes B2 (l) geringer ist als die von B(l); der korrespondierende innere Code
    Figure DE102017110389A1_0035
    der unmittelbar vorausgehenden Ebene l – 1 als einer der Supercodes B1 (l) und B2 (l) wiederverwendet wird; und das sequentielle Stapeldecodieren konfiguriert ist, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
  2. Softinput-Decodierungsverfahren für verallgemeinerte verkettete Codes, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes und L äußeren Codes konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist; wobei das Verfahren eine oder mehrere Decodierungsvorrichtungen verwendet, um iterativ Ebene für Ebene von einem Datenkanal empfangene Originaldaten zu decodieren und für jede Ebene die folgenden Schritte aufweist: einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene l beruhend auf den inneren Blockcodes der aktuellen Ebene l und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird; wobei der erste Decodierungsschritt wenigstens einer der Ebenen aufweist: sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene l, beruhend auf einem Trellis des inneren Blockcodes der aktuellen Ebene l, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren, wobei das sequenzielle Stapel decodieren konfiguriert ist, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die durch den Trellis repräsentiert werden; und Auswählen, als Ausgangsdaten des ersten Decodierungsschritts der aktuellen Ebene l: – eine erste Schätzung der Ausgangsdaten, die aus der sequenziellen Stapeldecodierung der Eingangsdaten der aktuellen Ebene resultiert, falls ihr gemäß einer vorbestimmten Metrik bewerteter metrischer Wert eine vorbestimmte Schwelle überschreitet oder gemäß der Metrik besser ist, als der entsprechende metrische Wert einer zweiten Schätzung der Ausgangsdaten, die aus einem zweiten Durchlauf des sequenziellen Stapeldecodierens resultiert, bei dem die erste Schätzung der Ausgangsdaten ausgeschlossen ist, und – andernfalls die zweite Schätzung der Ausgangsdaten.
  3. Verfahren nach Anspruch 2, wobei: der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene aufweist, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren; das sequenzielle Stapeldecodieren auf einem ersten Trellis, der einen ersten Supercode B1 (l) des inneren Blockcodes B(l) der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B2 (l) von B(l) mit B(l) = B1 (l) ∩ B2 (l) repräsentiert, beruht, wobei ein Supercode von B(l) ein Code ist, der sämtliche Codewörter von B(l) aufweist, und die jeweilige Redundanz des ersten Supercodes B1 (l) und des zweiten Supercodes B2 (l) geringer ist als die von B(l); der korrespondierende innere Code
    Figure DE102017110389A1_0036
    der unmittelbar vorausgehenden Ebene l – 1 als einer der Supercodes B1 (l) und B2 (l) wiederverwendet wird; und Das sequentielle Stapeldecodieren konfiguriert ist, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
  4. Verfahren nach einem der vorausgehenden Ansprüche, des Weiteren aufweisend ein Anwenden einer Hard-Decodierung zur Decodierung der inneren Blockcodes im ersten Decodierungsschritt einer ersten Ebene des GCC, bevor sequenzielles Stapeldecodieren bezüglich einer höheren Ebene, beruhend auf einem Trellis des inneren Blockcodes der höheren Ebene und unter Verwendung von Softinput-Informationen, welche die Zuverlässigkeit des Datenkanals charakterisieren, angewandt wird.
  5. Verfahren nach Anspruch 4, wobei der erste Decodierungsschritt für zumindest ein in den Eingangsdaten der aktuellen Ebene enthaltenes Datenwort ein Feststellen dahingehend aufweist, ob das aus einer Hard-Entscheidungs-Decodierung des Datenworts resultierende Codeword zu einem gültigen Codeword des inneren Blockcodes B der aktuellen Ebene korrespondiert.
  6. Verfahren nach einem der vorausgehenden Ansprüche, wobei: die Metrik, die während des sequenziellen Stapeldecodierens angewandt wird, um während des Decodierens auftretende Codesequenzen zu bewerten und den Stapel anhand der aus dieser Bewertung resultierenden metrischen Werte zu sortieren, entweder die Fanometrik oder die quadratische Euklidische Entfernungsmetrik, oder eine Kombination daraus ist; und der Softinput, der die Zuverlässigkeit des Datenkanals charakterisiert, als eine Eingangsvariable der Metrik dient.
  7. Verfahren nach einem der vorausgehenden Ansprüche, wobei der Blockcode der niedrigsten Ebene der inneren verschachtelten Blockcodes ein Einfachfehlerkorrekturcode ist.
  8. Verfahren nach einem der Ansprüche 1 bis 6, wobei die inneren Codes verschachtelte binäre erweiterte Bose-Chaudhuri-Hocquenghem, BCH, -Codes sind und der erweiterte BCH-Code in der niedrigsten Ebene der inneren verschachtelten BCH-Codes ein bloßer Einfachparitätsprüfungs-, SPC, -Code ist; und der erweiterte BCH-Code wenigstens einer höheren Ebene der inneren verschachtelten BCH-Codes eine Fehlerkorrekturfähigkeit aufweist und ein Subcode des BCH-Codes der niedrigsten Verschachtelungsebene ist.
  9. Verfahren nach einem der vorausgehenden Ansprüche, wobei: die aus einem Datenkanal empfangenen Originaldaten in einer zweidimensionalen Originaldaten Matrix angeordnet sind, die eine erste Dimension na gleich der Länge der äußeren Codes sowie eine zweite Dimension nb gleich der Länge der inneren Blockcodes aufweist, wobei eine Linie der ersten Dimension einer Matrix eine Zeile der Matrix und eine Linie ihrer zweiten Dimension eine Spalte der Matrix ist, oder andersherum, und die äußeren Codes über einem Galois-Feld GF(2m) definiert sind, sodass m Elemente jeder Linie der zweiten Dimension ein Symbol des Galois-Felds GF(2m) repräsentieren; und (a) eine erste Iteration, die zu der niedrigsten Ebene der inneren Blockcodes der Originaldaten Matrix korrespondiert, wobei der erste Decodierungsschritt aufweist: – Anwenden eines Decodierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die Linien der zweiten Dimension der Originaldatenmatrix bezüglich der niedrigsten Ebene der inneren verschachtelten Blockcodes, in denen die Linien einer zweiten Dimension der Originaldatenmatrix codiert sind, um eine vorläufige Decodierdatenmatrix der ersten Iteration zu erhalten und Löschinformationen zu bestimmen, welche die Linien der zweiten Dimension der Originaldatenmatrix charakterisieren, in denen beruhend auf der Decodierung der inneren Blockcodes der niedrigsten Ebene eine Löschung detektiert wurde; – Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration enthalten sind, um Codesymbole (ai,j) der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind; und der zweite Decodierungsschritt aufweist: – Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration, um eine Teildecodierungsergebnismatrix der ersten Iteration zu erhalten, wobei die Löschinformationen während der äußeren Decodierung verwendet werden, um fehlerhafte Symbole des äußeren Codes in der vorläufigen Decodierdatenmatrix der ersten Iteration zu identifizieren; – Zurückcodieren der Teildecodierungsergebnismatrix der ersten Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der ersten Iteration zu erhalten; – Subtrahieren der zurückcodierten Matrix der ersten Iteration von der Originaldatenmatrix, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten; und (b) für jede der weiteren Ebenen der inneren Blockcodes, eine entsprechende weitere Iteration, wobei der erste Decodierungsschritt jeder entsprechenden Ebene aufweist: – Anwenden eines Decodierungsschemas des inneren Blockcodes der aktuellen Ebene auf die Linien der zweiten Dimension der Startmatrix der aktuellen Iteration bezüglich der aktuellen Ebene der inneren Blockcodes, in denen die Linien einer zweiten Dimension der Startmatrix der aktuellen Iteration codiert sind, um eine vorläufige Decodierdatenmatrix der aktuellen Iteration zu erhalten; – Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration enthalten sind, um Codesymbole der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind; – Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, welche zur Erzeugung der ursprünglichen Originaldatenmatrix während des Codierens verwendet wurden, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration, um eine Teildecodierungsergebnismatrix der aktuellen Iteration zu erhalten; – falls die aktuelle Iteration zu der höchsten Verschachtelungsebene der inneren Blockcodes in der Originaldatenmatrix korrespondiert, Ausgeben der Teildecodierungsergebnismatrix der aktuellen Iteration als die decodierten Daten, und – andernfalls, Zurückcodieren der Teildecodierungsergebnismatrix der aktuellen Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der aktuellen Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der aktuellen Iteration zu erhalten, und Subtrahieren der zurückcodierten Matrix der aktuellen Iteration von der Startmatrix der aktuellen Iteration, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten.
  10. Verfahren nach einem der vorausgehenden Ansprüche, wobei in zumindest einem ersten Decodierungsschritt, der ein sequenzielles Stapeldecodieren einsetzt, das Decodieren eines Datenworts aus den Eingangsdaten des inneren Codes der aktuellen Ebene beendet wird, wenn: die maximal mögliche Pfadlänge erreicht ist, wobei der Trellis-Pfad mit dem besten metrischen Wert unter allen bislang im Stapel angesammelten Pfaden als das decodierte Codewort, dass zu dem Datenwort korrespondiert, ausgewählt wird; oder eine vorbestimmte maximale Anzahl von Iterationen durchlaufen wurde.
  11. Verfahren nach Anspruch 10, wobei, falls die Beendigung deshalb erfolgt, weil eine vorbestimmte maximale Anzahl von Iterationen durchlaufen wurde, die Ausgangsdaten des aktuellen ersten Decodierungsschritts als Löschsymbol für den korrespondierenden, im zweiten Decodierungsschritt der aktuellen Ebene verwendeten äußeren Code markiert werden.
  12. Decodierungsvorrichtung, die eingerichtet ist, das Decodierungsverfahren gemäß einem der vorausgehenden Ansprüche auszuführen.
  13. Decodierungsvorrichtung gemäß Anspruch 12, aufweisend eine Mehrzahl von einzelnen Speichern oder Speicherbereichen, auf die gleichzeitig zugegriffen werden kann, und von denen jeder konfiguriert ist, eine Datenrepräsentation eines in dem Decodierungsverfahren verwendeten Trellis zu speichern.
  14. Nichtflüchtiges Speichersystem, aufweisend: ein Speicherfeld mit einer Mehrzahl von Zellen, die konfiguriert sind, eine Mehrzahl von Datenbits und eine Mehrzahl von Paritätsbits, die aus der Mehrzahl von Datenbits gemäß einem Codierungsschema beruhend auf verallgemeinerten verketteten Codes, GCC, berechnet sind, zu speichern, wobei der GCC aus inneren verschachtelten linearen binären Blockcodes und äußeren Codes konstruiert ist; und eine die Codierungsvorrichtung gemäß Anspruch 12 oder 13, die konfiguriert ist, die GCC-codierten Originaldaten von dem Speicherfeld zu empfangen und zu decodieren.
  15. Computerprogramm, welches Anweisungen enthält, die bei ihrer Ausführung auf einem oder mehreren Prozessoren einer Decodierungsvorrichtung, diese veranlassen, das Verfahren gemäß einem der Ansprüche 1 bis 11 auszuführen.
DE102017110389.9A 2016-05-13 2017-05-12 Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes Active DE102017110389B4 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US15/594,830 US10230403B2 (en) 2016-05-13 2017-05-15 Method and decoder for soft input decoding of generalized concatenated codes
US16/252,604 US10812112B2 (en) 2016-05-13 2019-01-19 Methods and decoder for soft input decoding of generalized concatenated codes

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102016005914.1 2016-05-13
DE102016005914 2016-05-13

Publications (2)

Publication Number Publication Date
DE102017110389A1 true DE102017110389A1 (de) 2017-11-16
DE102017110389B4 DE102017110389B4 (de) 2020-02-13

Family

ID=60163366

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102017110389.9A Active DE102017110389B4 (de) 2016-05-13 2017-05-12 Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes

Country Status (2)

Country Link
US (2) US10230403B2 (de)
DE (1) DE102017110389B4 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022070043A1 (en) * 2020-09-30 2022-04-07 Polaran Haberleşme Teknolojileri Anonim Şirketi Serial concatenated codes with outer block codes and inner polarization adjusted convolutional codes

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110324111B (zh) * 2018-03-31 2020-10-09 华为技术有限公司 一种译码方法及设备
KR20220080589A (ko) * 2020-12-07 2022-06-14 삼성전자주식회사 Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치
US11387848B1 (en) * 2021-03-11 2022-07-12 Samsung Electronics Co., Ltd. Hierarchical error correction code
CN113472361A (zh) * 2021-05-25 2021-10-01 中国科学院微电子研究所 一种极化码的获取方法及获取系统
CN113300723B (zh) * 2021-05-26 2023-05-30 西安电子科技大学 基于最大似然删除位置搜索的mgc码快速译码方法
CN113810062B (zh) * 2021-11-17 2022-04-12 南京风兴科技有限公司 一种面向下一代以太网的gel编码方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017107431A1 (de) 2016-05-13 2017-11-16 Hyperstone Gmbh Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5373511A (en) * 1992-05-04 1994-12-13 Motorola, Inc. Method for decoding a reed solomon encoded signal with inner code and apparatus for doing same
US7958425B2 (en) * 2004-02-19 2011-06-07 Trelliware Technologies, Inc. Method and apparatus for communications using turbo like codes
US7853862B2 (en) * 2005-08-03 2010-12-14 Qualcomm Incorporated Systems and methods for a turbo low-density parity-check decoder
WO2009043918A2 (en) * 2007-10-02 2009-04-09 Interuniversitair Microelectronica Centrum Vzw An asip architecture for decoding at least two decoding methods
US8307268B2 (en) * 2007-12-06 2012-11-06 Marvell World Trade Ltd. Iterative decoder systems and methods
US8700970B2 (en) * 2010-02-28 2014-04-15 Densbits Technologies Ltd. System and method for multi-dimensional decoding
US9191256B2 (en) * 2012-12-03 2015-11-17 Digital PowerRadio, LLC Systems and methods for advanced iterative decoding and channel estimation of concatenated coding systems
US20150236723A1 (en) * 2014-02-19 2015-08-20 Eric Morgan Dowling Parallel VLSI architectures for constrained turbo block convolutional decoding
KR102205614B1 (ko) * 2014-09-19 2021-01-21 삼성전자주식회사 반복 복호를 사용하는 비트 인터리빙 부호화 변조 방식을 지원하는 통신 시스템에서 신호 송/수신 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017107431A1 (de) 2016-05-13 2017-11-16 Hyperstone Gmbh Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes

Non-Patent Citations (43)

* Cited by examiner, † Cited by third party
Title
A. Fahrner, H. Griesser, R. Klarer, und V. Zyablov, Low-complexity GEL codes for digital magnetic storage systems, in IEEE Transactions on Magnetics, Bd. 40, Nr. 4, S. 3093–3095, Juli 2004
A. Gortan, R. Jasinski, W. Godoy, und V. Pedroni, Achieving near-MLD performance with soff information-set decoders implemented in FPGAs, in 2010 IEEE Asia Pacific Conference on Circuits und Systems (APCCAS), Dez. 2010, S. 312–315
A. Neubauer, J. Freudenberger, und V. Kühn, Coding Theory: Algorithms, Architectures and Applications, John Wiley & Sons, 2007
B. Dorsch, A decoding algorithm for binary block codes und J-ary output channels in Information Theory, in IEEE Transactions on, Bd. 20, Nr. 3, S. 391–394, Mai 1974
C. Argon, S. McLaughlin, und T. Souvignier, Iterative application of the Chase algorithm on Reed-Solomon product codes, in Proceedings IEEE ICC 2001, S. 320–324, 2001
C. Yang, Y. Emre, und C. Chakrabarti, Product code schemes for error correction in MLC NAND flash memories, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 20, Nr. 12, S. 2302–2314, Dez. 2012
D. Chase, Class of algorithms for decoding block codes with channel measurement information, in IEEE Transactions on Information Theory, S. 170–182, 1972
D. Kim und J. Ha, Quasi-primitive block-wise concatenated BCH codes for NAND flash memories, in IEEE Information Theory Workshop (ITW), Nov 2014, S. 611–615
E. Yaakobi, J. Ma, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Error characterization und coding schemes for flash memories, in IEEE GLOBECOM Workshops, Dez. 2010, S. 1856–1860
E. Yaakobi, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Characterization und error-correcting codes for TLC flash memories, in Computing, Networking and Communications (ICNC), 2012 International Conference on, Jan. 2012, S. 486–491
F. Sun, S. Devarajan, K. Rose, und T. Zhang, Design of on-chip error correction systems for multilevel NOR und NAND flash memories, in IET Circuits, Devices Systems, Bd. 1, Nr. 3, S. 241–249, Juni 2007
G. Dong, N. Xie, und T. Zhang, On the use of soff-decision error-correction codes in NAND Flash memory, in IEEE Transactions on Circuits und Systems I: Regular Papers, Bd. 58, Nr. 2, S. 429–439, Feb. 2011
I. Dumer, Concatenated codes und their multilevel generalizations, in Handbook of Coding Theory, Bd. II, Elsevier, Amsterdam, 1998
J. Freudenberger und J. Spinner, A configurable Bose-Chaudhuri-Hocquenghem codec architecture for flash controller applications, in Journal of Circuits, Systems, und Computers, Bd. 23, Nr. 2, S. 1–15, Feb. 2014
J. Freudenberger und M. Bossert, Maximum-likelihood decoding based on supercodes, in Proc. 4th. International ITG Conference Source und Channel Coding, Erlangen, Germany, Jan. 2004, S. 185–190
J. Freudenberger, Bounded Distance Decoding und Decision Feedback, Düsseldorf, Germany, VDI Verlag, 2004
J. Freudenberger, J. Spinner, und S. Shavgulidze, Generalized concatenated codes for correcting two-dimensional clusters of errors und independent errors, in Int. Conference on Communication und Signal Processing (CSP), Castelldefels-Barcelona, Feb. 2014, S. 1–5
J. Freudenberger, T. Wegmann, und J. Spinner, An efficient hardware implementation of sequential stack decoding of binary block codes, in IEEE 5th International Conference on Consumer Electronics – Berlin (ICCE-Berlin), Sept 2015, S. 135–138
J. Freudenberger, U. Kaiser, und J. Spinner, Concatenated code constructions for error correction in non-volatile memories, in Int. Symposium on Signals, Systems, und Electronics (ISSSE), Potsdam, Okt. 2012, S. 1–6.
J. Massey, Variable-length codes und the Fano metric, in IEEE Transactions on Information Theory, Bd. 18, Nr. 1, S. 196–198, 1972
J. Oh, J. Ha, J. Moon, und G. Ungerboeck, RS-enhanced TCM for multilevel flash memories, in IEEE Transactions on Communications, Bd. 61, Nr. 5, S. 1674–1683, Mai 2013
J. Spinner und J. Freudenberger, Decoder architecture for generalized concatenated codes, in IET Circuits, Devices & Systems, Bd. 9, Nr. 5, S. 328–335, 2015
J. Spinner und J. Freudenberger, Design and implementation of a pipelined decoder for generalized concatenated codes, in Proceedings of 27th Symposium on Integrated Circuits und Systems Design (SBCCI), Aracaju, Brazil, Sept. 2014, S. 1–16
J. Wang, K. Vakilinia, T.-Y. Chen, T. Courtade, G. Dong, T. Zhang, H. Shankar, und R. Wesel, Enhanced precision through multiple reads for ldpc decoding in flash memories, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 880–891, Mai 2014
J. Wolf, Efficient maximum likelihood decoding of linear block codes using a trellis, in IEEE Transactions on Information Theory, Bd. 24, Nr. 1, S. 76–80, Jan. 1978
K. Haymaker und C. A. Kelley, Structured bit-interleaved LDPC codes for MLC flash memory, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 870–879, Mai 2014
K. Zhao, W. Zhao, H. Sun, X. Zhang, N. Zheng, und T. Zhang, LDPC-in-SSD: Making advanced error correction codes work effectively in solid state drives, in Presented as part of the 11th USENIX Conference on File und Storage Technologies (FAST 13). San Jose, CA: USENIX, 2013, S. 243–256. [Online]. Verfügbar unter: https://www.usenix.org/conference/fast13/technical-sessions/presentation/zhao
L. Aguado und P. Farrell, On hybrid stack decoding algorithms for block codes in Information Theory, in IEEE Transactions on, Bd. 44, Nr. 1, S. 398–409, Jan. 1998
L. Weiburn und J. Cavers, Improved performance of Reed-Solomon decoding with the use of pilot signals for erasure generation, in Vehicular Technology Conference, 1998, VTC 98. 48th IEEE, Bd. 3, Mai 1998, S. 1930–1934, Bd. 3
M. Bossert, Channel coding for telecommunications. Wiley, 1999
M. Fossorier und S. Lin, Soft-decision decoding of linear block codes based on ordered statistics, in IEEE Trans. Inform. Theory, Bd. IT-41, S. 1379–1396, Sep. 1995
M. Tomlinson, C. Tjhai, und M. Ambroze, Extending the Dorsch decoder towards achieving maximum-likelihood decoding for linear codes, in IET Communications, Bd. 1, Nr. 3, S. 479–488, June 2007
R. Gabrys, E. Yaakobi, und L. Dolecek, Graded bit-error-correcting codes with applications to flash memory, in IEEE Transactions on Information Theory, Bd. 59, Nr. 4, S. 2315–2327, April 2013
R. Gabrys, F. Sala, und L. Dolecek, Coding for unreliable flash memory cells, in IEEE Communications Letters, Bd. 18, Nr. 9, S. 1491–1494, Sept. 2014
R. Micheloni, A. Marelli, und R. Ravasio, Error Correction Codes for Non-Volatile Memories, Springer, 2008
S. Cho, D. Kim, J. Choi, und J. Ha, Block-wise concatenated BCH codes for NAND flash memories, in IEEE Transactions on Communications, Bd. 62, Nr. 4, S. 1164–1177, April 2014
S. Li und T. Zhang, Improving multi-level NAND flash memory storage reliability using concatenated BCH-TCM coding, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 18, Nr. 10, S. 1412–1420, Okt. 2010
S. Qi, D. Feng, und J. Liu, Optimal voltage signal sensing of NAND flash memory for LDPC code," in Signal Processing Systems (SiPS), 2014 IEEE Workshop on, Okt. 2014, S. 1–6
Solid-State Drive (SSD) Requirements und Endurance Test Method (JESD218), JEDEC SOLID STATE TECHNOLOGY ASSOCIATION, 2010
V. Sorokine und F. Kschischang, A sequential decoder for linear block codes with a variable bias-term metric, in IEEE Transactions on Information Theory, Bd. 44, Nr. 1, S. 410–416, 1998
V. Zyablov, S. Shavgulidze, und M. Bossert, An introduction to generalized concatenated codes, in European Transactions on Telecommunications, Bd. 10, Nr. 6, S. 609–622, 1999
W. Lin, S.-W. Yen, Y.-C. Hsu, Y.-H. Lin, L.-C. Liang, T.-C. Wang, P.-Y. Shih, K.-H. Lai, K.-Y. Cheng, und C.-Y. Chang, A low power und ultrahigh reliability LDPC error correction engine with digital signal processing for embedded NAND flash controller in 40 nm coms, in Symposium on VLSI Circuits Digest of Technical Papers, Juni 2014, S. 1–2
X. Zhang und K. K. Parhi, High-speed architectures for parallel long BCH encoders, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 13, Nr. 7, S. 872–877, 2005

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022070043A1 (en) * 2020-09-30 2022-04-07 Polaran Haberleşme Teknolojileri Anonim Şirketi Serial concatenated codes with outer block codes and inner polarization adjusted convolutional codes
US11677500B2 (en) 2020-09-30 2023-06-13 Polaran Haberlesme Teknolojileri Anonim Sirketi Methods and apparatus for encoding and decoding of data using concatenated polarization adjusted convolutional codes

Also Published As

Publication number Publication date
US20170331499A1 (en) 2017-11-16
US10230403B2 (en) 2019-03-12
US20190173495A1 (en) 2019-06-06
DE102017110389B4 (de) 2020-02-13
US10812112B2 (en) 2020-10-20

Similar Documents

Publication Publication Date Title
DE102017110389B4 (de) Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
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
DE60219238T2 (de) Bewertung und Optimisierung von fehlerkorrigierenden Kodes unter Anwendung einer Renormalisierungsgruppentransformation
DE112011101852B4 (de) Decodieren von LDPC-Code
DE102019127089A1 (de) LDPC Decoder, semiconductor memory system, and operating method thereof
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102010050957A1 (de) Verfahren und Vorrichtung zur Fehlerkorrektur in einem Speicher
DE102007035210A1 (de) Verfahren und Vorrichtung zur LDPC-Dekodierung mit gemeinsamer Hardwarenutzung und serieller Summe-Produkt-Architektur
DE102009036946A1 (de) Programmierbare Fehlerkorrekturfähigkeit für BCH-Codes
DE102010021516A1 (de) Fehlerkorrekturcodes für erhöhte Speicherkapazität in Mehrpegelspeichereinrichtungen
DE102005022107B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines Bitfehlers in einer Bitfolge
DE60219228T2 (de) Verfahren zur Herstellung einer Kunststofffolie
DE102016102590A1 (de) Datenverarbeitungseinrichtungen und verfahren zum rekonstruieren eines puf-werts
DE102019116413A1 (de) Generalisierte low-density-parity-check-codes
DE102019119753A9 (de) Generalisiertes verkettetes Fehlerkorrektur-Codierschema mit Lokalität
DE102017107431B4 (de) Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes
DE102013201422B3 (de) Verfahren zum Wiederherstellen verlorengegangener und/ oder beschädigter Daten
EP3526899B1 (de) Decodierung von faltungsturbocodes zur paritätsprüfung mit niedriger dichte
DE102011102503B3 (de) Verfahren zum Berichtigen beschädigter Daten
DE102016101543A1 (de) Verfahren zum Betreiben einer Speichervorrichtung
DE102014218384B3 (de) Rückgewinnung eines binären Response-Musters von einem verrauschten Kanal
DE102013223801B4 (de) Verfahren zum Wiederherstellen verloren gegangener und/oder beschädigter Daten

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