DE102014012138B4 - Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte - Google Patents

Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte Download PDF

Info

Publication number
DE102014012138B4
DE102014012138B4 DE102014012138.0A DE102014012138A DE102014012138B4 DE 102014012138 B4 DE102014012138 B4 DE 102014012138B4 DE 102014012138 A DE102014012138 A DE 102014012138A DE 102014012138 B4 DE102014012138 B4 DE 102014012138B4
Authority
DE
Germany
Prior art keywords
bit
node
check
data
soft decision
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102014012138.0A
Other languages
English (en)
Other versions
DE102014012138A1 (de
Inventor
Christopher Owen
Adrian John Anderson
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.)
Nordic Semiconductor ASA
Original Assignee
Nordic Semiconductor ASA
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 Nordic Semiconductor ASA filed Critical Nordic Semiconductor ASA
Publication of DE102014012138A1 publication Critical patent/DE102014012138A1/de
Application granted granted Critical
Publication of DE102014012138B4 publication Critical patent/DE102014012138B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/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/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1117Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using approximations for check node processing, e.g. an outgoing message is depending on the signs and the minimum over the magnitudes of all incoming messages according to the min-sum rule
    • H03M13/112Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using approximations for check node processing, e.g. an outgoing message is depending on the signs and the minimum over the magnitudes of all incoming messages according to the min-sum rule with correction functions for the min-sum rule, e.g. using an offset or a scaling factor
    • 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/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • 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/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1114Merged schedule message passing algorithm with storage of sums of check-to-bit node messages or sums of bit-to-check node messages, e.g. in order to increase the memory efficiency
    • 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/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1134Full parallel processing, i.e. all bit nodes or check nodes are processed in parallel
    • 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/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1137Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
    • 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/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/114Shuffled, staggered, layered or turbo decoding schedules
    • 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/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • H03M13/1165QC-LDPC codes as defined for the digital video broadcasting [DVB] specifications, e.g. DVB-Satellite [DVB-S2]
    • 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/611Specific encoding aspects, e.g. encoding by means of 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/65Purpose and implementation aspects
    • H03M13/6508Flexibility, adaptability, parametrability and configurability of the implementation
    • H03M13/6516Support of multiple code parameters, e.g. generalized Reed-Solomon decoder for a variety of generator polynomials or Galois fields
    • 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/65Purpose and implementation aspects
    • H03M13/6566Implementations concerning memory access contentions

Abstract

Konfigurierbarer LDPC-Decoder (500, 700, 900), welcher ausgelegt ist, mehrere unterschiedliche LDPC-Codestrukturen mit einer beliebigen Submatrixgröße zu unterstützen, wobei der LDPC-Decoder umfasst:eine Mehrzahl von unabhängig adressierbaren Speichern (504, 701 bis 704, 901 bis 903), die kollektiv ausgelegt sind, Weichentscheidungsdaten für jeden Bitknoten zur Verwendung beim Decodieren eines LDPC-Codes zu speichern, und wobei jeder Speicher eine Breite aufweist, wobei die Breite eines Speichers eine Menge an Daten umfasst, auf die aus dem Speicher in einem einzelnen Zyklus zugegriffen werden kann;eine Mehrzahl von Prüfknoten-Verarbeitungssystemen (304, 714, 914), die ausgelegt sind, parallel zu arbeiten und Aktualisierungen für die Weichentscheidungsdaten zu generieren;ein erstes Mischsystem (508, 708, 906), das ausgelegt ist, Daten aus der Mehrzahl von unabhängig adressierbaren Speichern zur Mehrzahl von Prüfknoten-Verarbeitungssystemen zu leiten; undein zweites Mischsystem (510, 706, 904), das ausgelegt ist, die Aktualisierungen für die Weichentscheidungsdaten aus der Mehrzahl von Prüfknoten-Verarbeitungssystemen zur Mehrzahl von unabhängig adressierbaren Speichern zu leiten,wobei eine Gesamtbreite der Mehrzahl von unabhängig adressierbaren Speichern größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten.

