ES2365131T3 - PROCEDURE AND APPLIANCE TO DECODE LDPC CODES. - Google Patents

PROCEDURE AND APPLIANCE TO DECODE LDPC CODES. Download PDF

Info

Publication number
ES2365131T3
ES2365131T3 ES02739608T ES02739608T ES2365131T3 ES 2365131 T3 ES2365131 T3 ES 2365131T3 ES 02739608 T ES02739608 T ES 02739608T ES 02739608 T ES02739608 T ES 02739608T ES 2365131 T3 ES2365131 T3 ES 2365131T3
Authority
ES
Spain
Prior art keywords
messages
message
node
memory
nodes
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.)
Expired - Lifetime
Application number
ES02739608T
Other languages
Spanish (es)
Inventor
Tom Richardson
Vladimir Novichkov
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2365131T3 publication Critical patent/ES2365131T3/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Abstract

Un aparato (1500, 1600, 1700) para la realización de operaciones de decodificación de paso de mensajes usando gráficos LDPC convertidos a vectores que representan matrices de comprobación de paridad elevadas por lo que, en una matriz de comprobación de paridad elevada los elementos cero de una matriz de comprobación de paridad H de un código LDPC proyectado se reemplazan con matrices de Z x Z ceros y los elementos 1 de la matriz de comprobación de paridad H se reemplazan con matrices de permutación de Z x Z comprendiendo el aparato: una memoria (1506) incluyendo un conjunto de localizaciones de memoria para almacenar L conjuntos de Z mensajes de K bits, donde Z es un número entero positivo mayor de uno y K y L son números enteros positivos distintos de cero; un procesador de vectores de nodos (1508) incluyendo Z unidades de procesamiento de nodos en paralelo, cada una de las unidades de procesamiento de nodos (1508) para realizar al menos una de las operaciones de procesamiento de nodos de restricciones y una operación de procesamiento de nodos de variables; y un dispositivo de conmutación (1520) acoplado a la memoria (1506) y al procesador de vectores de nodos (1508), el dispositivo de conmutación (1520) para pasar conjuntos de Z mensajes de K bits, pasado cada conjunto de Z mensajes de K bits en paralelo entre dicha memoria y dicho procesador de vectores de nodos y para reordenar los mensajes en al menos uno de dichos conjuntos de mensajes en respuesta a la información de control de conmutación, un módulo de ordenamiento de mensajes (1504) acoplado a dicho dispositivo de conmutación para generar dicha información de control de conmutación usada para controlar el reordenamiento de mensajes en dicho, al menos, un conjunto de mensajes, en el que el módulo de reordenamiento de mansajes (1504) está además acoplado a dicha memoria y genera secuencialmente conjuntos de indicadores, controlando cada uno de los identificadores de conjunto la memoria para acceder a las localizaciones de memoria correspondientes a uno de dichos conjuntos de mensajes en una operación de lectura o escritura única por la que, uno de dichos conjuntos de Z mensajes de K bits se escribe o se lee como una unidad única accediendo a todos los Z mensajes de dicho conjunto usando una instrucción SIMD.An apparatus (1500, 1600, 1700) for performing message step decoding operations using LDPC graphics converted to vectors that represent high parity check matrices so that, in a high parity check matrix the zero elements of a parity check matrix H of a projected LDPC code is replaced with matrices of Z x Z zeros and elements 1 of the parity check matrix H are replaced with permutation matrices of Z x Z comprising the apparatus: a memory ( 1506) including a set of memory locations for storing L sets of Z K-bit messages, where Z is a positive integer greater than one and K and L are non-zero positive integers; a node vector processor (1508) including Z parallel node processing units, each of the node processing units (1508) to perform at least one of the restriction node processing operations and a processing operation of variable nodes; and a switching device (1520) coupled to memory (1506) and to the node vector processor (1508), the switching device (1520) for passing sets of Z messages of K bits, passing each set of Z messages of K bits in parallel between said memory and said node vector processor and to reorder the messages in at least one of said message sets in response to the switching control information, a message order module (1504) coupled to said switching device for generating said switching control information used to control the reordering of messages in said at least one set of messages, in which the message reordering module (1504) is further coupled to said memory and generates sequentially sets of indicators, each of the set identifiers controlling the memory to access the memory locations corresponding to one of said sets of messages in a single read or write operation whereby one of said sets of Z messages of K bits is written or read as a single unit accessing all Z messages of said set using a SIMD instruction.

Description

Campo de la Invención Field of the Invention

La presente invención se dirige a procedimientos y aparatos para la detección y/o corrección de errores en datos binarios, por ejemplo, a través del uso de códigos de comprobación de la paridad, tales como los códigos de comprobación de paridad de baja densidad (LDPC). The present invention is directed to methods and apparatus for the detection and / or correction of errors in binary data, for example, through the use of parity check codes, such as low density parity check codes (LDPC ).

Antecedentes Background

En la era moderna de la información, se usan los valores binarios, es decir, unos y ceros, para representar y comunicar diversos tipos de información, por ejemplo, video, audio, información estadística, etc. Desafortunadamente, durante el almacenamiento, la transmisión y/o el procesamiento de los datos binarios, pueden introducirse errores no intencionados, por ejemplo un uno puede cambiar a cero o viceversa. In the modern information age, binary values, ie ones and zeros, are used to represent and communicate various types of information, for example, video, audio, statistical information, etc. Unfortunately, during the storage, transmission and / or processing of binary data, unintended errors can be introduced, for example a one can change to zero or vice versa.

Generalmente, en el caso de la transmisión de datos, un receptor observa cada uno de los bits recibidos en presencia de ruido o distorsión y sólo se obtiene una indicación del valor de bit. Bajo estas circunstancias se interpretan los valores observados como una fuente de bits "software". Un bit software indica una estimación preferida del valor de bit, es decir, un uno o un cero, junto con alguna indicación de la fiabilidad de la estimación. Aunque el número de errores puede ser relativamente bajo, incluso un pequeño número de errores o un nivel de distorsión puede dar como resultado que los datos resulten inutilizables, en el caso de errores de transmisión, pueden necesitar la retransmisión de los datos. Generally, in the case of data transmission, a receiver observes each of the bits received in the presence of noise or distortion and only an indication of the bit value is obtained. Under these circumstances the observed values are interpreted as a source of "software" bits. A software bit indicates a preferred estimate of the bit value, that is, a one or a zero, along with some indication of the reliability of the estimate. Although the number of errors may be relatively low, even a small number of errors or a level of distortion may result in the data becoming unusable, in the case of transmission errors, they may need to retransmit the data.

Para proporcionar un mecanismo para la comprobación de errores y, en algunos casos, para corregir los errores, los datos binarios pueden codificarse para introducir cuidadosamente una redundancia diseñada. La codificación de una unidad de datos produce lo que comúnmente se denomina como una palabra de código. Debido a su redundancia, una palabra de código a menudo incluirá más bits que la unidad de entrada de datos a partir de la cual se produjo la palabra de código. To provide a mechanism for error checking and, in some cases, to correct errors, binary data can be encoded to carefully introduce a designed redundancy. The encoding of a data unit produces what is commonly referred to as a code word. Due to its redundancy, a code word will often include more bits than the data input unit from which the code word was produced.

Cuando las señales que surgen de palabras de código transmitidas se reciben o se procesan, la información redundante incluida en la palabra de código como se observa en la señal puede usarse para identificar y/o corregir los errores en las mismas o eliminar distorsión de la señal recibida para recuperar la unidad de datos original. Tal comprobación y/o la corrección de errores pueden implementarse como parte del proceso de decodificación. En ausencia de errores, o en el caso de errores o distorsión corregibles, puede usarse la decodificación para recuperar a partir de los datos fuentes que se están procesando, la unidad de datos original que se codificó. En el caso de errores no recuperables, el proceso de decodificación puede producir una indicación de que los datos originales no pueden recuperarse totalmente. Tales indicaciones de fallo de la decodificación pueden usarse para iniciar la retransmisión de los datos. When signals that arise from transmitted code words are received or processed, the redundant information included in the code word as seen in the signal can be used to identify and / or correct errors in them or eliminate signal distortion received to retrieve the original data unit. Such checking and / or error correction can be implemented as part of the decoding process. In the absence of errors, or in the case of correctable errors or distortion, decoding can be used to retrieve from the source data being processed, the original data unit that was encoded. In the case of non-recoverable errors, the decoding process can produce an indication that the original data cannot be fully recovered. Such indications of decoding failure can be used to initiate the retransmission of the data.

Aunque la redundancia de los datos puede aumentar la fiabilidad de los datos a almacenar o transmitidos, se hace a coste de espacio de almacenamiento y/o el uso de un valioso ancho de banda de comunicaciones. Por consiguiente, es deseable añadir redundancia de un modo eficaz, maximizando la magnitud de la capacidad de corrección/detección de errores obtenida para una cantidad determinada de redundancia introducida en los datos. Although data redundancy can increase the reliability of the data to be stored or transmitted, it is done at the cost of storage space and / or the use of a valuable communications bandwidth. Therefore, it is desirable to add redundancy in an efficient manner, maximizing the magnitude of the error correction / detection capability obtained for a given amount of redundancy introduced into the data.

Con el uso incrementado de las líneas de fibra óptica para las comunicaciones de datos y el aumento de la tasa a la cual pueden leerse los datos y almacenarse en dispositivos de almacenamiento de datos, por ejemplo en dispositivos de disco, cintas, etc., hay una necesidad en aumento no sólo de un uso eficaz de la capacidad de almacenamiento y de transmisión de datos sino también de la capacidad de codificar y decodificar datos a altas tasas de velocidad. With the increased use of fiber optic lines for data communications and the increase in the rate at which data can be read and stored on data storage devices, for example on disk devices, tapes, etc., there are an increasing need not only for effective use of storage and data transmission capacity but also for the ability to encode and decode data at high rates of speed.

Aunque la eficacia de la codificación y las altas tasas de datos son importantes, para que un sistema de codificación y/o decodificación sea práctico de usar en un amplio intervalo de dispositivos, por ejemplo, dispositivos de consumo, es importante que los codificadores y/o decodificadores se puedan implementar a un coste razonable. Por consiguiente, la capacidad de implementar de forma eficaz los esquemas de codificación/decodificación utilizados para el propósito de la corrección y/o detección de errores en términos, por ejemplo, de coste del hardware, puede ser importante. Although the coding efficiency and high data rates are important, for a coding and / or decoding system to be practical to use in a wide range of devices, for example, consumer devices, it is important that the encoders and / or decoders can be implemented at a reasonable cost. Therefore, the ability to effectively implement the encoding / decoding schemes used for the purpose of correction and / or error detection in terms, for example, of hardware cost, may be important.

A lo largo de años se han usado diversos tipos de esquemas de codificación para los propósitos de corrección de errores. Una clase de códigos, generalmente denominados como "códigos turbo" se inventaron recientemente (1993). Los códigos turbo ofrecen beneficios significativos sobre las técnicas de codificación más antiguas tales como los códigos convolucionales y han encontrado numerosas aplicaciones. Over the years various types of coding schemes have been used for error correction purposes. A class of codes, generally referred to as "turbo codes" were recently invented (1993). Turbo codes offer significant benefits over older coding techniques such as convolutional codes and have found numerous applications.

En conjunción con el advenimiento de los códigos turbo, ha habido un interés en aumento en otra clase de códigos relacionados, aparentemente más simples, comúnmente denominados como códigos de comprobación de paridad de baja densidad (LDPC). Los códigos LDPC se inventaron realmente por Gallager hace unos 40 años (1961) pero sólo han pasado a primer plano recientemente. Los códigos turbo y los códigos LDPC son esquemas de codificación que se usan en el contexto de los llamados sistemas de codificación iterativos, esto es, se decodifican usando decodificadores iterativos. Recientemente, se ha mostrado que los códigos LDPC pueden proporcionar muy buen funcionamiento de detección y corrección de errores, superando o igualando el de los códigos turbo para largas palabras de código, por ejemplo tamaños de palabras de código que exceden aproximadamente 1000 bits, dada la selección adecuada de parámetros de codificación LDPC. Además, los códigos LDPC pueden decodificarse potencialmente a velocidades mucho más altas que los códigos turbo. In conjunction with the advent of turbo codes, there has been an increasing interest in another class of related, apparently simpler codes, commonly referred to as low density parity check codes (LDPC). The LDPC codes were actually invented by Gallager about 40 years ago (1961) but have only recently come to the forefront. The turbo codes and the LDPC codes are coding schemes that are used in the context of the so-called iterative coding systems, that is, they are decoded using iterative decoders. Recently, it has been shown that LDPC codes can provide very good error detection and correction operation, exceeding or matching that of turbo codes for long code words, for example code word sizes that exceed approximately 1000 bits, given the proper selection of LDPC coding parameters. In addition, LDPC codes can potentially be decoded at much higher speeds than turbo codes.

En muchos esquemas de codificación, las palabras de código más largas son a menudo más resistentes para los propósitos de detección y corrección de errores debido a la interacción de la codificación sobre un mayor número de bits. De este modo el uso de palabras de código largas puede ser beneficioso en términos de aumentar la capacidad de detectar y corregir errores. Esto es particularmente cierto para los códigos turbo y los códigos LDPC. De este modo, en muchas aplicaciones es deseable el uso de palabras de código largas, por ejemplo, palabras de código que exceden al millar de bits de longitud. In many coding schemes, longer code words are often more resistant for the purposes of error detection and correction due to the interaction of the coding over a larger number of bits. Thus the use of long code words can be beneficial in terms of increasing the ability to detect and correct errors. This is particularly true for turbo codes and LDPC codes. Thus, in many applications it is desirable to use long code words, for example, code words that exceed one thousand bits in length.

La principal dificultad encontrada en la adopción de la codificación de LDPC y la codificación Turbo en el contexto de largas palabras de código, donde el uso de tales códigos ofrece ser el más prometedor, es la complejidad de implementación de estos sistemas de codificación. En un sentido práctico, la complejidad se traduce directamente en coste de la implementación. Ambos sistemas de codificación son significativamente más complejos que los sistemas de codificación utilizados tradicionalmente tales como los códigos convolucionales y los códigos de Reed Solomon. The main difficulty encountered in adopting LDPC coding and Turbo coding in the context of long code words, where the use of such codes offers to be the most promising, is the complexity of implementing these coding systems. In a practical sense, complexity translates directly into cost of implementation. Both coding systems are significantly more complex than traditionally used coding systems such as convolutional codes and Reed Solomon codes.

El análisis de la complejidad de los algoritmos de procesamiento de la señal usualmente se centra en las cuentas de las operaciones. Cuando se intenta explotar el paralelismo hardware en los sistemas de codificación iterativa, especialmente en el caso de los códigos LDPC, se presenta una complejidad significativa no desde el punto de vista de los requisitos de cálculo sino más bien de los requisitos de encaminamiento. La raíz de los problemas descansa en la construcción de los propios códigos. The analysis of the complexity of the signal processing algorithms usually focuses on the accounts of the operations. When trying to exploit the hardware parallelism in iterative coding systems, especially in the case of LDPC codes, there is significant complexity not from the point of view of the calculation requirements but rather of the routing requirements. The root of the problems lies in the construction of the codes themselves.

Los códigos LDPC y los códigos turbo descansan en el intercalado de mensajes dentro de un proceso iterativo. Para realizar bien el código, el intercalado debe tener buenas propiedades de mezclado. Esto necesita la implementación de un proceso de intercalado complejo. LDPC codes and turbo codes rely on the interleaving of messages within an iterative process. To perform the code well, the interleaving must have good mixing properties. This requires the implementation of a complex interleaving process.

Los códigos LDPC se representan bien por gráficos bipartitos, a menudo llamados gráficos de Tanner, en los cuales un conjunto de nodos, los nodos de variables, corresponden a los bits de la palabra de código y el otro conjunto de nodos, los nodos de restricciones, a menudo llamados nodos de comprobación, corresponden al conjunto de restricciones de comprobación de paridad que define el código. Las aristas en el gráfico conectan los nodos de variables a los nodos de restricciones. Un nodo de variable y un nodo de restricción se dice que son vecinos si están conectados por una arista en el gráfico. Por simplicidad, generalmente asumimos que un par de nodos se conectan a lo sumo por una arista. A cada uno de los nodos de variable está asociado un bit de la palabra de código. En algunos casos, algunos de estos bits pueden ser perforados o conocidos, como se tratará adicionalmente, más adelante. LDPC codes are well represented by bipartite graphics, often called Tanner graphics, in which one set of nodes, the variable nodes, correspond to the bits of the code word and the other set of nodes, the restriction nodes , often called check nodes, correspond to the set of parity check restrictions that define the code. The edges in the graph connect the variable nodes to the restriction nodes. A variable node and a restriction node are said to be neighbors if they are connected by an edge in the graph. For simplicity, we generally assume that a pair of nodes are connected at most by an edge. A bit of the code word is associated to each of the variable nodes. In some cases, some of these bits may be perforated or known, as will be discussed further below.

Una secuencia de bits asociada uno a uno con la secuencia de nodos de variables es una palabra de código si y sólo si, para cada uno de los nodos de restricción, los bits vecinos del nodo de restricción (a través de su asociación con los nodos de variables) suman cero en módulo dos, es decir comprende un número par de unos. A bit sequence associated one by one with the sequence of variable nodes is a code word if and only if, for each of the restriction nodes, the neighboring bits of the restriction node (through its association with the nodes of variables) add zero in module two, that is, it comprises an even number of ones.

Los decodificadores y los algoritmos de decodificación utilizados para decodificar las palabras de código de LDPC operan intercambiando mensajes dentro del gráfico a lo largo de las aristas y actualizando estos mensajes realizando cálculos en los nodos en base a los mensajes entrantes. Tales algoritmos generalmente se denominarán como algoritmos de paso de mensajes. Cada uno de los nodos de variables en el gráfico está inicialmente provisto con un bit software, denominado valor recibido, que indica una estimación del valor asociado del bit como se determina por las observaciones a partir, por ejemplo del canal de comunicaciones. Idealmente, las estimaciones para bits separados son estadísticamente independientes. Este ideal puede violarse en la práctica, y a menudo se viola. Una colección de valores recibidos constituye una palabra recibida. Para los fines de esta aplicación podemos identificar la señal observada por el receptor, por ejemplo, en un sistema de comunicaciones con la palabra recibida. The decoders and decoding algorithms used to decode the LDPC code words operate by exchanging messages within the graphic along the edges and updating these messages by calculating the nodes based on the incoming messages. Such algorithms will generally be referred to as message passing algorithms. Each of the variable nodes in the graph is initially provided with a software bit, called received value, which indicates an estimate of the associated value of the bit as determined by observations from, for example, the communications channel. Ideally, estimates for separate bits are statistically independent. This ideal can be violated in practice, and is often violated. A collection of received values constitutes a received word. For the purposes of this application we can identify the signal observed by the receiver, for example, in a communication system with the word received.

El número de aristas conectadas a un nodo, es decir un nodo de variable o un nodo de restricción, se denomina como el grado del nodo. Un gráfico o código regular es aquel para el cual todos los nodos de variables tienen el mismo grado, digamos j, y todos los nodos de restricción tienen el mismo grado, digamos k. En este caso decimos que el código es un código regular (j, k). Estos fueron los códigos considerados originalmente por Gallager (1961). En contraste con un código "regular", un código irregular tiene los nodos de restricción y/o los nodos variables de diferentes grados. Por ejemplo, algunos nodos variable pueden ser de grado 4, otros de grado 3 y otros más de grado 2. The number of edges connected to a node, that is a variable node or a restriction node, is referred to as the degree of the node. A regular graph or code is one for which all variable nodes have the same degree, say j, and all restriction nodes have the same degree, say k. In this case we say that the code is a regular code (j, k). These were the codes originally considered by Gallager (1961). In contrast to a "regular" code, an irregular code has restriction nodes and / or variable nodes of different degrees. For example, some variable nodes may be grade 4, others grade 3 and others more grade 2.

Aunque los códigos irregulares pueden ser más complicados de representar y/o de implementar, se ha mostrado que los códigos LDPC irregulares pueden proporcionar un funcionamiento de corrección/detección de errores superior cuando se comparan con los códigos LDPC regulares. Although irregular codes may be more complicated to represent and / or implement, it has been shown that irregular LDPC codes can provide superior error correction / detection operation when compared to regular LDPC codes.

Para describir con más precisión el proceso de decodificación introducimos la noción de un encaje en la descripción de los gráficos LDPC. Un encaje puede verse como una asociación de una arista en el gráfico con un nodo en el gráfico. Cada uno de los nodos tiene un encaje para cada una de las aristas conectadas al mismo y las aristas se "conectan" dentro de los encajes. De este modo, un nodo de grado d tiene d encajes fijados al mismo. Si el gráfico tiene L aristas entones hay L encajes sobre el lado de los nodos de variables del gráfico, llamados encajes de variables, y L encajes sobre el lado de los nodos de restricciones del gráfico, llamados encajes de restricciones. Para el propósito de identificación y ordenación, los encajes de variables pueden numerarse de 1, …, L de modo que todos los encajes de variables conectados a un nodo de variable aparecen de forma contigua. En tal caso, si los primeros tres nodos de variable tienen grados d1, d2, y d3 respectivamente, entonces los encajes de variables 1, …, d1 se conectan al primer nodo de variable, los encajes de variables d1 + 1, …, d1 + d2 se conectan al segundo nodo de variable, y los encajes de variables d1 + d2 +1, …, d1 + d2 + d3 se conectan al tercer nodo de variable. Los encajes de los nodos de restricción pueden numerarse de forma similar de 1, …,L con todos los encajes de restricciones conectados a un nodo restricción apareciendo de forma contigua. Una arista puede verse como un emparejamiento de encajes, procediendo cada uno del par de cada lado del gráfico. De este modo, las aristas del gráfico representan un intercalado o permutación sobre los encajes desde un lado del gráfico, por ejemplo, el lado de los nodos de variables, al otro, por ejemplo el lado de los nodos de restricciones. Las permutaciones asociadas con estos sistemas son a menudo complejos, reflejando la complejidad del intercalador como se ha indicado anteriormente, requiriendo un encaminamiento complejo del paso del mensaje para su implementación. To describe more accurately the decoding process we introduce the notion of a fit in the description of the LDPC graphics. A lace can be seen as an association of an edge in the graph with a node in the graph. Each of the nodes has a lace for each of the edges connected to it and the edges "connect" within the lace. In this way, a node of degree d has d laces attached to it. If the chart has L edges then there are L laces on the side of the variable nodes of the chart, called variable laces, and L laces on the side of the restriction nodes of the chart, called restriction laces. For the purpose of identification and sorting, variable fittings can be numbered 1,…, L so that all variable fittings connected to a variable node appear contiguously. In such a case, if the first three variable nodes have degrees d1, d2, and d3 respectively, then the variable fits 1, ..., d1 are connected to the first variable node, the variable fits d1 + 1, ..., d1 + d2 are connected to the second variable node, and the variable sockets d1 + d2 +1, ..., d1 + d2 + d3 are connected to the third variable node. The constraints of the restriction nodes can be numbered similarly to 1, ..., L with all constraint fittings connected to a constraint node appearing contiguously. An edge can be seen as a matching of lace, each of the pair coming from each side of the graph. Thus, the edges of the graph represent an interleaving or permutation on the fittings from one side of the graph, for example, the side of the variable nodes, to the other, for example the side of the restriction nodes. The permutations associated with these systems are often complex, reflecting the complexity of the interleaver as indicated above, requiring a complex routing of the message passing for implementation.

La noción de algoritmos de paso de mensajes implementados sobre gráficos es más general que la decodificación de LDPC. La vista general es un gráfico con nodos intercambiando mensajes a lo largo de las aristas en el gráfico y realizando cálculos basados en los mensajes entrantes para producir mensajes salientes. The notion of message passing algorithms implemented on graphics is more general than LDPC decoding. The overview is a graph with nodes exchanging messages along the edges of the graph and performing calculations based on incoming messages to produce outgoing messages.

Un gráfico bipartito de ejemplo 100 que determina un código LDPC regular (3, 6) de longitud 10 y tasa de un medio se muestra en la Fig. 1. La longitud 10 indica que hay 10 nodos de variables V1 – V10, identificado cada uno con un bit de la palabra de código X1 – X10 (y sin perforación en este caso), identificados de modo general por el número de referencia 102. Una tasa de un medio indica que hay la mitad de nodos de comprobación que de nodos de variables, es decir, hay cinco nodos de comprobación C1 – C5 identificados por el número de referencia 106. Una tasa de un medio indica además que las cinco restricciones son linealmente independientes, como se trata más adelante. Cada una de las líneas 104 representa una arista, por ejemplo un camino de comunicación o conexión, entre los nodos de comprobación y los nodos de variable a los cuales está conectada la línea. Cada arista identifica dos encajes, un encaje de variable y un encaje de restricción. Las aristas pueden numerarse de acuerdo con sus encajes de variables y sus encajes de restricciones. La numeración de los encajes de variables corresponde con el ordenamiento de las aristas (de arriba abajo) como aparece sobre el lado de los nodos de variables al punto donde están conectadas a los nodos variables. La numeración de los encajes de restricciones corresponden con el ordenamiento de aristas (de arriba abajo) como aparece sobre el lado de los nodos de restricciones en el punto donde están conectados a los nodos de restricciones. Durante la decodificación, los mensajes se pasan en ambas direcciones a lo largo de las aristas. De este modo, como parte del proceso de decodificación los mensajes se pasan a lo largo de una arista desde un nodo de restricción a un nodo de variable y viceversa. An example bipartite graph 100 that determines a regular LDPC code (3, 6) of length 10 and rate of a medium is shown in Fig. 1. Length 10 indicates that there are 10 nodes of variables V1-V10, each identified with a bit of the code word X1 - X10 (and without perforation in this case), generally identified by the reference number 102. A medium rate indicates that there are half of nodes of verification that of nodes of variables , that is, there are five C1-C5 check nodes identified by reference number 106. A one-way rate further indicates that the five restrictions are linearly independent, as discussed below. Each of the lines 104 represents an edge, for example a communication or connection path, between the check nodes and the variable nodes to which the line is connected. Each edge identifies two lace, one variable and one restriction. The edges can be numbered according to their variable fittings and their constraint fittings. The numbering of the variable fittings corresponds to the ordering of the edges (from top to bottom) as it appears on the side of the variable nodes to the point where they are connected to the variable nodes. The numbering of the restriction fittings corresponds to the ordering of edges (from top to bottom) as it appears on the side of the restriction nodes at the point where they are connected to the restriction nodes. During decoding, messages are passed in both directions along the edges. Thus, as part of the decoding process, messages are passed along an edge from a restriction node to a variable node and vice versa.

Aunque la Fig. 1 ilustra el gráfico asociado con un código de longitud 10, puede apreciarse que la representación del gráfico para una palabra de código de longitud 1000 sería 100 veces más complicada. Although Fig. 1 illustrates the graph associated with a code of length 10, it can be appreciated that the representation of the graph for a code word of length 1000 would be 100 times more complicated.

Una alternativa al uso de un gráfico para representar los códigos es usar una representación de matriz tal como la mostrada en la Fig. 2. En la representación de matriz de un código, la matriz 202 H, comúnmente denominada como la matriz de comprobación de paridad, incluye la conexión de aristas relevantes, la información de los nodos de variables y de los nodos de restricciones. En la matriz H, cada una de las columnas corresponde a uno de los nodos de variables mientras que cada una de las filas corresponde a uno de los nodos de restricción. Como hay 10 nodos de variables y 5 nodos de restricciones en el código de ejemplo, la matriz H incluye 10 columnas y 5 filas. La entrada de la matriz que corresponde a un nodo de variable particular y un nodo de restricción particular se pone a 1 si está presente la arista en el gráfico, es decir, si los dos nodos son vecinos, de lo contrario se fija a 0. Por ejemplo, como el nodo de variable V1 está conectado al nodo de restricción C1 por una arista, se coloca un uno en la esquina superior izquierda de la matriz 202. Sin embargo, el nodo de variable V4 no está conectado al nodo de restricción C1 de modo que se coloca un 0 en la cuarta posición de la primera fila de la matriz 202 indicando que los nodos de variable y de restricción correspondientes no están conectados. Decimos que las restricciones son linealmente independientes si las filas de H son vectores linealmente independientes sobre GF[2] (un campo de Galois de orden 2). La numeración de aristas por encajes, variables o restricciones, corresponde a la numeración de los 1 en H. La numeración de encajes de variables corresponde con la numeración de arriba abajo dentro de las columnas y procediendo de izquierda a derecha de columna a columna, como se muestra en la matriz 208. La numeración de encajes de restricciones corresponde con la numeración de izquierda a derecha a través de las columnas y procediendo de arriba a abajo de fila en fila, como se muestra en la matriz 210. An alternative to using a graph to represent codes is to use a matrix representation such as that shown in Fig. 2. In the matrix representation of a code, matrix 202 H, commonly referred to as the parity checking matrix , includes the connection of relevant edges, the information of the variable nodes and the restriction nodes. In matrix H, each of the columns corresponds to one of the variable nodes while each of the rows corresponds to one of the restriction nodes. Since there are 10 variable nodes and 5 restriction nodes in the sample code, matrix H includes 10 columns and 5 rows. The matrix entry that corresponds to a particular variable node and a particular restriction node is set to 1 if the edge is present in the graph, that is, if the two nodes are neighbors, otherwise it is set to 0. For example, since the variable node V1 is connected to the restriction node C1 by an edge, a one is placed in the upper left corner of the matrix 202. However, the variable node V4 is not connected to the restriction node C1 so that a 0 is placed in the fourth position of the first row of matrix 202 indicating that the corresponding variable and restriction nodes are not connected. We say that the constraints are linearly independent if the rows of H are linearly independent vectors on GF [2] (a Galois field of order 2). The numbering of edges by fittings, variables or restrictions, corresponds to the numbering of the 1 in H. The numbering of variable fittings corresponds to the numbering from top to bottom within the columns and proceeding from left to right from column to column, as it is shown in matrix 208. The numbering of constraint fittings corresponds to the numbering from left to right through the columns and proceeding from top to bottom from row to row, as shown in matrix 210.

En el caso de una representación de matriz, la palabra de código X que se transmite puede representarse como un vector 206 que incluye los bits X1 – Xn de la palabra de código a procesar. Una secuencia de bits X1 – Xn es una palabra de código si y sólo si el producto de la matriz 206 y 202 es igual a cero, esto es Hx = 0. In the case of an array representation, the transmitted code word X can be represented as a vector 206 that includes bits X1-Xn of the code word to be processed. A sequence of bits X1 - Xn is a code word if and only if the product of matrix 206 and 202 is equal to zero, this is Hx = 0.

En el contexto de la discusión de las palabras de código asociadas a los gráficos LDPC, debería apreciarse que en algunos casos la palabra de código puede perforarse. La perforación es el acto de eliminación de bits de una palabra de código para obtener, en efecto, una palabra de código más corta. En el caso de gráficos de LDPC esto significa que algunos de los nodos de variables en el gráfico corresponden a bits que no se transmiten realmente. Estos nodos de variables y los bits asociados con los mismos se denominan a menudo como variables de estado. Cuando se usa la perforación, el decodificador puede usarse para reconstruir la porción de la palabra de código que no está físicamente comunicada sobre el canal de comunicaciones. Cuando se transmite una palabra de código perforada el dispositivo receptor puede poblar inicialmente los valores perdidos de las palabras recibidas (bits) con unos y ceros asignados, por ejemplo de un modo arbitrario, junto con una indicación (bit software) de que estos valores son completamente no fiables, es decir, que estos valores están borrados. Con el fin de explicar la invención, asumimos que, cuando se usan, estos valores poblados por el receptor son parte de la palabra recibida que se va a procesar. In the context of the discussion of the code words associated with the LDPC graphics, it should be appreciated that in some cases the code word may be punctured. Perforation is the act of removing bits from a code word to obtain, in effect, a shorter code word. In the case of LDPC graphs this means that some of the variable nodes in the graph correspond to bits that are not actually transmitted. These variable nodes and the bits associated with them are often referred to as state variables. When drilling is used, the decoder can be used to reconstruct the portion of the code word that is not physically communicated on the communication channel. When a perforated code word is transmitted, the receiving device may initially populate the missing values of the received words (bits) with ones and zeros assigned, for example in an arbitrary way, together with an indication (software bit) that these values are completely unreliable, that is, these values are deleted. In order to explain the invention, we assume that, when used, these values populated by the receiver are part of the received word to be processed.

Consideremos por ejemplo el sistema 350 mostrado en la Fig. 3. El sistema 350 incluye un codificador 352, un decodificador 357, y un canal de comunicaciones 356. El codificador 352 incluye un circuito de codificación 353 que procesa los datos de entrada a para producir una palabra de código X. La palabra de código X incluye, para los fines de la detección y/o la corrección de errores, alguna redundancia. La palabra de código X puede transmitirse sobre el canal de comunicaciones. Alternativamente, la palabra de código X puede dividirse a través del dispositivo de selección de datos 354 en las porciones primera y segunda X', X'' respectivamente por alguna técnica de selección de datos. Una de las porciones de la palabra de código, por ejemplo, la primera porción X', puede transmitirse a continuación sobre el canal de comunicaciones a un receptor incluyendo el decodificador 357 mientras que la segunda porción X'' se perfora. Como resultado de las distorsiones producidas por el canal de comunicaciones 356, las porciones de la palabra de código transmitida pueden perderse o corromperse. Desde la perspectiva del decodificador, los datos perforados pueden interpretarse como perdidos. Consider for example the system 350 shown in Fig. 3. The system 350 includes an encoder 352, a decoder 357, and a communication channel 356. The encoder 352 includes an encoding circuit 353 that processes the input data a to produce an X code word. The X code word includes, for the purpose of detection and / or error correction, some redundancy. The code word X can be transmitted over the communication channel. Alternatively, the code word X may be divided through the data selection device 354 into the first and second portions X ', X' 'respectively by some data selection technique. One of the portions of the code word, for example, the first portion X ', can then be transmitted over the communications channel to a receiver including decoder 357 while the second portion X' 'is perforated. As a result of the distortions produced by the communication channel 356, the portions of the transmitted code word may be lost or corrupted. From the perspective of the decoder, perforated data can be interpreted as lost.

En el receptor se insertan los bits software dentro de la palabra recibida para tomar el lugar de los bits perdidos o perforados. Los bits software insertados indican los bits software X'' borrados y/o los bits perdidos en la transmisión. The software bits are inserted into the receiver in the received word to take the place of the lost or perforated bits. The inserted software bits indicate the deleted software bits X and / or the bits lost in the transmission.

El decodificador 357 intentará la reconstrucción de la palabra de código completa X a partir de la palabra recibida Y, y de cualesquiera bits software insertados, y a continuación realiza una operación de decodificación de datos para producir A a partir de la palabra de código reconstruida X. Decoder 357 will attempt to rebuild the complete code word X from the received word Y, and any inserted software bits, and then perform a data decoding operation to produce A from the reconstructed code word X.

El decodificador 357 incluye un decodificador de canal 358 para reconstruir la palabra de código completa X a partir de la palabra recibida Y. Además incluye un decodificador de datos 359 para eliminar la información redundante incluida en la palabra de código para producir los datos de entrada original A a partir de la palabra de código reconstruida X. The decoder 357 includes a channel decoder 358 to reconstruct the complete code word X from the received word Y. It also includes a data decoder 359 to eliminate the redundant information included in the code word to produce the original input data. A from the reconstructed code word X.

Se apreciará que las palabras recibidas generadas conjuntamente con la codificación LDPC, pueden procesarse realizando las operaciones de decodificación de LDPC sobre las mismas, por ejemplo, las operaciones de corrección y detección de errores, para generar una versión reconstruida de la palabra de código original. La palabra de código reconstruida puede someterse a continuación a la decodificación de datos para recuperar los datos originales que se codificaron. El proceso de decodificación de datos puede ser, por ejemplo, simplemente seleccionar un subconjunto específico de bits a partir de la palabra de código reconstruida. It will be appreciated that the received words generated in conjunction with the LDPC encoding can be processed by performing the LDPC decoding operations on them, for example, the correction and error detection operations, to generate a reconstructed version of the original code word. The reconstructed code word can then be subjected to data decoding to retrieve the original data that was encoded. The data decoding process can be, for example, simply selecting a specific subset of bits from the reconstructed code word.

Las operaciones de decodificación de LDPC generalmente comprenden algoritmos de paso de mensajes. Hay muchos algoritmos de paso de mensajes potencialmente útiles y el uso de tales algoritmos no está limitado a la decodificación de LDPC. La invención actual puede aplicarse en el contexto de virtualmente cualquiera de tales algoritmos de paso de mensajes y por lo tanto puede usarse en diversos sistemas de paso de mensajes de los cuales los decodificadores LDPC son sólo un ejemplo. LDPC decoding operations generally comprise message passing algorithms. There are many potentially useful message passing algorithms and the use of such algorithms is not limited to LDPC decoding. The present invention can be applied in the context of virtually any such message passing algorithm and therefore can be used in various message passing systems of which the LDPC decoders are only an example.

Para completar daremos una breve descripción matemática de una realización de uno de los algoritmos de paso de mensajes mejor conocidos, conocido como una propagación de creencia. To complete we will give a brief mathematical description of an embodiment of one of the best known message passing algorithms, known as a propagation of belief.

La propagación de creencia para códigos LDPC (binarios) puede expresarse como sigue. Los mensajes transmitidos a lo largo de las aristas del gráfico se interpretan como un log de probabilidades log (p0 / p1) siendo pi el bit asociado con el nodo variable. En este punto (p0, p1) representan una distribución de probabilidad condicional sobre el bit asociado. Los bits software proporcionados al decodificador por el receptor también se dan en la forma de un registro de probabilidad. De este modo, los valores recibidos, es decir, los elementos de la palabra recibida son log de probabilidades de los bits asociados condicionadas por la observación de los bits proporcionados por el canal de comunicaciones. En general, un mensaje m representa el log de probabilidad m y un valor recibido y representa un log de probabilidad y. Para los bits perforados el valor recibido y se pone a 0, indicando p0 = p1 = ½. The spread of belief for LDPC (binary) codes can be expressed as follows. The messages transmitted along the edges of the graph are interpreted as a log of log probabilities (p0 / p1) with pi being the bit associated with the variable node. At this point (p0, p1) they represent a conditional probability distribution over the associated bit. The software bits provided to the decoder by the receiver are also given in the form of a probability register. Thus, the values received, that is, the elements of the word received are log of probabilities of the associated bits conditioned by the observation of the bits provided by the communications channel. In general, a message m represents the probability log m and a received value and represents a probability log y. For punched bits the received value is set to 0, indicating p0 = p1 = ½.

Consideremos las normas de paso de mensajes de la propagación de creencia. Los mensajes se denominan por mC2V para mensajes desde los nodos de comprobación a los nodos de variable y por mV2C para los mensajes desde los nodos de variables a los nodos de comprobación. Consideremos un nodo de variable con d aristas. Para cada una de las aristas j = 1, …d, sea mC2V(i) el mensaje entrante sobre la arista i. Muy al comienzo del proceso de decodificación fijamos mC2V = 0 para cada arista. Entonces los mensajes salientes vendrán dados por Consider the message passing rules of the spread of belief. The messages are named by mC2V for messages from the check nodes to the variable nodes and by mV2C for the messages from the variable nodes to the check nodes. Consider a variable node with edges. For each of the edges j = 1,… d, let mC2V (i) be the incoming message on the edge i. Very early in the decoding process we set mC2V = 0 for each edge. Then the outgoing messages will be given by

mV2C(j) = y + Σdi=1 mC2V (i) – mC2V(j) mV2C (j) = y + Σdi = 1 mC2V (i) - mC2V (j)

En los nodos de comprobación es más conveniente representar los mensajes usando su 'signo' y magnitudes. De este modo para el mensaje m, sea mp ∊GF[2] que denota la 'paridad' del mensaje, es decir, mp = 0 si m ≥ 0 y mp = 1 si m < 0. Adicionalmente, sea mr ∈ [0, ∞] que denota la magnitud de m. De este modo, tenemos m = -1mpmr. En el nodo de comprobación las actualizaciones para mp y mr están separadas. Tenemos, para un nodo de comprobación del grado d In the check nodes it is more convenient to represent the messages using their 'sign' and magnitudes. Thus for the message m, let mp ∊GF [2] denote the 'parity' of the message, that is, mp = 0 if m ≥ 0 and mp = 1 if m <0. Additionally, let mr ∈ [0 , ∞] denoting the magnitude of m. In this way, we have m = -1mpmr. In the check node the updates for mp and mr are separated. We have, for a test node of degree d

mpC2V (j) = (Σdi=1 mpV2C (I)) – mpV2C(j), mpC2V (j) = (Σdi = 1 mpV2C (I)) - mpV2C (j),

donde toda la adición es sobre GF[2], y where all the addition is about GF [2], and

mrC2V (j) = F-1 ((Σdi=1 F(mrV2C (i))) – F(mrV2C(j))), mrC2V (j) = F-1 ((Σdi = 1 F (mrV2C (i))) - F (mrV2C (j))),

donde definimos F(x)=log coth (x/2). (En ambas de las ecuaciones anteriores el superíndice V2C indica mensajes entrantes en el nodo de comprobación). Observamos que F es igual a su propia inversa F-1(x) = F(x). where we define F (x) = log coth (x / 2). (In both of the previous equations the superscript V2C indicates incoming messages in the check node). We observe that F is equal to its own inverse F-1 (x) = F (x).

La mayor parte de los algoritmos de paso de mensajes pueden verse como aproximaciones a la propagación de creencia. Se apreciará que en cualquier implementación digital práctica los mensajes comprenderán un número finito de bits y normas de adaptación de mensajes debidamente adaptadas. Most message passing algorithms can be seen as approximations to the propagation of belief. It will be appreciated that in any practical digital implementation the messages will comprise a finite number of bits and adapted message adaptation standards.

Será evidente que la complejidad asociada con la representación de los códigos de LDPC para palabras de código largas es de enormes proporciones, al menos para las implementaciones por hardware que intentan explotar el paralelismo. Además, puede ser difícil implementar el paso de mensajes de modo que soporte el procesamiento a altas velocidades. It will be evident that the complexity associated with the representation of LDPC codes for long code words is of enormous proportions, at least for hardware implementations that attempt to exploit the parallelism. In addition, it can be difficult to implement message passing so that it supports processing at high speeds.

Para hacer un uso más práctico de los códigos LDPC, se necesitan procedimientos de representación de los códigos LDPC correspondientes a palabras de código largas en una forma eficaz y compacta reduciendo por lo tanto la cantidad de información requerida para representar el código, es decir, describir el gráfico asociado. Además, hay necesidad de técnicas que permitan el paso de los mensajes asociado con múltiples nodos y múltiples aristas, por ejemplo, cuatro o más nodos o aristas, a realizar en paralelo en un modo controlado de forma fácil, permitiendo por lo tanto incluso que largas palabras de código se decodifiquen de forma eficaz en una cantidad de tiempo razonable. Existe además la necesidad de una arquitectura de decodificador que es suficientemente flexible para decodificar varios códigos LDPC diferentes. Esto es porque muchas aplicaciones requieren códigos de diferentes longitudes y tasas. Incluso es más deseable una arquitectura que permita que la especificación de un código LDPC particular sea programable. To make more practical use of LDPC codes, procedures for representing LDPC codes corresponding to long code words are needed in an efficient and compact manner thereby reducing the amount of information required to represent the code, that is, describing The associated graphic. In addition, there is a need for techniques that allow the passage of messages associated with multiple nodes and multiple edges, for example, four or more nodes or edges, to be performed in parallel in an easily controlled mode, thus allowing even long Code words are decoded effectively in a reasonable amount of time. There is also a need for a decoder architecture that is flexible enough to decode several different LDPC codes. This is because many applications require codes of different lengths and rates. An architecture that allows the specification of a particular LDPC code to be programmable is even more desirable.

Breve Descripción de las Figuras Brief Description of the Figures

La Figura 1 ilustra una representación de un gráfico bipartito de un código LDPC regular de ejemplo de longitud diez. Figure 1 illustrates a representation of a bipartite graph of an example regular LDPC code of length ten.

La Figura 2 es una representación de matriz del código ilustrado gráficamente en la Fig. 1. Figure 2 is a matrix representation of the code illustrated graphically in Fig. 1.

La Figura 3 ilustra la codificación, transmisión y decodificación de datos. Figure 3 illustrates the coding, transmission and decoding of data.

La Figura 4 ilustra una representación de un gráfico bipartito de un código LDPC irregular de ejemplo Figure 4 illustrates a representation of a bipartite graph of an example irregular LDPC code

La Figura 5, que comprende la combinación de las Fig 5a hasta la 5d, ilustra etapas realizadas como parte de la operación de decodificación LDPC de acuerdo con el código LDPC ilustrado en la Fig. 4. Figure 5, comprising the combination of Figs 5a through 5d, illustrates steps performed as part of the LDPC decoding operation in accordance with the LDPC code illustrated in Fig. 4.

La Figura 6 es una representación gráfica de un código LDPC pequeño que se usa como base de un código LDPC mucho más largo para presentar un ejemplo de acuerdo con la presente invención. Figure 6 is a graphical representation of a small LDPC code that is used as the basis of a much longer LDPC code to present an example according to the present invention.

La Figura 7 ilustra la representación de la matriz de comprobación de paridad del código LDPC pequeño ilustrado gráficamente en la Fig. 6. Figure 7 illustrates the representation of the parity check matrix of the small LDPC code illustrated graphically in Fig. 6.

La Figura 8 ilustra cómo pueden estar dispuestas las aristas en el código mostrados en la Fig. 6, por ejemplo, numeradas en orden desde el lado de los nodos de variables y cómo aparecerían las mismas aristas desde el lado de los nodos de restricciones. Figure 8 illustrates how the edges in the code shown in Fig. 6 can be arranged, for example, numbered in order from the side of the variable nodes and how the same edges would appear from the side of the restriction nodes.

La Figura 9 ilustra un sistema para realizar una operación de decodificación de LDPC en serie. Figure 9 illustrates a system for performing a serial LDPC decoding operation.

La Figura 10 ilustra gráficamente el efecto de hacer tres copias del gráfico LDPC pequeño mostrado en la Fig. 6. Figure 10 graphically illustrates the effect of making three copies of the small LDPC chart shown in Fig. 6.

La Figura 11 ilustra la representación de la matriz de comprobación de paridad del gráfico de LDPC mostrado en la Fig. 10. Figure 11 illustrates the representation of the parity check matrix of the LDPC chart shown in Fig. 10.

La Figura 12 ilustra cómo pueden estar dispuestas las aristas en el código mostrado en la Fig. 11, por ejemplo numeradas en orden desde el lado de los nodos de variables y cómo aparecerán las mismas aristas desde el lado de los nodos de restricciones. Figure 12 illustrates how the edges can be arranged in the code shown in Fig. 11, for example numbered in order from the side of the variable nodes and how the same edges will appear from the side of the restriction nodes.

La Figura 13 ilustra el efecto de reemplazar las matrices identidad de 3x3 mostradas en la Fig. 11 con matrices de permutaciones cíclicas de acuerdo con una realización de ejemplo de la presente invención. Figure 13 illustrates the effect of replacing the 3x3 identity matrices shown in Fig. 11 with cyclic permutations matrices in accordance with an exemplary embodiment of the present invention.

La Figura 14 ilustra cómo se pueden numerar las aristas en el código mostrado en la Fig. 13 desde el lado de los nodos de variable, y como aparecerán las mismas aristas desde el lado de los nodos de restricciones después de someterse a una permutación cíclica de acuerdo con la invención. Figure 14 illustrates how the edges can be numbered in the code shown in Fig. 13 from the side of the variable nodes, and how the same edges will appear from the side of the restriction nodes after undergoing a cyclic permutation of according to the invention.

La Figura 15 ilustra un decodificador LDPC implementado de acuerdo con la presente invención que convierte a vectores el decodificador de la Fig. 9. Figure 15 illustrates an LDPC decoder implemented in accordance with the present invention that converts the decoder of Fig. 9 to vectors.

Las Figuras 16 y 17 ilustran los otros decodificadores LDPC implementados de acuerdo con la presente invención. Figures 16 and 17 illustrate the other LDPC decoders implemented in accordance with the present invention.

Se llama la atención de un documento de Boutillion E y otros: "Diseño del primer-decodificador de código", PROC.DEL SIMPOSIO INTERNACIONAL SOBRE CÓDIGOS TURBO Y TEMAS RELACIONADOS, BREST, FRANCIA, 4 de Septiembre de 2000, páginas 459 – 462, XP08011934 y otros. El documento describe una arquitectura de decodificador para un código de Comprobación de Paridad de Baja Densidad. En particular, se describe una arquitectura que usa N memorias distintas que se dirigen separadamente. En el sistema se seleccionan N elementos aleatoriamente uno cada vez de cada una de las N memorias dirigidas separadamente y de forma aleatoria. The attention of a document by Boutillion E and others is called: "Design of the first code decoder", PROC. OF THE INTERNATIONAL SYMPOSIUM ON TURBO CODES AND RELATED ISSUES, BREST, FRANCE, September 4, 2000, pages 459 - 462, XP08011934 and others. The document describes a decoder architecture for a Low Density Parity Check code. In particular, an architecture is described that uses N distinct memories that are addressed separately. In the system, N elements are selected randomly one at a time from each of the N memories addressed separately and randomly.

Sumario de la invención Summary of the invention

De acuerdo con la presente invención, como se muestra en la reivindicación 1 se proporcionan un aparato para la realización de operaciones de decodificación de paso de mensajes, y procedimientos para la realización del procesamiento de decodificación de paso de mensajes, como se muestra en las reivindicaciones 17 y 26. Las realizaciones de la invención se reivindican en las reivindicaciones dependientes. In accordance with the present invention, as shown in claim 1 there is provided an apparatus for performing message step decoding operations, and methods for performing message step decoding processing, as shown in the claims. 17 and 26. The embodiments of the invention are claimed in the dependent claims.

La presente invención se dirige a procedimientos y un aparato para realizar las operaciones de decodificación sobre palabras que usan las técnicas de decodificación de paso de mensajes. Las técnicas de la presente invención están particularmente bien adaptadas para su uso con códigos LDPC largos, por ejemplo, palabras de código de más de 750 bits de longitud, pero pueden usarse también para longitudes más cortas. Las técnicas y el aparato de la presente invención pueden también usarse para diseño y decodificación de gráficos donde se usan otros tipos de algoritmos de paso de mensajes. Para fines de explicación de la invención, sin embargo, se describirán los decodificadores LDPC y las técnicas de decodificación de ejemplo. The present invention is directed to methods and an apparatus for performing word decoding operations using message passing decoding techniques. The techniques of the present invention are particularly well suited for use with long LDPC codes, for example, code words of more than 750 bits in length, but can also be used for shorter lengths. The techniques and apparatus of the present invention can also be used for graphic design and decoding where other types of message passing algorithms are used. For purposes of explaining the invention, however, LDPC decoders and example decoding techniques will be described.