Description

  • Hintergrund
  • Paritätsprüfcodes mit niedriger Dichte (Low-density Parity-check Codes, LDPC-Codes), ähnlich anderen Codes wie Hamming-Codes, verwenden eine Anzahl von Bits für ein gegebenes Nachrichtenwort. Jede Paritätsprüfung deckt einen unterschiedlichen Satz der Nachrichtenbits ab, und die Paritätsprüfungen überlappen einander, so dass ein beliebiges einzelnes Nachrichtenbit von mehr als einer Paritätsprüfung abgedeckt wird. Das bedeutet, dass, wenn es eine begrenzte Anzahl von Fehlern gibt, es möglich ist, den Ort eines Fehlers zu identifizieren. LDPC-Codes sind durch eine mit H bezeichnete Paritätsprüfmatrix gekennzeichnet, die eine Zeile für jede Paritätsprüfung und eine Spalte für jedes Bit im gesamten Codewort aufweist. Für LDPC-Codes sind diese Paritätsprüfmatrizen sehr groß und dünnbesiedelt (d.h. sie umfassen größtenteils Nullen mit nur wenigen Einsen), was zu sehr langen Codewörtern führt.
  • Die Paritätsprüfmatrizen, H, können auch in der Form eines Tanner-Graphen repräsentiert werden, und 1 zeigt eine beispielhafte Paritätsprüfmatrix 102 und einen entsprechenden Tanner-Graphen 104. Der Tanner-Graph 104 zeigt Bitknoten 106 und Prüfknoten 108 und die Verbindungen (oder Kanten) zwischen ihnen. Es gibt einen Bitknoten für jedes Bit im Codewort (und diese entsprechen den Spalten in der Paritätsprüfmatrix 102) und einen Prüfknoten für jede Paritätsprüfung (und diese entsprechen den Zeilen in der Paritätsprüfmatrix 102).
  • LDPC-Codes werden typischerweise unter Verwendung von Soft-in-Softout-Verfahren decodiert, bei denen eine vorhergehende Stufe Informationen in den Decoder leitet, die den geschätzten Wert (1 oder 0) für jedes Bit und einen mit der Schätzung assoziierten Vertrauenswert beschreiben. Der Vertrauenswert kann in der Form eines Log-Wahrscheinlichkeitsverhältnisses (Log-likelihood Ratio, LLR) vorliegen. Der Decoder gibt Informationen in der gleichen Form aus (d.h. als Schätzwert und mit der Schätzung assoziierter Vertrauenswert). Der Decoder verwendet einen iterativen Nachrichtenaustauschalgorithmus auf der Basis von Belief Propagation, um die Decodierung vorzunehmen. Gemäß einem Beispiel eines derartigen Algorithmus teilen die Bitknoten den verbundenen Prüfknoten ihre aktuelle LLR-Schätzung mit, und unter Verwendung dieser Informationen nehmen die Prüfknoten ihre Paritätsprüfungen vor und liefern Informationen zurück an jeden verbundenen Bitknoten betreffend die Wahrscheinlichkeit, dass das assoziierte Bit eine ,1' ist. Beim Empfang der aktualisierten Informationen kombinieren die Bitknoten die Werte, die sie von allen verbundenen Prüfknoten empfangen. Dann wird das Verfahren wiederholt, wobei Bitknoten aktualisierte LLRs für die Prüfknoten bereitstellen, obwohl der aus einem Bitknoten zu einem beliebigen Prüfknoten geleitete Wert unterschiedlich sein kann, so dass ein Prüfknoten nur „neue‟ Informationen empfängt, die anzeigen, wie die anderen verbundenen Prüfknoten das LLR in der vorhergehenden Iteration modifiziert haben (d.h. ein Prüfknoten empfängt Informationen in Bezug auf Änderungen, die von allen anderen verbundenen Prüfknoten außer ihm selbst am LLR vorgenommen wurden). Dieses Verfahren ist ein Beispiel eines zweistufigen Nachrichtenaustauschs (TPMP), und das Decodieren kann effizienter gemacht werden, indem die beiden Stufen kombiniert werden, und das Ergebnis kann ein Merged Schedule-Nachrichtenaustausch (Merged-Schedule Messaging Passing, MSMP)-Algorithmus sein.
  • Unter Verwendung eines MSMP wird die aktuelle LLR-Schätzung für jeden Bitknoten verwendet, um einen Wert zu berechnen und zu speichern, der die Prüfknoten-zu-Bitknoten-Nachricht repräsentiert, und sobald ein Wert berechnet wurde, wird er verwendet, um eine temporäre Variable zu aktualisieren, welche die laufende Summe von LLR-Aktualisierungen für jeden Bitknoten ist. Sobald alle Prüfknoten verarbeitet wurden (und ihre Prüfknoten-zu-Bitknoten-Nachrichten verwendet wurden, um die laufenden Summen zu aktualisieren), wird die laufende Summe verwendet, um einen gespeicherten Wert des LLR (der aktuellen LLR-Schätzung) für jedes Bit zu aktualisieren. Wie zuvor, wird dieses Verfahren dann wiederholt.
  • Es gibt viele Anwendungen für LDPC-Codes, da gefunden wurde, dass sie ein zuverlässiges und effizientes Verfahren zur Datentransmission über einen rauschenden Transmissionskanal bereitstellen. Beispiele umfassen die Verwendung in vielen digitalen Fernseh-Standards (egal ob zur terrestrischen, Satelliten-, Kabel- oder mobilen Verwendung), wie DVB-T2, DVB-S2 und DVB-C2, und anderen drahtlosen Standards, wie WiMAX™ und einigen WiFi™-Varianten.
  • Die nachstehend beschriebenen Ausführungsformen sind nicht auf Implementierungen beschränkt, die beliebige oder alle der Nachteile bekannter LDPC-Decoder lösen.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl an Konzepten in einer vereinfachten Form vorzustellen, die nachstehend in der detaillierten Beschreibung weiter beschrieben werden. Diese Kurzfassung soll keine Schlüsselmerkmale oder wesentlichen Merkmale des beanspruchten Gegenstands identifizieren, und sie soll auch nicht als Hilfe bei der Bestimmung des Schutzbereichs des beanspruchten Gegenstands verwendet werden.
  • Verfahren und Vorrichtungen zum Decodieren von LDPC-Codes werden beschrieben. Ein LDPC-Code kann als Tanner-Graph repräsentiert werden, der Bitknoten (einen pro Bit im Codewort) und Prüfknoten (einen pro Paritätsprüfung) und Verbindungen zwischen ihnen umfasst. In einer Ausführungsform umfasst ein konfigurierbarer LDPC-Decoder, der viele unterschiedliche LDPC-Codes mit einer beliebigen Submatrixgröße unterstützt, einige unabhängig adressierbare Speicher, die verwendet werden, um Weichentscheidungsdaten (engl. soft decision data) für jeden Bitknoten zu speichern. Der Decoder umfasst ferner eine Anzahl, P, von Prüfknoten-Verarbeitungssystemen, die aktualisierte Weichentscheidungsdaten generieren. Die aktualisierten Werte werden dann zu den Speichern über ein Mischsystem zurückgeführt. Falls die Anzahl von Prüfknoten, die von den Prüfknoten-Verarbeitungssystemen parallel verarbeitet werden, PCNB ist (wobei P≥PCNB), und die Weichentscheidungsdaten für jeden Bitknoten eine Wortgröße von q Bits aufweisen, ist die Gesamtbreite der unabhängig adressierbaren Speicher größer als PCNB*q Bits.
  • Ein erster Aspekt stellt einen konfigurierbaren LDPC-Decoder bereit, welcher ausgelegt ist, mehrere unterschiedliche LDPC-Codestrukturen mit einer beliebigen Submatrixgröße zu unterstützen, wobei der LDPC-Decoder umfasst: eine Mehrzahl von unabhängig adressierbaren Speichern, die kollektiv ausgelegt sind, Weichentscheidungsdaten für jeden Bitknoten zur Verwendung beim Decodieren eines LDPC-Codes zu speichern, und wobei jeder Speicher eine Breite aufweist, welche Breite eines Speichers eine Menge an Daten umfasst, auf die aus dem Speicher in einem einzelnen Zyklus zugegriffen werden kann; eine Mehrzahl von Prüfknoten-Verarbeitungssystemen, die ausgelegt sind, parallel zu arbeiten und Aktualisierungen für die Bitknoten-Weichentscheidungsdaten zu generieren; ein erstes Mischsystem, das ausgelegt ist, Daten von der Mehrzahl von unabhängig adressierbaren Speichern zur Mehrzahl von Prüfknoten-Verarbeitungssystemen zu leiten; und ein zweites Mischsystem, das ausgelegt ist, Aktualisierungen für die Bitknoten-Weichentscheidungsdaten aus der Mehrzahl von Prüfknoten-Verarbeitungssystemen zur Mehrzahl von unabhängig adressierbaren Speichern zu leiten; und wobei eine Gesamtbreite der Mehrzahl von unabhängig adressierbaren Speichern größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten.
  • Ein zweiter Aspekt stellt ein Verfahren zum Decodieren eines LDPC-Codes bereit, umfassend: Zugreifen, in einem einzelnen Zyklus, auf Weichentscheidungsdaten für eine Mehrzahl von Bitknoten aus einer Mehrzahl von unabhängig adressierbaren Speichern, wobei jeder Speicher eine Breite aufweist und die Breite eines Speichers eine Menge an Daten umfasst, auf die aus dem Speicher in einem einzelnen Zyklus zugegriffen werden kann; Bereitstellen der Weichentscheidungsdaten, auf die zugegriffen wurde, für eine Mehrzahl von Prüfknoten-Verarbeitungssystemen; und Generieren von Aktualisierungen für die Weichentscheidungsdaten für die Mehrzahl von Bitknoten parallel in den Prüfknoten-Verarbeitungssystemen; und Speichern aktualisierter Weichentscheidungsdaten für die Mehrzahl von Bitknoten in der Mehrzahl von unabhängig adressierbaren Speichern, und wobei in wenigstens einem Zyklus das Zugreifen auf Weichentscheidungsdaten für eine Mehrzahl von Bitknoten das Zugreifen auf eine Gesamtmenge an Weichentscheidungsdaten umfasst, die größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten.
  • Weitere Aspekte stellen einen LDPC-Decoder bereit, im Wesentlichen wie mit Bezugnahme auf eine beliebige der 5, 7 und 9 der Zeichnungen beschrieben, und ein Verfahren, im Wesentlichen wie mit Bezugnahme auf 14 der Zeichnungen beschrieben, ein computerlesbares Speichermedium, das darauf codiert einen computerlesbaren Programmcode zum Generieren eines Prozessors aufweist, der den hier beschriebenen LDPC-Decoder umfasst, und ein computerlesbares Speichermedium, das darauf codiert einen computerlesbaren Programmcode zum Generieren eines Prozessors aufweist, der ausgelegt ist, das hier beschriebene Verfahren auszuführen.
  • Die hier beschriebenen Verfahren können von einem Computer ausgeführt werden, der mit Software in computerlesbarer Form konfiguriert ist, die auf einem greifbaren Speichermedium gespeichert ist, z.B. in der Form eines Computerprogramms, das einen computerlesbaren Programmcode zum Konfigurieren eines Computers umfasst, um die Bestandteile beschriebener Verfahren auszuführen, oder in der Form eines Computerprogramms, das Computerprogrammcodemittel umfasst, die ausgelegt sind, alle Schritte beliebiger der hier beschriebenen Verfahren auszuführen, wenn das Programmm auf einem Computer läuft, und wo das Computerprogramm auf einem computerlesbaren Speichermedium verkörpert werden kann. Beispiele greifbarer (oder nicht transitorischer) Speichermedien umfassen Platten, Speichersticks, Speicherkarten, etc., und umfassen keine ausgebreiteten Signale. Die Software kann für eine Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in einer beliebigen geeigneten Reihenfolge oder gleichzeitig durchgeführt werden können.
  • Die hier beschriebenen Hardware-Komponenten können durch ein nichttransitorisches computerlesbares Speichermedium generiert werden, das einen auf ihm codierten computerlesbaren Programmcode aufweist.
  • Dies bestätigt, dass Firmware und Software getrennt verwendet werden können und nützlich sein können. Es soll Software umfassen, die auf „nicht programmierbarer“ oder Standard-Hardware läuft oder diese steuert, um die gewünschten Funktionen durchzuführen. Es soll auch Software umfassen, welche die Konfiguration von Hardware „beschreibt“ oder definiert, wie HDL (Hardware-Beschreibungssprache)-Software, wie sie zur Ausbildung von Silicium-Chips oder zur Auslegung universell programmierbarer Chips verwendet wird, um gewünschte Funktionen durchzuführen.
  • Die bevorzugten Merkmale können wie geeignet kombiniert werden, wie für Fachleute klar ist, und können mit beliebigen der Aspekte der Erfindung kombiniert werden.
  • Figurenliste
  • Nun werden Ausführungsformen der Erfindung anhand von Beispielen mit Bezugnahme auf die folgenden Zeichnungen beschrieben, in denen:
    • 1 eine beispielhafte Paritätsprüfmatrix und einen entsprechenden Tanner-Graphen zeigt;
    • 2 zwei beispielhafte Paritätsprüfmatrizen zeigt;
    • 3 eine schematische Darstellung ist, die einen beispielhaften LDPC-Decoder zeigt;
    • 4 ein Beispielfragment einer Paritätsprüfmatrix zeigt;
    • 5 eine schematische Darstellung eines beispielhaften Decoders und eines Fragments einer H-Matrix zeigt, die eine einzelne Submatrix umfasst;
    • 6 zwei beispielhafte Submatrizen zeigt;
    • 7 eine schematische Darstellung eines weiteren beispielhaften Decoders zeigt;
    • 8 eine schematische Darstellung eines beispielhaften Prüfknoten-Verarbeitungssystems zeigt;
    • 9 eine schematische Darstellung eines weiteren beispielhaften Decoders zeigt;
    • 10 eine schematische Darstellung des Auswahlblocks aus dem in 9 gezeigten Decoder zeigt;
    • 11 eine schematische Darstellung ist, die ein Beispiel zeigt, wie die Daten für einen bestimmten Prüfknotenblock für einen bestimmten Code assembliert werden;
    • 12 eine schematische Darstellung eines weiteren beispielhaften Prüfknoten-Verarbeitungssystems zeigt;
    • 13 zwei weitere beispielhafte Submatrizen zeigt; und
    • 14 ein Flussdiagramm eines beispielhaften Betriebsverfahrens eines LDPC-Decoders zeigt.
  • Gemeinsame Bezugszahlen werden in den gesamten Figuren verwendet, um ähnliche Merkmale anzuzeigen.
  • Detaillierte Beschreibung
  • Ausführungsformen der vorliegenden Erfindung werden nachstehend anhand bloßer Beispiele beschrieben. Diese Beispiele repräsentieren die besten Wege zum Praktizieren der Erfindung, die der Anmelderin derzeit bekannt sind, obwohl sie nicht die einzigen Wege sind, wie dies erzielt werden könnte. Die Beschreibung führt die Funktionen des Beispiels und die Sequenz der Schritte zur Konstruktion und für den Betrieb des Beispiels aus. Es können jedoch die gleichen oder äquivalente Funktionen und Sequenzen durch unterschiedliche Beispiele erzielt werden.
  • Der oben beschriebene LDPC-Decodieralgorithmus involvierte das Speichern aller Bitknotenaktualisierungen in einer temporären Variable (der laufenden Summe) bis zum Ende einer Iteration, wenn alle Aktualisierungen auf einmal angewendet werden. Diese Technik ist als Fluten bekannt, und wenn ein gegebener Bitknoten in eine Anzahl von Prüfknotenberechnungen involviert ist, wird dieselbe LLR-Schätzung für den Bitknoten in allen Berechnungen innerhalb einer Iteration verwendet. Ein alternativer Ansatz gestattet jedoch Prüfknoten, die zuerst verarbeitet werden, ihre verbundenen Bitknoten sofort zu aktualisieren (und daher die aktuelle LLR-Schätzung für diese Bitknoten zu aktualisieren). Das bedeutet, dass nachfolgende Prüfknoten innerhalb derselben Iteration eine aktualisierte LLR-Schätzung verwenden. Dieser Ansatz wird geschichtete Decodierung genannt, erfordert weniger Speicher verglichen mit dem Fluten und führt dazu, dass der Algorithmus rascher konvergiert.
  • Einige LDPC-Codes sind für eine geschichtete Decodierung ausgebildet, und für diese Codes ist die Paritätsprüf- (oder H-) Matrix in Schichten geteilt, wobei jede Schicht aus einer Gruppe von Zeilen (d.h. einer Gruppe von Prüfknoten) besteht, und jede Schicht nur einen bestimmten Bitknoten einmal verwendet, wie im ersten Beispiel 202 von 2 gezeigt. Da jede Zeile in einer Schicht eine unterschiedliche Sammlung von Bits umfasst, können die Zeilen innerhalb einer Schicht parallel verarbeitet werden, ohne dass irgendein Konflikt von zwei oder mehreren Prüfknoten verursacht wird, die gleichzeitig versuchen, denselben Bitknoten zu aktualisieren.
  • In einigen Beispielen wird, zusätzlich zur Teilung der H-Matrix horizontal in Schichten, die Matrix weiter vertikal geteilt, um einen Satz von Submatrizen zu bilden, jeweils mit der Größe S1 mal S2, wie im zweiten Beispiel 204 in 2 gezeigt. Eine Zeile von Submatrizen bildet eine Schicht, und jede Submatrix enthält nur eine ,1' pro Spalte sowie nur eine ,1' pro Zeile. Auf diese Weise konstruierte Codes werden als „architekturbewusst‟ bezeichnet und führen zu einer signifikanten Logikersparnis im Decoder verglichen mit dem vorhergehenden Beispiel.
  • Obwohl sich die folgende Beschreibung auf eine geschichtete Decodierung bezieht, können die Verfahren auch bei nicht-geschichteten Codes verwendet werden, wie den DVB-T2-Codes, wie nachstehend mit Bezugnahme auf 13 beschrieben.
  • 3 ist eine schematische Darstellung, die einen beispielhaften LDPC-Decoder 300 zeigt. Er umfasst einen oder mehrere Speicher, die den A RAM 302 bilden, der ausgelegt ist, die geschätzten LLRs für jeden Bitknoten zu speichern (die als Weichentscheidungen oder „Bitknotenwerte“ bezeichnet werden können). Diese Werte können als Qj[k] bezeichnet werden, wobei j den Bitknoten identifiziert, und k die Iterationsnummer ist. Der LDPC-Decoder 300 umfasst ferner eine Mehrzahl von Prüfknoten-Verarbeitungssystemen (oder Prüfknoten-Verarbeitungsblöcken) 304, die parallel arbeiten. Jedes Prüfknoten-Verarbeitungssystem 304 weist eine Schnittstelle zu einem Prüf-zu-Bitknoten-Nachrichtenspeicher 306 auf, und dieser Speicher kann durch einen oder mehrere Speicher bereitgestellt werden (z.B. kann es einen Speicher pro Prüfknoten-Verarbeitungssystem 304 geben). Diese Prüf-zu-Bitknoten-Nachrichten können als Rij[k] bezeichnet werden, wobei i den Prüfknoten identifiziert. Der LDPC-Decoder 300 umfasst zusätzlich zwei Mischsysteme 308, 310, welche die geeigneten Bitknotendaten zur Verarbeitung aus dem A RAM 302 erhalten und sie zu den Prüfknoten-Verarbeitungssystemen 304 leiten, und dann die aktualisierten Bitknotendaten zu den geeigneten Punkten im A RAM 302 zurückführen.
  • Der in 3 gezeigte Decoder 300 umfasst P Prüfknoten-Verarbeitungssysteme 304 (wobei P eine ganze Zahl ist), und daher kann der Decoder ein Maximum von P Prüfknoten parallel verarbeiten. Die Gruppe von Prüfknoten, die parallel verarbeitet werden, kann als Prüfknotenblock (CNB) bezeichnet werden, und Beispiele von CNBs 402 sind in dem Beispielfragment einer H-Matrix 400 in 4 ersichtlich. Ein CNB umfasst PCNB Prüfknoten, und in dem Beispiel von 4 gilt PCNB=3. In einer beispielhaften Implementierung, die alle Prüfknoten-Verarbeitungssysteme 304 nutzt, gilt P=PCNB (für einen bestimmten LDPC-Code), obwohl, wie nachstehend beschrieben, in einigen Beispielen P>PCNB gilt (aufgrund der Differenz in den Submatrixgrößen verschiedener Codes, die vom LDPC-Decoder unterstützt werden). Durch das Erhöhen der Größe des CNB (d.h. durch das Erhöhen von PCNB) wird der Durchsatz erhöht; es wird jedoch die Hardwaregröße erhöht (als Ergebnis der zusätzlichen Prüfknoten-Verarbeitungssysteme 304, d.h. mit einer Zunahme von P). In einem Beispiel kann die Anzahl von Prüfknoten in einer Schicht ein ganzzahliges Vielfaches der CNB-Größe sein, so dass eine ganze Zahl von CNBs eine Schicht umfasst (z.B. wie in 4, wo es 9 Prüfknoten in einer Schicht und 3 Prüfknoten in einem CNB gibt). In einem Beispiel für DVB-T2 kann ein Decoder 8 CNBs pro Schicht verwenden, mit einer CNB-Größe von 45 (d.h. PCNB = 45), oder es kann die CNB-Größe reduziert werden, indem der Decoder bei einer erhöhten internen Taktfrequenz läuft.
  • Das Mischsystem 308 ist ausgelegt, die korrekten Bitknotendaten an den Prüfknoten-Verarbeitungssystemen 304 zu präsentieren. Das Abrufen der Daten für einen CNB (wie es für die Prüfknoten-Verarbeitungssysteme 304 erforderlich ist) involviert das Heraussuchen von Sätzen von Weichentscheidungsdaten (d.h. Sätzen von Qj[k] Werten) aus dem λ RAM 302, mit einer Länge von einem CNB (d.h. PCNB Werten pro Taktzyklus). Obwohl die H-Matrix als Satz von Submatrizen ausgelegt werden kann, wobei jede Submatrix eine Null-Matrix oder eine oder mehrere einzelne zyklisch verschobene Identitätsmatrizen umfasst (z.B. wie in 4 gezeigt), bedeutet die zyklische Verschiebung der Identitätsmatrizen, dass die Sätze von Daten, die aus dem λ RAM 302 erforderlich sind, an pseudozufällig angeordneten Startpunkten beginnen können. Wenn die Submatrixgröße gleich P ist oder gleich P*N ist (wobei N eine ganze Zahl ist), dann werden die Startpunkte regelmäßig sein, und das (vom Mischsystem 308) erforderliche Mischen ist weniger komplex. Wenn jedoch die Submatrixgröße nicht gleich P*N ist, dann werden die Startpunkte unregelmäßig sein, und das Mischsystem nimmt komplexere Operationen vor. Wenn beispielsweise die Sätze von Daten an pseudozufällig angeordneten Startpunkten beginnen und obwohl in fortlaufender Reihenfolge, werden sie die Submatrixgrenzen überlagern. Dies ist im CNB 2 in der rechten Submatrix des Beispielfragments einer in 4 gezeigten H-Matrix 400 dargestellt.
  • Die Verarbeitung eines Prüfknotens erfordert ri Bitknotenwerte (wobei ri die Anzahl von Bitknoten ist, die mit dem Prüfknoten i verbunden sind), und in dem in 4 gezeigten Beispiel trägt jede Nicht-Null-Submatrix einen Bitknotenwert für jeden Prüfknoten bei. Der Wert von rj ist gleich für alle Prüfknoten in einem CNB und ist gleich der Anzahl von Submatrizen, aus denen die Bitknotendaten zugeführt werden müssen.
  • Falls jedes Prüfknoten-Verarbeitungssystem 304 einen einzelnen q-Bit-Eingang und einen einzelnen q-Bit-Ausgang aufweist (wobei q die Wortbreite der Bitknoten-LLR-Daten, Qj[k], ist), werden die verbundenen Bitknotendaten in jedes Prüfknoten-Verarbeitungssystem in serieller Weise geleitet, und ein maximaler Durchsatz wird erzielt, wenn der Decoder 300 P Prüfknoten in ri Taktzyklen verarbeitet. Um diesem Durchsatz am Eingang und Ausgang des λ RAM 302 zu entsprechen, erfordert der λ RAM 302 eine gesamte RAM-Breite von P*q Bits (für einen Dualport-RAM); falls jedoch die gesamte RAM-Breite genau gleich P*q Bits ist (für einen Dualport-RAM), ist das Umordnungssystem, das innerhalb der Mischsysteme 308, 310 implementiert ist, um die Daten in der korrekten Reihenfolge zu präsentieren (für die Prüfknoten-Verarbeitungssysteme 304 und den λ RAM 302) komplex, und dies führt zu einer signifikanten Latenz. Wenn die Diagonale (in einer zyklisch verschobenen Identitätsmatrix) nicht mit Speicherortgrenzen ausgerichtet ist, müssen Daten, die in einem Zyklus herausgezogen werden (d.h. für einen CNB), zur Verwendung bei der Verarbeitung eines nachfolgenden CNB gespeichert werden, und dies kann mit Bezugnahme auf 4 beschrieben werden.
  • Im Beispielfragment einer in 4 gezeigten H-Matrix ist die Submatrixgröße S (wobei S eine ganze Zahl ist) ein ganzzahliges Vielfaches der Größe eines CNB, PCNB. In dem gezeigten Beispiel ist PCNB=3 und S=9, d.h. es gibt 3 CNBs in einer Submatrix, und die Speicherbreite ist 3 Bitknoten (d.h. 3q, was genau gleich ist PCNB*q). Mit erneuter Bezugnahme auf 3 umfasst der entsprechende Decoder drei Prüfknoten-Verarbeitungssysteme 304 (P=3=PCNB). In dem in 4 gezeigten Beispiel gibt es auch nur eine Identitätsmatrix pro Submatrix, obwohl die hier beschriebenen Verfahren bei Codes angewendet werden können, wo es mehr als eine Identitätsmatrix pro Submatrix gibt, wie nachstehend mit Bezugnahme auf 13 beschrieben.
  • Um den CNB 0 zu verarbeiten, können alle für die linke Submatrix erforderlichen Daten durch das Zugreifen auf den Speicherort 0 erhalten werden (z.B. in einem erste Zyklus, wobei ein Bitknotenwert zu jedem der drei Prüfknoten-Verarbeitungssysteme 304 geleitet wird); um auf die Daten für die rechte Submatrix zuzugreifen (wobei die zentrale Submatrix eine Null-Matrix ist und so für die CNBs 0 bis 2 ignoriert wird), wird jedoch auf die Speicherorte 6 und 7 zugegriffen (was zwei Zyklen dauert). Beim Zugreifen auf diese beiden Speicherorte werden mehr Daten erhalten als erforderlich ist, um den CNB 0 zu verarbeiten, und diese zusätzlichen Daten sind für die Verarbeitung der CNBs 1 und 2 erforderlich. Da die gesamte RAM-Breite gleich PCNB*q ist (P=PCNB in diesem Beispiel), gibt es keinen verfügbaren RAM-Durchsatz, um erneut auf dieselben Daten zuzugreifen (bei der Verarbeitung von CNB 1 oder 2), und so müssen diese zusätzlichen Daten behalten werden. Das Behalten dieser Daten ist problematisch, da es eine Latenz einbringt (d.h. es bringt eine Zeitperiode ein, während welcher die Daten außerhalb des A RAM zwischengespeichert werden und während welcher Zeit eine neue Submatrixzeile nicht verarbeitet werden kann, falls dieselben Bitknoten in eine Nicht-Null-Submatrix in der nächsten Zeile eingegeben werden). Dies verursacht Schwierigkeiten bei der Sicherstellung, dass Aktualisierungen in der korrekten Reihenfolge verabeitet werden, und erfordert zusätzlichen Speicher, z.B. in der Form von Cache-Speichern für die zusätzlichen Daten.
  • Hier wird ein verbesserter LDPC-Decoder (oder eine Decoder-Architektur) beschrieben, der insofern konfigurierbar ist, als er viele unterschiedliche LDPC-Codes unterstützt, und diese unterstützten LDPC-Codes eine beliebige Submatrixgröße aufweisen können. Ferner ist im verbesserten LDPC-Decoder die gesamte Speicherbreite (d.h. die Menge an Daten, auf die vom gesamten A RAM 302 in einem einzelen Zyklus zugegriffen werden kann) größer als P*q, was ermöglicht, dass auf Daten im Wert eines vollständigen CNB in einem einzelnen Zyklus (z.B. in einem einzelnen Zugriff auf einen Speicher) pro Submatrix zugegriffen werden kann, ungeachtet dessen, wo die Diagonale innerhalb der Submatrix platziert ist und ohne jede Notwendigkeit, unerwünschte Daten für eine spätere Verwendung zu speichern. Der A RAM 302 kann mehrere unabhängig adressierbare Speicher (d.h. M unabhängig adressierbare Speicher, wobei M eine ganze Zahl ist) umfassen. In verschiedenen Beispielen können die M Speicher eine oder mehrere zusätzliche Speicherbänke verglichen mit der Grundanforderung einer Breite von P*q umfassen (z.B. wie in 7 gezeigt), und/oder breitere Speicherbänke (z.B. wie in 9 gezeigt). In vielen Beispielen können die M Speicherbänke alle dieselbe Breite aufweisen; in anderen Beispielen können die Speicher jedoch unterschiedliche Breiten aufweisen (z.B. 4 Speicher mit größerer Breite und 2 Speicher mit kleinerer Breite, wobei M=6).
  • In einem Beispiel, das für DVB-T2 verwendet werden kann, gilt PCNB=45=P und der A RAM 302 kann Speicherbänke umfassen, die jeweils eine Breite von 15 Weichentscheidungen aufweisen (z.B. jeweils eine Breite von 15q haben). In diesem Beispiel würden 3 Speicher mit P übereinstimmen (und können als Grundspeicheranforderung bezeichnet werden); in einem beispielhaften verbesserten Decoder kann es jedoch 4 Speicher geben. In einem zweiten Beispiel können 3 breitere Speicher verwendet werden, wobei jeder Speicher eine Breite von 2/3*P*q aufweist (anstelle von 1/3*P*q, was die Grundanforderung ist).
  • Wenn P=PCNB, kann die Grundspeicheranforderung als P*q oder PCNB*q bezeichnet werden. Wenn P>PCNB, ist jedoch die Grundspeicheranforderung für den bestimmten Code PCNB*q, und die Grundspeicheranforderung für den Decoder (der ein multicodefähiger Decoder sein kann) ist P*q (wie durch die Anzahl von Prüfknoten-Verarbeitungssystemen und nicht die tatsächliche Größe des für einen beliebigen Code verwendeten CNB bestimmt wird). Wenn die Grundanforderung (P*q) von Mmin Speichern erfüllt wird, jeweils mit einer Breite von P/Mmin*q, kann es mehr als Mmin Speicher geben (d.h. M>Mmin) und/oder jeder Speicher kann eine Breite aufweisen, die P/Mmin*q überschreitet.
  • 5 zeigt eine schematische Darstellung eines beispielhaften konfigurierbaren LDPC-Decoders 500, der viele unterschiedliche LDPC-Codes (mit einer beliebigen Submatrixgröße) umfasst, und eines Fragments einer H-Matrix, die eine einzelne Submatrix 502 umfasst, wobei die Submatrixgröße 36 ist. In diesem Beispiel gilt P=PCNB=9 (so gibt es 9 Prüfknoteri-Verarbeitungssysteme 304, und PCNB ist ein ganzzahliges Submultipel der Submatrixgröße), und der A RAM 302 umfasst vier Speicher 504 (markiert mit A bis D). Die Speicherbreite jedes Speichers ist 3 Bitknotenwerte (d.h. 3q), so dass drei Speicher die Grundanforderung (von P*q) erfüllen würden; dieses System umfasst jedoch einen zusätzlichen Speicher (was eine gesamte Speicherbreite von 12q = 4/3*P*q ergibt). Es ist klar, dass diese Anordnung, die 4 Speicher umfasst, nur als bloßes Beispiel gezeigt ist, und in andere Beispielen, in Abhängigkeit von der Submatrixgröße, dem erforderlichen Durchsatz, etc., unterschiedliche Anzahlen von Speichern verwendet werden können. Beispielsweise kann eine beliebige Anordnung von M Speichern verwendet werden, bei der die Gesamtbreite von M-1 dieser M Speicher wenigstens PCNB-1 Bitknotenwerte zuführen kann, d.h. für M Speicher, jeweils mit einer Breite von w Bitknotenwerten, (M-1)w≥(PCNB-1).
  • Obwohl 5 PCNB als ganzzahliges Submultipel der Submatrixgröße zeigt, ist klar, dass dies nicht immer möglich sein kann (z.B. wenn S prim ist).
  • Der Decoder 500 umfasst ferner zwei Mischsysteme 508, 510. Das erste Mischsystem 508 ist ausgelegt, die korrekten Bitknotendaten den Prüfknoten-Verarbeitungssystemen 304 zu präsentieren, und das zweite Mischsystem 510 ist ausgelegt, aktualisierte Bitknotendaten (z.B. in der Form von Aktualisierungen oder aktualisierten Werten, wie nachstehend detaillierter beschrieben) zum A RAM 504 zurückzuführen.
  • Die Operation der Extraktion von Bitknotendaten aus der Submatrix 502 ist für den CNB 0 durch die Schraffierung in 5 gezeigt, und diese Operation wird vom ersten Mischsystem 508 implementiert. Wie in 5 gezeigt, werden alle erforderlichen Bitknotenwerte durch das Zugreifen auf den RAM C-Ort 0, RAM D-Ort 0, RAM A-Ort 1 und RAM B-Ort 1 erhalten, und auf alle diese Werte kann in einem einzelnen Zyklus zugegriffen werden (da es nur einen einzelnen Ort aus jedem Speicher gibt, auf den zugegriffen wird). Zwei Bitknotenwerte werden dann aus den Daten verworfen, auf die aus dem RAM C zugegriffen wurde, und ein Bitknotenwert wird aus den Daten verworfen, auf die aus dem RAM B zugegriffen wurde. Die Anzahl von Speicherorten, die zu jedem CNB beitragen können, ist von der Architekturausbildung abhängig.
  • 6 zeigt eine erste beispielhafte Submatrix 600, die der in 5 gezeigten darin ähnlich ist, dass sie der Vier-Speicher-Anordnung (M=4) mit 3 Weichentscheidungen pro Speicherort entspricht; in dieser beispielhaften Submatrix 600 gibt es jedoch nur 3 CNBs pro Submatrix, somit ist die Submatrixgröße 27 (verglichen mit S=36 in 5 mit 4 CNBs pro Submatrix). Das bedeutet, dass in der Submatrix 600 9 Speicherorte sind, die zur Submatrix beitragen; dies ist die erste Submatrix in einer Zeile, also umfassen diese die Orte 0 und 1 aus jedem Speicher und zusätzlich den Ort 2 aus dem RAM A.
  • Wie in diesem Beispiel ersichtlich ist, würde die Verarbeitung von CNB 0 in der Submatrix 600 das Ziehen von Daten aus 2 Orten im Speicher A (A0 und A2) erfordern, während Speicher B ungenutzt bleibt; somit ist dies nicht möglich.
  • Im Gegensatz dazu greift in der zweiten beispielhaften Submatrix 602 in 6 ein beliebiger RAM-Ort (oder eine RAM-Adresse), bei der Anwendung quer über alle RAMs (z.B. Ort x aus jedem der RAMs 1 bis M), auf Daten aus nur einer Submatrix zu, und dies vermeidet die mit Bezugnahme auf die Submatrix 600 oben beschriebenen Probleme. Im zweiten Beispiel gibt es 3 RAMs (M=3), und jeder Speicherort ist 5 Weichentscheidungen breit. Jeder RAM führt zwei Orte pro Submatrix zu, und die sechs Orte stellen eine Speicherbreite von 30 Bitknoten bereit. Dies führt zu 3 verschwendeten Bitknoten (im Speicherort C1 in diesem Beispiel); es ermöglicht jedoch eine zyklische Auswahl von Speichern bei einer Überlagerung der Submatrixgrenze (d.h. damit es nicht notwendig ist, aus zwei Orten in demselben Speicher für einen einzelnen CNB zu lesen). In Beispielen wie diesem, wo es ungenutzte RAM-Datenwege gibt, kann eine Lückenschluss-Hardware verwendet werden, und diese wird nachstehend mit Bezugnahme auf 9 beschrieben.
  • Der GB20600-Code (der ein Beispiel eines LDPC-Codes ist, der für digitales terrestrisches Fernsehen verwendet wird) verwendet eine Submatrixgröße von 127, was eine Primzahl ist. Falls Hardware implementiert wird, die 45 Prüfknoten parallel verarbeiten kann (P=45, da dies eine optimale Anordnung für einen weiteren Code ist), wäre dann eine effiziente Spaltung in CNBs für den GB20600-Code 3 CNBs pro Submatrix mit der Größe 42, 42 und 43, da dies die verfügbaren Prüfknoten-Verarbeitungssysteme effizient nutzen würde. Mit einer Vier-Speicher-Anordnung, wie oben beschrieben und die optimal für andere Codes (z.B. DVB-T2) sein kann, und einer Speicherortbreite von 15 Weichentscheidungen ergibt dies 9 RAM-Orte pro Submatrix (9 Speicherbreiten ergeben 135 Weichentscheidungen). In dieser Anordnung wird jedoch ein beliebiger RAM-Ort, bei der Anwendung quer über alle RAMs (z.B. Ort x in jedem der RAMs 1 bis M), nicht auf Daten aus nur einer Submatrix zugreifen (wie oben detailliert ausgeführt), und stattdessen wird es einige RAM-Orte, bei der Anwendung quer über alle RAMs, geben, die auf Daten aus mehr als einer Submatrix zugreifen. Das bedeutet, dass die zyklische Auswahl quer über Submatrixgrenzen zusammenbrechen wird und so nicht möglich ist. Um eine Vier-Speicher-Anordnung (M=4) zur Verarbeitung dieses Codes zu verwenden, können 12 RAM-Orte pro Submatrix (ein Vielfaches von M) verwendet werden. Mit anderen Worten würde ein so ausgebildetes System 4 CNBs pro Submatrix mit einer Größe von 32 oder 31 (3 * 32 + 31 = 127) verwenden. Jeder CNB nimmt Daten aus 3 Speicherorten, und es besteht eine Hardware-Nutzungseffizienz von 71 % (da 32 der 45 Prüfknoten-Verarbeitungssysteme verwendet werden).
  • Mit dieser Anordnung von 4 Speichern (M=4) können unterschiedliche Submatrixgrößen zu einer sehr unterschiedlichen Hardware-Nutzung führen. Mit der Submatrixgröße S = 60 können beispielsweise 4 RAM-Orte pro Submatrix verwendet werden und daher die 15 RAM-Datenwege vollständig ausnutzen. Mit 2 CNBs pro Submatrix werden 30 Prüfknoten-Verarbeitungssysteme genutzt (von den insgesamt 45 Prüfknoten-Verarbeitungssystemen), für eine Effizienz von 67 %. Für S=61 müssen jedoch 8 RAM-Orte pro Submatrix verwendet werden, daher werden 7 oder 8 RAM-Orte tatsächlich in jedem RAM genutzt. Das bedeutet die Verwendung einer CNB-Größe von 20 oder 21 (bei 3 CNBs pro Submatrix), was die Effizienz auf 45 % senkt. Demgemäß kann, in Abhängigkeit von der Submatrixgröße, die Vier-Speicher-Anordnung nicht optimal sein, und nachstehend wird eine alternative Anordnung mit Bezugnahme auf 9 beschrieben.
  • Wie oben beschrieben, um Probleme zu vermeiden, die damit zusammenhängen , dass auf zwei Speicherorte aus demselben RAM zugegriffen werden muss, greift ein beliebiger RAM-Ort (oder eine RAM-Adresse), bei der Anwendung quer über alle RAMs, auf Daten aus nur einer Submatrix zu, d.h. der Ort x aus jedem der RAMs 1 bis M greift auf dieselbe Submatrix zu. Die Anzahl von Speicherorten in einer Submatrix ist daher ein Vielfaches der Anzahl genutzter unabhängig adressierbarer Speicher (M), die gemeinsam den A RAM bilden.
  • 7 ist eine schematische Darstellung eines weiteren beispielhaften konfigurierbaren LDPC-Decoders 700, der viele unterschiedliche LDPC-Codes unterstützt (mit einer beliebigen Submatrixgröße), wobei die Gesamtspeicherbreite den Grundlinienwert P*q überschreitet. Wie beim Beispiel von 5 umfasst das Beispiel in 7 vier Speicher 701 bis 704 und weist eine gesamte Speicherbreite von 4/3*P*q auf.
  • Wie im Beispiel von 5, umfasst der Decoder 700 zwei Mischsysteme 706, 708. Das Mischsystem 708 am Ausgang des A RAM 701 bis 704 umfasst einen Lese-Bitstellenverschieber 710 und eine Mehrzahl miteinander verbundener Multiplexer 712. Die gelesenen Daten aus den RAMs 701 bis 704 werden an den Lese-Bitstellenverschieber 710 angelegt, der die Tatsache behandelt, dass der Start jeder Diagonale innerhalb der H-Matrix mit der Speicherbreite nicht ausgerichtet sein kann. So nimmt der Bitstellenverschieber 710 4P/3 Weichentscheidungen aus den RAMs 701 bis 704 auf und gibt die erforderlichen P Weichentscheidungen aus, wobei die Bitknoten mit ihren jeweiligen Prüfknoten ausgerichtet werden, und die unerwünschten P/3 Weichentscheidungen in dem Prozess verworfen werden. Der Satz von Multiplexern 712 am Eingang in den Bitstellenverschieber 710 ordnet den RAM-Ausgang um, um die Tatsache zu behandeln, dass sich der die höheren Prüfknoten enthaltende Speicher gemäß der Position der Diagonale ändern wird, und um die Bitknoten für den Bitstellenverschieber 710 in einer konsistenten Reihenfolge bereitzustellen (z.B. höchste Prüfknoten links, niedrigste Prüfknoten rechts im gezeigten Beispiel).
  • Die Verarbeitung eines einzelnen CNB besteht aus einem Auslesen der Bitknotendaten aus jeder Nicht-Null-Submatrix abwechselnd (aus dem A RAM 701 bis 704), und daraus, diese durch den Bitstellenverschieber 710 in die Prüfknoten-Verarbeitungssysteme 714 fließen zu lassen. Aktualisierungen für die Bitdaten fließen dann aus den Prüfknoten-Verarbeitungssystemen (oder Systemen) 714 in derselben Reihenfolge, wobei sie in einen Schreib-Bitstellenverschieber 716 eintreten (der ein Teil des zweiten Mischsystems 706 ist). Dieser Bitstellenverschieber 716 nimmt die entgegengesetzte Funktion zum Lese-Bitstellenverschieber 710 vor, wobei er die Daten mit der erforderlichen Position in den RAMs 701 bis 704 erneut ausrichtet. Ein Satz von Multiplexern 718 richtet dann die korrekten Werte in jeden RAM. Da die RAMs 701 bis 704 4P/3 Eingangswerte aufnehmen, obwohl nur P Werte von den Prüfknoten-Verarbeitungssystemen 714 ankommen, werden einige Werte ungültig sein, und diese werden dagegen maskiert, von einem Satz von Schreibfreigabesteuerungen 720 geschrieben zu werden.
  • Es ist klar, dass der Betrieb von Lese- und Schreib-Bitstellenverschiebern, auf die hier Bezug genommen wird (z.B. Lese-Bitstellenverschieber 710 und Schreib-Bitstellenverschieber 716), von herkömmlichen Bitstellenverschiebern verschieden ist, die in einem herkömmlichen LDPC-Decoder verwendet werden können. Ein herkömmlicher Bitstellenverschieber ist für eine spezielle Größe der Codesubmatrix ausgelegt und nimmt einfach eine zyklische Rotation der Eingangselemente vor und gibt dann jene zyklisch rotierten Eingangselemente aus (d.h. dieselbe Anzahl von Elementen wird ausgegeben wie eingegeben werden). Wie oben beschrieben, geben jedoch die Bitstellenverschieber, die in den hier beschriebenen konfigurierbaren LDPC-Decodern implementiert sind, unterschiedliche Anzahlen von Elementen ein und aus (z.B. gemäß der präzisen RAM-Anordnung, LDPC-Codestruktur, etc.).
  • 8 zeigt eine schematische Darstellung eines beispielhaften Prüfknoten-Verarbeitungssystems 800. Jedes Prüfknoten-Verarbeitungssystem empfängt ein Stück von Bitknotendaten, Qj[L-1], pro Taktzyklus (wobei L der Schichtindex ist, für eine geschichtete Decodierung), so dass es ri Taktzyklen dauert, um ausreichende Daten zu akkumulieren, um mit der Berechnung fortzufahren. Aus diesem Grund sind die Qj-Register 801 bis 802 am Eingang in das Prüfknoten-Verarbeitungssystem 800 doppelt gepuffert: Während Daten für einen Prüfknoten eintreten, werden die Daten für den vorhergehenden Prüfknoten verarbeitet.
  • Die erste Stufe der Prüfknoten-Verarbeitung ist, die gespeicherten Prüf-zu-Bitknoten-Nachrichten aus der letzten Iteration Rij[k-1] von den Qj[L-1] Werten zu subtrahieren (Block 803). In einigen Beispielen können die Rij[k-1] Werte in „komprimierter“ Form (z.B. Minimum, Index von Minimum, Satz von Vorzeichen-Bits und Minimum-außer-Eins-Wert) im Speicher 804 gespeichert werden. Diese Daten werden in doppelt gepufferter Weise (in den Blöcken 806 bis 807) „dekomprimiert“, so dass die dekomprimierten Rij[k-1] Werte koninzident mit den entsprechenden Qj[L-1] Werten (am Block 803) auftreten.
  • Der neue Satz von Prüf-zu-Bitknoten-Nachrichten Rij[k] kann dann berechnet werden (in Block 808) unter Verwendung von: R i j [ k ] = δ i j . M I N j ' R [ i ] \ { j } ( | Q j ' [ L 1 ] R i j ' [ k 1 ] | )
    Figure DE102014012138B4_0001
    wobei δij ein Vorzeichenkorrekturfaktor ist, der durch die EXKLUSIV-ODER-Funktion von Vorzeichen bestimmt wird (siehe nachstehende Gleichung 4), und der Ausdruck j'∈ R[i] \ {j}anzeigt, dass der Index j' quer über den Satz verbundener Bitknoten läuft, den aktuellen Index j jedoch überspringt. Die neuen Prüf-zu-Bitknoten-Nachrichten werden erneut gespeichert (im Speicher 804) in komprimierter Form (wobei die Kompression in Block 810 vorgenommen wird), bereit für die nächste Iteration.
  • Die folgende Gleichung kann dann verwendet werden, um die Bitknotenwerte zu aktualisieren: Q j [ L ] = Q j [ L 1 ] R ij [ k 1 ] + R ij [ k ]
    Figure DE102014012138B4_0002
  • Im in 8 gezeigten Beispiel ist jedoch der aus dem Prüfknoten-Verarbeitungsblock 800 austretende Wert nur der - Rij[k-1] + Rij[k] Teil (wie in Block 812 generiert), und die Addition mit Qj[L-1] wird von den Addierern 722 durchgeführt, die vor dem Speichern zurück in die RAMs 701 bis 704 angeordnet sind (wie in 7 gezeigt).
  • Die obigen Gleichungen (1) und (2) werden nachstehend detaillierter erläutert.
  • 9 ist eine schematische Darstellung eines weiteren Beispiels eines konfigurierbaren LDPC-Decoders 900, der viele unterschiedliche LDPC-Codes (mit einer beliebigen Submatrixgröße) unterstützt, und bei dem die gesamte Speicherbreite den Grundlinienwert P*q überschreitet. In diesem Beispiel gibt es drei λ RAMs 901 bis 903 (M=3), die jeweils eine Speicherbreite von 2/3*P*q aufweisen, was eine Gesamtbreite von 2P*q ergibt. Die in 9 gezeigte Architektur ist sehr flexibel und kann viele unterschiedliche Submatrixgrößen (z.B. im Bereich von kleinen Submatrixgrößen für einige drahtlose Standards bis signifikant größeren Submatrixgrößen für Digitalfernseh-Standards) und daher viele unterschiedliche Codes aufnehmen.
  • In diesem Bespiel ist die Implementierung der Mischsysteme 904, 906 geringfügig verschieden von der in 7 gezeigten und oben beschriebenen, obwohl es klar ist, dass beide Decoder 700, 900 eine beliebige geeignete Architektur verwenden können, um die Mischsysteme zu implementieren. In dem Beispiel von 9 arbeiten Lese-Vor-Schieber 908 bis 909 und Schreib-Nach-Schieber 910 bis 911, um jegliche Lücken zu schließen, die durch ungenutzte Datenwege in den RAMs verursacht werden. Durch das Einbringen von Lückenschluss-Hardware in die Architektur ist die Anzahl von Weichentscheidungen (d.h. Bitknotenwerten), die aus jedem Speicherort austreten können, eine Variable, die für eine bestimmte Anwendung ausgewählt werden kann.
  • In einem Standard, in dem alle Datenwege in den RAMs verwendet werden (d.h. für Submatrixgrößen, in denen alle Datenwege in den RAMs verwendet werden, P=PCNB), bleiben die Vor- und Nach-Schieberwerte auf 0, und diese Stufen haben keinen Effekt. Dies ist beispielsweise der Fall bei DVB-T2 mit PCNB=36. Für diesen Code kann eine Submatrixgröße von 360 verwendet werden, die dann in 10 CNBs geteilt werden kann, um die 36 Prüfknoten-Verarbeitungssysteme zu 100 % zu nutzen, die innerhalb eines beispielhaften Decoders (mit S=360, P=36) bereitgestellt werden können. Mit 24 Weichentscheidungen pro RAM-Ort (da die Speicherbreite 2/3*P*q und 2/3*36=24 ist), gibt es 15 RAM-Orte pro Submatrix, was ein Vielfaches von 3 ist, wie es bei einem 3 RAM-System erforderlich ist (aus den oben mit Bezugnahme auf 6 beschriebenen Gründen).
  • Für den Fall eines GB20600 (eines anderen Digitalfernseh-Standards), der auf derselben Hardware läuft, gilt S=127 und nur 6 RAM-Orte bilden die Submatrix (wobei 6 das kleineste Vielfache von 3 ist, das zu ≤ 24 Weichentscheidungen führt, die pro RAM-Ort verwendet werden); so sind nur 21 oder 22 Weichentscheidungen tatsächlich aus jedem RAM-Ort, angesichts der Submatrixgröße von 127. Mit 36 verfügbaren Datenwegen (P=36) ist die maximale CNB-Größe, die verwendet werden kann, 36, und 4 CNBs pro Submatrix können verwendet werden, so dass die tatsächlich CNB-Größe PCNB 31 oder 32 ist, was eine Nutzungszahl von 88 % ergibt (wobei diese gegeben ist durch PCNB/P).
  • Wie durch dieses Beispiel nachgewiesen, sollte für eine verbesserte Effizienz PCNB (die CNB-Größe) nahe bei P liegen, da dies bedeutet, dass die Prüfknoten-Verarbeitungs-Hardware nicht unterausgelastet ist, mit den Einschränkungen, dass die Anzahl von RAM-Orten, die eine Submatrix bilden, ein Vielfaches der Anzahl unabhängig adressierbarer Speicher ist, und die Anzahl von Weichentscheidungen pro Ort die Breite eines einzelnen Speichers nicht überschreitet.
  • Die Lese-Vor-Schieber 908 bis 909 schieben die Daten von den „außenliegenden“ Speicherorten nach innen zum Zentrum, was die Erzeugung von „Überlappungen“ ermöglicht, wo es ungenutzte Datenwege gibt. Der Auswahlblock 912, der diesen Vor-Schiebern 908 bis 909 folgt, besteht dann aus 2-zu-1-Multiplexern, um die geeigneten Leitungen auszuwählen, wo eine Überlappung erzeugt wurde, d.h. in Bereichen einer Überlappung zwischen unerwünschten Daten aus einem Speicher und erwünschten Daten aus einem zweiten Speicher wird der Auswahlblock den zweiten Speicher auswählen. 10 zeigt eine schematische Darstellung des Auswahlblocks 912, vereinfacht für den Fall von P=12; und 11 zeigt ein Beispiel, wie die Daten für einen bestimmten CNB für den GB-20600-Fall assembliert werden.
  • In 11 sind die erwünschten Daten 1102 mit einer diagonalen Schraffierung gezeigt, und dies entspricht der fettgedruckten Diagonale 1104, die innerhalb des CNB 0 gezeigt ist (im H-Matrixfragment 1105). Unerwünschte Daten 1106 sind ohne jede Schraffierung gezeigt, und Daten, die von ungenutzten RAM-Datenwegen 1108 kommen, sind als gepunktetes Muster gezeigt. Es ist klar, dass sowohl die CNB-Größe als auch die Anzahl von RAM-Datenwegen gemäß der Position in der H-Matrix variieren können.
  • In diesem Beispiel sind die ungenutzten Daten in den „rechten“ Speicherdatenwegen angeordnet (d.h. den Datenwegen mit dem höchsten Bitknotenindex). Dadurch entsteht eine „Asymmetrie“ in der Schiebe/Auswahl-Ausbildung (z.B. in 9 oder 10). Der Ausgang aus dem Speicher B ist nach rechts verschoben, um die ungenutzten Wege zu verlieren; die Daten in diesem Bereich kommen jedoch immer aus dem Speicher B (d.h. sie sind in eine Position verschoben, die auch vorher von Daten aus dem Speicher B eingenommen wurde), somit besteht keine Notwendigkeit für Selektoren. Der Ausgang aus dem Speicher A ist nach links verschoben, um mit dem ungenutzten Bereich des Speichers C zu überlappen, und der Auswahlblock wählt den Speicher A in diesem Bereich aus. So werden die unerwünschten Lücken geschlossen.
  • Die Lückenschluss-Hardware, die in 9 bis 11 gezeigt ist und oben beschrieben wird, ermöglicht es einem System, die Breite eines RAM effektiv zu ändern, um unterschiedliche Submatrixgrößen zu bewältigen (indem dem System gestattet wird sicherzustellen, dass sich Daten in die Submatrixgröße teilen). Wenn es mehr als eine Lücke gibt, die geschlossen wird, müssen die Größen der unterschiedlichen Lücken nicht gleich sein.
  • Der in 9 gezeigte beispielhafte Decoder umfasst keine Addierer (z.B. entsprechend den Addierern 722 in 7). In diesem Fall wird die Addition von - Rij[k-1] + Rij[k] mit Qj[L-1] innerhalb der Prüfknoten-Verarbeitungssysteme 914 vorgenommen, und 12 zeigt eine schematische Darstellung eines Beispiels eines derartigen Prüfknoten-Verarbeitungssystems 1200.
  • In dem beispielhaften Prüfknoten-Verarbeitungssystem 1200, das in 12 gezeigt ist, werden die Rij Nachrichten aus diesem Prüfknoten bei der vorhergehenden Iteration im Voraus aus dem Rij RAM 1202 abgerufen; diese werden dann dekomprimiert (in Block 1204) und von den Qj Werten subtrahiert (in Block 1206), während sie in das Prüfknoten-Verarbeitungssystem 1200 eintreten, wobei sie die Qij Bit-zu-Prüfknoten-Nachrichten bilden. Während diese eintreten, zeichnet das System ihre Vorzeichen auf und hält eine laufende Schätzung der minimalen und nächst-minimalen Größen. Die Qij Nachrichten werden auch in einem FIFO 1208 gespeichert. Sobald die letzten Bitknotenwerte für einen bestimmten CNB eingetreten sind, kann dann jedes Prüfknoten-Verarbeitungssystem einen neuen komprimierten Satz von Rij Nachrichten zum Speichern bilden (in Block 1210). Diese Nachrichten werden in einem kleinen Puffer 1212 gespeichert; und sie können beim Ausgang aus diesem Puffer dekomprimiert werden (in Block 1214) und mit den Qij Nachrichten addiert werden, die aus dem FIFO 1208 austreten (in Block 1216), wobei die neuen Qj Werte zum Ausgeben zurück an die λ RAMs gebildet werden.
  • In einer Variation des in 9 bis 12 gezeigten LDPC-Decoders 900 können zwei Ebenen des Verschiebens (d.h. die Vor-Schieber und die Nach-Schieber), die sowohl für Lesen als auch Schreiben gezeigt sind, zu einer einzelnen Verschiebungsstufe für jedes Lesen und Schreiben kombiniert werden. In einem Beispiel kann die Verschiebungsstufe eine einzelne Verschiebung an jede von einer linken, mittleren und rechten Gruppe von LLRs mit einer geeigneten Maskierung anlegen und sie dann mit einer logischen ODER-Verknüpfung verbinden. Dies ist funktionell äquivalent zum in 9 bis 12 gezeigten zweistufigen Ansatz, und es ist klar, dass es andere Variationen in der Verschiebungsstrategie geben kann, die auch funktionell äquivalent sind.
  • Die in 9 bis 12 gezeigten Architekturen sind ausgebildet, mit mehreren unterschiedlichen Codes zu arbeiten, und als Ergebnis ist die Architektur des Prüfknoten-Verarbeitungssystems 1200 von jener geringfügig verschieden, die in 8 gezeigt ist und oben beschrieben wird. Falls jeder Prüfknoten für einen bestimmten Code eine identische Anzahl verbundener Bitknoten aufweist, kann dann der Qj Puffer als Doppelpuffersystem strukturiert werden (wie im Beispiel in 8), wobei ein Puffer verwendet wird, um die Nachrichten für den aktuellen Prüfknoten zu akkumulieren, während der andere Puffer die Nachrichten für die vorhergehende Prüfung liest, wobei der modifizierte Qj Ausgang gebildet wird. In Implementierungen, wo es keine konstante Anzahl verbundener Bitknoten pro Prüfknoten geben kann (beispielsweise variiert für einige DVB-T2-Codes dieser Betrag von einer Schicht zur nächsten), würde die Verwendung einer solchen Doppelpufferanordnung dazu führen, dass sich der Betrieb verzögert und Verarbeitungszyklen verliert (falls beispielsweise die Anzahl auszulesender Bitknoten größer als die eingelesene Anzahl ist, wird der Betrieb des Prüfknoten-Verarbeitungssystems verzögert, um darauf zu warten, dass das Auslesen endet).
  • Um eine Verzögerung in dieser Weise zu vermeiden, ist der komprimierte Rij Puffer 1212 in der Implementierung von 12 ein sehr kleines FIFO mit 3 Orten. Wenn rMAX die größte Anzahl von Bitknoten pro Prüfknoten im Code ist, dann wird bei „Tagesbeginn“ (Start einer Iteration) das Auslesen der Prüfknoten um rMAX Zyklen verzögert. Das bedeutet, dass, wenn das System zuerst das Auslesen startet, das Qij FIFO 1208 rMAX Einträge hält; und das System schreibt entweder in den 2. oder 3. Ort im Rij Puffer 1212 (in Abhängigkeit davon, ob der allererste CNB weniger als oder gleich rMAX Verbindungen hatte). Dies ergibt dann eine ausreichende Pufferung, um sicherzustellen, dass sich weder die Auslese- noch die Verarbeitungsoperationen von da an verzögern müssen.
  • Obwohl der in 9 gezeigte beispielhafte LDPC-Decoder 900 3 A RAMs umfasst (M=3), kann es in einem anderen Beispiel nur 2 A RAMs geben (M=2). In einen derartigen Beispiel ist die Verschiebungslogik gleich wie in einem 3 A RAM-Beispiel, außer dass die gleichen LLRs (aus einem der A RAMs) sowohl in den linken als auch rechten LLR-Datenwegen verwendet werden (z.B. Blöcke 910 bis 911), so dass sich die Verschiebungslogik als Bitstellenverschieber verhält.
  • In den oben beschriebenen beispielhaften Codes gibt es eine Identitätsmatrix pro Submatrix, obwohl die hier beschriebenen Verfahren bei Codes angewendet werden können, wo es mehr als eine Identitätsmatrix pro Submatrix gibt. Ein Beispiel eines solchen Codes ist DVB-T2 oder DVB-S2, und diese Codes sind nicht architekturbewusst. Diese Codes haben jedoch eine Struktur, und die H-Matrizen können umgeordnet werden, um die Form von Submatrizen mit einer Größe von 360 x 360 Knoten anzunehmen, die zyklisch verschobene Identitätsmatrizen enthalten (mit der Ausnahme eines Paritätsbits, das nicht in das Muster passt).
  • Da diese Codes nicht „architekturbewusst“ sind, kann jede Submatrix entweder Null sein oder kann eine oder mehrere verschobene Identitätsmatrizen enthalten. Wenn mehr als eine Identitätsmatrix vorliegt, kann dies als „multidiagonal“ bezeichnet werden, und in einigen Beispielen können bis zu 4 Identitätsmatrizen in einer einzelnen Submatrix vorhanden sein.
  • Diese mehreren Diagonalen machen es unmöglich, die H-Matrix in echte Schichten aufzuteilen. In einer multidiagonalen Submatrix wird derselbe Satz von Bitknoten mehrere Male verwendet, verbunden mit unterschiedlichen Prüfknoten. In vielen Situationen werden mehrere Prüfknoten innerhalb einer Submatrix versuchen, denselben Bitknoten zu aktualisieren. Das hat zwei Implikationen: Erstens werden diese Prüfknoten alle denselben Eingangswert für jeden Bitknoten verwenden (was ein Abgehen von der Idee der geschichteten Codierung bedeutet, wo jedesmal, wenn ein Bitknoten verwendet wird, er durch einen vorhergehenden Prüfknoten aktualisiert wurde). Zweitens würde es ohne Modifikation der oben beschriebenen Architektur bedeuten, dass eine der beiden Aktualisierungen für den Bitknoten die andere überschreiben würde, somit würde eine der Aktualisierungen verlorengehen.
  • Die erste dieser Implikationen hat den Effekt, dass die Decoderleistung irgendwo zwischen jene eines reinen Flutungsdecoders (wo alle Prüfknoten aus demselben Satz von Bitknoten versorgt werden) und eines echten geschichteten Decoders (wo die Bitknoten zwischen jeder Verwendung aktualisiert werden) fällt.
  • Die zweite dieser Implikationen hat eine ernstere Folge: Falls eine Prüfknotenaktualisierung konsistent verlorengeht, wird dies die Leistung des Codes abbauen. Simulationen haben gezeigt, dass einige Bitknoten „steckenbleiben“ und nicht zu einem verbesserten LLR-Wert wandern, falls zugelassen wird, dass dies auftritt. Die Anzahl von Konflikten wird durch die Verwendung von CNBs (wie oben beschrieben) reduziert, und jegliche verbleibenden Konflikte können durch die Entfernung dieser Kanten (d.h. Verbindungen) adressiert werden, die innerhalb jedes CNB in Konflikt stehen, wie mit Bezugnahme auf die beispielhaften Submatrizen 1300, 1301 erläutert werden kann, die in 13 gezeigt sind.
  • In der ersten beispielhaften Submatrix 1300 liegen die beiden Diagonalen 1302, 1304 in einem größeren Abstand vor als die CNB-Größe, es gibt daher keine Konflikte zwischen den Bitknoten, die in einem beliebigen der CNBs verwendet werden. Falls der Abstand zwischen den Diagonalen auf weniger als die CNB-Größe reduziert wird, dann werden Konflikte aufzutreten beginnen, wie in der zweiten beispielhaften Submatrix 1301 gezeigt, wobei der maximale Konflikt nur dann entsteht, wenn die beiden Diagonalen angrenzend aneinander platziert werden. Angesichts der Tatsache, dass in einem praktischen Code allgemein ein annehmbarer Abstand zwischen Diagonalen vorliegt, und die hier beschriebenen Verfahren an einem CNB anstatt einer Submatrix operieren, ist die Anzahl von Kanten, die bei einer beliebigen Iteration ausgeschlossen werden müssen, tatsächlich sehr gering. In der zweiten beispielhaften Submatrix 1301 sind die Kanten, die ausgeschlossen werden müssen, eingekreist 1306, und es ist ersichtlich, dass diese nur jene Punkte sind, wo ein Bitknoten in zwei Paritätsprüfungen innerhalb desselben CNB involviert ist.
  • Bei der Verarbeitung von Submatrizen mit mehreren Diagonalen wird das Abrufen der CNB-Eingangsdaten (vom Mischsystem) das Zugreifen auf dieselben Submatrix zweimal involvieren (mit unterschiedlichen Startpositionen für die Diagonale in jedem Fall). Dies kann potenziell dieselben Bitknotendaten zweimal in die Verarbeitungspipeline bringen. Wenn die Daten zurück am RAM ankommen (wiederum aus einem Mischsystem), wird es wiederholte Schreibadressen geben, was bewirkt, dass Aktualisierungen überschrieben werden. Die Werte, die behalten werden, d.h. nicht überschrieben werden, sind mit den Adressen assoziiert, die als Letztes auftreten, und dies ist von der Reihenfolge abhängig, in der die Submatrizen indexiert sind, wenn die Daten an erster Stelle gelesen werden. Durch das zyklische Rotieren der Reihenfolge, in der die Diagonalen referenziert sind, wenn die Daten aus dem λ RAM gezogen werden (vom Mischsystem), sind unterschiedliche Aktualisierungen für eine gegebene Schicht in unterschiedlichen Iterationen zu behalten. Mit erneuter Bezugnahme auf die zweite beispielhafte Submatrix 1301 in 13 gibt es zwei Diagonalen 1308, 1310. In einer ersten Iteration wird die Diagonale 1308 zuerst referenziert, in welchem Fall die Aktualisierungen, die sich aus den eingekreisten Kanten 1306 ergeben, überschrieben werden (und so werden diese Kanten effektiv aus dem System ausgeschlossen). In einer zweiten Iteration wird die andere Diagonale 1310 zuerst referenziert, und so werden die Aktualisierungen, die sich aus den eingekreisten Kanten 1306 ergeben, tatsächlich die Aktualisierungen überschreiben, die sich aus den miteinander in Konflikt stehenden Kanten ergeben, und so werden diese eingekreisten Kanten 1306 behalten.
  • In einer beispielhaften Implementierung kann diese zyklische Rotation der Reihenfolge, in der die Diagonalen referenziert sind, eine 2D-Tabelle verwenden, um die H-Matrixinformationen für jede Zeile aufzuzeichnen, wie nachstehend gezeigt:
    Reihenfolge des Herausziehens aus dem RAM →
    SM-Index
    Anz. Diagonalen
    Diag 0 verschieben
    Diag 1 verschieben
    Diag 2 verschieben
    Diag 3 verschieben
  • Hier gibt es eine Spalte für jeden einzigartigen Submatrix (SM)-Index, und die Diagonalen für diese SM sind in der vertikalen Richtung aufgelistet. Das System läuft von links nach rechts durch die SM-Indices, und für jeden SM-Index läuft das System durch die unterschiedlichen Diagonalen in zyklischer Weise (wie oben beschrieben, kann es in einer Submatrix bis zu vier Diagonalen geben). Der Startpunkt für den Durchlauf durch diese Diagonalen (in der vertikalen Dimension) ist durch den Iterationsindex gegeben, Modulo die Anzahl von in der SM vorliegenden Diagonalen. Falls es beispielsweise zwei Diagonalen gibt (Diag 0 und Diag 1), gilt in der ersten Iteration 1÷2=0, Rest 1, somit wird die Diag 1 zuerst referenziert, und in der zweiten Iteration 2÷2=1, Rest 0, somit wird die andere Diagonale, Diag 0, zuerst referenziert, etc. Das bedeutet, dass in jeder Iteration eine andere Diagonale die letzte zu verarbeitende wird; und falls es daher in Konflikt stehende Bitknoten in zwei Diagonalen gibt, werden dann jene Bitknoten zyklisch die Chance erhalten, an unterschiedlichen Prüfknoten teilzunehmen.
  • Das in der Tabelle gezeigte Format kann ungenutzte Orte umfassen, da nicht jede SM die maximale Anzahl von Diagonalen aufweist; der Raum, der erforderlich ist, um die Tabelle zu speichern, kann jedoch reduziert werden, falls die Dimensionen der Tabelle gemäß dem Code konfigurierbar sind. Falls es nicht mehrere Diagonalen gibt, wird die Zeile „Anz. Diagonalen“ nicht benötigt, und die Tabelle wird auf 2 Zeilen reduziert. Falls die maximale Anzahl von Diagonalen im Code weniger als 4 ist, kann die Anzahl der Zeilen für die Aufzeichnung der Diagonalen dementsprechend reduziert werden. Dies nutzt den Speicher ziemlich effizient, da die einfachen Codes große Anzahlen von SM-Zeilen aufweisen, aber sie tendieren auch dazu, weniger Nicht-Null-SMs pro Zeile und weniger Multidiagonalen aufzuweisen.
  • In den oben beschriebenen Beispielen wurde angenommen, dass die CNB-Größe, PCNB, als ganzzahliges Submultipel der Submatrixgröße, S, ausgewählt wird. Für einige Codes, wie den GB20600, der eine Submatrixgröße verwendet, die prim ist (S=127), ist dies nicht möglich. In einem solchen Fall bleibt die Anzahl von CNBs innerhalb einer Submatrix eine ganze Zahl; die CNBs variieren jedoch in der Größe in Abhängigkeit von ihrer Position innerhalb der H-Matrix. In vielen Beispielen haben alle CNBs, außer dem letzten, eine konstante Größe, und dann hat der letzte CNB eine geringfügig unterschiedliche Größe (z.B. eine kleinere Größe). Dies ist effizienter, als viele CNBs mit unterschiedlichen Größen zu haben, und reduziert die Komplexität des Steuersystems. Ferner wird zur Maximierung der Effizienz auch die CNB-Größe so eng wie möglich mit der Anzahl von Verarbeitungswegen übereingestimmt (d.h. der Anzahl von Prüfknoten-Verarbeitungssystemen, P), die innerhalb des Decoders verfügbar sind.
  • Falls zwei CNBs, die einen oder mehrere Bitknoten gemeinsam enthalten, sequenziell verarbeitet werden, kann es dann notwendig werden zu verzögern, um sicherzustellen, dass die Bitknoten aus dem ersten CNB zum A RAM zurückgekehrt sind, bevor der zweite CNB verarbeitet wird. Die Reihenfolge, in der die CNBs verarbeitet werden, beeinflusst im Allgemeinen die Leistung des Codes nicht, und so kann zur Minimierung einer solchen Verzögerung die Reihenfolge der CNB-Verarbeitung für jeden Code ausgewählt werden, um gemeinsam genutzte Bitknoten in sequenziell verarbeiteten CNBs zu vermeiden.
  • Zwei Gleichungen sind oben zur Verwendung bei der Berechnung von Prüf-zu-Bitknoten-Nachrichten (Gleichung (1)) und bei Aktualisierungen von Bitknotenwerten (Gleichung (2)) angegeben. Die Gleichung (1) verwendet eine Näherung, die als „Min-Sum-Approximation“ bekannt ist, und dies vereinfacht die folgende Gleichung für eine Prüf-zu-Bitknoten-Nachricht erheblich, die eine Summe aller empfangenen Nachrichten (in dieser Iteration am Prüfknoten i) aus dem verbundenen Bitknoten umfasst, ausschließlich des Bitknotens j, an den die Nachricht gesendet wird: | R i j [ k ] | = ψ 1 [ j ' R [ i ] \ { j } ψ ( Q j ' i [ k ] ) ] s i g n ( R i j [ k ] ) = j ' R [ i ] \ { j } s i g n ( Q j ' i [ k ] )
    Figure DE102014012138B4_0003
    wobei ψ ( x ) = 1 2 log ( tanh ( x 2 ) ) ,
    Figure DE102014012138B4_0004
    und R[i] der gesetzte Index von Bitknoten ist, die mit dem Prüfknoten i verbunden sind.
  • Der Ausdruck für sign(Rij[k]) ist effektiv eine Art EXKLUSIV-ODER-Funktion an den Vorzeichen-Bits der Qj'i[k] Nachrichten (d.h. zwei gleiche Vorzeichen = + und zwei unterschiedliche Vorzeichen = -). Zweitens kann die Summe der tanh-Funktionen durch ein einfaches Minimum ersetzt werden, somit ergibt dies: R i j [ 0 ] = 0 | R i j [ k ] | = M I N j ' R [ i ] \ { j } { | Q j ' i [ k ] | } s i g n ( R i j [ k ] ) = X O R j ' R [ i ] \ { j } { s i g n ( Q j ' i [ k ] ) }
    Figure DE102014012138B4_0005
  • Der Vorzeichen-Korrekturfaktor δij in der obigen Gleichung (1) wird auf der Basis der EXKLUSIV-ODER-Funktion der Vorzeichen bestimmt, wie in Gleichung (4) gezeigt.
  • Diese Formulierung reduziert den Speicher, der für Prüf-zu-Bit-Nachrichten erforderlich ist, da alle derartigen Nachrichten eine Größe gleich der minimalen empfangenen Bit-zu-Prüf-Nachrichtengröße aufweisen, ausgenommen die Nachricht zurück zum Bitknoten, der die minimale Größe geliefert hat. Die Größe der Nachricht an diesen Bitknoten ist die nächst-minimale empfangene Größe. Somit können die Prüf-zu-Bit-Nachrichtdaten für einen Prüfknoten in der Form einer minimalen Größe, einer nächst-minimalen Größe, des Indexes des Bitknotens, der die minimale Größe liefert, und eines Satzes von Vorzeichen-Bits gespeichert werden.
  • Unter der Annahme, dass ein LLR so formuliert wird, dass ein +ve Wert eine 0 anzeigt, und ein -ve Wert eine 1 anzeigt, um so eine Paritätsprüfung an einigen LLRs vorzunehmen, kann das Vorzeichen von dem Bit, das vorhergesagt wird, durch das Vornehmen der oben beschriebenen EXKLUSIV-ODER-Vorzeichen-Funktion erhalten werden. Das Vertrauen in diese Paritätsprüfung ist ungefähr gleich wie das niedrigste Vertrauen, das unter den LLRs zu finden ist, die kombiniert werden, da dies das „schwächste Glied in der Kette“ ist.
  • Die Gleichung (4) ergibt jedoch eine Größe, die durchschnittlich etwas zu hoch ist. Obwohl die Gleichung (3) eine genauere Antwort gibt, ist sie sehr rechenintensiv. Um das erhaltene Ergebnis unter Verwendung der Min-Sum-Approximation (und von Gleichung (4)) zu verbessern, kann die erhaltene Gleichung durch eine variable Versetzung modifiziert werden, die von der Differenz zwischen dem Minimum, das berücksichtigt wird (d.h. dem Wert MIN in Gleichung (4)), und der nächst-minimalen Größe unter den anderen Bit-zu-Prüfknoten-Nachrichten abhängig ist. Dieser Differenzwert wird skaliert, um eine Versetzung unter Verwendung von zwei festen Parametern zu erzeugen: maxOffset und diffScaling. Je größer die Differenz, desto kleiner die zu subtrahierende Versetzung. diffScaling setzt den obigen Differenzwert, von dem keine Versetzung subtrahiert wird; und maxOffset setzt die größte Versetzung (die subtrahiert wird, wenn die Differenz 0 ist). Die zu subtrahierende Versetzung kann daher gegeben sein durch: M A X { 0, maxOffset ( d × diffScaling ) }
    Figure DE102014012138B4_0006
    wobei d der Differenzwert ist.
  • Unter Berücksichtigung dieser Versetzung kann die obige Gleichung (1) modifiziert werden zu: m i ' [ k ] = M I N j R [ i ] ( | Q j [ L 1 ] R i j [ k 1 ] | ) m i ' ' [ k ] = M I N j R [ i ] \ { j min } ( | Q j [ L 1 ] R i j [ k 1 ] | ) m i ' ' ' [ k ] = M I N j R [ i ] \ { j min , j n e x t  min } ( | Q j [ L 1 ] R i j [ k 1 ] | ) d i ' = m i ' ' [ k ] m i ' [ k ] d i ' ' = m i ' ' ' [ k ] m i ' ' [ k ] R i j [ k ] = δ i j { m i ' ' [ k ] M A X { 0, η ' ( d i ' × ϕ ' ) } for  j = j min m i ' [ k ] M A X { 0, η ' ' ( d i ' ' × ϕ ' ' ) } otherwise }
    Figure DE102014012138B4_0007

    wobei: jmin und jnext min die Bitknotenindices sind, welche die Größen m i ' [ k ]
    Figure DE102014012138B4_0008
    bzw. m i ' ' [ k ]
    Figure DE102014012138B4_0009
    ergeben, (wobei m i ' [ k ]
    Figure DE102014012138B4_0010
    die minimale Bit-zu-Prüf-Nachrichtengröße ist, und m i ' ' [ k ]
    Figure DE102014012138B4_0011
    die nächst-minimale Größe ist),
    η'und η'' die maxDiff Konstantenwerte sind, die jeweils für den minimalen und nächst-minimalen Wert spezifiziert werden,
    ϕ' und ϕ'' die diffScaling Konstantenwerte sind, die jeweils für den minimalen und nächst-minimalen Wert spezifiziert werden.
  • Obwohl die Modifikationen an der Min-Sum-Approximation (wie in Gleichung (6) gezeigt) hier mit Bezugnahme auf die Verwendung in einem wie oben beschriebenen LDPC-Decoder beschrieben werden, ist es klar, dass dieser modifizierte Algorithmus in vielen unterschiedlichen Anwendungen und Situationen verwendet werden kann, z.B. wann immer die Gleichung (1) ansonsten verwendet werden könnte. Wie oben beschrieben, ist unter Verwendung dieser Modifikation anstelle des Standard-Min-Sum-Algorithmus das erhaltene LLR, das berechnet wird, genauer.
  • 14 zeigt ein Flussdiagramm eines beispielhaften Verfahrens zum Betreiben eines LDPC-Decoders wie oben beschrieben (z.B. wie in 5, 7 und 9 gezeigt). Wie oben beschrieben, umfasst das Verfahren das Zugreifen auf Weichentscheidungsdaten für einen Prüfknotenblock aus dem λ RAM (Block 1402), wobei der λ RAM eine Anzahl unabhängig adressierbarer Speicher umfasst, und wobei die Gesamtbreite der Speicher größer ist als P*q. Auf diese Daten kann unter Verwendung eines Mischsystems (wie oben beschrieben) zugegriffen werden, und sie werden dann (vom Mischsystem) für eine Mehrzahl von Prüfknoten-Verarbeitungssystemen bereitgestellt (Block 1404), die parallel operieren. Diese Prüfknoten-Verarbeitungssysteme generieren Aktualisierungen für die Weichentscheidungsdaten parallel (Block 1406), und die aktualisierten Weichentscheidungsdaten werden dann zurück in den λ RAM gespeichert (Block 1408).
  • Wie oben beschrieben, wenn auf mehr Daten in einem einzelnen Zyklus zugegriffen wird, als es durch die Prüfknoten-Verarbeitungssysteme erforderlich ist, werden die unerwünschten Daten vom Mischsystem verworfen (Block 1410). Das Mischsystem ordnet die Daten, auf die zugegriffen wurde, um (Block 1412), und dieses Umordnen stellt sicher, dass die Daten an die Prüfknoten-Verarbeitungssysteme in einer konsistenten Reihenfolge geliefert werden, und kann auch das Schließen beliebiger Lücken umfassen, die in den Daten durch das Verwerfen von Daten erzeugt wurden (in Block 1410).
  • Wie oben beschrieben, kann ein modifizierter Min-Sum-Algorithmus (z.B. Gleichung (6)) verwendet werden, um die Aktualisierungen für die Weichentscheidungsdaten zu generieren (in Block 1406), und dies involviert die Verwendung eines Standard-Min-Sum-Algorithmus (Block 1414) und das anschließende Subtrahieren einer variablen Versetzung vom Ausgang des Min-Sum-Algorithmus (Block 1416). Wie oben beschrieben, kann die variable Versetzung unter Verwendung der obigen Gleichung (5) berechnet werden. Die erhaltenen Prüf-zu-Bitknoten-Nachrichten werden dann verwendet, um die aktualisierten Weichentscheidungsdaten zu berechnen (Block 1418).
  • Fachleute werden erkennen, dass Speichervorrichtungen, die verwendet werden, um Programminstruktionen zu speichern, quer über ein Netz verteilt werden können. Beispielsweise kann ein Ferncomputer ein Beispiel des beschriebenen Prozesses als Software speichern. Ein lokaler oder Terminal-Computer kann auf den Ferncomputer zugreifen und einen Teil oder die gesamte Software herunterladen, um das Programm laufen zu lassen. Alternativ dazu kann der lokale Computer Stücke der Software nach Bedarf herunterladen, oder einige Software-Instruktionen am lokalen Terminal und einige am Ferncomputer (oder Computernetz) ausführen. Fachleute werden auch erkennen, dass unter Verwendung von herkömmlichen, Fachleuten bekannten Techniken alle oder ein Teil der Software-Instruktionen von einer dedizierten Schaltung, wie einem DSP, einer programmierbaren Logikanordnung oder dgl., durchgeführt werden können.
  • Speicher, die maschinenausführbare Daten zur Verwendung bei der Implementierung offenbarter Aspekte speichern, können nicht-transitorische Medien sein. Nicht-transitorische Medien können flüchtig oder nicht-flüchtig sein. Beispiele flüchtiger nicht-transitorischer Medien umfassen Speicher auf Halbleiter-Basis, wie SRAM oder DRAM. Beispiele von Technologien, die verwendet werden können, um nicht-flüchtige Speicher zu implementieren, umfassen optische und magnetische Speichertechnologien, Flash-Speicher, Phasenänderungsspeicher, Widerstands-RAM.
  • Eine besondere Bezugnahme auf „Logik“ bezieht sich auf eine Struktur, die eine Funktion oder Funktionen vornimmt. Ein Beispiel einer Logik umfasst Schaltungen, die ausgelegt sind, diese Funktion(en) vorzunehmen. Beispielsweise können solche Schaltungen Transistoren und/oder andere Hardware-Elemente umfassen, die in einem Herstellungsprozess verfügbar sind. Solche Transistoren und/oder andere Elemente können verwendet werden, um Schaltungen oder Strukturen zu bilden, die einen Speicher implementieren und/oder enthalten, wie beispielsweise Register, Flip-Flops, oder Verriegelungen, logische Operatoren, wie Boolesche Operationen, mathematische Operatoren, wie Addierer, Vervielfacher, oder Schieber, und Zwischenverbindungen. Solche Elemente können als speziell angefertigte Schaltungen oder Standard-Zellenbibliotheken, Makros oder auf anderen Abstraktionsstufen bereitgestellt werden. Solche Elemente können in einer speziellen Anordnung miteinander verbunden sein. Logik kann Schaltungen umfassen, die eine Festfunktion sind, und Schaltungen können programmiert werden, um eine Funktion oder Funktionen vorzunehmen; eine derartige Programmierung kann von einer Firmware oder Software-Aktualisierung oder einem Steuermechanismus bereitgestellt werden. Logik, die identifiziert wird, um eine Funktion vorzunehmen, kann auch Logik umfassen, die eine Bestandteilfunktion oder einen Subprozess implementiert. In einem Beispiel weist Hardware-Logik Schaltungen auf, die eine Festfunktionsoperation implementieren, oder Operationen, oder eine Zustandsmaschine oder einen Prozess.
  • Ein beliebiger Bereich oder eine Vorrichtung, die hier angegeben werden, können erweitert oder abgeändert werden, ohne den gesuchten Effekt zu verlieren, wie für Fachleute klar ist.
  • Es ist zu verstehen, dass sich die oben beschriebenen Nutzen und Vorteile auf eine Ausführungsform beziehen können oder auf einige Ausführungsformen beziehen können. Die Ausführungsformen sind nicht auf jene beschränkt, die beliebige oder alle der angeführten Probleme lösen, oder auf jene, die einen beliebigen oder alle der angeführten Nutzen oder Vorteile aufweisen.
  • Jede Bezugnahme auf „ein“ Stück bezieht sich auf eines oder mehrere dieser Stücke. Der Ausdruck „umfassend“ wird hier verwendet, um die Verfahrensblöcke oder identifizierten Elemente umfassend zu bedeuten, dass jedoch solche Blöcke oder Element keine exklusive Liste umfassen, und eine Vorrichtung zusätzliche Blöcke oder Elemente enthalten kann, und ein Verfahren zusätzliche Operationen oder Elemente enthalten kann.
  • Die Schritte der hier beschriebenen Verfahren können in einer beliebigen geeigneten Reihenfolge oder gleichzeitig, wo angemessen, durchgeführt werden. Die Pfeile zwischen Kästchen in den Figuren zeigen eine Beispielsequenz von Verfahrensschritten, sollen jedoch andere Sequenzen oder das Vornehmen mehrerer Schritte parallel nicht auschließen. Zusätzlich können einzelne Blöcke aus beliebigen der Verfahren gelöscht werden, ohne vom Wesen und Schutzbereich des hier beschriebenen Gegenstands abzuweichen. Aspekte beliebiger der oben beschriebenen Beispiele können mit Aspekten beliebiger der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne den gesuchten Effekt zu verlieren. Wenn Elemente der Figuren durch Pfeile verbunden gezeigt sind, ist es klar, dass diese Pfeile nur einen beispielhaften Kommunikationsfluss (einschließlich Daten und Steuernachrichten) zwischen Elementen zeigen. Der Fluss zwischen Elementen kann in einer der beiden Richtungen oder in beiden Richtungen erfolgen.
  • Es ist klar, dass die obige Beschreibung einer bevorzugten Ausführungsform nur anhand bloßer Beispiele gegeben wird, und dass verschiedene Modifikationen von Fachleuten durchgeführt werden können. Obwohl verschiedene Ausführungsformen vorstehend mit einem bestimmten Grad an Genauigkeit oder mit Bezugnahme auf eine oder mehrere einzelne Ausführungsformen beschrieben wurden, könnten Fachleute zahlreiche Änderungen an den offenbarten Ausführungsformen vornehmen, ohne vom Wesen und Schutzbereich dieser Erfindung abzuweichen.

Claims (19)

  1. Konfigurierbarer LDPC-Decoder (500, 700, 900), welcher ausgelegt ist, mehrere unterschiedliche LDPC-Codestrukturen mit einer beliebigen Submatrixgröße zu unterstützen, wobei der LDPC-Decoder umfasst: eine Mehrzahl von unabhängig adressierbaren Speichern (504, 701 bis 704, 901 bis 903), die kollektiv ausgelegt sind, Weichentscheidungsdaten für jeden Bitknoten zur Verwendung beim Decodieren eines LDPC-Codes zu speichern, und wobei jeder Speicher eine Breite aufweist, wobei die Breite eines Speichers eine Menge an Daten umfasst, auf die aus dem Speicher in einem einzelnen Zyklus zugegriffen werden kann; eine Mehrzahl von Prüfknoten-Verarbeitungssystemen (304, 714, 914), die ausgelegt sind, parallel zu arbeiten und Aktualisierungen für die Weichentscheidungsdaten zu generieren; ein erstes Mischsystem (508, 708, 906), das ausgelegt ist, Daten aus der Mehrzahl von unabhängig adressierbaren Speichern zur Mehrzahl von Prüfknoten-Verarbeitungssystemen zu leiten; und ein zweites Mischsystem (510, 706, 904), das ausgelegt ist, die Aktualisierungen für die Weichentscheidungsdaten aus der Mehrzahl von Prüfknoten-Verarbeitungssystemen zur Mehrzahl von unabhängig adressierbaren Speichern zu leiten, wobei eine Gesamtbreite der Mehrzahl von unabhängig adressierbaren Speichern größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten.
  2. Konfigurierbarer LDPC-Decoder gemäß Anspruch 1, bei welchem eine Paritätsprüfmatrix für den LDPC-Code eine Mehrzahl von Submatrizen umfasst, ein Prüfknotenblock eine Gruppe von Prüfknoten umfasst, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und eine Submatrix eine Mehrzahl von Prüfknotenblöcken umfasst.
  3. Konfigurierbarer LDPC-Decoder gemäß Anspruch 2, bei welchem die Mehrzahl von unabhängig adressierbaren Speichern M unabhängig adressierbare Speicher umfasst, jeder Speicher eine Mehrzahl von Speicherorten umfasst, jeder Speicherort ausgelegt ist, die Weichentscheidungsdaten für eine Mehrzahl von Bitknoten zu speichern, und bei welchem die Bitknoten in jeder Submatrix unter X Speicherorten verteilt sind, wobei X ein Vielfaches von M ist, und M und X ganze Zahlen sind.
  4. Konfigurierbarer LDPC-Decoder (500, 700) gemäß Anspruch 2 oder 3, bei welchem die Mehrzahl von unabhängig adressierbaren Speichern eine erste Mehrzahl von unabhängig adressierbaren Speichern und wenigstens einen zusätzlichen unabhängig adressierbaren Speicher umfasst, wobei jeder Speicher in der ersten Mehrzahl von unabhängig adressierbaren Speichern eine Breite aufweist, die gleich einem Produkt der Breite der Weichentscheidungsdaten für einen Bitknoten und einer Anzahl von Prüfknoten in einem Prüfknotenblock ist.
  5. Konfigurierbarer LDPC-Decoder gemäß Anspruch 4, bei welchem jeder zusätzliche unabhängig adressierbare Speicher eine Breite aufweist, die gleich einem Produkt der Breite der Weichentscheidungsdaten für einen Bitknoten und der Anzahl von Prüfknoten in einem Prüfknotenblock ist.
  6. Konfigurierbarer LDPC-Decoder (900) gemäß Anspruch 2 oder 3, bei welchem die Mehrzahl unabhängig adressierbarer Speicher M unabhängig adressierbare Speicher umfasst, die Mehrzahl von Prüfknoten-Verarbeitungssystemen P Prüfknoten-Verarbeitungssysteme umfasst, die Breite der Weichentscheidungsdaten für einen Bitknoten q ist, und die Breite jedes Speichers größer ist als P*q/M.
  7. Konfigurierbarer LDPC-Decoder gemäß Anspruch 6, bei welchem M=3 oder M=2.
  8. Konfigurierbarer LDPC-Decoder gemäß Anspruch 6, bei welchem die Breite jedes Speichers 2* P*q/M ist.
  9. Konfigurierbarer LDPC-Decoder gemäß einem der Ansprüche 2 bis 8, bei welchem das erste Mischsystem ausgelegt ist, auf eine Mehrzahl von Speicherorten zuzugreifen, um Daten für die Verarbeitung durch die Mehrzahl von Prüfknoten-Verarbeitungssystemen zu erhalten und beliebige Daten, auf welche zugegriffen wurde, aus innerhalb dieser Speicherorte zu verwerfen, die nicht von der Mehrzahl von Prüfknoten-Verarbeitungssystemen in einem einzelnen Zyklus verwendet werden.
  10. Konfigurierbarer LDPC-Decoder gemäß Anspruch 9, bei welchem das erste Mischsystem eine Lückenschluss-Hardware (912) umfasst, die ausgelegt ist, beliebige Lücken in den Daten, auf welche zugegriffen wurde, aus der Mehrzahl von Speicherorten zu eliminieren, die durch verworfene Daten verursacht werden.
  11. Konfigurierbarer LDPC-Decoder gemäß einem der Ansprüche 2 bis 10, bei welchem die Paritätsprüfmatrix Submatrizen umfasst, die zyklisch verschobene Identitätsmatrizen enthalten, wobei jede Identitätsmatrix als Diagonale bezeichnet wird, und bei welchem das erste Mischsystem ausgelegt ist, eine Reihenfolge zyklisch zu rotieren, in der die Diagonalen referenziert sind, wenn auf die Daten aus der Mehrzahl von unabhängig adressierbaren Speichern zugegriffen wird.
  12. Konfigurierbarer LDPC-Decoder gemäß Anspruch 11, bei welchem eine Submatrix D Diagonalen umfasst, wobei jede Diagonale in der Submatrix einen Index für eine gegebene Iteration, L, aufweist, und die Diagonalen in einer Reihenfolge gemäß ihrer Indizes referenziert sind, beginnend mit einem durch L Modulo D gegebenen Index.
  13. Konfigurierbarer LDPC-Decoder gemäß einem der vorhergehenden Ansprüche, bei welchem jedes Prüfknoten-Verarbeitungssystem Aktualisierungen für Weichentscheidungsdaten für einen Bitknoten unter Verwendung von Prüf-zu-Bitknoten-Nachrichten für jeden Prüfknoten generiert, der mit dem Bitknoten verbunden ist, und bei welchem jede Prüf-zu-Bitknoten-Nachricht unter Verwendung eines Min-Sum-Algorithmus und einer variablen Versetzung berechnet wird, wobei die variable Versetzung auf der Basis von Differenzen zwischen niedrigstwertigen Bit-zu-Prüf-Nachrichtengrößen berechnet wird.
  14. Konfigurierbarer LDPC-Decoder gemäß Anspruch 13, bei welchem die variable Versetzung von einer anfänglichen Bit-zu-Prüfknoten-Nachricht subtrahiert wird, die unter Verwendung des Min-Sum-Algorithmus berechnet wurde.
  15. Verfahren zum Decodieren eines LDPC-Codes, umfassend: Zugreifen, in einem einzelnen Zyklus, auf die Weichentscheidungsdaten für eine Mehrzahl von Bitknoten aus einer Mehrzahl von unabhängig adressierbaren Speichern (1402), wobei jeder Speicher eine Breite aufweist und die Breite eines Speichers eine Menge an Daten umfasst, auf die aus dem Speicher in einem einzelnen Zyklus zugegriffen werden kann; Bereitstellen der Weichentscheidungsdaten, auf die zugegriffen wurde, für eine Mehrzahl von Prüfknoten-Verarbeitungssystemen (1404); und Generieren von Aktualisierungen für die Weichentscheidungsdaten für die Mehrzahl von Bitknoten parallel in den Prüfknoten-Verarbeitungssystemen (1406); und Speichern aktualisierter Weichentscheidungsdaten für die Mehrzahl von Bitknoten in der Mehrzahl von unabhängig adressierbaren Speichern (1408), wobei in wenigstens einem Zyklus das Zugreifen auf Weichentscheidungsdaten für eine Mehrzahl von Bitknoten das Zugreifen auf eine Gesamtmenge an Weichentscheidungsdaten umfasst, welche größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten.
  16. Verfahren gemäß Anspruch 15, bei welchem im wenigstens einen Zyklus das Zugreifen auf eine Gesamtmenge an Weichentscheidungsdaten, die größer ist als ein Produkt einer Anzahl von Prüfknoten, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, und einer Breite der Weichentscheidungsdaten für einen Bitknoten, umfasst: Zugreifen auf eine Mehrzahl von Speicherorten, um Daten für die Verarbeitung durch die Mehrzahl von Prüfknoten-Verarbeitungssystemen zu erhalten, und wobei das Verfahren ferner umfasst: Verwerfen beliebiger Daten, auf welche zugegriffen wurde, aus innerhalb dieser Speicherorte, die nicht von der Mehrzahl von Prüfknoten-Verarbeitungssystemen in einem einzelnen Zyklus verwendet werden, vor dem Bereitsstellen der Daten für die Prüfknoten-Verarbeitungssysteme (1410).
  17. Verfahren gemäß Anspruch 15, bei welchem eine Paritätsprüfmatrix für den LDPC-Code eine Mehrzahl von Submatrizen umfasst, ein Prüfknotenblock eine Gruppe von Prüfknoten umfasst, die parallel von den Prüfknoten-Verarbeitungssystemen verarbeitet werden, eine Submatrix eine Mehrzahl von Prüfknotenblöcken umfasst, und wenigstens ein Prüfknotenblock zwei oder mehrere Diagonalen umfasst, und bei welchem das Zugreifen, in einem einzelnen Zyklus, auf die Weichentscheidungsdaten für eine Mehrzahl von Bitknoten aus einer Mehrzahl von unabhängig adressierbaren Speichern umfasst: zyklisches Rotieren einer Reihenfolge, in der die Diagonalen referenziert werden, wenn auf Daten aus der Mehrzahl von unabhängig adressierbaren Speichern zugegriffen wird.
  18. Verfahren gemäß Anspruch 17, bei welchem eine Submatrix D Diagonalen umfasst, wobei jede Diagonale in der Submatrix einen Index für eine gegebene Iteration, L, aufweist, die Diagonalen in einer Reihenfolge gemäß ihrer Indizes referenziert werden, beginnend mit einem durch L Modulo D gegebenen Index.
  19. Verfahren gemäß einem der Ansprüche 15 bis 18, bei welchem das Generieren von Aktualisierungen für die Weichentscheidungsdaten für die Mehrzahl von Bitknoten parallel in den Prüfknoten-Verarbeitungssystemen umfasst, für jeden Bitknoten: Berechnen anfänglicher Prüf-zu-Bitknoten-Nachrichten für jeden Prüfknoten, der mit dem Bitknoten verbunden ist, unter Verwendung eines Min-Sum-Algorithmus (1414); Subtrahieren einer variablen Versetzung von jeder anfänglichen Prüf-zu-Bitknoten-Nachricht, um endgültige Prüf-zu-Bitknoten-Nachrichten für jeden Prüfknoten zu generieren, der mit dem Bitknoten verbunden ist (1416), wobei die variable Versetzung auf der Basis von Differenzen zwischen niedrigstwertigen Bit-zu-Prüfknoten-Nachrichten berechnet wird; und Berechnen einer Aktualisierung für die Weichentscheidungsdaten auf der Basis der endgültigen Prüf-zu-Bitknoten-Nachrichten für jeden Bitknoten, der mit dem Prüfknoten verbunden ist (1418).
DE102014012138.0A 2013-08-27 2014-08-14 Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte Active DE102014012138B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1315213.7 2013-08-27
GB1315213.7A GB2510932B (en) 2013-08-27 2013-08-27 An improved decoder for low-density parity-check codes

Publications (2)

Publication Number Publication Date
DE102014012138A1 DE102014012138A1 (de) 2015-04-02
DE102014012138B4 true DE102014012138B4 (de) 2021-09-23

Family

ID=49355930

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014012138.0A Active DE102014012138B4 (de) 2013-08-27 2014-08-14 Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte

Country Status (4)

Country Link
US (3) US10153781B2 (de)
CN (2) CN110719111B (de)
DE (1) DE102014012138B4 (de)
GB (2) GB2510932B (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9391647B2 (en) * 2014-07-18 2016-07-12 Storart Technology Co., Ltd. Decoder and decoding method thereof for min-sum algorithm low density parity-check code
CN105846830B (zh) * 2015-01-14 2019-07-30 北京航空航天大学 数据处理装置
KR102589918B1 (ko) 2016-07-19 2023-10-18 삼성전자주식회사 저밀도 패리티 체크 디코더 및 그것을 포함하는 저장 장치
WO2018014272A1 (en) * 2016-07-20 2018-01-25 Huawei Technologies Co., Ltd. Methods and systems for encoding and decoding for ldpc codes
CN117768059A (zh) * 2017-03-30 2024-03-26 三星电子株式会社 用于通信或广播系统中的信道编码/解码的装置和方法
EP3419179B1 (de) * 2017-06-19 2022-11-02 Universite De Bretagne Sud Hybride architekturen für prüfknotenverarbeitung in erweiterter min-sum (ems) decodierung von nicht-binären ldpc-codes
US10491244B2 (en) * 2017-11-14 2019-11-26 Nyquist Semiconductor Limited Systems and methods for decoding error correcting codes
CN110190856A (zh) * 2019-06-27 2019-08-30 本征信息技术(上海)有限公司 一种ldpc码的解码方法和解码装置
EP3963723A4 (de) 2019-09-10 2022-07-20 Samsung Electronics Co., Ltd. Verfahren und vorrichtung zur decodierung von daten in einem kommunikations- oder rundfunksystem
CN112583420B (zh) * 2019-09-30 2024-01-09 上海华为技术有限公司 一种数据处理方法和译码器
US11175989B1 (en) 2020-04-24 2021-11-16 Netapp, Inc. Pooling blocks for erasure coding write groups
GB2595240B (en) * 2020-05-18 2022-11-30 Accelercomm Ltd Low density parity check decoder, electronic device, and method therefor
KR102525414B1 (ko) 2020-07-29 2023-04-25 한국전자통신연구원 LDPC(low-density parity-check) 부호의 복호화 방법 및 장치
US20240014828A1 (en) * 2020-09-03 2024-01-11 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for improved belief propagation based decoding
CN112332857B (zh) * 2020-10-23 2023-08-08 中国科学院计算技术研究所 一种用于ldpc码的循环移位网络系统及循环移位方法
US11575389B2 (en) * 2020-12-08 2023-02-07 Nxp Usa, Inc. Multi-standard low-density parity check decoder
US11929762B2 (en) * 2021-11-24 2024-03-12 Samsung Electronics Co., Ltd. Low density parity check decoder and storage device

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050281111A1 (en) 2004-06-22 2005-12-22 Stmicroelectronics, S.A. LDPC decoder
US20100122142A1 (en) 2008-11-12 2010-05-13 Texas Instruments Incorporated Scalable Decoder Architecture for Low Density Parity Check Codes

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4062435B2 (ja) * 2002-12-03 2008-03-19 日本電気株式会社 誤り訂正符号復号装置
US7174495B2 (en) * 2003-12-19 2007-02-06 Emmanuel Boutillon LDPC decoder, corresponding method, system and computer program
CN1713530A (zh) * 2004-06-22 2005-12-28 印芬龙科技股份有限公司 解码低密度奇偶校验(ldpc)码字的ldpc解码器
WO2006055086A1 (en) * 2004-10-01 2006-05-26 Thomson Licensing A low density parity check (ldpc) decoder
EP1715589A1 (de) * 2005-03-02 2006-10-25 STMicroelectronics N.V. LDPC Decodierer, insbesondere für DVB-S2 LDPC Code Decodierung
US7716553B2 (en) * 2005-07-13 2010-05-11 Leanics Corporation System and method for designing RS-based LDPC code decoder
US7770090B1 (en) * 2005-09-14 2010-08-03 Trident Microsystems (Far East) Ltd. Efficient decoders for LDPC codes
US8006161B2 (en) * 2005-10-26 2011-08-23 Samsung Electronics Co., Ltd Apparatus and method for receiving signal in a communication system using a low density parity check code
KR100933139B1 (ko) * 2006-02-22 2009-12-21 삼성전자주식회사 통신 시스템에서 신호 수신 장치 및 방법
CN101212277A (zh) * 2006-12-29 2008-07-02 中兴通讯股份有限公司 支持多协议标准的ldpc码译码装置
US8010881B2 (en) * 2007-07-02 2011-08-30 Broadcom Corporation Multi-code LDPC (low density parity check) decoder
WO2009004572A1 (en) * 2007-07-04 2009-01-08 Nxp B.V. Shuffled ldpc decoding
CN101471674A (zh) * 2007-12-28 2009-07-01 三星电子株式会社 低密度奇偶校验码译码方法及装置
US8156409B2 (en) * 2008-02-29 2012-04-10 Seagate Technology Llc Selectively applied hybrid min-sum approximation for constraint node updates of LDPC decoders
US8433970B2 (en) * 2010-03-31 2013-04-30 Silicon Laboratories Inc. Techniques to control power consumption in an iterative decoder by control of node configurations
US8555131B2 (en) * 2010-03-31 2013-10-08 Silicon Laboratories Inc. Techniques to control power consumption in an iterative decoder by control of node configurations
US8341486B2 (en) * 2010-03-31 2012-12-25 Silicon Laboratories Inc. Reducing power consumption in an iterative decoder
CN103155421B (zh) * 2011-01-14 2016-11-09 马维尔国际贸易有限公司 Ldpc多解码器架构
US8756478B2 (en) * 2011-09-07 2014-06-17 Lsi Corporation Multi-level LDPC layer decoder
US8954822B2 (en) * 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
CN103166648B (zh) * 2011-12-14 2016-03-30 联芯科技有限公司 一种ldpc解码器及其实现方法
US8996969B2 (en) * 2012-12-08 2015-03-31 Lsi Corporation Low density parity check decoder with miscorrection handling

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050281111A1 (en) 2004-06-22 2005-12-22 Stmicroelectronics, S.A. LDPC decoder
US20100122142A1 (en) 2008-11-12 2010-05-13 Texas Instruments Incorporated Scalable Decoder Architecture for Low Density Parity Check Codes

Also Published As

Publication number Publication date
GB201315213D0 (en) 2013-10-09
GB2510932A (en) 2014-08-20
GB2517850B (en) 2015-08-05
CN104426554A (zh) 2015-03-18
US20190109601A1 (en) 2019-04-11
US10153781B2 (en) 2018-12-11
CN104426554B (zh) 2019-11-05
CN110719111A (zh) 2020-01-21
US10958288B2 (en) 2021-03-23
US20200358456A1 (en) 2020-11-12
GB2510932B (en) 2015-01-21
CN110719111B (zh) 2023-07-25
US20150067440A1 (en) 2015-03-05
DE102014012138A1 (de) 2015-04-02
GB201418342D0 (en) 2014-12-03
US11424762B2 (en) 2022-08-23
GB2517850A (en) 2015-03-04

Similar Documents

Publication Publication Date Title
DE102014012138B4 (de) Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte
DE102013014168B4 (de) Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung
DE102016204602B4 (de) Huffmann-Paralleldecoder
US7627801B2 (en) Methods and apparatus for encoding LDPC codes
DE102011014680B4 (de) Fehlerkorrekturmechanismen für Flash-Speicher
DE602004000456T2 (de) Verfahren und Vorrichtung zur Generierung von Prüfdaten basierend auf einer Low-Density Parity Check (LDPC) Matrix
DE4314741A1 (de) Dekodierer-Architektur nach Huffman für eine höhere Betriebsgeschwindigkeit und reduzierten Speicherbedarf
DE102017110389B4 (de) Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes
DE102007035210A1 (de) Verfahren und Vorrichtung zur LDPC-Dekodierung mit gemeinsamer Hardwarenutzung und serieller Summe-Produkt-Architektur
DE60108892T2 (de) Modul, vorrichtung und verfahren zum hochbitratigen dekodieren eines verketteten codes
DE112011101852B4 (de) Decodieren von LDPC-Code
DE4134192A1 (de) Integrierter schaltkreis mit verarbeitung im speicher
DE102015008923A1 (de) Vielfache ECC-Codewortgrössen in einem SSD
DE102016102590B4 (de) Datenverarbeitungseinrichtungen und verfahren zum rekonstruieren eines puf-werts
DE602005004863T2 (de) Verfahren zur Punktierung von LDPC Kanalcodes
DE102017120789A1 (de) Abgestufter Variablenknotenspeicher
DE112020006781T5 (de) Codierungsschaltung, decodierungsschaltung, steuerschaltung, speichermedium und decodierungsverfahren
DE112019005357T5 (de) Speichervorrichtung mit verbesserter fehlerkorrektur über datenneuanordnung, datenpartitionieren und inhaltssensitives decodieren
DE3702697A1 (de) Paritaetserzeugungsschaltung
DE102021107093A1 (de) Speicherinterne rechenschaltung und verfahren
DE112021005413T5 (de) Ldpc-decodierer reduzierter komplexität mit verbesserter fehlerkorrektur und damit in zusammenhang stehende systeme, verfahren und vorrichtungen
DE60118716T2 (de) Log-MAP Dekodierung
DE102015111729A1 (de) Verfahren und decoder zum bestimmen eines fehlervektors für ein datenwort gemäss einem reed-muller-code
DE69634515T2 (de) Verfahren, system und anordnung zur effizienten generierung binärer zahlen zum testen von spreichervorrichtungen
Park et al. Two-way bidiagonalization scheme for downdating the singular-value decomposition

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: DEHNS GERMANY, DE

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

Representative=s name: DEHNS, DE

Representative=s name: DEHNS PATENT AND TRADEMARK ATTORNEYS, DE

R081 Change of applicant/patentee

Owner name: NORDIC SEMICONDUCTOR ASA, NO

Free format text: FORMER OWNER: IMAGINATION TECHNOLOGIES LIMITED, KINGS LANGLEY, HERTFORDSHIRE, GB

R082 Change of representative

Representative=s name: DEHNS GERMANY, DE

Representative=s name: DEHNS, DE

Representative=s name: DEHNS PATENT AND TRADEMARK ATTORNEYS, DE

R018 Grant decision by examination section/examining division
R020 Patent grant now final
R082 Change of representative

Representative=s name: DEHNS GERMANY, DE