Las técnicas de la presente invención permiten la decodificación de gráficos de LDPC que poseen una cierta estructura jerárquica en la cual un gráfico LDPC completo parece estar, en gran parte, constituido de múltiples copias, digamos Z, de un gráfico Z veces más pequeño. Las Z copias del gráfico pueden ser idénticas. Para ser precisos, nos referiremos a un gráfico más pequeño como el gráfico proyectado. La técnica puede apreciarse mejor considerando en primer lugar un decodificador que decodifica Z pequeños gráficos LDPC idénticos de forma síncrona y en paralelo. Consideremos un decodificador de paso de mensajes para un gráfico único pequeño LDPC. El decodificador implementa una secuencia de operaciones que corresponden a un algoritmo de paso de mensajes. Consideremos ahora aumentar el mismo decodificador de modo que decodifica tales Z gráficos idénticos LDPC de forma síncrona y en paralelo. Cada una de las operaciones en el algoritmo de paso de mensajes se repite Z veces. Obsérvese que la eficacia del proceso de decodificación mejorará porque, en total, la decodificación procede Z veces más rápida y porque los mecanismos de control requeridos para controlar el proceso de paso de mensajes no necesitan replicarse para las Z copias sino que pueden en cambio compartirse por las Z copias. También podemos ver que el decodificador anterior de Z copias en paralelo como un decodificador de vectores. Podemos ver el proceso de realización de Z copias del gráfico más pequeño como una conversión a vectores del gráfico más pequeño (proyectado): Cada uno de los nodos del gráfico más pequeño se convierte en un nodo de vector, que comprende Z nodos, cada una de las aristas del gráfico más pequeño se convierte en una arista de vector, consistente de Z aristas, cada uno de los mensajes intercambiados en la decodificación del gráfico más pequeño se convierte en un mensaje de vectores, que comprende Z mensajes. The techniques of the present invention allow the decoding of LDPC graphics that have a certain hierarchical structure in which a complete LDPC graphic appears to be, in large part, made up of multiple copies, say Z, of a smaller times Z chart. The Z copies of the chart may be identical. To be precise, we will refer to a smaller graph as the projected graph. The technique can be better appreciated by first considering a decoder that decodes Z small identical LDPC graphics synchronously and in parallel. Consider a message passing decoder for a single small LDPC graphic. The decoder implements a sequence of operations that correspond to a message passing algorithm. Consider now increasing the same decoder so that it decodes such identical Z LDPC graphics synchronously and in parallel. Each of the operations in the message passing algorithm is repeated Z times. Note that the efficiency of the decoding process will improve because, in total, decoding proceeds Z times faster and because the control mechanisms required to control the message passing process do not need to be replicated for the Z copies but can instead be shared by The Z copies. We can also see that the previous decoder of Z copies in parallel as a vector decoder. We can see the process of making Z copies of the smaller graph as a conversion to vectors of the smaller (projected) graph: Each of the nodes of the smaller graph becomes a vector node, comprising Z nodes, each From the edges of the smaller graphic it becomes a vector edge, consisting of Z edges, each of the messages exchanged in decoding the smaller graphic becomes a vector message, which comprises Z messages.

La presente invención obtiene la eficacia de la conversión a vectores descrita anteriormente mientras que se modifica el mismo de modo que el decodificador de vectores es de hecho la decodificación de un gran gráfico, Z veces mayor que el gráfico proyectado. Esto se realiza interconectando las Z copias del gráfico proyectado de un modo controlado. Específicamente, permitimos que las Z aristas dentro de una arista de vectores sufra una permutación, o intercambio, entre las copias del gráfico proyectado a medida que avanzan, por ejemplo, desde el lado de los nodos de variables al lado de los nodos de restricciones. En el proceso de paso del mensaje de vectores correspondiente a los Z gráficos proyectados en paralelo este intercambio se implementa permutando los mensajes dentro de un mensaje de vectores a medida que pasan desde un lado del gráfico de vectores al otro. The present invention obtains the efficiency of the conversion to vectors described above while modifying it so that the decoder of vectors is in fact the decoding of a large graph, Z times greater than the projected graph. This is done by interconnecting the Z copies of the projected graph in a controlled way. Specifically, we allow the Z edges within a vector edge to suffer a permutation, or exchange, between copies of the projected graph as they move forward, for example, from the side of the variable nodes to the side of the restriction nodes. In the process of passing the vector message corresponding to the Z graphics projected in parallel this exchange is implemented by swapping the messages within a vector message as they pass from one side of the vector graphic to the other.

Consideramos la indexación de los gráficos de LDPC proyectados por 1, j, …, Z. En el decodificador estrictamente en paralelo los nodos de variables en el gráfico j se conectan sólo con nodos de restricciones en el gráfico j. De acuerdo con la presente invención, tomamos una arista de vectores, incluyendo la arista correspondiente a cada una de las copias del gráfico, y permitimos una permutación dentro de las Z aristas, por ejemplo permitimos que los encajes de restricciones correspondientes a las aristas dentro de las aristas de vectores permuten, es decir, que se reordenen. A partir de ahora a menudo nos referiremos a las permutaciones, es decir, las reordenaciones, dentro de las aristas de vectores como rotaciones. We consider indexing the LDPC graphs projected by 1, j,…, Z. In the strictly parallel decoder, the variable nodes in graph j are connected only with constraint nodes in graph j. In accordance with the present invention, we take an edge of vectors, including the edge corresponding to each of the copies of the graph, and allow a permutation within the Z edges, for example we allow the constraint fittings corresponding to the edges within vector edges permute, that is, reorder. From now on we will often refer to permutations, that is, rearrangements, within vector edges as rotations.

De este modo, de acuerdo con la presente invención, puede representarse un gráfico relativamente grande, es decir, describirse, usando relativamente poca memoria. Por ejemplo, un gráfico puede representarse almacenando la información que describe el gráfico proyectado y la información que describe las rotaciones. Como alternativa, la descripción del gráfico puede realizarse como un circuito que implementa una función que describe la conectividad del gráfico. Thus, according to the present invention, a relatively large graph can be represented, that is, described, using relatively little memory. For example, a graph can be represented by storing the information describing the projected graph and the information describing the rotations. Alternatively, the description of the graph can be performed as a circuit that implements a function that describes the connectivity of the graph.

Por consiguiente, la técnica de representación de gráficos de la presente invención facilita las implementaciones de gráficos, por ejemplo, convertidos a vectores. Además, las técnicas de representación de gráficos de la presente invención pueden usarse para soportar la decodificación de gráficos regulares o irregulares, con o sin variables de estado. La información que describe los grados de los nodos en el gráfico proyectado puede almacenarse y proporcionarse a un elemento de procesamiento de nodos de vectores. Obsérvese que todos los nodos que pertenecen a un nodo de vector tendrán el mismo grado de modo que la información de grado se requiere sólo para un gráfico proyectado. Accordingly, the graphic representation technique of the present invention facilitates the implementations of graphics, for example, converted to vectors. In addition, the graphics representation techniques of the present invention can be used to support decoding of regular or irregular graphics, with or without status variables. Information describing the degrees of the nodes in the projected graph can be stored and provided to a vector node processing element. Note that all nodes that belong to a vector node will have the same degree so that grade information is required only for a projected graph.

En diversas realizaciones, el decodificador se hace programable permitiendo por lo tanto programarse con múltiples descripciones de gráficos, por ejemplo, como se expresa en términos de gráficos proyectados almacenados y la información de rotación almacenada o en términos de una función implementada. Por consiguiente, los decodificadores de la presente invención pueden programarse para decodificar una gran cantidad de diferentes códigos, por ejemplo, tanto regular como irregular. En algunas realizaciones particulares el decodificador se usa para un gráfico fijo o para grados fijos y esta información. En tales realizaciones la información de descripción del gráfico puede ser programada de antemano o implícita. En tales casos el decodificador puede ser menos flexible que las realizaciones programables pero se ahorran los recursos requeridos para soportar la funcionalidad de la programación. In various embodiments, the decoder is made programmable thereby allowing it to be programmed with multiple graphics descriptions, for example, as expressed in terms of stored projected graphics and stored rotation information or in terms of an implemented function. Accordingly, the decoders of the present invention can be programmed to decode a large number of different codes, for example, both regular and irregular. In some particular embodiments the decoder is used for a fixed graph or for fixed degrees and this information. In such embodiments the description information of the graph can be programmed beforehand or implicitly. In such cases the decoder may be less flexible than the programmable embodiments but the resources required to support the programming functionality are saved.

De acuerdo con una realización de la presente invención, se proporciona una memoria de mensajes que incluye filas de localizaciones de memoria, correspondiendo cada fila a los mensajes asociados con una copia del gráfico proyectado. Los mensajes correspondientes a los Z gráficos proyectados múltiples se almacenan para formar columnas de Z mensajes por columna, de modo que una columna corresponde con un mensaje de vectores. Esta disposición de la memoria permite que los mensajes de vectores, por ejemplo, un conjunto de Z mensajes, correspondientes a la arista de vectores se lean o se escriban en memoria como una unidad, usando por ejemplo una instrucción SIMD para acceder a todos los Z mensajes en una columna en una operación. De este modo la memoria soporta la lectura y escritura de mensajes de vectores como unidades. Por consiguiente, la presente invención evita la necesidad de proporcionar una dirección de lectura/escritura diferentes para cada uno de los mensajes individuales en un conjunto de Z mensajes. In accordance with an embodiment of the present invention, a message memory is provided that includes rows of memory locations, each row corresponding to the messages associated with a copy of the projected graphic. The messages corresponding to the multiple projected Z graphics are stored to form columns of Z messages per column, so that one column corresponds to a vector message. This memory arrangement allows vector messages, for example, a set of Z messages, corresponding to the edge of vectors to be read or written to memory as a unit, using for example a SIMD instruction to access all Z messages in a column in an operation. In this way memory supports reading and writing vector messages as units. Accordingly, the present invention avoids the need to provide a different read / write address for each of the individual messages in a set of Z messages.

En uno o más puntos en el procesamiento de paso de mensajes, después de la lectura de la memoria, los Z mensajes están sujetos a una operación de permutación, es decir una operación de reordenamiento. La operación de reordenamiento puede ser una operación de rotación, o una rotación para acortar. Estas operaciones de rotación corresponden con las rotaciones asociadas con las aristas de vectores que interconectan las Z copias del gráfico proyectado para formar el único gran gráfico. Esta rotación puede aplicarse, por ejemplo antes de suministrar los mensajes al procesador de nodos de vectores correspondiente (restricción o variable). Como alternativa, la rotación puede aplicarse posteriormente al procesamiento por el procesador de nodos de vectores. At one or more points in the message passing processing, after reading the memory, the Z messages are subject to a permutation operation, that is, a reordering operation. The rearrangement operation can be a rotation operation, or a rotation to shorten. These rotation operations correspond to the rotations associated with the vector edges that interconnect the Z copies of the projected graph to form the only large graph. This rotation can be applied, for example, before delivering the messages to the corresponding vector node processor (restriction or variable). Alternatively, the rotation can be applied later to the processing by the vector node processor.

La rotación puede implementarse usando un simple dispositivo de conmutación que conecta, por ejemplo, la memoria de mensajes con la unidad de procesamiento de nodos de vectores y reordena esos mensajes a medida que pasan desde la memoria a la unidad de procesamiento de los nodos de vectores. En tal realización de ejemplo, uno de los mensajes en cada uno de los mensajes de vectores leído desde la memoria se suministra a la unidad correspondiente de las Z unidades de procesamiento de nodos en paralelo, dentro de un procesador de nodos de vectores, como se determina por la rotación aplicada al mensaje de vectores por el dispositivo de conmutación. Una operación de rotación como se implementa por el dispositivo de conmutación puede aplicarse también o alternativamente al mensaje de vectores antes de su escritura en la memoria y posterior procesamiento de nodos. The rotation can be implemented using a simple switching device that connects, for example, the message memory with the vector node processing unit and rearranges those messages as they pass from the memory to the vector node processing unit. . In such an exemplary embodiment, one of the messages in each of the vector messages read from the memory is supplied to the corresponding unit of the Z parallel node processing units, within a vector node processor, as determined by the rotation applied to the vector message by the switching device. A rotation operation as implemented by the switching device can also be applied or alternatively to the vector message before it is written to memory and subsequent node processing.

La descripción almacenada o calculada del gráfico proyectado puede incluir, por ejemplo, información sobre el orden en el cual los mensajes en una fila correspondientes al gráfico proyectado se leerán y/o se escribirán en memoria durante el procesamiento de nodos de restricciones y/o variables. Los mensajes de todo el gran gráfico se almacenan en múltiples filas, correspondiendo cada una de las filas a una copia diferente del gráfico pequeño, disponiéndose las filas para formar columnas de mensajes. Cada una de las columnas de mensajes representa un mensaje de vectores, que puede accederse como una única unidad. De este modo, la información sobre cómo acceder a los mensajes en una fila de un gráfico proyectado puede usarse para determinar el orden en el cual los mensajes de vectores correspondientes a las múltiples copias del gráfico proyectado se acceden de acuerdo con la presente invención. The stored or calculated description of the projected graph may include, for example, information on the order in which the messages in a row corresponding to the projected graph will be read and / or written in memory during the processing of restriction and / or variable nodes. . The messages of the entire large graphic are stored in multiple rows, each of the rows corresponding to a different copy of the small graphic, the rows being arranged to form message columns. Each of the message columns represents a vector message, which can be accessed as a single unit. Thus, information on how to access messages in a row of a projected graphic can be used to determine the order in which vector messages corresponding to multiple copies of the projected graphic are accessed in accordance with the present invention.

La variación del orden en el cual se leen y/o se escriben los mensajes de vectores en la memoria de acuerdo a si la operación de lectura/escritura corresponde un procesamiento del lado de los nodos de variables o del lado de los nodos de restricciones puede describirse como una primera permutación realizada sobre los mensajes. Esta permutación corresponde al intercalador asociado con el gráfico proyectado. Para representar el gran gráfico del decodificador a partir del gráfico del decodificador proyectado, un segundo conjunto de información de permutación, por ejemplo, la información de rotación, se almacena además de la información del orden de acceso a los mensajes de vectores (por ejemplo, la columna). La segunda información de permutación (por ejemplo, la información de rotación), que representa la información de control de conmutación, indica cómo deberían reordenarse los mensajes en cada uno de los mensajes de vectores, por ejemplo, las columnas de mensajes, cuando, por ejemplo se leen y/o se escriben en la memoria. Esta permutación de dos etapas divide la permutación más grande que describe el gráfico LDPC completo en dos partes implementadas a través de diferentes mecanismos. The variation of the order in which vector messages are read and / or written to memory according to whether the read / write operation corresponds to a processing of the side of the variable nodes or of the side of the restriction nodes can be described as a first permutation performed on the messages. This permutation corresponds to the interleaver associated with the projected graph. To represent the large decoder graphic from the projected decoder graphic, a second set of permutation information, for example, rotation information, is stored in addition to the information of the order of access to vector messages (for example, the spine). The second permutation information (for example, the rotation information), which represents the switching control information, indicates how the messages in each of the vector messages should be rearranged, for example, the message columns, when, by example are read and / or written to memory. This two-stage permutation divides the larger permutation that describes the entire LDPC chart into two parts implemented through different mechanisms.

En una realización particular, se usa una permutación cíclica como el segundo nivel de permutación debido a la facilidad con la que puede implementarse tal permutación y la compacidad de la descripción. Este caso motiva el uso de la rotación de términos para describir esta permutación de segundo nivel para fines de explicación. Sin embargo, se entenderá que el segundo nivel de permutación no se necesita limitarse a las rotaciones y puede implementarse usando otros esquemas de reordenación. In a particular embodiment, a cyclic permutation is used as the second level of permutation due to the ease with which such permutation can be implemented and the compactness of the description. This case motivates the use of terms rotation to describe this second level permutation for the purpose of explanation. However, it will be understood that the second level of permutation does not need to be limited to rotations and can be implemented using other rearrangement schemes.

En diversas realizaciones de la presente invención, el decodificador genera salidas de múltiples bits software con un bit, por ejemplo, como bit de signo o bit de paridad de cada una de las salidas software, correspondiendo a una salida de decisión hardware del decodificador, por ejemplo, la palabra de código original en el caso en el que se hayan corregido todos los errores o no haya ningún error presente en la palabra recibida. La salida del decodificador, por ejemplo la palabra de código recuperada, puede procesarse a continuación para recuperar los datos originales que se usaron en el instante de la codificación para producir la palabra de código transmitida. In various embodiments of the present invention, the decoder generates outputs of multiple software bits with one bit, for example, as a sign bit or parity bit of each of the software outputs, corresponding to a hardware decision output of the decoder, by For example, the original code word in the case where all errors have been corrected or there is no error present in the received word. The decoder output, for example the recovered code word, can then be processed to retrieve the original data that was used at the time of encoding to produce the transmitted code word.

De acuerdo con una característica de la presente invención las salidas hardware y/o software producidas después de cada una de las iteraciones completas del procesamiento de nodos de variables se examinan para determinar si las restricciones de comprobación de paridad indicativas de una palabra de código se satisfacen por las decisiones hardware actual. Este proceso de comprobación también disfruta de los beneficios de la estructura de permutación dividida en las dos etapas del gráfico. El proceso de decodificación iterativo (paso de mensajes) puede pararse una vez que se detecta la recuperación de la palabra de código de este modo. Por consiguiente, en el caso de señales relativamente libres de error, la decodificación puede completarse y detectarse inmediatamente, por ejemplo, después de dos o tres iteraciones del proceso de decodificación de paso de mensajes. Sin embargo, en el caso de palabras recibidas que incluyen más errores, pueden ocurrir numerosas iteraciones del proceso de decodificación antes de que la decodificación sea satisfactoria o el proceso se pare debido a una restricción de temporización. In accordance with a feature of the present invention the hardware and / or software outputs produced after each of the complete iterations of the processing of variable nodes are examined to determine whether the parity check restrictions indicative of a code word are satisfied by the current hardware decisions. This verification process also enjoys the benefits of the permutation structure divided into the two stages of the graph. The iterative decoding process (message passing) can be stopped once the code word retrieval is detected in this way. Therefore, in the case of relatively error-free signals, decoding can be completed and detected immediately, for example, after two or three iterations of the message passing decoding process. However, in the case of received words that include more errors, numerous iterations of the decoding process may occur before the decoding is successful or the process is stopped due to a timing restriction.

La detección de la indicación de decodificación satisfactoria, de acuerdo con la presente invención, permite un uso más eficaz de recursos comparado con los sistemas que asignan un número fijo de iteraciones de decodificación para cada una de las palabras recibidas. The detection of the satisfactory decoding indication, in accordance with the present invention, allows more efficient use of resources compared to systems that allocate a fixed number of decoding iterations for each of the words received.

Como las técnicas de decodificación de la presente invención permiten un gran número de operaciones de decodificación, por ejemplo operaciones de procesamiento del decodificador de nodos de restricciones y/o variables, a realizar en paralelo, los decodificadores de la presente invención pueden usarse para decodificar palabras recibidas a altas velocidades. Además, dada la técnica novedosa de la presente invención utilizada para representar grandes gráficos y/o el control del paso de mensajes para operaciones de decodificación asociadas con tales gráficos, las dificultades de almacenamiento de las descripciones de grandes gráficos y el control de encaminamiento de sus mensajes se reducen y/o se superan. As the decoding techniques of the present invention allow a large number of decoding operations, for example processing operations of the decoder of restriction and / or variable nodes, to be performed in parallel, the decoders of the present invention can be used to decode words received at high speeds. In addition, given the novel technique of the present invention used to represent large graphics and / or control of message passing for decoding operations associated with such graphics, the storage difficulties of large graphics descriptions and the routing control of their messages are reduced and / or exceeded.

Ciertas generalizaciones de los códigos LDPC y técnicas de decodificación de la invención incluyen la codificación/decodificación sobre mayores alfabetos, no simplemente bits, los cuales tienen dos posibles valores, pero mayor número de posibilidades. Los códigos donde los nodos de restricciones representan restricciones distintas que las restricciones de la comprobación de paridad también pueden decodificarse usando los procedimientos y el aparato de la presente invención. Otras generalizaciones relevantes a las que puede aplicarse la invención incluyen situaciones en las que un algoritmo de paso de mensajes se implementará sobre un gráfico y se tiene la opción de diseñar el gráfico. Resultará evidente para los especialistas en la técnica, a la vista de la presente solicitud de patente, cómo para aplicar las técnicas de la presente invención a estas situaciones más generales. Certain generalizations of the LDPC codes and decoding techniques of the invention include encoding / decoding over larger alphabets, not simply bits, which have two possible values, but a greater number of possibilities. The codes where the restriction nodes represent different restrictions than the parity check restrictions can also be decoded using the methods and apparatus of the present invention. Other relevant generalizations to which the invention can be applied include situations in which a message passing algorithm will be implemented on a graphic and there is the option of designing the graphic. It will be apparent to those skilled in the art, in view of the present patent application, how to apply the techniques of the present invention to these more general situations.

Numerosas ventajas adicionales, características y aspectos de las técnicas de decodificación y los decodificadores de la presente invención serán evidentes a partir de la descripción detallada que sigue a continuación. Numerous additional advantages, features and aspects of the decoding techniques and decoders of the present invention will be apparent from the detailed description that follows.

Descripción detallada de la invención Detailed description of the invention

Como se ha tratado anteriormente, los procedimientos de decodificación y el aparato de la presente invención se describirán para propósitos de explicación en el contexto de una realización del decodificador de LDPC. En primer lugar se describirán las etapas involucradas en la decodificación de un código LDPC con referencia a las Fig. 4 y 5 seguido por una descripción más detallada de diversas características de la presente invención. As discussed above, the decoding procedures and apparatus of the present invention will be described for purposes of explanation in the context of an embodiment of the LDPC decoder. First, the steps involved in decoding an LDPC code will be described with reference to Figs. 4 and 5 followed by a more detailed description of various features of the present invention.

La Figura 4 ilustra un código LDPC irregular de ejemplo que usa un gráfico bipartito 400. El gráfico incluye m nodos de comprobación 402, n nodos de variables 406, y una pluralidad de aristas 404. Los mensajes entre los nodos de comprobación y los nodos de variables se intercambien sobre las aristas 404. Los bits de entrada software y1 hasta yn, corresponden a la palabra recibida Y, y las salidas software (o hardware) x1 hasta xn se indican por la referencia numérica 408. El nodo de comprobación de orden m se identifica usando la referencia numérica 402', el nodo de variable de orden n se identifica usando la referencia numérica 406' mientras que la entrada software de orden n yn y las salida software de orden n xn se indican en la Fig. 4 usando los números de referencia 410 y 409 respectivamente. Figure 4 illustrates an example irregular LDPC code using a bipartite graph 400. The graph includes m check nodes 402, n nodes of variables 406, and a plurality of edges 404. The messages between the check nodes and the nodes of variables are exchanged over edges 404. The software input bits y1 to yn correspond to the received word Y, and the software outputs (or hardware) x1 to xn are indicated by the numerical reference 408. The order check node m is identified using numerical reference 402 ', the order variable node n is identified using numerical reference 406' while the software input of order n and n and the software output of order n xn are indicated in Fig. 4 using the reference numbers 410 and 409 respectively.

Los nodos de variables 406 procesan los mensajes de los nodos de restricciones 402 junto con los valores de entrada software desde la palabra recibida y1, …yn para actualizar el valor de las variables de salida x1, …xn correspondientes a los nodos de variables y para generar mensajes para los nodos de restricciones. Un mensaje se genera por un nodo de variable para cada una de las aristas conectadas al nodo de variable. El mensaje generado se transmite a lo largo de la arista desde el nodo de variable al nodo de restricción conectado a la arista. Para fines de explicación, los mensajes de los nodos de variables a los nodos de restricciones se indicarán, de vez en cuando, en la presente solicitud usando la abreviatura V2C mientras que los mensajes desde los nodos de variables a los nodos de restricciones se indicarán usando la abreviatura C2V. Los índices pueden añadirse a las componentes V y C de esta abreviatura para indicar el nodo particular de los nodos de variables y los nodos de restricciones que sirve como la fuente/destino de un mensaje particular. Cada uno de los nodos de restricciones 402 es responsable del procesamiento de los mensajes recibidos desde los nodos variables a través de las aristas conectadas al nodo de restricción particular. Los mensajes V2C recibidos desde los nodos de variables se procesan por los nodos de restricciones 402 para generar los mensajes C2V que se transmiten a continuación de vuelta a lo largo de las aristas conectadas a cada uno de los nodos de restricciones. Los nodos de variables 406 procesan a continuación los mensajes C2V, junto con los valores de entrada software, para generar y transmitir nuevos mensajes V2C, y generar las salidas software xi. La secuencia de realización del procesamiento en los nodos de variables 406 comprende: la transmisión de los mensajes generados a los nodos de comprobación 402, generando en los nodos de variables salidas software xi y recibiendo los mensajes desde los nodos de comprobación, puede realizarse repetidamente, es decir, iterativamente, hasta que las salidas xi desde los nodos de variables 406 indican que la palabra de código se ha decodificado satisfactoriamente o algún otro criterio de parada, por ejemplo, se ha satisfecho la terminación de un número fijo de iteraciones de paso de mensajes. Debería apreciarse que la secuencia de operaciones descrita anteriormente no es necesario que ocurra estrictamente en el orden descrito. El procesamiento de nodos puede continuar de forma asíncrona y el procesamiento de nodos de variables y restricciones puede ocurrir simultáneamente. Sin embargo la lógica del proceso iterativo es como se ha descrito. The variable nodes 406 process the messages of the restriction nodes 402 together with the software input values from the received word y1, ... yn to update the value of the output variables x1, ... xn corresponding to the variable nodes and for generate messages for restriction nodes. A message is generated by a variable node for each of the edges connected to the variable node. The generated message is transmitted along the edge from the variable node to the restriction node connected to the edge. For the purpose of explanation, the messages from the variable nodes to the restriction nodes will be indicated, from time to time, in the present application using the abbreviation V2C while the messages from the variable nodes to the restriction nodes will be indicated using the abbreviation C2V. Indexes can be added to the V and C components of this abbreviation to indicate the particular node of the variable nodes and the restriction nodes that serves as the source / destination of a particular message. Each of the restriction nodes 402 is responsible for processing the messages received from the variable nodes through the edges connected to the particular restriction node. The V2C messages received from the variable nodes are processed by the restriction nodes 402 to generate the C2V messages that are then transmitted back along the edges connected to each of the restriction nodes. Variable nodes 406 then process the C2V messages, together with the software input values, to generate and transmit new V2C messages, and generate the software outputs xi. The sequence of processing in the nodes of variables 406 comprises: the transmission of the messages generated to the check nodes 402, generating in the nodes of software outputs xi and receiving the messages from the check nodes, can be performed repeatedly, that is, iteratively, until the outputs xi from the variable nodes 406 indicate that the code word has been successfully decoded or some other stop criteria, for example, the termination of a fixed number of iterations of step of posts. It should be appreciated that the sequence of operations described above is not necessary to occur strictly in the order described. The processing of nodes can continue asynchronously and the processing of nodes of variables and restrictions can occur simultaneously. However, the logic of the iterative process is as described.

Los mensajes, V2C y C2V, pueden ser de uno o más bits, por ejemplo de K bits cada uno, donde K es un valor entero positivo distinto de cero. De forma similar las salidas software xi pueden ser de uno o de múltiples bits. Los mensajes y salidas de múltiples bits proporcionan la oportunidad de pasar la información de confianza o de fiabilidad en el mensaje o salida. En el caso de una salida multi-bit, (software), el signo del valor de la salida software puede usarse para proporcionar la salida hardware de un único bit del proceso de decodificación correspondiente a un nodo de variable, por ejemplo los bits de la palabra de código decodificada. Los valores de salida software pueden corresponder a valores software decodificados o, como alternativa, a una información llamada extrínseca (excluyendo la información de entrada correspondiente) que puede usarse en otros procesos iterativos más largos dentro de los cuales el decodificador LDPC es sólo un módulo. The messages, V2C and C2V, can be one or more bits, for example K bits each, where K is a positive integer value other than zero. Similarly, the xi software outputs can be single or multi-bit. Multi-bit messages and outputs provide the opportunity to pass the trust or reliability information in the message or output. In the case of a multi-bit output (software), the sign of the value of the software output can be used to provide the hardware output of a single bit of the decoding process corresponding to a variable node, for example the bits of the Decoded code word. The software output values can correspond to decoded software values or, alternatively, to an information called extrinsic (excluding the corresponding input information) that can be used in other longer iterative processes within which the LDPC decoder is only one module.

El proceso de paso de mensajes iterativo asociado con la decodificación de un código LDPC se tratará ahora adicionalmente con respecto a las Fig. 5a hasta 5d. The iterative message passing process associated with decoding an LDPC code will now be discussed further with respect to Figs. 5a through 5d.

Cuando se decodifica un código LDPC, el procesamiento en cada uno de los nodos de restricciones y nodos de variables puede realizarse independientemente. Por consiguiente, el procesamiento de nodos de variables y/o de restricciones puede realizarse un nodo cada vez, por ejemplo, en secuencia, hasta que algunos o todos los procesamientos de los nodos de variables y restricciones se han completado para una iteración particular del proceso de decodificación. Esto permite proporcionar y reutilizar una única unidad de procesamiento hardware, si se desea, realizar el procesamiento asociado con cada uno de los nodos de variables y/o de restricciones. Otra característica significativa de la decodificación LDPC es que los mensajes V2C y C2V utilizados durante una iteración del procesamiento particular no necesitan generarse al mismo tiempo, por ejemplo durante la misma iteración del proceso. Esto permite implementaciones donde el procesamiento de nodos de restricciones y variables puede realizarse en paralelo sin tener en cuenta cuándo se actualizaron por última vez los mensajes actualizados. Siguiendo un número suficiente de actualizaciones de mensajes y de iteraciones en donde todos los nodos de variables y restricciones procesan los mensajes recibidos y generan mensajes actualizados, la salida (hardware) de los nodos de variables convergerá asumiendo que el gráfico se diseño adecuadamente y que no quedan errores sin corregir en la palabra recibida que se está procesando. When an LDPC code is decoded, the processing in each of the restriction nodes and variable nodes can be performed independently. Therefore, the processing of variable and / or restriction nodes can be performed one node at a time, for example, in sequence, until some or all of the processing of the variable and restriction nodes have been completed for a particular iteration of the process decoding This allows to provide and reuse a single hardware processing unit, if desired, to perform the processing associated with each of the variable and / or restriction nodes. Another significant feature of LDPC decoding is that the V2C and C2V messages used during a particular processing iteration do not need to be generated at the same time, for example during the same process iteration. This allows implementations where the processing of restriction nodes and variables can be performed in parallel without taking into account when the updated messages were last updated. Following a sufficient number of message updates and iterations where all the variable nodes and restrictions process the received messages and generate updated messages, the output (hardware) of the variable nodes will converge assuming that the graphic is properly designed and not There are uncorrected errors in the received word that is being processed.

Dado que el procesamiento de cada uno de los nodos de comprobación y nodos de variable puede verse como una operación independiente, el procesamiento iterativo realizado en un nodo de comprobación de ejemplo único Cn 502' y el nodo de variable Vn 506' se tratarán con más detalle con referencia a las Fig. 5a – 5d. Para fines de descripción pensaremos que los valores del mensaje, la entrada software y los valores de salida son números. Un número positivo corresponde a una decisión hardware del bit 0 y un número negativo corresponde a una decisión hardware de bit 1. Mayores magnitudes indican una mayor fiabilidad. De este modo, el número cero indica una total falta de fiabilidad y el signo (positivo o negativo) es irrelevante. Esta convención es consistente con la práctica normalizada en la cual los valores software (mensajes, recibidos y valores de salida) representan log de probabilidades de bits asociados, es decir, los valores software toman la forma Since the processing of each of the check nodes and variable nodes can be seen as an independent operation, the iterative processing performed on a single example check node Cn 502 'and the variable node Vn 506' will be treated with more detail with reference to Fig. 5a-5d. For description purposes we will think that the message values, the software input and the output values are numbers. A positive number corresponds to a hardware decision of bit 0 and a negative number corresponds to a hardware decision of bit 1. Higher magnitudes indicate greater reliability. Thus, the number zero indicates a total lack of reliability and the sign (positive or negative) is irrelevant. This convention is consistent with the standardized practice in which software values (messages, received and output values) represent log of associated bit probabilities, that is, software values take the form

log (probabilidad de que el bit sea 0 / probabilidad de que el bit sea 1) log (probability that the bit is 0 / probability that the bit is 1)

en la que la probabilidad está condicionada sobre una variable aleatoria, por ejemplo, la observación física del bit del canal de comunicaciones en el caso de un valor recibido. in which the probability is conditioned on a random variable, for example, the physical observation of the communications channel bit in the case of a received value.

La Fig. 5a ilustra la etapa inicial en un proceso de decodificación LDPC. Inicialmente, el nodo de variable Vn 506' se suministra con la entrada software, por ejemplo los valores recibidos (1 ó más bits) yn desde la palabra recibida a procesar. Los mensajes C2V al comienzo de la operación de decodificación y la salida software Xn 509 se fijan inicialmente a cero. En base a las entradas recibidas, por ejemplo, los mensajes C2V de valor cero y la entrada yn, el nodo de variable Vn 506' genera un mensaje V2C para cada uno de los nodos de comprobación al cual está conectado. Típicamente, en la etapa inicial, cada uno de estos mensajes será igual a yn. Fig. 5a illustrates the initial stage in an LDPC decoding process. Initially, the variable node Vn 506 'is supplied with the software input, for example the received values (1 or more bits) and n from the received word to be processed. The C2V messages at the beginning of the decoding operation and the Xn 509 software output are initially set to zero. Based on the inputs received, for example, the zero value C2V messages and the yn input, the variable node Vn 506 'generates a V2C message for each of the check nodes to which it is connected. Typically, in the initial stage, each of these messages will be equal to yn.

En la figura 5b se muestran los mensajes V2C generados que se transmiten a lo largo de cada uno de las aristas conectadas al nodo de variable Vn 506'. De este modo, los mensajes V2C actualizados se transmiten a cada uno de los nodos de comprobación 502 acoplados al nodo de variable Vn506' incluyendo el nodo de comprobación Cm 502'. The generated V2C messages that are transmitted along each of the edges connected to the variable node Vn 506 'are shown in Figure 5b. Thus, the updated V2C messages are transmitted to each of the check nodes 502 coupled to the variable node Vn506 'including the check node Cm 502'.

Además de generar los mensajes V2C, el procesamiento de los nodos de variables da como resultado la actualización de la salida software Xn 509' correspondiente al nodo de variable que hace el procesamiento. La salida software Xn se muestra actualizándose en la Fig. 5c. Aunque se muestran como etapas diferentes, la salida software puede ser una salida en el mismo tiempo que se sacan los mensajes V2C. In addition to generating the V2C messages, the processing of the variable nodes results in the update of the Xn 509 'software output corresponding to the variable node that performs the processing. The Xn software output is shown updating in Fig. 5c. Although they are shown as different stages, the software output can be an output at the same time that V2C messages are taken.

Como se tratará adicionalmente más adelante, de acuerdo con algunas realizaciones de la presente invención, las salidas software (o sus decisiones hardware asociadas) pueden usarse para determinar cuándo se ha recuperado una palabra de código a partir de la palabra recibida, es decir, cuando se han satisfecho las restricciones de paridad por los valores de salida. Esto indica una decodificación satisfactoria (aunque la palabra de código encontrada puede ser incorrecta, es decir, no la que se transmitió) por lo tanto permitiendo que el proceso de decodificación iterativo se pare en el momento oportuno, por ejemplo antes de que se complete el número máximo fijado permitido de iteraciones de paso de mensajes. As will be discussed further below, in accordance with some embodiments of the present invention, software outputs (or their associated hardware decisions) can be used to determine when a code word has been retrieved from the received word, that is, when parity restrictions for exit values have been satisfied. This indicates a satisfactory decoding (although the code word found may be incorrect, that is, not the one that was transmitted) therefore allowing the iterative decoding process to stop in a timely manner, for example before the completion of the maximum set number of message step iterations allowed.

El procesamiento de los nodos de comprobación puede realizarse una vez que el nodo de comprobación, por ejemplo el nodo de comprobación Cm 502', recibe mensajes V2C a los largo de las aristas a los que está conectado. Los mensajes V2C recibidos se procesan en el nodo de comprobación para generar los mensajes C2V actualizados, uno por cada una de las aristas conectadas al nodo de comprobación particular. Como resultado del procesamiento del nodo de comprobación, el mensaje C2V transmitido de vuelta al nodo de variable a lo largo de una arista dependerá del valor de cada uno de los mensajes V2C recibidos sobre las otras aristas conectadas al nodo de comprobación pero no (usualmente y preferentemente pero no necesariamente) una vez recibido el mensaje V2C desde el nodo de variable particular al cual se está transmitiendo el mensaje C2V. De este modo, los mensajes C2V se usan para transmitir información generada a partir de mensajes recibidos desde los nodos de variables distintos que el nodo al cual se está transmitiendo el mensaje. The processing of the check nodes can be performed once the check node, for example the check node Cm 502 ', receives V2C messages along the edges to which it is connected. The received V2C messages are processed in the check node to generate the updated C2V messages, one for each of the edges connected to the particular check node. As a result of the processing of the check node, the C2V message transmitted back to the variable node along an edge will depend on the value of each of the V2C messages received on the other edges connected to the check node but not (usually and preferably but not necessarily) once the V2C message has been received from the particular variable node to which the C2V message is being transmitted. In this way, C2V messages are used to transmit information generated from messages received from nodes of different variables than the node to which the message is being transmitted.

La Fig. 5d ilustra el paso de los mensajes C2V actualizados a los nodos de variables incluyendo el nodo 506'. En particular, en la Fig. 5d el nodo de restricción Cm 502' se muestra sacando dos mensajes C2V actualizados suministrándose el mensaje Cm2Vn actualizado al nodo de variable Vn 506'. Vn 506' también recibe mensajes C2Vn actualizados adicionales de otros nodos de restricciones a los que está conectado. Fig. 5d illustrates the passage of the updated C2V messages to the variable nodes including node 506 '. In particular, in Fig. 5d the restriction node Cm 502 'is shown by taking out two updated C2V messages, the updated Cm2Vn message being supplied to the variable node Vn 506'. Vn 506 'also receives additional updated C2Vn messages from other restriction nodes to which it is connected.

Con la recepción de mensajes actualizados C2V, el procesamiento de nodos de variables puede repetirse para generar los mensajes V2C actualizados y las salidas software. A continuación puede repetirse la actualización de los mensajes C2V y así sucesivamente hasta que se satisface el criterio de parada del decodificador. With the reception of updated C2V messages, the processing of variable nodes can be repeated to generate the updated V2C messages and the software outputs. The update of the C2V messages can then be repeated and so on until the decoder stop criterion is satisfied.

De este modo, el procesamiento mostrado en las Fig. 5a – 5d se repetirá después de la primera iteración, usando valores del mensaje actualizados en lugar de los valores iniciales, hasta que se para el proceso de decodificación. Thus, the processing shown in Figs. 5a-5d will be repeated after the first iteration, using updated message values instead of the initial values, until the decoding process is stopped.

La naturaleza iterativa del proceso de decodificación LDPC, y el hecho de que el procesamiento en los nodos individuales pueda realizarse independientemente del procesamiento de los otros nodos proporciona un alto grado de flexibilidad cuando se implementa un decodificador LDPC. Sin embargo, como se trató anteriormente, la mera complejidad de las relaciones entre las aristas y los nodos puede dificultar el almacenamiento de la información de las relaciones de las aristas, es decir, la descripción del gráfico. Incluso de forma más importante, la complejidad del gráfico puede hacer difícil de implementar el paso de mensajes en implementaciones en paralelo donde múltiples mensajes se pasan al mismo tiempo. The iterative nature of the LDPC decoding process, and the fact that the processing on the individual nodes can be performed independently of the processing of the other nodes provides a high degree of flexibility when an LDPC decoder is implemented. However, as discussed above, the mere complexity of the relationships between the edges and the nodes can make it difficult to store the information of the edges' relationships, that is, the description of the graph. Even more importantly, the complexity of the graphic can make it difficult to implement the passage of messages in parallel implementations where multiple messages are passed at the same time.

Las implementaciones prácticas del decodificador LDPC a menudo incluyen una memoria de aristas para almacenar los mensajes que pasan a lo largo de las aristas entre los nodos de restricciones y/o los nodos de variables. Además incluyen un descriptor de gráficos a veces denominado como un mapa de permutaciones lo cual incluye información de especificación de las conexiones de las aristas, o emparejamiento de encajes, definiendo por lo tanto el gráfico de decodificación. Este mapa de permutaciones puede implementarse como datos almacenados o como un circuito que calcula o implica la permutación. Además de la memoria de aristas, son necesarias una o más unidades de procesamiento de nodos para realizar el procesamiento real asociado con un nodo. Practical implementations of the LDPC decoder often include a memory of edges to store the messages that pass along the edges between restriction nodes and / or variable nodes. They also include a graphics descriptor sometimes referred to as a permutations map which includes specification information of the edge connections, or lace matching, thus defining the decoding graph. This permutations map can be implemented as stored data or as a circuit that calculates or implies permutation. In addition to edge memory, one or more node processing units are necessary to perform the actual processing associated with a node.

Las implementaciones del decodificador LDPC software son posibles, en las que se usa el software para controlar una CPU para que funcione como una unidad de procesamiento de vectores y para controlar el paso de mensajes usando una memoria acoplada a la CPU. En implementaciones software, puede usarse también una única memoria para almacenar la descripción del gráfico del decodificador, los mensajes de aristas, así como las rutinas del decodificador utilizadas para controlar la CPU. The implementations of the LDPC software decoder are possible, in which the software is used to control a CPU to function as a vector processing unit and to control the passage of messages using a memory coupled to the CPU. In software implementations, a single memory can also be used to store the decoder graphic description, edge messages, as well as the decoder routines used to control the CPU.

Como se tratará más adelante, en diversas implementaciones de la invención pueden usarse uno o más memorias de aristas. En una realización de ejemplo de múltiples memorias de arista, se usa una primera memoria de aristas para el almacenamiento y paso de los mensajes C2V y se usa una segunda memoria de aristas para el almacenamiento y el paso de los mensajes V2C. En tales realizaciones, pueden emplearse, y a menudo se emplean, múltiples unidades de procesamiento de nodos, por ejemplo, una para realizar el procesamiento de nodos de restricciones y otra para realizar el procesamiento de nodos de variables. Como se tratará más adelante, tales realizaciones permiten efectuar operaciones de procesamiento de variables y restricciones en paralelo escribiéndose los mensajes resultantes dentro de cada una de las dos memorias de mensajes para usar durante la siguiente iteración del proceso de decodificación. As will be discussed below, in various implementations of the invention one or more edge memories may be used. In an exemplary embodiment of multiple edge memories, a first edge memory is used for storing and passing the C2V messages and a second edge memory is used for storing and passing the V2C messages. In such embodiments, multiple node processing units can be employed, and often used, for example, one to perform the restriction node processing and another to perform the processing of variable nodes. As will be discussed below, such embodiments allow variable processing operations and restrictions to be carried out in parallel by writing the resulting messages within each of the two message memories to be used during the next iteration of the decoding process.

Ahora presentaremos un simple ejemplo de un pequeño gráfico de LDPC y su representación que se utilizará posteriormente en la explicación de la invención. La discusión del gráfico de LDPC se seguirá por una descripción de un decodificador LDPC que puede usarse para decodificar el gráfico pequeño. We will now present a simple example of a small graph of LDPC and its representation that will be used later in the explanation of the invention. The discussion of the LDPC graphic will be followed by a description of an LDPC decoder that can be used to decode the small graphic.

La Fig. 6 ilustra un código LDPC simple irregular en la forma de un gráfico 600. El código es de longitud 5 como se indica por los 5 nodos de variables de V1 hasta V5 602. Cuatro nodos de comprobación de C1 a C4 606 están acoplados a los nodos de variables 602 por un total de 12 aristas 604 sobre las cuales pueden pasarse los mensajes. Fig. 6 illustrates an irregular simple LDPC code in the form of a graph 600. The code is of length 5 as indicated by the 5 variable nodes from V1 to V5 602. Four check nodes from C1 to C4 606 are coupled to the nodes of variables 602 for a total of 12 edges 604 over which the messages can be passed.

La Fig. 7 ilustra el código LDPC mostrado en la Fig. 6, usando las matrices 702, 704, en la forma de matrices de comprobación de paridad. Como se ha tratado anteriormente, las aristas se representan en la matriz de permutación H 702 usando unos. El bit xi está asociado con los nodos de variables Vi. Las matrices 706 y 708 muestran los unos en la matriz H, correspondientes a las aristas en el gráfico, indexadas de acuerdo con el orden de encajes de variables y el orden de encajes de restricciones, respectivamente. Fig. 7 illustrates the LDPC code shown in Fig. 6, using matrices 702, 704, in the form of parity checking matrices. As discussed above, the edges are represented in the permutation matrix H 702 using ones. The xi bit is associated with the Vi variable nodes. Matrices 706 and 708 show the ones in matrix H, corresponding to the edges in the graph, indexed according to the order of variable fittings and the order of constraint fittings, respectively.

Con fines de explicación, las 12 aristas se numerarán desde el lado de los nodos de variables, es decir, de acuerdo con sus encajes de variables, Las conexiones establecidas por las aristas entre los nodos de variables 602 y los nodos de comprobación 606 puede verse en la Fig. 6. Para fines de la discusión, las aristas conectadas a la variable V1 que la conectan con sus nodos de comprobación C1, C2 y C3 se asignan las etiquetas 1, 2, 3, correspondientes a la numeración de encajes de variables. El nodo de variable V2 está conectado a los nodos de comprobación C1, C3 y C4 por las aristas 4, 5, y 6 respectivamente. El nodo de variable V3 está acoplado a los nodos de comprobación C1 y C4 por las aristas 7 y 8, respectivamente. Además, el nodo de variable V4 está acoplado a los nodos de comprobación C2 y C4 por las aristas 9 y 10, respectivamente, mientras que el nodo de variable V5 está acoplado a los nodos de comprobación C2 y C3 por las aristas 11 y 12, respectivamente. Esta indexación corresponde con la matriz 706 de la Figura 7, es decir el orden de encajes de variables. For the purpose of explanation, the 12 edges will be numbered from the side of the variable nodes, that is, according to their variable fittings, The connections established by the edges between the variable nodes 602 and the check nodes 606 can be seen in Fig. 6. For the purpose of the discussion, the edges connected to the variable V1 that connect it with their check nodes C1, C2 and C3 are assigned labels 1, 2, 3, corresponding to the numbering of variable fittings . Variable node V2 is connected to check nodes C1, C3 and C4 by edges 4, 5, and 6 respectively. Variable node V3 is coupled to check nodes C1 and C4 by edges 7 and 8, respectively. In addition, variable node V4 is coupled to check nodes C2 and C4 by edges 9 and 10, respectively, while variable node V5 is coupled to check nodes C2 and C3 by edges 11 and 12, respectively. This indexation corresponds to matrix 706 of Figure 7, that is, the order of variable fittings.

La Figura 8 ilustra las relaciones entre las 12 aristas de la Fig. 6, como se numeran desde el lado de los nodos de variables, en relación con los nodos de variables y de comprobación a los cuales están conectados. La fila 802 muestra los 5 nodos de variables V1 hasta V5. Debajo de las variables 802 se muestran las aristas 1 hasta 12, 804 correspondientes a los encajes asociados que están conectados a un nodo de variable particular. Obsérvese que como las aristas se ordenan desde el lado de los nodos de variables, en la fila 804 aparecen en el orden de 1 a 12. Asumamos que los mensajes se almacenan en memoria en el orden indicado en la fila 804. Figure 8 illustrates the relationships between the 12 edges of Fig. 6, as numbered from the side of the variable nodes, in relation to the variable and check nodes to which they are connected. Row 802 shows the 5 nodes of variables V1 through V5. Below the 802 variables, edges 1 through 12, 804 corresponding to the associated fittings that are connected to a particular variable node are shown. Note that since the edges are sorted from the side of the variable nodes, in row 804 they appear in the order of 1 to 12. Assume that the messages are stored in memory in the order indicated in row 804.

Durante el procesamiento de nodos de variables, los 12 mensajes de arista en la memoria se acceden en secuencia, por ejemplo, en el orden mostrado en 804. De este modo, durante el procesamiento de los nodos de variables, los mensajes pueden leerse de forma simple en orden y suministrarse a una unidad de procesamiento. During the processing of variable nodes, the 12 edge messages in the memory are accessed in sequence, for example, in the order shown in 804. Thus, during the processing of the variable nodes, the messages can be read so Simple in order and supplied to a processing unit.

La fila 806 ilustra los cuatro nodos de restricciones de C1 hasta C4 presentes en el código de las Fig. 6 y 7. Obsérvese que las aristas están reordenadas en la fila 804' para reflejar el orden en el cual están conectados a los nodos de restricciones, pero la indexación indicada es la inducida desde el lado de los nodos de variables. Por consiguiente, asumiendo que los mensajes de las aristas están almacenados en orden desde el lado de los nodos de variables, cuando se realiza el procesamiento de nodos de restricciones los mensajes se leerían en el orden ilustrado en la fila 804'. Esto es, durante el procesamiento de nodos de restricciones los mensajes se leerían de la memoria en el orden 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10. Puede usarse un módulo de ordenamiento de mensajes para sacar la secuencia correcta de la información de acceso de los mensajes de arista, por ejemplo, las localizaciones de memoria, para leer datos de la memoria o escribir datos a la memoria durante las operaciones de procesamiento de nodos de variables y de comprobación. Row 806 illustrates the four restriction nodes from C1 to C4 present in the code of Figs. 6 and 7. Note that the edges are reordered in row 804 'to reflect the order in which they are connected to the restriction nodes , but the indicated indexing is that induced from the side of the variable nodes. Therefore, assuming that the messages of the edges are stored in order from the side of the variable nodes, when the processing of restriction nodes is performed the messages would be read in the order illustrated in row 804 '. That is, during the processing of restriction nodes the messages would be read from the memory in the order 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10. An order module can be used of messages to get the correct sequence of access information from edge messages, for example, memory locations, to read data from memory or write data to memory during variable node checking and checking operations .

Un decodificador serie LDPC 900 que realiza operaciones de procesamiento de mensajes de forma secuencial, una arista cada vez, se tratará ahora en relación con la Fig. 9 y se tratará la decodificación usando el código de ejemplo mostrado en la Fig. 6. El decodificador LDPC 900 comprende un módulo de control del decodificador 902, un módulo de ordenamiento de mensajes (memoria de permutación de encajes) 904, una memoria de grados de nodos 910, una memoria de aristas 906, un procesador de nodos 908, una memoria intermedia de salida 916, una memoria de decisiones hardware 912 y un verificador de comprobación de paridad 914. An LDPC 900 series decoder that performs message processing operations sequentially, one edge at a time, will now be treated in relation to Fig. 9 and decoding will be treated using the example code shown in Fig. 6. The decoder LDPC 900 comprises a decoder control module 902, a message order module (lace permutation memory) 904, a node grade memory 910, a edge memory 906, a node processor 908, a buffer memory of output 916, a hardware decision memory 912 and a parity check verifier 914.

La memoria de aristas 906 incluye las localizaciones de la memoria de los bits L K correspondiendo cada una de las localizaciones de bit K a una arista y donde L es el número total de aristas en el gráfico de LDPC que se están usando y K es el número de bits por mensaje intercambiados a lo largo de una arista. Para concretar, asumimos que los mensajes se almacenan en orden de acuerdo con el ordenamiento de aristas inducido por los encajes de variables. De este modo, para el gráfico de ejemplo 600 los mensajes correspondientes a las aristas 1, 2, …, 12 se almacenan en el orden indicado. La memoria de decisiones hardware 912 incluye L localizaciones de memoria de 1 bit, correspondiendo cada una de las localizaciones de 1 bit a una arista. Esta memoria almacena decisiones hardware transmitidas por los nodos de variables a lo largo de cada una de sus aristas de modo que las restricciones de comprobación de paridad pueden verificarse. El verificador de comprobación de paridad 914 recibe las decisiones de bit hardware a medida que el procesador de los nodos de comprobación recibe mensajes. Las comprobaciones de paridad se verifican en el verificador de comprobación de paridad y, en el caso de que se satisfagan todas las comprobaciones, transmite una señal de convergencia al módulo de control del decodificador Edge memory 906 includes the memory locations of the LK bits each of the K bit locations corresponding to an edge and where L is the total number of edges in the LDPC graph being used and K is the number of bits per message exchanged along an edge. To specify, we assume that the messages are stored in order according to the order of edges induced by the variable fittings. Thus, for the example graphic 600 the messages corresponding to edges 1, 2,…, 12 are stored in the order indicated. Hardware decision memory 912 includes L 1-bit memory locations, each of the 1-bit locations corresponding to an edge. This memory stores hardware decisions transmitted by the variable nodes along each of its edges so that the parity check restrictions can be verified. The parity check verifier 914 receives the hardware bit decisions as the processor of the check nodes receives messages. Parity checks are verified in the parity check verifier and, in the event that all checks are satisfied, it transmits a convergence signal to the control module of the decoder

902. 902

El módulo de ordenamiento de mensajes 904 puede implementarse como un mapa de permutaciones o una tabla de búsqueda que incluye información que describe el ordenamiento de mensajes en la memoria de aristas como se ve desde el lado de los nodos de variables o como se ve desde el lado de los nodos de restricciones. De este modo, para nuestro gráfico de ejemplo 600, la secuencia 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10 que especifica el orden de las aristas como se ve desde el lado de las restricciones se almacenaría, efectivamente en el módulo de ordenamiento de mensajes. Esta secuencia se usa para ordenar los mensajes para el procesamiento de los nodos de restricciones y para ordenar las decisiones hardware leídas de la Memoria de Decisiones Hardware 912 para el procesamiento por el verificador de comprobación de paridad 914. The message order module 904 can be implemented as a permutations map or a search table that includes information describing the ordering of messages in the edge memory as seen from the side of the variable nodes or as seen from the side of the restriction nodes. Thus, for our example graph 600, the sequence 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10 that specifies the order of the edges as seen from the side of The restrictions would be stored, effectively in the message order module. This sequence is used to sort the messages for the processing of the restriction nodes and to sort the hardware decisions read from the Hardware Decision Memory 912 for processing by the parity check verifier 914.

En el decodificador de la Fig. 9, los mensajes correspondientes a una arista se sobrescriben después de que se procesan por un procesador de nodos. De este modo, la memoria de aristas alternará entre el almacenamiento de mensajes V2C y el almacenamiento de mensajes C2V. La verificación de decisión hardware se produce durante el procesamiento de los nodos de restricciones, por ejemplo a medida que se leen los mensajes V2C de la memoria de mensajes de aristas 906. In the decoder of Fig. 9, messages corresponding to an edge are overwritten after they are processed by a node processor. In this way, edge memory will alternate between V2C message storage and C2V message storage. Hardware decision verification occurs during the processing of restriction nodes, for example as V2C messages are read from edge message memory 906.

La unidad de control del decodificador 902 es responsable de alternar la operación del decodificador entre los modos de operación del procesamiento de nodos de variables y de comprobación, para determinar cuándo debería pararse el proceso de decodificación iterativa, por ejemplo debido a la recepción de una señal de convergencia o búsqueda de una cuenta de iteración permitida máxima, para suministrar y controlar el suministro de la información de grado a la unidad de procesamiento de nodos y el verificador de comprobación de paridad, y para controlar el suministro de un índice de arista al Módulo de Ordenamiento de Mensajes 904. Durante el funcionamiento, el módulo de control del decodificador 902 transmite un índice de aristas al módulo de ordenamiento de mensajes 904. El valor del índice de arista, se aumenta en el tiempo para una secuencia a través de todas las aristas en el gráfico. Un índice de arista diferente, por ejemplo único se usa para cada una de las aristas en un gráfico que se está implementando. En respuesta a cada uno de los índices de arista recibidos, el módulo de ordenamiento de mensajes sacará un identificador de arista, por ejemplo, la información de dirección de la memoria de aristas, seleccionando de este modo la localización de la memoria de arista que se accederá, por ejemplo, leyendo o escribiendo en cualquier instante determinado. Asumiendo el ordenamiento de los encajes de variables, el módulo de ordenamiento de mensajes 904 causará que los mensajes se lean o se escriban de nuevo en orden secuencial durante el procesamiento de los nodos de variables y causará que los mensajes se lean y se escriban de nuevo en el orden correspondiente al ordenamiento de encajes de restricciones durante el procesamiento de los nodos de restricciones. De este modo, en nuestro ejemplo anterior, los mensajes se leerán y se escribirán de nuevo en el orden 1, 2, 3, …, 12 durante el procesamiento de los nodos de variables y, al mismo tiempo, se escribirán las decisiones hardware dentro de la memoria de decisiones hardware 912 en el orden 1, 2, 3, …, 12. Durante el procesamiento de nodos de restricciones los mensajes se leerán y escribirán de nuevo en el orden 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10 y, al mismo tiempo, el módulo de ordenamiento de mensajes 904 causará que los bits de decisión hardware se lean de la memoria de decisión hardware 912 en el orden 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10. The decoder control unit 902 is responsible for alternating the operation of the decoder between the modes of operation of the processing of variable nodes and of checking, to determine when the iterative decoding process should stop, for example due to the reception of a signal of convergence or search for a maximum allowable iteration account, to supply and control the supply of grade information to the node processing unit and the parity check verifier, and to control the supply of an edge index to the Module of Message Ordering 904. During operation, the control module of the decoder 902 transmits an edge index to the message ordering module 904. The value of the edge index is increased in time for a sequence through all edges on the chart. A different edge index, for example unique is used for each of the edges in a chart that is being implemented. In response to each of the edge indexes received, the message sorting module will output an edge identifier, for example, the address information of the edge memory, thereby selecting the location of the edge memory to be access, for example, reading or writing at any given time. Assuming the ordering of the variable fittings, the message ordering module 904 will cause the messages to be read or written again in sequential order during the processing of the variable nodes and will cause the messages to be read and written again. in the order corresponding to the order of restriction reserve requirements during the processing of the restriction nodes. Thus, in our previous example, the messages will be read and rewritten in the order 1, 2, 3,…, 12 during the processing of the variable nodes and, at the same time, the hardware decisions will be written into from hardware decision memory 912 in the order 1, 2, 3,…, 12. During the processing of restriction nodes the messages will be read and written again in the order 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10 and, at the same time, the message order module 904 will cause the hardware decision bits to be read from the hardware decision memory 912 in the order 1, 4, 7, 2 , 9, 11, 3, 5, 12, 6, 8, 10.

A medida que se leen los mensajes de la memoria de aristas en respuesta al identificador de arista recibido del módulo de control del decodificador 902, se suministran al procesador de nodos 908. El procesador de nodos 908 realiza la operación de procesamiento de nodos de restricciones o de variables apropiada, dependiendo del modo de operación, usando por lo tanto los mensajes recibidos para generar mensajes actualizados correspondientes al nodo particular que se está implementando en cualquier instante determinado. Los mensajes actualizados resultantes se escriben a continuación de nuevo en la memoria de aristas sobrescribiendo los mensajes que se acaban de leer de memoria. Los mensajes enviados a un nodo particular llegan al procesador de nodos como bloques contiguos, es decir, uno tras otro. El módulo de control del decodificador 902 señala la delineación de nodos al procesador de nodos, por ejemplo indicando el último mensaje correspondiente a un nodo proporcionando por lo tanto la información de grado del nodo. En el caso del gráfico de ejemplo 600, los grados de los nodos de variables se especificarían, por ejemplo como la secuencia (3, 3, 2, 2, 2) y se especificarían los grados de los nodos de restricciones, por ejemplo, como la secuencia (3, 3, 3, 3). Esta información puede almacenarse en una memoria de grados de nodos 910 que a continuación se leería por el módulo de control del decodificador 902 a medida que itera sobre los índices de arista. Como alternativa, la información de grado puede programarse dentro de cada una de las unidades de procesamiento de nodos. Esto puede ser preferible, por ejemplo cuando se sabe con antelación que los grados de los nodos serán uniformes, es decir el gráfico será regular. As the messages in the edge memory are read in response to the edge identifier received from the control module of the decoder 902, they are supplied to the node processor 908. The node processor 908 performs the operation of restriction node processing or of appropriate variables, depending on the mode of operation, therefore using the messages received to generate updated messages corresponding to the particular node that is being implemented at any given time. The resulting updated messages are then written back to the edge memory overwriting the messages that have just been read from memory. Messages sent to a particular node arrive at the node processor as contiguous blocks, that is, one after another. The control module of the decoder 902 signals the delineation of nodes to the node processor, for example indicating the last message corresponding to a node thereby providing the node degree information. In the case of example graph 600, the degrees of the variable nodes would be specified, for example as the sequence (3, 3, 2, 2, 2) and the degrees of the restriction nodes would be specified, for example, as the sequence (3, 3, 3, 3). This information can be stored in a memory of node grades 910 which would then be read by the decoder control module 902 as it iterates over the edge indexes. Alternatively, grade information can be programmed within each of the node processing units. This may be preferable, for example when it is known in advance that the degrees of the nodes will be uniform, that is, the graph will be regular.

El verificador de comprobación de la paridad 914 funciona en gran parte del mismo modo que un procesador de nodos de comprobación excepto que los mensajes entrantes son simples bits, no se calcula ningún mensaje saliente, y el cálculo interno es más simple. Parity check verifier 914 works in much the same way as a check node processor except that the incoming messages are simple bits, no outgoing message is calculated, and the internal calculation is simpler.

Durante el funcionamiento del modo de nodos de variables, los cálculos de los nodos de variables, se realizarán un nodo cada vez por la unidad de procesamiento de nodos hasta que se haya completado el procesamiento, por ejemplo la actualización del mensajes y las operaciones de generación de valor de la salida software asociados con cada uno de los nodos de variables. Los mensajes se suministran al procesador de nodos 908 en el orden del lado de los nodos de variables de modo que todos los mensajes correspondientes a un nodo llegan en secuencia al procesador de nodos 908. Una vez completada la iteración del procesamiento de los nodos de variables, el módulo de control del decodificador 902 causa que el decodificador 900 conmute al modo de nodos de restricciones de la operación de procesamiento. En respuesta al cambio de la señal de control C/V (Restricción/Variable), la unidad de procesamiento de nodos 908 conmuta desde el modo de procesamiento de nodos variables al modo de procesamiento de nodos de restricciones. Además el módulo de ordenamiento de mensajes 904 conmuta a un modo de procesamiento en el que los identificadores de mensajes se suministrarán a la memoria de aristas en el orden de los encajes de las restricciones. Una o más señales de control enviadas sobre la línea de control C/V pueden usarse para controlar el conmutador entre los modos de operación del procesamiento de nodos de restricciones y de variables. During the operation of the variable node mode, the calculations of the variable nodes, will be performed one node at a time by the node processing unit until the processing is completed, for example the update of the messages and the generation operations of value of the software output associated with each of the variable nodes. The messages are supplied to the node processor 908 in the order of the side of the variable nodes so that all messages corresponding to a node arrive in sequence to the node processor 908. Once the iteration of the processing of the variable nodes is completed , the control module of the decoder 902 causes the decoder 900 to switch to the restriction node mode of the processing operation. In response to the change of the C / V control signal (Restriction / Variable), the node processing unit 908 switches from the variable node processing mode to the restriction node processing mode. In addition, the message order module 904 switches to a processing mode in which the message identifiers will be supplied to the edge memory in the order of the constraints' fittings. One or more control signals sent on the C / V control line can be used to control the switch between the modes of operation of restriction node and variable processing.

A medida que el circuito de control del decodificador 902 controla el decodificador para realizar el procesamiento de nodos de restricciones en una secuencia de nodos de restricciones, un nodo cada vez, los mensajes almacenados en la memoria de aristas se actualizarán de nuevo una vez, esta vez por los mensajes C2V generados por el procesamiento de nodos de restricciones. Cuando el procesamiento asociado con el conjunto total de los nodos de restricciones se ha completado, el circuito de control del decodificador 902 conmutará de nuevo al modo de nodos de variables de la operación de procesamiento. De este modo, el decodificador 900 alterna entre el procesamiento de nodos de variables y de nodos de restricciones. Como se ha descrito, el procesamiento se realiza de forma secuencial, un nodo cada vez, hasta que el circuito de control del decodificador 902 determina que la operación de decodificación se ha completado. As the decoder control circuit 902 controls the decoder to perform restriction node processing in a sequence of restriction nodes, one node at a time, the messages stored in the edge memory will be updated once again, this time for C2V messages generated by restriction node processing. When the processing associated with the total set of restriction nodes has been completed, the control circuit of the decoder 902 will switch back to the variable node mode of the processing operation. In this way, the decoder 900 alternates between the processing of variable nodes and restriction nodes. As described, the processing is performed sequentially, one node at a time, until the control circuit of the decoder 902 determines that the decoding operation has been completed.

El sistema de decodificación LDPC escalar o secuencial ilustrado en la Fig. 9 puede implementarse usando relativamente poco hardware. Además tiende por si mismo bien a la implementación de software. Desafortunadamente, la naturaleza secuencial del procesamiento realizado tiende a dar como resultado una implementación del decodificador relativamente lenta. Por consiguiente, aunque la arquitectura escalar mostrada en la Fig. 9 tiene algunos atributos notables, tiende a ser inadecuado para aplicaciones de ancho de banda elevado tales como las comunicaciones ópticas o almacenamiento de datos donde es deseable una decodificación de alta velocidad y el uso de largas palabras de código. The scalar or sequential LDPC decoding system illustrated in Fig. 9 can be implemented using relatively little hardware. It also tends for itself to software implementation. Unfortunately, the sequential nature of the processing performed tends to result in a relatively slow implementation of the decoder. Therefore, although the scalar architecture shown in Fig. 9 has some notable attributes, it tends to be inappropriate for high bandwidth applications such as optical communications or data storage where high speed decoding and the use of Long code words.

Antes de presentar los decodificadores para la decodificación de grandes gráficos LDPC convertidos a vectores, trataremos conceptos generales y técnicas relativas a las características de la conversión de los gráficos a vectores de la presente invención. La discusión de la conversión a vectores se seguirá por una presentación de Before presenting the decoders for decoding large LDPC graphics converted to vectors, we will discuss general concepts and techniques related to the characteristics of the conversion of graphics to vectors of the present invention. The discussion of conversion to vectors will be followed by a presentation of

5 decodificadores LDPC de ejemplo, convertidos a vectores que realiza la presente invención. 5 example LDPC decoders, converted to vectors performed by the present invention.

Con el propósito de obtener el entendimiento de gráficos LDPC convertidos a vectores, consideramos un código LDPC 'pequeño' con la matriz de comprobación de paridad H. El pequeño gráfico en el contexto de un mayor gráfico convertido a vectores, se denominará como gráficos proyectados. Sea Ψ un subconjunto de matrices de permutación de Z x Z. Asumimos que las inversas de las permutaciones en Ψ también están en Ψ. Dado el pequeño gráfico proyectado, podemos formar un gráfico LDPC Z veces mayor reemplazando cada uno de los elementos de H con una matriz de Z x Z. Los elementos 0 de H se reemplazan con la matriz cero, denotada por 0. Los elementos 1 de H se reemplazan cada uno con una matriz de Ψ. De este modo 'elevamos' el grado de LDPC a otro Z veces mayor. La complejidad de la representación comprende aproximadamente, el número de bits requerido para especificar las matrices de permutación, |EH| log |Ψ| más la complejidad requerida para representar H, donde |EH| In order to obtain the understanding of LDPC graphics converted to vectors, we consider a 'small' LDPC code with the parity checking matrix H. The small graphic in the context of a larger graphic converted to vectors, will be referred to as projected graphics. Let Ψ be a subset of permutation matrices of Z x Z. We assume that the inverses of the permutations in Ψ are also in Ψ. Given the small projected graph, we can form a LDPC Z times larger graph by replacing each of the elements of H with a matrix of Z x Z. Elements 0 of H are replaced with the zero matrix, denoted by 0. Elements 1 of H are each replaced with a matrix of Ψ. In this way we 'raise' the degree of LDPC to another Z times greater. The complexity of the representation comprises approximately the number of bits required to specify permutation matrices, | EH | log | Ψ | plus the complexity required to represent H, where | EH |

15 denota el número de unos en H y |Ψ| denota el número de permutaciones distintas en Ψ. Por ejemplo, si Ψ es el espacio de permutaciones cíclicas entonces |Ψ| = Z. En la práctica podríamos tener, por ejemplo Z = 16 para n = 1000. 15 denotes the number of ones in H and | Ψ | denotes the number of different permutations in Ψ. For example, if Ψ is the cyclic permutations space then | Ψ | = Z. In practice we could have, for example Z = 16 for n = 1000.

imagen1image 1

Ejemplo: Elevando una pequeña matriz de comprobación de paridad, σi para i = 1, …16 son elementos de Ψ mostrados en este punto indexados en el orden de encajes de variables proyectados. Example: By raising a small parity check matrix, σi for i = 1, ... 16 are elements of Ψ shown at this point indexed in the order of the projected variable fittings.

El subconjunto Ψ puede elegirse en general usando diversos criterios. Una de las motivaciones principales para la estructura anterior es simplificar la implementación hardware de los decodificadores. Por lo tanto, puede ser beneficioso restringir Ψ a permutaciones que pueden implementarse de forma eficaz en hardware, por ejemplo en una red de conmutación. The subset Ψ can be chosen in general using various criteria. One of the main motivations for the previous structure is to simplify the hardware implementation of the decoders. Therefore, it may be beneficial to restrict per to permutations that can be effectively implemented in hardware, for example in a switching network.

25 Las topologías de las redes de conmutación en paralelo es un tema bien estudiado en conexión con las arquitecturas de multiprocesadores y conmutadores de conmutación de alta velocidad. Un ejemplo práctico de arquitectura adecuada para el subconjunto de permutaciones Ψ es una clase de redes de conmutación multicapa incluyendo, por ejemplo, las redes omega (barajado perfecto) / delta, redes de desplazamiento de registros, etc. Estas redes ofrecen una complejidad de implementación razonable y riqueza suficiente para el subconjunto Ψ. Adicionalmente las redes de conmutación multicapa se escalan bien, por ejemplo, su complejidad se presenta como N log N donde N es el número de entradas a la red, lo que les hace especialmente adecuadas para los decodificadores LDPC en paralelo de forma masiva. Como alternativa, en los decodificadores de la presente invención con niveles relativamente bajos de paralelismo y pequeñas Z pueden implementar el subconjunto Ψ de permutaciones en una única capa. 25 The topologies of parallel switching networks is a topic well studied in connection with the architectures of multiprocessors and high-speed switching switches. A practical example of architecture suitable for the subset of permutations Ψ is a class of multilayer switching networks including, for example, omega (perfect shuffled) / delta networks, register shift networks, etc. These networks offer reasonable implementation complexity and sufficient wealth for the subset Ψ. Additionally, multilayer switching networks are well scaled, for example, their complexity is presented as N log N where N is the number of inputs to the network, which makes them especially suitable for massively parallel LDPC decoders. Alternatively, in the decoders of the present invention with relatively low levels of parallelism and small Z, they can implement the subset Ψ of permutations in a single layer.

35 Un gráfico LDPC se dice que tiene "aristas múltiples" si cualquier par de nodos está conectado por más de una arista. Una arista múltiple es el conjunto de aristas que conectan un par de nodos que están conectados por más de una arista. Aunque generalmente no es deseable para un gráfico LDPC tener aristas múltiples, en muchas ocasiones puede ser necesario en la construcción de gráficos convertidos a vectores, en los que el gráfico proyectado posee múltiples aristas. Puede extenderse la notación de una matriz de comprobación de paridad para permitir entradas de matrices para denotar el número de aristas que conectan el par de nodos asociados. La definición de la palabra de código es aún la misma: el código es el conjunto de 0,1 1 vectores x que satisfacen que Hx = 0 en módulo 2. Cuando se convierte a vectores un gráfico proyectado con aristas múltiples, de acuerdo con la invención, cada una de las aristas dentro de una arista múltiple se reemplaza con una matriz de permutación desde T y estas matrices se añaden para obtener la matriz de comprobación de paridad extendida del código total. De este 35 An LDPC chart is said to have "multiple edges" if any pair of nodes is connected by more than one edge. A multiple edge is the set of edges that connect a pair of nodes that are connected by more than one edge. Although it is generally not desirable for an LDPC chart to have multiple edges, in many cases it may be necessary in the construction of graphics converted to vectors, in which the projected chart has multiple edges. The notation of a parity check matrix can be extended to allow matrix entries to denote the number of edges that connect the pair of associated nodes. The definition of the code word is still the same: the code is the set of 0.1 1 x vectors that satisfy that Hx = 0 in module 2. When a projected graph with multiple edges is converted to vectors, according to the invention, each of the edges within a multiple edge is replaced with a permutation matrix from T and these matrices are added to obtain the extended parity check matrix of the total code. Of this

45 modo, un valor de j>1 en la matriz de comprobación de paridad H del gráfico proyectado se 'elevará' a una suma σk 45 mode, a value of j> 1 in the parity check matrix H of the projected graph will be 'raised' to a sum σk

+ σk+1 + … + σ k+j-1, de las matrices de permutación desde Ψ. Usualmente, se elegirán los elementos de la suma de modo que cada una de las entradas σk + σk+i + … + σ k+j-1 sea o cero o uno, es decir el grafico total no tiene aristas múltiples. + σk + 1 +… + σ k + j-1, of the permutation matrices from Ψ. Usually, the elements of the sum will be chosen so that each of the entries σk + σk + i + ... + σ k + j-1 is either zero or one, that is, the total graph has no multiple edges.

La elevación descrita anteriormente parece tener una limitación. Bajo la construcción anterior tanto la longitud de código como la longitud de la unidad de datos codificados deben ser múltiplos de Z. Sin embargo esta limitación aparente es fácilmente superable. Supongamos que la unidad de datos a codificar tiene una longitud AZ + B donde A es un número entero positivo y B está entre 1 y Z inclusive, y la longitud de código deseada es CZ + D donde C es un número entero positivo y D está entre 0 y Z-1 inclusive. Sea E el número entero positivo más pequeño tal que EZ ≥ CZ + D + (Z – B). Se puede diseñar un gráfico elevado que codifica la unidad de datos de longitud (A + 1) Z para producir una palabra de código de longitud EZ de modo que la unidad de datos aparece como parte de la palabra de código, y usa esto para producir los parámetros de código deseados como sigue. Dada una unidad de datos de longitud AZ + B se concatenan Z – B ceros para producir una unidad de datos de longitud (A + 1) Z. Esa unidad de datos se codifica para producir una palabra de código de longitud EZ. Los Z – B ceros no se transmiten. De los otros EZ – (Z – B) bits en la palabra de código se seleccionan EZ – CZ – D – (Z – B) bits y se perforan, obsérvese que el número de bits de perforación está entre 0 y Z-1 inclusive. Estos bits no se transmitirán, de modo que el número real de bits transmitidos es de EZ – (Z – B) – (EZ – CZ – D – (Z – B)) = CZ +D, que es la longitud de código deseada. El receptor que tiene conocimiento de antemano acerca de los ceros adicionales y los bits perforados sustituye los bits software por los bits perforados indicando borrado, y sustituye los bits software por los bits cero conocidos indicando un valor de cero con la mayor fiabilidad posible. La palabra extendida recibida, de longitud EZ puede ahora decodificarse para recuperar la unidad de datos original. En la práctica usualmente se hacen estos ajustes perforando bits de sólo un nodo de vector y declarando bits conocidos de sólo un nodo de vector. The elevation described above seems to have a limitation. Under the previous construction both the code length and the length of the encoded data unit must be multiples of Z. However, this apparent limitation is easily overcome. Assume that the unit of data to be encoded has a length AZ + B where A is a positive integer and B is between 1 and Z inclusive, and the desired code length is CZ + D where C is a positive integer and D is between 0 and Z-1 inclusive. Let E be the smallest positive integer such that EZ ≥ CZ + D + (Z - B). An elevated graph that encodes the length data unit (A + 1) Z can be designed to produce an EZ length code word so that the data unit appears as part of the code word, and uses this to produce the desired code parameters as follows. Given a data unit of length AZ + B, Z-B zeros are concatenated to produce a data unit of length (A + 1) Z. That data unit is encoded to produce a code word of length EZ. Z - B zeros are not transmitted. From the other EZ - (Z - B) bits in the code word, EZ - CZ - D - (Z - B) bits are selected and drilled, note that the number of drilling bits is between 0 and Z-1 inclusive . These bits will not be transmitted, so the actual number of bits transmitted is EZ - (Z - B) - (EZ - CZ - D - (Z - B)) = CZ + D, which is the desired code length . The receiver who has prior knowledge about the additional zeros and the perforated bits replaces the software bits with the perforated bits indicating erase, and replaces the software bits with the known zero bits indicating a zero value with the highest possible reliability. The extended word received, of length EZ can now be decoded to retrieve the original data unit. In practice, these adjustments are usually made by drilling bits of only one vector node and declaring known bits of only one vector node.

Ahora nos dirigimos a diversas implementaciones de decodificadores que usan la técnica tratada anteriormente de conversión a vectores de los gráficos LDPC. We now turn to various implementations of decoders that use the technique discussed above to convert LDPC graphics to vectors.

Como se ha tratado anteriormente la decodificación de paso de mensajes de los códigos LDPC involucra el paso de mensajes a lo largo de las aristas del gráfico que representa el código y la realización de los cálculos en base a esos mensajes en los nodos del gráfico, es decir, los nodos de variables y de restricciones. As previously discussed, the decoding of message passing of the LDPC codes involves the passage of messages along the edges of the graph representing the code and the calculation based on those messages in the nodes of the graph, it is that is, the nodes of variables and restrictions.

Dado un gráfico LDPC convertido a vectores se pueden convertir a vectores los procesos de decodificación como sigue. El decodificador funciona como si se estuviesen decodificando Z copias del código LDPC proyectado de forma síncrona y en paralelo. El control del proceso de decodificación corresponde al gráfico LDPC proyectado y puede compartirse a través de las Z copias. De este modo, describimos el decodificador como si operase sobre mensajes de vectores atravesando las aristas de vectores y recibiéndose por los nodos de vectores, teniendo cada uno de los vectores Z elementos. Los encajes también se convierten en vectores. En particular, un procesador de nodos de vectores podría comprender Z procesadores de Z nodos en paralelo y, cuando se suministra un vector de mensajes, (m1, …, mz) al procesador de nodos de vectores, se suministra el mensaje mi al procesador de orden i. De este modo, no se produce ningún encaminamiento ni reordenamiento de mensajes dentro del procesador de nodos de vectores, es decir, el mensaje de vectores se alinea con el vector de los procesadores de un modo fijo. Given an LDPC graphic converted to vectors, decoding processes can be converted to vectors as follows. The decoder works as if Z copies of the projected LDPC code are being decoded synchronously and in parallel. The decoding process control corresponds to the projected LDPC chart and can be shared through the Z copies. In this way, we describe the decoder as if it were operating on vector messages crossing the edges of vectors and being received by the vector nodes, each of the vectors Z having elements. Lace also becomes vectors. In particular, a vector node processor could comprise Z processors of Z nodes in parallel and, when a message vector is supplied, (m1, ..., mz) to the vector node processor, the message mi is supplied to the processor of order i. In this way, there is no routing or reordering of messages within the vector node processor, that is, the vector message is aligned with the processor vector in a fixed manner.

Una desviación de la ejecución en paralelo puramente disjunta de los Z gráficos proyectados es que los mensajes se reordenan dentro de un mensaje de vector durante el proceso de paso de mensajes. Nos referimos a esta operación de reordenamiento como una rotación. La rotación implementa las operaciones de permutación definidas por Ψ. Debido a las rotaciones, las trayectorias de procesamiento de las Z copias de la mezcla de gráficos proyectados enlazan los mismos por lo tanto para formar un gráfico único más grande. La información de control que especifica las rotaciones se necesita además de la información de control requerida para el gráfico proyectado. Afortunadamente, la información de control de la rotación puede especificarse usando relativamente poca memoria. A deviation from the purely disjoint parallel execution of the projected Z graphics is that the messages are rearranged within a vector message during the message passing process. We refer to this reordering operation as a rotation. The rotation implements the permutation operations defined by Ψ. Due to the rotations, the processing paths of the Z copies of the mix of projected graphics therefore link them to form a single larger graph. The control information that specifies the rotations is needed in addition to the control information required for the projected graph. Fortunately, the rotation control information can be specified using relatively little memory.

Aunque pueden usarse diversas permutaciones para las rotaciones de acuerdo con la presente invención, el uso de permutaciones cíclicas es particularmente interesante debido a la facilidad con la que tales permutaciones pueden implementarse. Por simplicidad asumiremos que Ψ comprende el grupo de permutaciones cíclicas. En este caso, nuestros grandes gráficos LDPC están restringidos a tener una estructura casi cíclica. Con fines de este ejemplo, sea N el número de nodos de variables en el gráfico y sea M el número de nodos de restricciones en el gráfico. En primer lugar asumimos que tanto N como M son múltiplos de Z, N = nZ y M = mZ donde Z denota el orden del ciclo. Although various permutations can be used for rotations according to the present invention, the use of cyclic permutations is particularly interesting due to the ease with which such permutations can be implemented. For simplicity we will assume that Ψ includes the group of cyclic permutations. In this case, our large LDPC graphics are restricted to having an almost cyclic structure. For the purposes of this example, let N be the number of variable nodes in the graph and let M be the number of restriction nodes in the graph. First, we assume that both N and M are multiples of Z, N = nZ and M = mZ where Z denotes the order of the cycle.

Veamos que los nodos están doblemente indexados. De este modo, el nodo de variable vi,j es el nodo de variable de orden j de la copia de orden i del gráfico proyectado. Como Ψ es el grupo de permutaciones cíclicas, el nodo de variable vi,j está conectado a un nodo de restricción Ca,b si y sólo si el nodo de variable vi+k mod z, j está conectado al nodo de restricción ca+k mod Z, b para k = 1, …, Z. Let's see that the nodes are doubly indexed. Thus, the variable node vi, j is the order variable node j of the order copy i of the projected graph. Since Ψ is the group of cyclic permutations, the variable node vi, j is connected to a restriction node Ca, b if and only if the variable node vi + k mod z, j is connected to the restriction node ca + k mod Z, b for k = 1,…, Z.

Las técnicas de la presente invención para la representación de un gran gráfico que usa una representación de gráfico mucho más pequeña y la información de rotación se explicará ahora además en referencia a las Fig. 10 hasta 16 que se refieren a la conversión a vectores del gráfico 600. Las técnicas descritas con referencia a estas figuras pueden aplicarse a gráficos LDPC mucho más grandes. The techniques of the present invention for the representation of a large graph using a much smaller graph representation and the rotation information will now be further explained in reference to Figs. 10 to 16 which refer to the conversion to vectors of the graph. 600. The techniques described with reference to these figures can be applied to much larger LDPC graphics.

De acuerdo con la presente invención, puede generarse un gráfico mayor replicando, es decir, implementado múltiples copias, de un gráfico pequeño mostrado en la Fig. 6 y realizando a continuación operaciones de rotación para interconectar las diversas copias del gráfico replicado. Nos referimos al gráfico pequeño dentro de la estructura del gráfico más grande como el gráfico proyectado. In accordance with the present invention, a larger graphic can be generated by replicating, ie, implementing multiple copies, of a small graphic shown in Fig. 6 and then performing rotation operations to interconnect the various copies of the replicated graphic. We refer to the small graph within the structure of the larger graph as the projected graph.

La Fig. 10 es un gráfico 1000 que ilustra el resultado de realización de 3 copias en paralelo del pequeño gráfico ilustrado en la Fig. 6. Los nodos de variables 602', 602'' y 602''' corresponden a los gráficos primero hasta el tercero, respectivamente, resultando de la realización de las tres copias del gráfico de la Fig. 6. Además los nodos de comprobaciones 606', 606'' y 606''' corresponden a los gráficos primero hasta el tercero, respectivamente, resultando de la realización de las tres copias. Obsérvese que no hay aristas de nodos que conectan nodos de uno de los tres gráficos con los nodos de cualquier otro de los tres gráficos. Por consiguiente, este proceso de copias, que "eleva" el gráfico básico por un factor de 3, da como resultado tres gráficos idénticos disjuntos. Fig. 10 is a graph 1000 illustrating the result of making 3 parallel copies of the small graph illustrated in Fig. 6. Variable nodes 602 ', 602' 'and 602' '' correspond to the graphs first until the third one, respectively, resulting from the realization of the three copies of the graph of Fig. 6. In addition, the check nodes 606 ', 606' 'and 606' '' correspond to the graphics first to the third, respectively, resulting from the making of all three copies. Note that there are no edges of nodes that connect nodes of one of the three graphics with the nodes of any other of the three graphics. Consequently, this copying process, which "elevates" the basic graphic by a factor of 3, results in three identical disjoint graphics.

La Fig. 11 ilustra el resultado del proceso de copiado tratado anteriormente usando matrices 1102 y 1104. Obsérvese que para hacer las tres copias del gráfico original cada uno de los elementos distintos de cero en la matriz 702 se reemplazan con una matriz de identidad de 3x3. De este modo, cada uno en la matriz 702 se reemplaza por una matriz de 3x3 que tiene unos a lo largo de la diagonal y ceros en el resto para producir la matriz 1102. Obsérvese que la matriz 1102 tiene 3 veces el número de aristas que tiene la matriz 702, 12 aristas para cada una de las tres copias del gráfico básico mostrado en la Fig. 6. En este punto, la variable xij corresponde con el nodo de variables Vij. Fig. 11 illustrates the result of the copying process discussed above using matrices 1102 and 1104. Note that to make the three copies of the original graphic each of the nonzero elements in matrix 702 is replaced with a 3x3 identity matrix . Thus, each in matrix 702 is replaced by a 3x3 matrix that has ones along the diagonal and zeros in the rest to produce matrix 1102. Note that matrix 1102 has 3 times the number of edges that It has the matrix 702, 12 edges for each of the three copies of the basic graph shown in Fig. 6. At this point, the variable xij corresponds to the node of variables Vij.

La Fig. 12 muestra las relaciones entre las 36 aristas (3 x 12), los 15 nodos de variables (3 x 5) y los 12 nodos de restricciones (3 x 4) que constituyen el gráfico 1000. Como en el caso de la Fig. 8, las aristas se numeran desde el lado de los nodos de variables. Fig. 12 shows the relationships between the 36 edges (3 x 12), the 15 variable nodes (3 x 5) and the 12 restriction nodes (3 x 4) that constitute graph 1000. As in the case of the Fig. 8, the edges are numbered from the side of the variable nodes.

Para propósitos de anotación, el primer número usado para identificar un nodo, restricción o arista indica la copia del gráfico a la cual pertenece la arista, por ejemplo, la primera, segunda o tercera copia del gráfico. El segundo número se usa para identificar el número de elemento dentro de la copia especificada particular del gráfico básico. For annotation purposes, the first number used to identify a node, constraint or edge indicates the copy of the graph to which the edge belongs, for example, the first, second or third copy of the graph. The second number is used to identify the item number within the particular specified copy of the basic graphic.

Por ejemplo, en la fila 1202' se usa el valor (1, 2) para indicar la arista 2 de la primera copia del gráfico mientras que en la fila 1202'' se usa (2,2) para indicar la arista 2 de la segunda copia del gráfico. For example, in row 1202 'the value (1, 2) is used to indicate the edge 2 of the first copy of the graph while in row 1202' 'it is used (2,2) to indicate the edge 2 of the Second copy of the chart.

Obsérvese que las filas de aristas 1202', 1202'', 1202''' son simplemente copias de la fila 804 que representan tres copias de la fila de las aristas 804, mostradas en la Fig. 8 que se refieren a los nodos de variables. De forma similar, las filas de aristas 1204', 1204'' y 124''' representan tres copias de la fila de aristas 804' mostrada en la Fig. 8 que se refieren a los nodos de restricciones. Note that the rows of edges 1202 ', 1202' ', 1202' '' are simply copies of row 804 representing three copies of the row of edges 804, shown in Fig. 8 which refer to the variable nodes . Similarly, the rows of edges 1204 ', 1204' 'and 124' '' represent three copies of the row of edges 804 'shown in Fig. 8 which refer to the restriction nodes.

Tratemos brevemente cómo modificar el decodificador 900 de la Fig. 9 para decodificar los Z=3 gráficos paralelos ahora definidos. El procesador de nodos 908 se convertirá en un procesador de nodos de vectores, capaz de procesar 3 nodos idénticos simultáneamente en paralelo. Todas las salidas desde el procesador de nodos 908 se convertirán a vectores, transportando por lo tanto 3 veces los datos transportados anteriormente. La memoria de decisión hardware 912 y la memoria de mensajes de aristas 906 se harán 3 veces más anchos, cada uno capaz de escribir o leer 3 unidades (bits o mensajes de K bits respectivamente) en paralelo usando la dirección de una única instrucción SIMD. Las salidas desde estas memorias serán ahora vectores, 3 veces más anchos que antes. El verificador de comprobación de paridad 914 y la memoria intermedia de salida 916 también se convertirán adecuadamente a vectores con todos los procesamientos puestos en paralelo de forma adecuada. Let us briefly discuss how to modify the decoder 900 of Fig. 9 to decode the Z = 3 parallel graphics now defined. The 908 node processor will become a vector node processor, capable of processing 3 identical nodes simultaneously in parallel. All outputs from node processor 908 will be converted to vectors, thus transporting 3 times the data previously transported. The hardware decision memory 912 and the edge message memory 906 will be made 3 times wider, each capable of writing or reading 3 units (bits or K bit messages respectively) in parallel using the address of a single SIMD instruction. The outputs from these memories will now be vectors, 3 times wider than before. The parity check verifier 914 and the output buffer 916 will also be suitably converted to vectors with all the processes set in parallel properly.

Consideremos ahora la introducción de las rotaciones en nuestro ejemplo. Esto puede ilustrarse reemplazando cada una de las matrices identidad de 3x3 mostradas en la Fig. 11 con matrices de permutación cíclica de 3x3 como se muestra en la Fig. 13. Obsérvese que hay tres posibilidades para la matriz de permutación cíclica utilizada en la Fig. Consider now the introduction of rotations in our example. This can be illustrated by replacing each of the 3x3 identity matrices shown in Fig. 11 with 3x3 cyclic permutation matrices as shown in Fig. 13. Note that there are three possibilities for the cyclic permutation matrix used in Fig.

13. Es posible indicar la matriz de permutación particular a sustituir por una matriz identidad indicando si la matriz de permutación tiene un "1" localizado en la primera, segunda o tercera posición en la primera fila de la matriz de permutación. Por ejemplo, en el caso de la matriz 1302, comenzando en la parte superior izquierda y procediendo a la esquina inferior derecha (orden de encajes de las restricciones de vector) las rotaciones podrían especificarse por la secuencia (2, 2, 3, 3 1, 1, 1, 3, 2, 1, 2, 3). 13. It is possible to indicate the particular permutation matrix to be replaced by an identity matrix indicating whether the permutation matrix has a "1" located in the first, second or third position in the first row of the permutation matrix. For example, in the case of matrix 1302, starting at the upper left and proceeding to the lower right corner (order of fittings of vector restrictions) the rotations could be specified by the sequence (2, 2, 3, 3 1 , 1, 1, 3, 2, 1, 2, 3).

La Fig. 14 ilustra el efecto de la realización de la permutación cíclica (rotación) sobre el lado de nodos de restricciones. Como la permutación se realiza desde el lado de los nodos de restricciones, la relación entre las aristas, por ejemplo, el ordenamiento desde el lado de los nodos de variables permanece sin cambiar como se muestra en las filas 1402', 1402'' y 1402'''. Desde el lado de las restricciones, sin embargo, la permutación da como resultado encajes dentro de una columna, por ejemplo las aristas dentro de una arista de vector específico, reordenándose como se muestra en las filas 1404', 1404'', 1404'''. Esto produce interconexiones entre nodos correspondientes a diferentes copias del gráfico proyectado. Fig. 14 illustrates the effect of performing cyclic permutation (rotation) on the side of restriction nodes. As the permutation is carried out from the side of the restriction nodes, the relationship between the edges, for example, the ordering from the side of the variable nodes remains unchanged as shown in rows 1402 ', 1402' 'and 1402 '' ' From the side of the restrictions, however, the permutation results in fittings within a column, for example the edges within a specific vector edge, reordering as shown in rows 1404 ', 1404' ', 1404' ' '. This produces interconnections between nodes corresponding to different copies of the projected graph.

Consideramos, por ejemplo, la columna 1 de filas 1404 en relación con la columna 1 de filas 1104 de la Fig. 11. Obsérvese que como resultado de operación de permutación de aristas de vectores, el nodo de restricción C1,1 está ahora conectado a la arista (2, 1) en lugar de la arista (1, 1), el nodo de restricción C2,1 está acoplado a la arista (3,1) en lugar de a la arista (2,1) y el nodo de restricción C3,1 está acoplado a la arista (1,1) en lugar de la arista (3,1). Consider, for example, column 1 of rows 1404 in relation to column 1 of rows 1104 of Fig. 11. Note that as a result of permutating operation of vector edges, restriction node C1,1 is now connected to the edge (2, 1) instead of the edge (1, 1), the restriction node C2,1 is coupled to the edge (3.1) instead of the edge (2,1) and the node of constraint C3,1 is coupled to the edge (1,1) instead of the edge (3,1).

Tratamos anteriormente cómo convertir a vectores el decodificador 900, o decodificar Z copias en paralelo del gráfico proyectado. Introduciendo conmutaciones dentro de las trayectorias del mensaje para realizar rotaciones, decodificamos el código LDPC definido en la Fig. 13. We discussed earlier how to convert decoder 900 to vectors, or decode Z parallel copies of the projected graphic. By introducing commutations within the message paths to perform rotations, we decode the LDPC code defined in Fig. 13.

La Figura 15 ilustra un decodificador que incorpora diversas características de la presente invención. El decodificador 1500 convierte a vectores totalmente, con rotaciones, el decodificador 600. Obsérvese que la figura indica Z=4 mientras que nuestro ejemplo tiene Z=3, en general podemos tener cualquier Z>1 pero en la práctica a menudo serán preferible Z valores en la forma de 2k siendo k un número entero. Las similitudes con el decodificador 600 son evidentes. En particular el módulo de control del decodificador 1502 y la memoria de grados de los nodos 1510 funcionan de la misma forma o similar que sus homólogos respectivos 902 y 910 en el decodificador 900. Por ejemplo, para decodificar el código LDPC definido en las Fig. 13 y 14 el funcionamiento de estos componentes sería exactamente el mismo que el de sus homólogos en el decodificador 900 cuando se decodifica el gráfico de ejemplo Figure 15 illustrates a decoder incorporating various features of the present invention. The decoder 1500 converts the decoder 600 into rotational vectors completely. Note that the figure indicates Z = 4 while our example has Z = 3, in general we can have any Z> 1 but in practice Z values will often be preferable in the form of 2k being k an integer. The similarities with the decoder 600 are evident. In particular, the control module of the decoder 1502 and the degree memory of the nodes 1510 function in the same or similar manner as their respective counterparts 902 and 910 in the decoder 900. For example, to decode the LDPC code defined in Fig. 13 and 14 the operation of these components would be exactly the same as that of their counterparts in decoder 900 when the example graphic is decoded

600. La memoria de mensajes de aristas 1506 y la memoria de decisión hardware 1512 son versiones convertidas a vectores de sus homólogas 906 y 912 en el decodificador 900. Mientras que en el decodificador 900 las memorias almacenaban unidades únicas (bits o mensajes de k bits) las memorias correspondientes en el decodificador 1500 almacenan conjuntos, es decir vectores, mensajes, dando como resultado por ejemplo mensajes de ZxK bits almacenados. Estos vectores se escriben o se leen como unidades únicas usando instrucciones SIMD. De este modo los identificadores de mensajes enviados a estos módulos desde el módulo de ordenamiento de mensajes 1504 son equivalentes o similares a los del decodificador 900. El módulo de ordenamiento de mensajes 1504 tiene el papel adicional, más allá del que tenía su homólogo 904 en el decodificador 900, de almacenar y proporcionar la información de permutación, por ejemplo, de rotación. Recordemos que en el ejemplo de decodificación 600, el decodificador 900 almacenaba en su módulo de ordenamiento de mensajes 904 la secuencia de aristas (1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10). Consideramos usar el decodificador 1500, para decodificar el código de las Fig. 13 y 14. El módulo de ordenamiento de mensajes 1504 almacenaría la misma secuencia anterior para el acceso de vectores de mensajes durante el procesamiento de los nodos de restricción, y también almacenaría la secuencia (2, 2, 3, 3, 1, 1, 1, 3, 2, 1, 2, 3) que describe las rotaciones asociadas con la misma secuencia de mensajes de vectores. Esta secuencia sirve como base para generar la señal de decadencia que se usa por el módulo de ordenamiento de mensajes 1504 para causar que los conmutadores 1520 y 1522 giren los mensajes de vectores y los bits de decisión hardware de vector respectivamente. (Obsérvese que los bits de decisión hardware se proporcionan sólo durante el modo de procesamiento de nodos de variables). El verificador de comprobación de paridad de vectores 1514 es una versión de vectores de su homólogo 914 en el decodificador 900. Obsérvese que la señal de convergencia es un escalar, como antes. La memoria intermedia de salida 1516 sirve para el mismo propósito que la memoria intermedia 916, pero los datos de salida se escriben como vectores. El procesador de nodos de vectores 1508, es por ejemplo como Z procesadores de nodos, cada uno como en 908, en paralelo. Estos nodos compartirían las señales de grado y la señal de control C/V del módulo de control del decodificador 1502. 600. Edge message memory 1506 and hardware decision memory 1512 are versions converted to vectors of their counterparts 906 and 912 in decoder 900. While in decoder 900 memories stored single units (bits or k-bit messages) ) the corresponding memories in the decoder 1500 store sets, ie vectors, messages, resulting in, for example, messages of ZxK bits stored. These vectors are written or read as single units using SIMD instructions. In this way the message identifiers sent to these modules from the message ordering module 1504 are equivalent or similar to those of the decoder 900. The message ordering module 1504 has the additional role, beyond that of its counterpart 904 in the decoder 900, for storing and providing the permutation information, for example, of rotation. Recall that in the decoding example 600, the decoder 900 stored the sequence of edges in its message order module 904 (1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10) . We consider using the decoder 1500, to decode the code of Figs. 13 and 14. The message sorting module 1504 would store the same sequence above for message vector access during the processing of the restriction nodes, and also store the sequence (2, 2, 3, 3, 1, 1, 1, 3, 2, 1, 2, 3) that describes the rotations associated with the same sequence of vector messages. This sequence serves as the basis for generating the decay signal that is used by message ordering module 1504 to cause switches 1520 and 1522 to rotate vector messages and vector hardware decision bits respectively. (Note that hardware decision bits are provided only during variable node processing mode). The vector parity check verifier 1514 is a vector version of its counterpart 914 in the decoder 900. Note that the convergence signal is a scalar, as before. The output buffer 1516 serves the same purpose as the buffer 916, but the output data is written as vectors. The vector node processor 1508, is for example like Z node processors, each as in 908, in parallel. These nodes would share the degree signals and the C / V control signal of the control module of the decoder 1502.

Para facilitar la capacidad de sacar decisiones del decodificador bien software o hardware generadas por la unidad de procesamiento de variables se suministran a una entrada de decisión software de la memoria intermedia 1516. De este modo, en cualquier momento anterior a la terminación de la decodificación, pueden obtenerse decisiones software a partir de la salida de la memoria intermedia 1516. To facilitate the ability to make decisions from the decoder either software or hardware generated by the variable processing unit are supplied to a software decision input of the buffer 1516. Thus, at any time prior to the termination of the decoding, software decisions can be obtained from the output of buffer 1516.

Consideramos adicionalmente cómo funcionaría el decodificador 1500 decodificando el ejemplo de las Fig. 13 y 14. Inicialmente la memoria de mensajes de aristas 1506 se puebla con ceros. El módulo de control del decodificador 1502 en primer lugar bascula al modo de procesamiento de nodos de variables. Se leen los vectores de la memoria de mensajes de aristas 1506 (todos ceros en este punto) en orden y se suministran al procesador de nodos de vectores 1508 para el procesamiento de los nodos de variables. El procesador de nodos de vectores 1508 a continuación saca los valores recibidos solos, a lo largo de cada arista desde un nodo de variable, usaremos y para denotar estos primeros mensajes para indicar esto. De este modo, los vectores salientes serían (y1,i, y2,i, y3,i) para i= 1, …, 12 en orden creciente. La señal de decadencia se usa para controlar el reordenamiento de los mensajes de control realizado por los circuitos de conmutación 1520, 1522. La señal de decadencia del módulo de ordenamiento de mensajes 1504 causará que los mensajes en los vectores roten para producir vectores procesados como sigue: (y2,1, y3,1, y1,1), (y3,2, y1,2, y2,2), (y1,3, y2,3, y3,3), (y2,4, y3,4, y1,4), (y3,5, y1,5, y2,5), (y1,6, y2,6, y3,6), (y3,7, y1,7, y2,7), (y2,8, y3,8, y1,8), (y1,9,y2,9, y3,9), (y3,10, y1,10, y2,10), (y1,11, y2,11, y3,11), (y2,12, y3,12, y1,12). Una vez que se han escrito los vectores procesados dentro de la memoria de aristas 1506, en el orden indicado, el módulo de control del decodificador 1502 basculará al modo de restricciones. Los mensajes del vector almacenados a continuación se leerán en orden (1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10). De este modo se presentarán al procesador de nodos de vectores 1508 en el orden (y2,1, y3,1, y1,1), (y2,4, y3,4, y1,4), (y3,7, y1,7, y2,7), (y3,2, y1,2, y2,2), (y1,9,y2,9, y3,9), (y1,11, y2,11, y3,11), (y1,3, y2,3, y3,3), (y3,5, y1,5, y2,5), (y2,12, y3,12, y1,12) (y1,6, y2,6, y3,6), (y2,8, y3,8, 1,8), (y3,10, y1,10, y2,10). El procesador de nodos de vectores 1508 se implementa como tres procesadores de nodos (Z=3) en paralelo. El primer elemento (mensaje) de cada vector de mensajes (conjunto de mensajes) se suministra al primer procesador de nodos, el segundo mensaje se suministra al segundo procesador, y el tercer mensaje se suministra al tercer procesador, respectivamente. La señal de grado, que indica el grado del nodo actual que se está procesando, se suministra por la memoria de grados 1510 a los tres procesadores en paralelo del procesador de nodos de vectores 1508. En este punto la señal de grado indica que las restricciones son todas de grado 3 de modo que el primer procesador procesaría y2,1, y2,4, e y3,7 para su primer nodo de restricción e y3,2, y1,9, e y1,11 para su segundo nodo de restricción. De forma similar, el segundo procesador procesaría y3,1, y3,4, e y1,7 para su primer nodo de restricción e y1,2, y2,9 e y2,11 para su segundo. We further consider how decoder 1500 would work by decoding the example of Figs. 13 and 14. Initially the edge message memory 1506 is populated with zeros. The decoder control module 1502 first swings to the mode of processing variable nodes. The vectors of the edge message memory 1506 (all zeros at this point) are read in order and supplied to the vector node processor 1508 for the processing of the variable nodes. The vector node processor 1508 then takes out the values received alone, along each edge from a variable node, we will use and to denote these first messages to indicate this. Thus, the outgoing vectors would be (y1, i, y2, i, y3, i) for i = 1, ..., 12 in increasing order. The decay signal is used to control the reordering of the control messages performed by the switching circuits 1520, 1522. The decay signal of the message ordering module 1504 will cause the messages in the vectors to rotate to produce processed vectors as follows. : (y2.1, y3.1, y1.1), (y3.2, y1.2, y2.2), (y1.3, y2.3, y3.3), (y2.4, y3, 4, y1.4), (y3.5, y1.5, y2.5), (y1.6, y2.6, y3.6), (y3.7, y1.7, y2.7), ( y2.8, y3.8, y1.8), (y1.9, y2.9, y3.9), (y3.10, y1.10, y2.10), (y1.11, y2.11, y3,11), (y2,12, y3,12, y1,12). Once the vectors processed within the edge memory 1506 have been written, in the order indicated, the control module of the decoder 1502 will tilt to the constraint mode. The vector messages stored below will be read in order (1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10). In this way they will be presented to the vector node processor 1508 in the order (y2.1, y3.1, y1.1), (y2.4, y3.4, y1.4), (y3.7, y1, 7, y2.7), (y3.2, y1.2, y2.2), (y1.9, y2.9, y3.9), (y1.11, y2.11, y3.11), ( y1.3, y2.3, y3.3), (y3.5, y1.5, y2.5), (y2.12, y3.12, y1.12) (y1.6, y2.6, y3 , 6), (y2,8, y3,8, 1,8), (y3,10, y1,10, y2,10). The vector node processor 1508 is implemented as three node processors (Z = 3) in parallel. The first element (message) of each message vector (message set) is supplied to the first node processor, the second message is supplied to the second processor, and the third message is supplied to the third processor, respectively. The degree signal, which indicates the degree of the current node being processed, is supplied by the 1510 degree memory to the three parallel processors of the 1508 vector node processor. At this point the degree signal indicates that the restrictions they are all grade 3 so that the first processor would process y2.1, y2.4, and y3.7 for its first restriction node and y3.2, y1.9, and y1.11 for its second restriction node. Similarly, the second processor would process y3.1, y3.4, and y1.7 for its first restriction node e y1.2, y2.9 and y2.11 for its second.

Sea mi,j el mensaje saliente correspondiente al entrante yi,j. A medida que los vectores emergen del procesador de nodos de vectores 1508, la señal de decadencia para el conmutador 1520 causará que los vectores se reordenen de modo que se invierte la rotación anterior, por lo tanto llegan a la memoria de aristas como (m1,j, m2,j, m3,j), en el orden j= 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10. Los mensajes se escriben de nuevo en la memoria de acuerdo con el orden del identificador de mensajes con los cuales se leyeron, de modo que después de escribirse aparecen en la memoria como (m1,j, m2,j, m3,j) en el orden j= 1, …, 12. El módulo de reordenamiento de mensajes 1504 bascula ahora dentro del modo de procesamiento de nodos de variables en respuesta a la señal C/V suministrada por el Let me be, j the outgoing message corresponding to the incoming yi, j. As the vectors emerge from the vector node processor 1508, the decay signal for the switch 1520 will cause the vectors to be rearranged so that the previous rotation is reversed, thus reaching edge memory as (m1, j, m2, j, m3, j), in the order j = 1, 4, 7, 2, 9, 11, 3, 5, 12, 6, 8, 10. The messages are written back into the memory of according to the order of the message identifier with which they were read, so that after writing they appear in the memory as (m1, j, m2, j, m3, j) in the order j = 1, ..., 12. The Message reordering module 1504 now scales within the variable node processing mode in response to the C / V signal supplied by the

5 módulo de control del decodificador 1502. Los vectores de mensajes se leen a continuación en orden j= 1, …, 12 y se suministran al procesador de nodos de vectores 1508 para el procesamiento de los nodos de variables. Esto completa una iteración. 5 decoder control module 1502. The message vectors are then read in order j = 1,…, 12 and supplied to the vector node processor 1508 for the processing of the variable nodes. This completes an iteration.

Durante el procesamiento de los nodos de variables, el procesador de nodos de vectores 1508 también saca vectores decodificados software que se almacenan en la memoria intermedia de salida 1516. También saca 10 decisiones hardware que se suministran al circuito de conmutación 1522. Los vectores de decisiones hardware de un bit sufren la misma operación de rotación que los vectores de mensajes en los instantes correspondientes. Los vectores de decisiones hardware rotados producidos por el circuito de conmutación 1522 se disponen a continuación en la memoria de decisiones hardware 1512 donde se almacenan. Como resultado de la aplicación de la misma rotación aplicada a los vectores de mensajes, las decisiones hardware pueden leerse en el mismo orden que se leen 15 los mensajes de vectores durante el procesamiento de los nodos de restricciones. Durante el procesamiento de los nodos de restricciones, las decisiones hardware se suministran al verificador de comprobación de la paridad de vectores 1514 que realiza Z comprobaciones de paridad en paralelo. Si todas las comprobaciones de paridad se satisfacen, a continuación se genera la señal de convergencia, CON y se emite. En respuesta a la recepción de la señal de convergencia indicando la decodificación satisfactoria, el módulo de control del decodificador 1502 para el During the processing of the variable nodes, the vector node processor 1508 also outputs decoded software vectors that are stored in the output buffer 1516. It also outputs 10 hardware decisions that are supplied to the switching circuit 1522. The decision vectors One-bit hardware undergo the same rotation operation as the message vectors at the corresponding instants. The rotated hardware decision vectors produced by the switching circuit 1522 are then arranged in the hardware decision memory 1512 where they are stored. As a result of the application of the same rotation applied to the message vectors, the hardware decisions can be read in the same order that the vector messages are read during the processing of the restriction nodes. During the processing of the restriction nodes, the hardware decisions are supplied to the vector parity check verifier 1514 which performs Z parity checks in parallel. If all parity checks are satisfied, then the convergence signal, CON is generated and emitted. In response to the reception of the convergence signal indicating the decoding satisfactory, the control module of the decoder 1502 for the

20 proceso de decodificación. 20 decoding process.

Resultará evidente que hay muchas variaciones para el decodificador 1500 que cada una de las realizaciones de la invención actual. Por ejemplo, el conmutador 1520 podría haberse situado en cambio a lo largo de la trayectoria de datos entre la memoria de mensajes de aristas 1506 y el procesador de nodos de vectores 1508. De forma similar, el conmutador 1522 podría haberse situado en cambio a lo largo de la trayectoria de datos entre la memoria de 25 decisión hardware 1512 y el verificador de comprobación de paridad de vectores 1514. Tal sustitución involucraría también el ajuste apropiado de la temporización de la señal de decadencia. La memoria de decisión hardware 1512, el verificador de comprobación de paridad de vectores 1514 y las trayectorias de datos acompañantes no necesitan usarse y se eliminan para las realizaciones del decodificador que realizan un número fijo de iteraciones y por lo tanto no requieren detección de convergencia. Muchas variaciones adicionales serán evidentes para los especialistas en It will be apparent that there are many variations for the decoder 1500 than each of the embodiments of the current invention. For example, the switch 1520 could have instead been located along the data path between the edge message memory 1506 and the vector node processor 1508. Similarly, the switch 1522 could have instead been located at along the data path between the hardware decision memory 1512 and the vector parity check verifier 1514. Such substitution would also involve the appropriate timing adjustment of the decay signal. The hardware decision memory 1512, the vector parity check verifier 1514 and the accompanying data paths do not need to be used and are deleted for decoder embodiments that perform a fixed number of iterations and therefore do not require convergence detection. Many additional variations will be apparent to specialists in

30 la técnica a la vista de la presente invención. The technique in view of the present invention.

La Fig. 16 ilustra un decodificador 1600 que se implementa de acuerdo con otra realización de la presente invención. El decodificador 1600 incluye muchos elementos que son los mismos, o similares a los elementos del decodificador 1500. Por consiguiente, con el fin de la brevedad, tales elementos se identificarán usando los mismos números de referencia que los utilizados en la Fig. 15 y no se tratarán de nuevo en detalle. El decodificador 1600 es capaz de 35 realizar tanto las operaciones de procesamiento de nodos de variables como de nodos de restricciones, por ejemplo, operaciones de actualización de mensajes, al mismo tiempo, es decir, simultáneamente e independientemente. En contraste con la Fig. 15, la implementación del decodificador que puede describirse como un decodificador de lado a lado debido al modo en que alterna entre las iteraciones de procesamiento de los nodos de variables y los nodos de restricciones, el decodificador 1600 puede describirse como un decodificador de iteración asíncrona ya que las Fig. 16 illustrates a decoder 1600 that is implemented in accordance with another embodiment of the present invention. The decoder 1600 includes many elements that are the same, or similar to the elements of the decoder 1500. Therefore, for the purpose of brevity, such elements will be identified using the same reference numbers as those used in Fig. 15 and not They will be treated again in detail. The decoder 1600 is capable of performing both the processing operations of variable nodes and restriction nodes, for example, message update operations, at the same time, that is, simultaneously and independently. In contrast to Fig. 15, the implementation of the decoder that can be described as a side-by-side decoder due to the way in which it alternates between the processing iterations of the variable nodes and the restriction nodes, the decoder 1600 can be described as an asynchronous iteration decoder since the

40 operaciones de procesamiento de nodos de variables y nodos de restricciones puede realizarse independientemente, por ejemplo, simultáneamente. 40 processing operations of variable nodes and restriction nodes can be performed independently, for example, simultaneously.

El circuito decodificador 1600 incluye un módulo de control del decodificador 1602, un módulo de ordenamiento de mensajes 1604, un primer circuito de conmutación 1621, una memoria de mensajes de arista V2C 1606, un procesador de vectores de nodos de restricciones (por ejemplo, Z procesadores de nodos de restricciones en The decoder circuit 1600 includes a decoder control module 1602, a message order module 1604, a first switching circuit 1621, an edge message memory V2C 1606, a vector processor of restriction nodes (eg, Z restriction node processors in

45 paralelo) 1609, un segundo circuito de conmutación 1620, la memoria de mensajes de aristas C2V 1607, un procesador de vectores de nodos de variables 1608 (por ejemplo, Z procesadores de nodos de variables en paralelo), una memoria de decisión hardware 1612, y un tercer conmutador 1622 acoplados juntos como se ilustra en la Fig. 16. 45 parallel) 1609, a second switching circuit 1620, the edge message memory C2V 1607, a vector processor of variable nodes 1608 (for example, Z parallel variable node processors), a hardware decision memory 1612 , and a third switch 1622 coupled together as illustrated in Fig. 16.

Diversas realizaciones de procesadores de nodos de restricciones individuales y procesadores de nodos de Various embodiments of individual restriction node processors and node node processors

50 variables individuales, Z de los cuales pueden usarse en paralelo para implementar el procesador de vectores de nodos de restricciones 1609 y el procesador de nodos de variables 1608, respectivamente, se describen en la Solicitud de Patente Provisional de los Estados Unidos 60/328.469, titulada "Procesadores de Nodos Para Uso en los Decodificadores de Comprobación de Paridad", que se presento el 10 de Octubre de 2001. Los inventores de la presente solicitud de patente son también los inventores nombrados de la solicitud de patente provisional 50 individual variables, Z of which can be used in parallel to implement the restriction node vector processor 1609 and the variable node processor 1608, respectively, are described in US Provisional Patent Application 60 / 328,469, entitled "Node Processors For Use in Parity Check Decoders", which was filed on October 10, 2001. The inventors of the present patent application are also the named inventors of the provisional patent application

55 incorporada. 55 built-in.

Para soportar la actualización independiente y/o en paralelo de mensajes de restricciones y variables en la realización de la Fig. 16 se usan memorias de mensajes de aristas 1606, 1607 y circuitos de conmutación 1620, 1621 separados para soportar las operaciones de procesamiento de nodos de restricciones y nodos de variables, respectivamente. Como en la realización de la Fig. 15, cada una de las memorias de mensajes 1606, 1607 son capaces de almacenar L (ZxK bits) mensajes de vectores. Cada uno de los mensajes de vectores, por ejemplo, las columnas de Z mensajes de K bits, en las memorias 1606, 1607 pueden leerse o escribirse en una simple operación de lectura o escritura. To support independent and / or parallel update of constraint and variable messages in the embodiment of Fig. 16, separate edge message memories 1606, 1607 and switching circuits 1620, 1621 are used to support node processing operations of constraints and variable nodes, respectively. As in the embodiment of Fig. 15, each of the message memories 1606, 1607 are capable of storing L (ZxK bits) vector messages. Each of the vector messages, for example, the columns of Z messages of K bits, in memories 1606, 1607 can be read or written in a simple read or write operation.

La memoria de mensajes de aristas V2C 1606 se usa para almacenar mensajes V2C y por lo tanto tiene una entrada de escritura acoplada a la salida del circuito de conmutación 1621 que recibe datos desde el procesador de vectores de nodos de variables 1608. La memoria de mensajes C2V 1607 se usa para almacenar mensajes de aristas C2V y por lo tanto tiene una entrada de escritura acoplada a la salida del procesador de vectores de nodos de restricciones 1609. Edge message memory V2C 1606 is used to store V2C messages and therefore has a write input coupled to the output of switching circuit 1621 that receives data from the variable node vector processor 1608. Message memory C2V 1607 is used to store C2V edge messages and therefore has a write input coupled to the output of the restriction node vector processor 1609.

Los conmutadores 1620 y 1621 se usan para acoplar el procesador de vectores de nodos de variables 1608 a la entrada de la memoria de mensajes de aristas V2C y la salida de la memoria de mensajes de aristas C2V, respectivamente. En una realización particular se almacenan vectores de mensajes en el orden de los encajes de restricciones de vectores. Los vectores de mensajes se escriben dentro de la memoria de mensajes de aristas C2V 1607 y se leen de la memoria de mensajes de aristas V2C 1606 en el orden de los encajes de restricciones de vectores, es decir, linealmente, de este modo no se requiere ningún control externo (la salida de índices de aristas desde el módulo de control del decodificador 1602 pasa a través del módulo de ordenación de mensajes 1604 sin cambios a su salida de índice de aristas de restricciones). Los vectores de mensajes se leen de la memoria de mensajes de aristas C2V 1607 y se escriben dentro de la memoria de mensajes de aristas V2C 1606 en el orden de encajes de variables de vectores. El módulo de ordenamiento de mensajes 1604 genera la señal de índices de aristas de variables que indica este ordenamiento. Obsérvese que esta señal controla la lectura de la memoria de mensajes de aristas de C2V 1607 y se suministra a la memoria de mensajes de aristas V2C 106 después de retardarse. El retardo da cuenta del tiempo requerido para el procesamiento realizado por los conmutadores 1620 y 1621 y el procesador de nodos de variables de vectores 1608. Este retardo puede ser una función del grado de nodo que se está procesando, como se indica en la Fig. 16 por la señal de grado de los nodos de variables. Switches 1620 and 1621 are used to couple the variable node vector processor 1608 to the input of the edge message memory V2C and the output of the edge message memory C2V, respectively. In a particular embodiment, message vectors are stored in the order of the vector constraints. The message vectors are written into the edge message memory C2V 1607 and read from the edge message memory V2C 1606 in the order of the vector restriction fittings, that is, linearly, in this way it is not required no external control (the output of edge indexes from the control module of decoder 1602 passes through the message order module 1604 without changes to its output of index of edge restrictions). Message vectors are read from edge message memory C2V 1607 and are written into edge message memory V2C 1606 in the order of vector variable fittings. The message ordering module 1604 generates the signal of indexes of edges of variables indicated by this ordering. Note that this signal controls the reading of the edge message memory of C2V 1607 and is supplied to the edge message memory V2C 106 after being delayed. The delay accounts for the time required for processing performed by switches 1620 and 1621 and the vector variable node processor 1608. This delay may be a function of the degree of node being processed, as indicated in Fig. 16 by the degree signal of the variable nodes.

Para evitar los retardos de ejecución simultánea del procesamiento debidos a retardos variables se ordenan ambos nodos de restricciones y variables de modo que los nodos del mismo grado se procesan de una forma contigua. Puede conseguirse una reducción adicional de los retardos de ejecución simultánea que se producen en la frontera de grupos de nodos con diferentes grados clasificando los grupos de nodos por el grado de una forma monótona, por ejemplo, aumentando o disminuyendo el orden del grado. Para la simplicidad de implementación, las realizaciones 900, 1500 y 1600 asumen aumentar el orden de grado. To avoid the delays of simultaneous execution of the processing due to variable delays, both restriction and variable nodes are ordered so that the nodes of the same degree are processed in a contiguous manner. An additional reduction of the simultaneous execution delays that occur at the border of groups of nodes with different degrees can be achieved by classifying the groups of nodes by the degree of a monotonous form, for example, by increasing or decreasing the order of the degree. For simplicity of implementation, embodiments 900, 1500 and 1600 assume increasing the order of grade.

En la realización particular ilustrada en la Fig. 16 los vectores se almacenan en el orden de rotación de las restricciones de vectores. El conmutador 1620 gira los mensajes en cada uno de los vectores en una rotación variable a medida que cada uno de los mensajes de vectores C2V procede al procesador de vectores de nodos de variables 1608 y a continuación el conmutador 1621 aplica la rotación inversa al mensaje de vectores V2C saliente correspondiente a la misma arista de vectores. La señal de decadencia suministrada al conmutador 1620 se suministra al conmutador 1621 a través del circuito de inversión de rotación 1624 después de un retardo igualado al tiempo de procesamiento en el procesador de nodos de restricciones de vectores. Este retardo puede depender del grado de los nodos de restricciones, como se indica por la salida de la señal de grado de los nodos de restricciones por la memoria de grado 1610. In the particular embodiment illustrated in Fig. 16 the vectors are stored in the order of rotation of the vector constraints. The switch 1620 rotates the messages in each of the vectors in a variable rotation as each of the vector messages C2V proceeds to the vector processor of variable nodes 1608 and then the switch 1621 applies the reverse rotation to the vector message Outgoing V2C corresponding to the same vector edge. The decay signal supplied to the switch 1620 is supplied to the switch 1621 through the rotation reversing circuit 1624 after a delay equal to the processing time in the vector restriction node processor. This delay may depend on the degree of the restriction nodes, as indicated by the output of the degree signal of the restriction nodes by the 1610 degree memory.

El decodificador 1600 incluye un módulo de control del decodificador 1602. El módulo de control del decodificador opera de forma similar al módulo de control tratado anteriormente 1502. Sin embargo, en 1602 no se genera ninguna señal de control de C/V. La función de generación del índice de aristas puede proporcionarse por un contador que circula a través de todo el conjunto de aristas de vectores antes de comenzar de nuevo. The decoder 1600 includes a decoder control module 1602. The decoder control module operates similarly to the control module discussed above 1502. However, in 1602 no C / V control signal is generated. The edge index generation function can be provided by a counter that circulates through the whole set of vector edges before starting over.

Además de sacar las decisiones software, se generan decisiones hardware, una por arista, por cada una de las Z unidades de procesamiento de nodos de variables en el procesador de nodos de variables de vectores 1608 cada vez que se genera un mensaje V2C de vectores. Mientras que los mensajes de vectores se escriben dentro de la memoria de mensajes de aristas V2C 1606, las salidas de decisiones hardware de Z x 1 bit se escriben dentro de la memoria de salida de decisiones hardware 1612 después de girarse por el conmutador 1622. El conmutador 1622 y la memoria de decisión hardware 1612 operan bajo las mismas señales de control que el conmutador 1621 y la memoria de mensajes de aristas V2C 1606, respectivamente. In addition to making the software decisions, hardware decisions are generated, one per edge, for each of the Z variable node processing units in the vector variable node processor 1608 each time a vector V2C message is generated. While vector messages are written into the edge message memory V2C 1606, the hardware decision outputs of Z x 1 bit are written into the hardware decision output memory 1612 after being rotated by the switch 1622. The Switch 1622 and hardware decision memory 1612 operate under the same control signals as Switch 1621 and edge message memory V2C 1606, respectively.

Los vectores girados resultantes de Z x 1 se suministran al verificador de comprobación de paridad de vectores 1614 que incluye Z verificadores de comprobación de paridad conectados en paralelo. El verificador 1614 determina si se satisfacen las comprobaciones de paridad y si todas se satisfacen entones se genera una señal de convergencia y se envía al módulo de control del decodificador. En respuesta a la recepción de la señal indicando la convergencia, el módulo de control del decodificador para la decodificación de la palabra de código recibida. En la realización 1600 la señal de detección de convergencia está disponible una iteración después de que se ha escrito una palabra de código en la memoria intermedia de salida ya que la verificación de restricciones para los datos desde la iteración N se hace durante la iteración N +1 y la señal de convergencia está disponible después de la terminación de la iteración N + 1. The rotated vectors resulting from Z x 1 are supplied to the vector parity check verifier 1614 which includes Z parity check verifiers connected in parallel. Verifier 1614 determines whether parity checks are satisfied and if all are satisfied then a convergence signal is generated and sent to the control module of the decoder. In response to the reception of the signal indicating convergence, the control module of the decoder for decoding the received code word. In embodiment 1600 the convergence detection signal is available one iteration after a code word has been written in the output buffer since the verification of restrictions for the data from the iteration N is done during the iteration N + 1 and the convergence signal is available after the termination of the N + 1 iteration.

En el decodificador 1600 que emplea diferente circuitería de detección de convergencia, la Fig. 17 ilustra una realización similar para el decodificador 1700, la verificación de restricciones se cumple "sobre la marcha" a medida que los valores de salida X de ZxK bits se escriben en la memoria intermedia de salida 1716. En este caso el bloque de memoria 1712 sigue el estado de las restricciones según se actualizan las restricciones de vectores por la salida de decisión hardware desde el procesador de nodos de variables 1708. Cada una de las localizaciones de memoria del estado de restricción corresponde a una restricción de comprobación de la paridad de la palabra de código. En la última actualización de cualquier localización de estado de restricción se verifican estos valores de comprobación de paridad. Si se satisfacen todas las verificaciones durante la iteración N a continuación se generará una señal de convergencia y la salida por el verificador de comprobación de paridad de vectores 1714 inmediatamente después de la iteración N. Esto calificará para módulo de control del decodificador 1702 que los datos en la memoria intermedia de salida 1716 son válidos. En la realización de la Fig. 17, el módulo de reordenamiento de mensajes 1704 genera una señal adicional que define el índice de nodos de restricciones (en oposición al índice de aristas) que no se genera en la realización de la Fig. 16. El índice de los nodos de restricciones define el destino de los nodos de restricciones del mensaje V2C actual. Este campo sirve como un índice para la memoria de estado de restricciones 1712 a la cual se suministra. In the decoder 1600 which employs different convergence detection circuitry, Fig. 17 illustrates a similar embodiment for the decoder 1700, the constraint verification is carried out "on the fly" as the output values X of ZxK bits are written in the output buffer 1716. In this case the memory block 1712 follows the state of the restrictions as vector restrictions are updated by the hardware decision output from the variable node processor 1708. Each of the locations of Restriction status memory corresponds to a restriction of checking the parity of the code word. In the last update of any restriction status location, these parity check values are verified. If all verifications are satisfied during iteration N then a convergence signal will be generated and output by vector parity check verifier 1714 immediately after iteration N. This will qualify for decoder control module 1702 that the data in the output buffer 1716 are valid. In the embodiment of Fig. 17, the message rearrangement module 1704 generates an additional signal that defines the index of restriction nodes (as opposed to the edge index) that is not generated in the embodiment of Fig. 16. The Restriction node index defines the destination of the restriction nodes of the current V2C message. This field serves as an index for restriction status memory 1712 to which it is supplied.

Aunque requieren un poco más de circuitería que la realización de la Fig. 15, las realizaciones de las Fig. 16 y la Fig. 17 tienen la ventaja de un uso más eficaz de los procesadores de los nodos de vectores de restricciones y de variables 1609/1709, 1608/1708 ya que ambos procesadores de nodos de vectores se utilizan totalmente durante cada una de las iteraciones del procesamiento. Además, el tiempo de decodificación se reduce en comparación con la realización de la Fig. 15 ya que el procesamiento de los nodos de restricciones y variables se realiza en paralelo, por ejemplo simultáneamente. Although they require a little more circuitry than the embodiment of Fig. 15, the embodiments of Fig. 16 and Fig. 17 have the advantage of more efficient use of the processors of the restriction vector nodes and variables 1609 / 1709, 1608/1708 since both vector node processors are fully utilized during each of the processing iterations. In addition, the decoding time is reduced compared to the embodiment of Fig. 15 since the processing of the restriction and variable nodes is carried out in parallel, for example simultaneously.

Los procedimientos de decodificación descritos anteriormente permiten que se realice la decodificación del paso de mensajes, por ejemplo la decodificación LDPC usando software y ordenadores de propósito general capaces de soportar las operaciones de SIMD. En tales realizaciones, uno o más procesadores en paralelo sirven como unidades de procesamiento de vectores, o puede usarse hardware dentro de un procesador único para realizar operaciones de procesamiento de múltiples vectores en paralelo. En tales realizaciones, la memoria de aristas, el mapa de permutaciones y la información sobre el número de mensajes por nodo pueden todos almacenarse en una memoria común, por ejemplo la memoria principal de los ordenadores. La lógica del control de paso de mensajes y la lógica de control del decodificador pueden implementarse como rutinas software ejecutadas sobre la unidad de procesamiento del ordenador. Además, el dispositivo de conmutación puede implementarse usando software y una o más instrucciones de procesamiento SIMD. The decoding procedures described above allow decoding of message passing, for example LDPC decoding using general purpose software and computers capable of supporting SIMD operations. In such embodiments, one or more parallel processors serve as vector processing units, or hardware can be used within a single processor to perform processing operations of multiple vectors in parallel. In such embodiments, edge memory, permutations map and information on the number of messages per node can all be stored in a common memory, for example the main memory of the computers. The message passing control logic and the decoder control logic can be implemented as software routines executed on the computer processing unit. In addition, the switching device can be implemented using software and one or more SIMD processing instructions.

Los procedimientos de decodificación LDPC descritos anteriormente permiten la realización de la decodificación de LDPC sobre diversas plataformas de hardware tales como las Disposiciones de Puertas Programables en Campo o en un Circuito Integrado de Aplicación Específica. La presente invención es especialmente útil en estas configuraciones donde puede explotarse explícitamente el paralelismo simple. The LDPC decoding procedures described above allow the realization of LDPC decoding on various hardware platforms such as Field Programmable Door Arrangements or in a Specific Application Integrated Circuit. The present invention is especially useful in these configurations where simple parallelism can be explicitly exploited.

Numerosas variaciones adicionales sobre los procedimientos de decodificación y el aparato de la presente invención serán evidentes para los especialistas en la técnica a la vista de la descripción anterior de la invención. Tales variaciones se considerarán dentro del alcance de la invención como se define por las reivindicaciones adjuntas. Numerous additional variations on the decoding procedures and apparatus of the present invention will be apparent to those skilled in the art in view of the foregoing description of the invention. Such variations will be considered within the scope of the invention as defined by the appended claims.

Claims (29)

REIVINDICACIONES
1.one.
Un aparato (1500, 1600, 1700) para la realización de operaciones de decodificación de paso de mensajes usando gráficos LDPC convertidos a vectores que representan matrices de comprobación de paridad elevadas por lo que, en una matriz de comprobación de paridad elevada los elementos cero de una matriz de comprobación de paridad H de un código LDPC proyectado se reemplazan con matrices de Z x Z ceros y los elementos 1 de la matriz de comprobación de paridad H se reemplazan con matrices de permutación de Z x Z comprendiendo el aparato:  An apparatus (1500, 1600, 1700) for performing message step decoding operations using LDPC graphics converted to vectors that represent high parity check matrices so that, in a high parity check matrix the zero elements of a parity check matrix H of a projected LDPC code is replaced with matrices of Z x Z zeros and elements 1 of the parity check matrix H are replaced with permutation matrices of Z x Z comprising the apparatus:
una memoria (1506) incluyendo un conjunto de localizaciones de memoria para almacenar L conjuntos de Z mensajes de K bits, donde Z es un número entero positivo mayor de uno y K y L son números enteros positivos distintos de cero; un procesador de vectores de nodos (1508) incluyendo Z unidades de procesamiento de nodos en paralelo, cada una de las unidades de procesamiento de nodos (1508) para realizar al menos una de las operaciones de procesamiento de nodos de restricciones y una operación de procesamiento de nodos de variables; y un dispositivo de conmutación (1520) acoplado a la memoria (1506) y al procesador de vectores de nodos (1508), el dispositivo de conmutación (1520) para pasar conjuntos de Z mensajes de K bits, pasado cada conjunto de Z mensajes de K bits en paralelo entre dicha memoria y dicho procesador de vectores de nodos y para reordenar los mensajes en al menos uno de dichos conjuntos de mensajes en respuesta a la información de control de conmutación, un módulo de ordenamiento de mensajes (1504) acoplado a dicho dispositivo de conmutación para generar dicha información de control de conmutación usada para controlar el reordenamiento de mensajes en dicho, al menos, un conjunto de mensajes, en el que el módulo de reordenamiento de mansajes (1504) está además acoplado a dicha memoria y genera secuencialmente conjuntos de indicadores, controlando cada uno de los identificadores de conjunto la memoria para acceder a las localizaciones de memoria correspondientes a uno de dichos conjuntos de mensajes en una operación de lectura o escritura única por la que, uno de dichos conjuntos de Z mensajes de K bits se escribe o se lee como una unidad única accediendo a todos los Z mensajes de dicho conjunto usando una instrucción SIMD. a memory (1506) including a set of memory locations for storing L sets of Z messages of K bits, where Z is a positive integer greater than one and K and L are positive integers other than zero; a node vector processor (1508) including Z parallel node processing units, each of the node processing units (1508) to perform at least one of the restriction node processing operations and a processing operation of variable nodes; and a switching device (1520) coupled to memory (1506) and to the node vector processor (1508), the switching device (1520) for passing sets of Z messages of K bits, passing each set of Z messages of K bits in parallel between said memory and said node vector processor and to reorder the messages in at least one of said message sets in response to the switching control information, a message order module (1504) coupled to said switching device for generating said switching control information used to control the reordering of messages in said at least one set of messages, in which the message reordering module (1504) is further coupled to said memory and generates sequentially sets of indicators, each of the set identifiers controlling the memory to access the memory locations corresponding to one of said sets of messages in a single read or write operation whereby one of said sets of Z messages of K bits is written or read as a single unit accessing all Z messages of said set using a SIMD instruction.
2.2.
El aparato (1500) de la reivindicación 1, en el que el dispositivo de conmutación (1520) incluye circuitería para realizar una operación de rotación de mensajes para reordenar los mensajes incluidos en un conjunto de mensajes.  The apparatus (1500) of claim 1, wherein the switching device (1520) includes circuitry to perform a message rotation operation to reorder the messages included in a set of messages.
3.3.
El aparato (1500) de la reivindicación 1, en el que el módulo de reordenamiento de mensajes (1504) almacena información sobre el orden de los conjuntos de los mensajes a leer de la memoria y la información que indica qué reordenamiento de mensajes se realizará por dicho conmutador sobre los conjuntos individuales de mensajes leídos de la memoria.  The apparatus (1500) of claim 1, wherein the message reordering module (1504) stores information about the order of the sets of the messages to be read from memory and the information indicating which message reordering will be performed by said switch on the individual sets of messages read from memory.
4.Four.
El aparato (1500) de la reivindicación 1, en el que dicho identificador de conjunto es una simple dirección de memoria.  The apparatus (1500) of claim 1, wherein said set identifier is a simple memory address.
5.5.
El aparato (1500) de la reivindicación 1, en el que dicha pluralidad de unidades de procesamiento de nodos incluye Z unidades de procesamiento de nodos dispuestas en paralelo, funcionando cada una de las Z unidades de procesamiento de nodos en paralelo para procesar un mensaje diferente en cada uno de los conjuntos de Z mensajes pasados entre dicha memoria y dicho procesador de nodos.  The apparatus (1500) of claim 1, wherein said plurality of node processing units includes Z node processing units arranged in parallel, each of the Z node processing units running in parallel to process a different message in each of the sets of Z messages passed between said memory and said node processor.
6.6.
El aparato (1500) de la reivindicación 5, en el que dicha memoria (1506) incluye una entrada de dirección que permite dirigirse a cada uno de los conjuntos de mensajes como una unidad posibilitando por lo tanto la lectura de un conjunto de mensajes desde dicha memoria en una única operación de lectura de SMID.  The apparatus (1500) of claim 5, wherein said memory (1506) includes an address entry that allows each of the message sets to be addressed as a unit thereby enabling the reading of a set of messages from said memory in a single SMID read operation.
7.7.
El aparato de la reivindicación 5, en el que dicha memoria (1506) incluye una entrada de dirección que permite dirigirse a cada uno de los conjuntos de mensajes como dicha unidad posibilitando por lo tanto que un conjunto de mensajes se escriban dentro de dicha memoria en una única operación de escritura de SMID.  The apparatus of claim 5, wherein said memory (1506) includes an address entry that allows each of the message sets to be addressed as said unit thereby enabling a set of messages to be written into said memory in a single SMID write operation.
8.8.
El aparato (1500) de la reivindicación 5,  The apparatus (1500) of claim 5,
en el que el dispositivo de control del decodificador está además acoplado a un dispositivo de control del paso de mensajes; y en el que el dispositivo de control del paso de mensajes especifica un orden diferente en el que se leerán cada uno de los L conjuntos de Z mensajes de la memoria durante el modo de nodos de variables de la operación de procesamiento que durante el modo de nodos de restricciones de la operación de procesamiento. wherein the decoder control device is further coupled to a message passing control device; and in which the message passing control device specifies a different order in which each of the L sets of Z messages will be read from memory during the mode of variable nodes of the processing operation than during the mode of processing. restriction nodes of the processing operation.
9.9.
El aparato (1500) de la reivindicación 1, que comprende además un módulo de control del decodificador (1502) acoplado al módulo de ordenamiento de mensajes (1504), incluyendo el módulo de control del decodificador medios para el suministro de información al módulo de ordenamiento de mensajes utilizado para controlar el orden en el que se leerá cada uno de los L conjuntos de Z mensajes de dicha memoria.  The apparatus (1500) of claim 1, further comprising a decoder control module (1502) coupled to the message order module (1504), including the decoder control module means for supplying information to the ordering module of messages used to control the order in which each of the L sets of Z messages in that memory will be read.
10.10.
El aparato (1500) de la reivindicación 9, en el que el módulo de control del decodificador (1502) incluye además  The apparatus (1500) of claim 9, wherein the decoder control module (1502) further includes
medios para el suministro de un índice de aristas al módulo de ordenamiento de mensajes (1504) que controla la generación de los identificadores de conjuntos suministrados a dicha memoria. means for supplying an edge index to the message ordering module (1504) that controls the generation of the set identifiers supplied to said memory.
11.eleven.
El aparato (1500) de la reivindicación 10, que comprende además una memoria de grados (1510) acoplada con el procesador de vectores de nodos (1508) para el almacenamiento de un conjunto de información del grado de los nodos.  The apparatus (1500) of claim 10, further comprising a degree memory (1510) coupled with the node vector processor (1508) for storing a set of information on the degree of the nodes.
12.12.
El aparato (1500) de la reivindicación 11, en el que el módulo de control (1502) genera además un índice de nodos usado para determinar qué información del grado de los nodos en el conjunto almacenado de la información del grado de los nodos se aplicará al procesador de vectores de nodos en cualquier momento determinado.  The apparatus (1500) of claim 11, wherein the control module (1502) further generates an index of nodes used to determine what information of the degree of the nodes in the stored set of information of the degree of the nodes will be applied to the node vector processor at any given time.
13.13.
El aparato (1600) de la reivindicación 1, que comprende además:  The apparatus (1600) of claim 1, further comprising:
un segundo procesador de vectores de nodos (1609, 1608) acoplado a dicha memoria, incluyendo el segundo procesador de vectores de nodos unidades de procesamiento de nodos, cada una de las unidades de procesamiento de nodos para realizar una operación de procesamiento de nodos de restricciones, en el que dicho procesador de vectores de nodos es un procesador de nodos de variables para la realización de las operaciones de procesamiento de comprobación de paridad del decodificador de nodos de variables; en el que dicho segundo procesador de nodos es un procesador de nodos de restricciones (1609) para la realización de las operaciones de procesamiento del decodificador de comprobación de la paridad de nodos de restricciones. a second node vector processor (1609, 1608) coupled to said memory, including the second node vector processor node processing units, each of the node processing units to perform a restriction node processing operation , wherein said node vector processor is a variable node processor for performing the parity check processing operations of the variable node decoder; wherein said second node processor is a restriction node processor (1609) for carrying out the processing operations of the check box of the parity of restriction nodes.
14.14.
El aparato (1600) de la reivindicación 13, que comprende además:  The apparatus (1600) of claim 13, further comprising:
la memoria adicional (1607, 1606) que acopla dicho procesador de vectores de nodos a dicho segundo procesador de vectores de nodos, incluyendo la memoria adicional un conjunto de localizaciones de memoria para el almacenamiento de L conjuntos de Z mensajes de K bits. the additional memory (1607, 1606) that couples said node vector processor to said second node vector processor, the additional memory including a set of memory locations for storing L sets of Z messages of K bits.
15.fifteen.
El aparato (1600) de la reivindicación 14, que comprende además:  The apparatus (1600) of claim 14, further comprising:
un segundo dispositivo de conmutación (1620, 1621) que acopla dicho procesador de vectores de nodos a dicha memoria adicional, un segundo dispositivo de conmutación para pasar conjuntos de Z mensajes de K bits entre dicho procesador de vectores de nodos y dicha memoria adicional y para reordenar los mensajes en al menos uno de los conjuntos de mensajes pasado por el segundo conmutador. a second switching device (1620, 1621) that couples said node vector processor to said additional memory, a second switching device for passing sets of Z K bit messages between said node vector processor and said additional memory and for reorder the messages in at least one of the message sets passed by the second switch.
16.16.
El aparato (1600) de la reivindicación 13, que comprende además:  The apparatus (1600) of claim 13, further comprising:
un verificador de comprobación de paridad (1614), acoplado a dicho procesador de vectores de nodos, para determinar a partir de una salida de cada una de las unidades de procesamiento incluidas en el mismo, cuándo se ha completado satisfactoriamente la operación de decodificación de comprobación de paridad. a parity check verifier (1614), coupled to said node vector processor, to determine from an output of each of the processing units included therein, when the check decoding operation has been successfully completed of parity
17.17.
Un procedimiento para la realización del procesamiento de decodificación del paso de mensajes para la decodificación de gráficos de LDPC convertidos a vectores que representan matrices de comprobación de paridad elevadas por lo que en una matriz de comprobación de paridad elevada, los elementos cero de una matriz de comprobación de paridad H de un código LDPC proyectado se reemplazan con matrices de Z x Z ceros y los elementos 1 de la matriz de comprobación de paridad H se reemplazan con matrices de permutación de Z x Z que comprenden las etapas de:  A procedure for performing the decoding processing of the message passing for decoding LDPC graphics converted to vectors representing high parity check matrices so that in a high parity check matrix, the zero elements of a matrix of parity check H of a projected LDPC code is replaced with matrices of Z x Z zeros and elements 1 of the parity check matrix H are replaced with permutation matrices of Z x Z comprising the steps of:
almacenar L conjuntos de mensajes de K bits en una memoria (1506), incluyendo cada uno de los conjuntos de mensajes de K bits en primer lugar Z mensajes, donde Z es un número entero positivo mayor que uno y K y L son números enteros positivos distintos de cero; leer uno de dichos conjuntos de mensajes de K bits de la memoria (1506); realizar una operación de reordenamiento de mensajes en dicho conjunto de mensajes de K bits leídos para producir un conjunto reordenado de Z mensajes de K bits; suministrar, en paralelo, los Z mensajes en el conjunto reordenado de mensajes a un procesador de vectores de nodos (1508); y que opera el procesador de vectores de nodos (1508) para realizar las operaciones del decodificador de paso de mensajes usando Z mensajes suministrados como entrada, incluyendo dicho procesador de vectores de nodos (1508) Z unidades de procesamiento en paralelo, por lo que cada una de las unidades de procesamiento de nodos realiza al menos una operación de procesamiento de nodos de restricciones y una operación de procesamiento de nodos de variables, comprendiendo el procedimiento además: storing L sets of K bit messages in a memory (1506), including each of the K bit message sets first Z messages, where Z is a positive integer greater than one and K and L are positive integers nonzero; read one of said sets of K-bit messages from memory (1506); performing a message reordering operation on said set of K bit messages read to produce a rearranged set of Z messages of K bits; supply, in parallel, the Z messages in the reordered set of messages to a node vector processor (1508); and that the node vector processor (1508) operates to perform the message passing decoder operations using Z messages supplied as input, including said node vector processor (1508) Z parallel processing units, whereby each one of the node processing units performs at least one restriction node processing operation and one variable node processing operation, the procedure further comprising: generar un identificador de conjunto indicando el conjunto de Z mensajes a leer de la memoria (1506), en el que la etapa de leer uno de dichos conjuntos de mensajes de K bits incluye: generating a set identifier indicating the set of Z messages to be read from memory (1506), in which the step of reading one of said K bit message sets includes: realizar una única operación de lectura usando dicho identificador de conjunto para acceder con dicha operación de lectura única a todos los Z mensajes de K bits de dicho conjunto como una única unidad usando una instrucción SMID. performing a single read operation using said set identifier to access with said unique read operation all Z messages of said set as a single unit using a SMID instruction.
18.18.
El procedimiento de la reivindicación 17, en el que dichas operaciones del decodificador de paso de mensaje generan un conjunto de Z mensajes de decodificador a partir de los Z mensajes en el conjunto de mensajes reordenados suministrado.  The method of claim 17, wherein said message step decoder operations generate a set of Z decoder messages from the Z messages in the set of rearranged messages supplied.
19.19.
El procedimiento de la reivindicación 17, que comprende además:  The method of claim 17, further comprising:
realizar una segunda operación de reordenamiento de mensajes, realizándose la segunda operación de reordenamiento de mensajes sobre el conjunto generado de Z mensajes del decodificador para producir un conjunto reordenado de mensajes del decodificador generados. Perform a second message reordering operation, the second message reordering operation being performed on the generated set of Z messages of the decoder to produce a rearranged set of generated decoder messages.
20.twenty.
El procedimiento de la reivindicación 19, que comprende además:  The method of claim 19, further comprising:
almacenar el conjunto reordenado de mensajes del decodificador generados en dicha memoria. storing the reordered set of decoder messages generated in said memory.
21. twenty-one.
El procedimiento de la reivindicación 20, en el que la etapa de almacenar el conjunto reordenado de mensajes del decodificador generados incluye realizar una operación de escritura SMID para escribir dicho conjunto reordenado de mensajes del decodificador generados en la memoria. The method of claim 20, wherein the step of storing the reordered set of generated decoder messages includes performing a SMID write operation to write said reordered set of decoder messages generated in memory.
22.22
El procedimiento de la reivindicación 19, en el que la etapa de realizar una segunda operación de reordenamiento de mensajes incluye realizar la inversa de la operación de reordenamiento de mensajes realizado sobre dicho conjunto de mensajes de K bits leídos desde la memoria.  The method of claim 19, wherein the step of performing a second message reordering operation includes performing the inverse of the message reordering operation performed on said set of K bit messages read from memory.
23.2. 3.
El procedimiento de la reivindicación 17, que comprende además:  The method of claim 17, further comprising:
acceder a la información de permutación del conjunto de mensajes almacenados; y en el que la etapa de realización de una operación de reordenamiento de mensajes incluye la etapa de: realizar dicho reordenamiento como una función de la información de permutación del conjunto de mensajes almacenados accedidos. access the permutation information of the set of stored messages; Y in which the stage of carrying out a message reordering operation includes the stage of: perform said reordering as a function of the permutation information of the message set stored accessed.
24.24.
El procedimiento de la reivindicación 22, en el que dicha información de permutación del conjunto de mensajes incluye información de rotación cíclica.  The method of claim 22, wherein said message set permutation information includes cyclic rotation information.
25.25.
El procedimiento de la reivindicación 17, en el que dichas operaciones del decodificador de paso de mensajes son operaciones de procesamiento de nodos de variables, incluyendo cada una de las operaciones de procesamiento de nodos de variables un valor de decisión, y en el que el procedimiento comprende además:  The method of claim 17, wherein said message passing decoder operations are variable node processing operations, each of the variable node processing operations including a decision value, and wherein the procedure It also includes:
examinar los valores de decisión generados operando el procesador de vectores para determinar si se ha satisfecho una condición de decodificación. examine the decision values generated by operating the vector processor to determine if a decoding condition has been satisfied.
26.26.
Un procedimiento de realización del procesamiento de decodificador de paso de mensajes para decodificar los gráficos LDPC convertidos a vectores que representan las matrices de comprobación de paridad elevadas por lo que en una matriz de comprobación de paridad elevada, los elementos cero de una matriz de comprobación de paridad H de un código LDPC proyectado se reemplazan con matrices de Z x Z ceros y los elementos 1 de la matriz de comprobación de paridad H se reemplazan con matrices de permutación de Z x Z, comprendiendo el procedimiento las etapas de:  A method of performing the message passing decoder processing to decode the LDPC graphics converted to vectors representing the high parity check matrices so that in a high parity check matrix, the zero elements of a check check matrix parity H of a projected LDPC code is replaced with matrices of Z x Z zeros and elements 1 of the parity check matrix H are replaced with permutation matrices of Z x Z, the procedure comprising the steps of:
operar un procesador de vectores de nodos (1508) para generar un conjunto de Z mensajes de K bits, a almacenar en un dispositivo de memoria (1506) para almacenar L conjuntos de Z mensajes de K bits, donde Z es un número entero positivo mayor de uno y K y L son números enteros positivos distintos de cero, incluyendo dicho procesador de vectores de nodos (1508) Z unidades de procesamiento en paralelo, por lo que cada una de las unidades de procesamiento de nodos realiza al menos una de las operaciones de procesamiento de nodos de restricciones y una operación de procesamiento de nodos de variables; realizar una operación de reordenamiento de mensajes en el conjunto generado de Z mensajes de K bits para producir un conjunto reordenado de Z mensajes de K bits; realizar una única operación de escritura para almacenar el conjunto reordenado de Z mensajes de K bits en dicho dispositivo de memoria (1506), en el que la etapa de realizar una operación de escritura única para almacenar el conjunto de Z mensajes de K bits reordenados comprende realizar una única operación de escritura usando un identificador de conjunto para escribir con dicha única operación de escritura todos los Z mensajes de K bits de dicho conjunto reordenado como una única usando una instrucción SIMD. operate a node vector processor (1508) to generate a set of Z K-bit messages, to be stored in a memory device (1506) to store L sets of Z K-bit messages, where Z is a larger positive integer of one and K and L are non-zero positive integers, said node vector processor (1508) Z parallel processing units, whereby each of the node processing units performs at least one of the operations of restriction node processing and a variable node processing operation; perform a message reordering operation on the generated set of Z K bit messages to produce a reordered set of Z K bit messages; performing a single write operation to store the rearranged set of Z messages of K bits in said memory device (1506), in which the step of performing a single write operation to store the set of Z messages of K bits reordered comprises perform a single write operation using a set identifier to write with said single write operation all Z messages of said reordered set as a single using a SIMD instruction.
27.27.
El procedimiento de la reivindicación 26, en el que la etapa de operar el procesador de vectores de nodos para generar un conjunto de Z mensajes de K bits, incluye la etapa de:  The method of claim 26, wherein the step of operating the node vector processor to generate a set of Z messages of K bits, includes the step of:
realizar, en paralelo, las Z operaciones de procesamiento de nodos, generando cada una de las operaciones de procesamiento de nodos un mensaje en dicho conjunto de Z mensajes de K bits. Perform, in parallel, the Z node processing operations, each of the node processing operations generating a message in said set of Z K-bit messages.
28.28.
El procedimiento de la reivindicación 26, en el que las Z operaciones de procesamiento de nodos son operaciones de procesamiento de nodos de variables.  The method of claim 26, wherein the Z node processing operations are variable node processing operations.
29.29.
El procedimiento de la reivindicación 28, en el que las Z operaciones de procesamiento de nodos son operaciones de procesamiento de nodos de restricciones.  The method of claim 28, wherein the Z node processing operations are restriction node processing operations.
5 30. El procedimiento de la reivindicación 28, en el que realizar una operación de reordenamiento de mensajes en el conjunto generado de Z mensajes de K bits incluye: The method of claim 28, wherein performing a message reordering operation in the generated set of Z K bit messages includes: girar los mensajes en el conjunto de Z mensajes de K bits realizando una operación de conmutación para reordenar los mensajes en el conjunto de mensajes. rotate the messages in the set of Z messages of K bits performing a switching operation to reorder the messages in the message set. 10 10
ES02739608T 2001-06-15 2002-05-31 PROCEDURE AND APPLIANCE TO DECODE LDPC CODES. Expired - Lifetime ES2365131T3 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US29848001P 2001-06-15 2001-06-15
US298480P 2001-06-15
US975331 2001-10-10

Publications (1)

Publication Number Publication Date
ES2365131T3 true ES2365131T3 (en) 2011-09-22

Family

ID=36936241

Family Applications (1)

Application Number Title Priority Date Filing Date
ES02739608T Expired - Lifetime ES2365131T3 (en) 2001-06-15 2002-05-31 PROCEDURE AND APPLIANCE TO DECODE LDPC CODES.

Country Status (2)

Country Link
CN (1) CN1825771A (en)
ES (1) ES2365131T3 (en)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103430472B (en) * 2010-10-08 2017-05-24 黑莓有限公司 Message rearrangement for improved code performance
US8769365B2 (en) 2010-10-08 2014-07-01 Blackberry Limited Message rearrangement for improved wireless code performance
US9944520B2 (en) * 2013-01-15 2018-04-17 Alcatel Lucent Syndrome of degraded quantum redundancy coded states

Also Published As

Publication number Publication date
CN1825771A (en) 2006-08-30

Similar Documents

Publication Publication Date Title
ES2516765T3 (en) Procedures and apparatus for decoding LDPC codes
US6957375B2 (en) Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation
US7627801B2 (en) Methods and apparatus for encoding LDPC codes
KR100899738B1 (en) Ldpc decoder and decoding based on node memory
ES2529182T3 (en) Structured LDPC design with grouping vector rows
US7376885B2 (en) Memory efficient LDPC decoding methods and apparatus
ES2356767T3 (en) NODE PROCESSORS FOR USE IN PARITY CONTROL DECODERS.
US7631241B2 (en) Apparatus and method for decoding low density parity check codes
ES2673513T3 (en) Procedures that use FEC codes with permanent inactivation of symbols for coding and decoding processes
JP4339886B2 (en) Method and apparatus for performing low density parity check (LDPC) code operations using multi-level permutation
US6865710B2 (en) Butterfly processor for telecommunications
JP5542140B2 (en) Decoding circuit and encoding circuit
WO2004019268A1 (en) Methods and apparatus for encoding ldpc codes
CN109586731A (en) System and method for decoding and error code
ES2365131T3 (en) PROCEDURE AND APPLIANCE TO DECODE LDPC CODES.
US20080229170A1 (en) Parallel arrangement of serial concatenated convolutional code decoders with optimized organization of data for efficient use of memory resources