FR2799592A1 - Procede de construction et de codage simple et systematique de codes ldpc - Google Patents
Procede de construction et de codage simple et systematique de codes ldpc Download PDFInfo
- Publication number
- FR2799592A1 FR2799592A1 FR9912710A FR9912710A FR2799592A1 FR 2799592 A1 FR2799592 A1 FR 2799592A1 FR 9912710 A FR9912710 A FR 9912710A FR 9912710 A FR9912710 A FR 9912710A FR 2799592 A1 FR2799592 A1 FR 2799592A1
- Authority
- FR
- France
- Prior art keywords
- matrix
- columns
- symbols
- zero
- rows
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1177—Regular LDPC codes with parity-check matrices wherein all rows and columns have the same row weight and column weight, respectively
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
Le procédé permet la construction de codes LDPC comportant N symboles dont K libres chaque code étant défini par une matrice de contrôle A comportant M=N-K lignes N colonnes et t symboles non nuls dans chaque colonne. Il consiste :- à attribuer à toutes les lignes de la matrice de contrôle A un même nombre de symboles non nuls,- à prendre comme nombre de symboles t un nombre impair le plus petit possible,- à définir les colonnes de façon que deux colonnes quelconques de la matrice de contrôle A n'aient au plus qu'une valeur non nulle,- et à définir les lignes de façon que deux lignes de la matrice de contrôle A n'aient qu'une valeur commune non nulle.Application : Transmissions radio.
Description
<Desc/Clms Page number 1>
Procédé de construction et de codage simple et systématique de codes LDPC.
La présente invention concerne un procédé de construction et de codage simple et systématique de codes connus sous l'abréviation anglosaxonne LDPC de "Low Density Parity Check".
Les codes de Gallager, proposés vers 1963, sont à l'origine des codes LDPC actuellement envisagés comme alternative aux turbo-codes.
Un article publié dans la revue IEEE Transaction on Information Theory Vol 45 n 2 Mars 1999 de M J C MacKay ayant pour titre "Good Error Correcting Codes Based on very Sparre Matrices" présente des résultats intéressants concernant ces codes, en particulier le fait que: - ce sont asymptotiquement pour des blocs de taille élevée de "très bons codes" - le décodage pondéré ("soft decoding", ou "décodage souple") est facile à mettre en oeuvre.
Mais il n'existe pas de méthode autre qu'heuristique pour les construire.
Suivant cette technique de codage un code (N, K) comportant N symboles dont K libres est défini par sa matrice de contrôle de parité A, comportant M = N - K lignes et N colonnes.
La matrice de contrôle A est caractérisée par sa faible "densité" : il faut entendre par là qu'elle comporte un nombre réduit d'éléments non nuls.
Plus précisément, elle comporte exactement t symboles non nuls dans chaque colonne, tous les autres étant égaux à 0.
Si les symboles d'un mot de code sont notés ci, i = O...N-1 et les éléments de la matrice de controle Aij, le code satisfait M = N-K relations de la forme :
Les méthodes proposées par M J C MacKay consistent à bâtir une matrice A initiale à partir de matrices unité ou tridiagonales plus petites, puis à permuter leurs colonnes pour arriver au résultat souhaité.
L'expérience montre cependant qu'il est difficile de satisfaire les différentes contraintes imposées pour leur construction.
<Desc/Clms Page number 2>
Le but de l'invention est de pallier les inconvénients précités.
A cet effet l'invention a pour objet, un procédé de construction de codes LDPC comportant N symboles dont K libres chaque code étant défini par une matrice de contrôle A comportant M=N-K lignes N colonnes et t symboles non nuls dans chaque colonne caractérisé en ce qu'il consiste : a - à attribuer à toutes les lignes de la matrice de contrôle A un même nombre de symboles "t" non nuls, b - à prendre comme nombre de symboles "t" un nombre impair le plus petit possible, c - à définir les colonnes de façon que deux colonnes quelconques de la matrice de contrôle A n'aient au plus qu'une valeur non nulle, d - et à définir les lignes de façon que deux lignes de la matrice de contrôle A n'aient qu'une valeur commune non nulle.
Le procédé selon l'invention a pour avantage qu'il permet de simplifier les algorithmes de codage et de décodage, en utilisant une matrice de contrôle A qui est la moins dense possible tout en donnant de bonnes performances pour une complexité raisonnable, la puissance de calcul nécessaire étant proportionnelle au nombre t. Dans la mesure où il y a peu d'erreurs, la contrainte "c" ci dessus permet à l'algorithme de décodage de toujours converger.
D'autres caractéristiques et avantages de l'invention apparaîtront à l'aide de la description qui suit faite en regard des dessins annexés qui représentent :
La figure 1 un tableau représentant une partition de la matrice de contrôle A.
La figure 1 un tableau représentant une partition de la matrice de contrôle A.
Les figures 2 et 3 des groupements des m2 sous matrices de gauche du tableau de la figure 1 en une sous matrice MxM et n-m sousmatrices MxP.
Les figures 4 et 5 une matrice de contrôle A obtenue respectivement selon une première et une deuxième variante d'exécution du procédé selon l'invention.
Les figures 6 à 9 une matrice de passage pour le calcul des symboles de redondance.
<Desc/Clms Page number 3>
Pour la mise en #uvre du procédé selon l'invention la matrice de contrôle, A, est subdivisée comme le montre la figure 1 en n sous-matrices de M lignes et P colonnes ou m x n sous-matrices carrées de P lignes et P colonnes telles que N=nP et M=mP et n et m premiers entre eux.
Les m2 sous-matrices de gauche sont ensuite regroupées comme le montre la figure 2 en une sous-matrice M x M (ceci permettra de simplifier grandement l'algorithme de codage) et les autres en n - m sous-matrices M x P .
Le procédé de construction est décrit ci - après selon deux variantes, selon que m est égal à 1 ou t.
Les valeurs différentes de m ne sont pas à envisager ici, à cause de la condition "a" qui exige que tr soit entier. En effet, tr = t N / M, soit encore t n / m. n et m étant premiers entre eux, m doit diviser t et ne peut donc être qu'égal à 1 ou t pour t premier et petit (vrai pour les faibles valeurs de t, à savoir 3, 5, 7).
Dans la première variante où m = 1 (codes de redondance r / (r -
1)),le procédé selon l'invention est valable pour les codes de taux de redondance N/K de la forme r / (r - 1), où le nombre de symboles de redondance est exactement N / r (r entier). Dans ce cas, M est égal à P et le tableau de la figure 2 se résume au tableau de la figure 3. Le procédé consiste alors à chercher n séquences de longueur M comportant t "1" et (M -t) "0".
1)),le procédé selon l'invention est valable pour les codes de taux de redondance N/K de la forme r / (r - 1), où le nombre de symboles de redondance est exactement N / r (r entier). Dans ce cas, M est égal à P et le tableau de la figure 2 se résume au tableau de la figure 3. Le procédé consiste alors à chercher n séquences de longueur M comportant t "1" et (M -t) "0".
Ces séquences notées ci-après w[0..n-1]r sont obtenues par : - une autocorrélation cyclique égale à 0,1, ou t (la séquence i décalée ne coïncide avec elle-même non décalée qu'en 0 ou 1 point) telle que pour tout i = O...n-1 : #k=0 M-1 w[i][k] w [i][k] = t (par définition) #K=0 M-1 w[i][k] w[i][(k + p) modulo M] = 0 ou 1, pour p = 1..M-1 - une intercorrélation cyclique égale à 0 ou 1 (la séquence i décalée ou non ne coïncide avec la séquence j qu'en 0 ou 1 point) telle que pour toute paire {i, j} où i = O...n-1 et j = O...n-1 sont différents :
<Desc/Clms Page number 4>
L'algorithme de calcul des séquences w est très simple : il détermine successivement les positions pos[0][0...t-1], pos[1][0...t-1], pos[n-1 ][O...t- 1], où ces séquences possèdent un "1", en commen- ant par pos[x][0] = 0, pos[x][1]= 1, ..., pos[x][t-1]= t-1, et en les modifiant pour satisfaire les conditions d'autocorrélation et intercorrélation.
Pour t = 3, les boucles de calcul mises en #uvre sont montrées à l'annexe 1.
Cet algorithme échoue lorsque n est trop grand compte tenu de M : peu de "petits" codes sont trouvés, mais ceci est de peu d'importance car on cherche généralement des codes de grande taille (N 100).
Les colonnes de la matrice A sont alors tout simplement les vecteurs w permutés circulairement : - kème sous-matrice (k = O...n-1)
A[ligne][colonne] = w[k][(ligne - (colonne - k P)) modulo M]
Avec : ligne = O...M-1 et colonne = kP...(k + 1) P - 1
Ainsi, chaque ligne de A comporte exactement t valeurs non nulles dans chacune des n sous-matrices, soit un total de n = tr.
A[ligne][colonne] = w[k][(ligne - (colonne - k P)) modulo M]
Avec : ligne = O...M-1 et colonne = kP...(k + 1) P - 1
Ainsi, chaque ligne de A comporte exactement t valeurs non nulles dans chacune des n sous-matrices, soit un total de n = tr.
Un exemple de matrice A, obtenue par ce procédé pour un code LDPC(75,50, t=3, tr=9) de redondance 3 / 2 (r = n = 3) avec P = 25 est montré à la figure 4. Selon le tableau représenté on peut constater que: w[0][i] = 1 pour i = 0, 1, 3 w[1][i] = 1 pour i = 0, 4, 9 w[2][i] = 1 pour i = 0, 6,13
La construction proposée garantit que : - chaque colonne comporte exactement t valeurs non nulles (par définition des w) - chaque ligne comporte exactement tr valeurs non nulles (grâce aux propriétés d'autocorrélation et intercorrélation des w) - toute paire de colonnes distinctes a au maximum une valeur non nulle commune (idem)
La construction proposée garantit que : - chaque colonne comporte exactement t valeurs non nulles (par définition des w) - chaque ligne comporte exactement tr valeurs non nulles (grâce aux propriétés d'autocorrélation et intercorrélation des w) - toute paire de colonnes distinctes a au maximum une valeur non nulle commune (idem)
<Desc/Clms Page number 5>
- toute paire de lignes distinctes a au maximum une valeur non nulle commune (idem)
Selon une deuxième variante inspirée de la précédente correspondant au cas où m=t le procédé selon l'invention recherche n - m + 1 séquences de longueur M comportant t "1"et (M -t) "0", séquences notées w[O..n-m].
Selon une deuxième variante inspirée de la précédente correspondant au cas où m=t le procédé selon l'invention recherche n - m + 1 séquences de longueur M comportant t "1"et (M -t) "0", séquences notées w[O..n-m].
La première séquence, w[0] est obtenue par : - une autocorrélation cyclique égale à 0,1, ou t (la séquence 0 décalée ne coïncide avec elle-même non décalée qu'en 0 ou 1 point) telle que :
En fait, c'est la même définition que pour m = 1.
Les séquences suivantes, w[1...n-m] sont obtenues par - une autocorrélation cyclique égale à 0 ou t pour des décalages multiples de m (la séquence i décalée d'un multiple de m ne coïncide jamais avec elle-même non décalée) telle que : pour tout i = 1...n-m :
- par une intercorrélation cyclique égale à 0 ou 1 avec la séquence w[0] (la séquence i décalée ou non ne coïncide avec la séquence 0 qu'en 0 ou 1 point) telle que : pour tout i = 1...n-m :
- par une intercorrélation cyclique égale à 0 ou 1 avec la séquence w[0] (la séquence i décalée ou non ne coïncide avec la séquence 0 qu'en 0 ou 1 point) telle que : pour tout i = 1...n-m :
<Desc/Clms Page number 6>
- et par une intercorrélation cyclique avec les séquences w[1..n-m] égale à 0 ou 1 pour des décalages multiples de m (la séquence i décalée ou non d'un multiple de m ne coïncide avec la séquence j qu'en 0 ou 1 point) telle que : pour toute paire {i, j} où i = 1...n-m et j = 1...n-m sont différents :
L'algorithme de calcul des séquences w est le même que précédemment. Seuls changent les critères d'autocorrélation et d'intercorrélation, celles-ci n'étant à vérifier que sur P points au lieu de M.
Les colonnes de la matrice A sont alors les vecteurs w permutés circulairement avec un pas égal à 1 ou m telles que : - Sous-matrice M x M à gauche de A :
A[ligne][colonne] = w[0][(ligne - colonne) modulo M]
Avec : ligne = 0...M-1 colonne = O...M - 1 - Sous-matrices M x P suivantes (en nombre égal à n - m) pour k = m...n-1 :
A[ligne][colonne] = w[k - m + 1][(ligne - m (colonne - k P)) modulo M]
Avec : ligne = O...M-1 colonne = kP...(k + 1)P - 1
Ainsi, chaque ligne de A comporte exactement m = t valeurs non nulles dans ses M premières colonnes, puis 1 valeur non nulle dans chacun des n - m paquets de P colonnes successives, soit un total de n ou tr.
A[ligne][colonne] = w[0][(ligne - colonne) modulo M]
Avec : ligne = 0...M-1 colonne = O...M - 1 - Sous-matrices M x P suivantes (en nombre égal à n - m) pour k = m...n-1 :
A[ligne][colonne] = w[k - m + 1][(ligne - m (colonne - k P)) modulo M]
Avec : ligne = O...M-1 colonne = kP...(k + 1)P - 1
Ainsi, chaque ligne de A comporte exactement m = t valeurs non nulles dans ses M premières colonnes, puis 1 valeur non nulle dans chacun des n - m paquets de P colonnes successives, soit un total de n ou tr.
Un exemple de matrice A, obtenu selon la deuxième variante du procédé selon l'invention est montré à la figure 5 pour un code LDPC(75,30, t=3, tr=5) de redondance 5 / 2 (n = 5, m = 3) avec P = 15. On constate sur le tableau de la figure 5 que: w[0][i] = 1 pour i = 0, 1, 3 w[1][i] = 1 pour i = 0, 4, 8 w[2][i] = 1 pour i = 0, 5,10
<Desc/Clms Page number 7>
Le procédé selon l'invention qui vient d'être décrit sous ses deux variantes conduit directement à un algorithme de codage de symboles de redondance Yi et de symboles d'information Xi très simple.
Pour cela, il suffit de considérer que les symboles de redondance Yi sont les M premiers symboles d'un mot de code, et les symboles libres Xi (information) sont les N - M derniers.
Les équations que doivent vérifier tout mot de code peuvent donc être réécrites sous la forme :
ou encore :
avec
ou encore :
avec
Le procédé consiste alors à calculer dans un premier temps les M quantités Zm de la matrice de passage, et ensuite les symboles de redondance :
A titre d'exemple, pour le code LDPC(75,50) les quantités Zm sont calculés par le système d'équation défini par le tableau de la figure 6 qui, après résolution, se transforme en le tableau des symboles de redondance de la figure 7.
La matrice B d'élément générique Bij est l'inverse de la partie gauche AM (de dimension M x M) de la matrice A. Elle a une forme très simple : par construction, toutes ses colonnes sont des permutations circulaires de la séquence w[0][O..M-1] :
Aij = w[0][(i - j) modulo M] , i=O...M-1, j=O...M-1
Aij = w[0][(i - j) modulo M] , i=O...M-1, j=O...M-1
<Desc/Clms Page number 8>
La matrice B comporte alors M lignes qui sont des permutations circulaires d'une ligne unique b[O...M-1], à savoir :
Bij = b[(j - i) modulo M]
B étant l'inverse de Am, les coefficients b sont définis par :
Bij = b[(j - i) modulo M]
B étant l'inverse de Am, les coefficients b sont définis par :
Par exemple, pour le code LDPC(75,50), les coefficients de redondance Ym sont calculés par le système d'équations défini par le tableau de la figure 8 qui après résolution se transforme en le tableau de la figure 9.
Cependant, il existe des cas où le calcul est impossible.
On peut en effet écrire les équations qui les définissent sous la forme :
tAM t{b[0], b[1 ], ..., b[M-1 ]} = tll, 0, 0, ... 101 La matrice tAm est une matrice circulante, dont la première ligne est
égale à a[0...M-1] ] = w[O]. Son déterminant est égal au produit de ses M valeurs propres I0...M-1. La kéme valeur propre est elle-même donnée par :
où a est une racine Même de l'unité.
tAM t{b[0], b[1 ], ..., b[M-1 ]} = tll, 0, 0, ... 101 La matrice tAm est une matrice circulante, dont la première ligne est
égale à a[0...M-1] ] = w[O]. Son déterminant est égal au produit de ses M valeurs propres I0...M-1. La kéme valeur propre est elle-même donnée par :
où a est une racine Même de l'unité.
Par exemple: - pour w[0] = a[0...M-1] = {1, 1, 0, 1, 0, 0, 0, ....} - pour des codes binaires (on se situe dans le corps de Galois
CG (2) où l'addition est équivalente au OU EXCLUSIF (XOR) et la multiplication au ET logique) on a : #1 = 1 + a + a3'
Si M est multiple de 7, il se trouve que l'équation
1 + a + a 3 = 0 définit un corps de Galois où a est racine 7ème de l'unité (le polynôme g(x) = 1 + x + x3 est irréductible et primitif dans CG (2) génère un corps de Galois CG(23)), ce qui signifie que #1 = 0.
CG (2) où l'addition est équivalente au OU EXCLUSIF (XOR) et la multiplication au ET logique) on a : #1 = 1 + a + a3'
Si M est multiple de 7, il se trouve que l'équation
1 + a + a 3 = 0 définit un corps de Galois où a est racine 7ème de l'unité (le polynôme g(x) = 1 + x + x3 est irréductible et primitif dans CG (2) génère un corps de Galois CG(23)), ce qui signifie que #1 = 0.
<Desc/Clms Page number 9>
Parmi les codes LDPC trouvés par l'algorithme proposé, il faut donc éliminer ceux où M est multiple de 7 si l'on garde ce w[0] ci car : - l'une des valeurs propres de tAM sera nulle - donc son déterminant sera nul - dont on ne pourra pas trouver de b[i] convenables - donc on ne pourra pas effectuer le codage (calculer les Yi)
D'une manière très générale, quel que soit le choix fait pour w[0], il y aura des valeurs de M ne convenant pas car ne permettant pas de faire le codage.
D'une manière très générale, quel que soit le choix fait pour w[0], il y aura des valeurs de M ne convenant pas car ne permettant pas de faire le codage.
On montre facilement (en factorisant xM- 1 et a(x) = #i M-1 a [i] xk) que ces valeurs de M sont les multiples d'une valeur MO pour laquelle a (x) divise xMO - 1.
Par exemple, pour des codes binaires avec t = 3 : - w[0] = {1, 1, 0, 1, ...} - w[0] = {1, 0, 1, 1, ...} interdisent M multiple de 7 (a(x) définit une racine 7ème de l'unité) - w[0] = {1, 1, 0, 0, 1, ...} - w[0] = {1, 0, 0, 1, 1, ...} interdisent M multiple de 15 (a(x) définit une racine 15ème de l'unité) - w[0] = {1, 0,1, 0,1, ...} n'est pas accepté (autocorrélation incorrecte) - w[0] = {1, 1, 0, 0, 0, 1, ...} - w[0] = {1, 0, 0, 0, 1, 1, ...} interdisent M multiple de 3 (a(x) est multiple de 1 + x + x2 qui définit une racine 3ème de l'unité) - w[0] = {1, 0, 1, 0, 0, 1, ...} - w[0] = {1,0, 0, 1, 0, 1, ...} interdisent M multiple de 31 (a(x) définit une racine 31 ème de l'unité)
Le calcul des coefficients b[i] est effectué de la manière suivante:
Pour une valeur de M non interdite, il existe un algorithme particulièrement simple de calcul des b [i] partir des a [i] (ouw[0][O...M-1]).
Le calcul des coefficients b[i] est effectué de la manière suivante:
Pour une valeur de M non interdite, il existe un algorithme particulièrement simple de calcul des b [i] partir des a [i] (ouw[0][O...M-1]).
Cet algorithme repose sur l'observation que la série des b [i], périodisation et filtrage par un filtre à réponse impulsionnelle finie (RIF) A (z)
<Desc/Clms Page number 10>
dont les coefficients sont les a[M-1, M-2, ..., 1, 0] doit donner la série {1, 0,0, ...} périodisée. En fait, pour un code binaire utilisant l'un des w[0] énumérés précédemment, cette série est formée de la concaténation de séquences maximales (Maximal Length Séquences) de longueur 7 (ou 15 ou 31 ou 63).
On calcule donc la réponse impulsionnelle du filtre à réponse impulsionnelle infinie (RII) 1/ A (z) et on en extrait une tranche de longueur M qui, une fois périodisée, donne la série {1, 0,0, ...}après filtrage par A(z).
Par exemple, pour un code binaire avec t = 3 et pour lequel seuls a[0], a[k1]et a[k2] ne sont pas nuls, un algorithme correspondant est fourni à l'annexe 2.
Dans un esprit de simplification pour ne pas effectuer le calcul précédent à chaque codage, l'algorithme de codage peut encore être défini par les k2 derniers éléments b[M-K2...M-1] qui, par récurrence (filtrage par 1 / A(z)) permettent de recalculer tous les autres.
Egalement comme la deuxième phase de l'algorithme de codage standard (calcul des Y à partir des Z) comporte en moyenne M2 / 2 opérations, ce qui peut devenir important pour des codes conséquents : la complexité étant une fonction quadratique de la taille, et que de plus, il est nécessaire de stocker le tableau intermédiaire Z (M éléments) et connaître le tableau b (M éléments aussi) s'il n'est pas calculé sur place, cette partie de l'algorithme peut être modifiée pour n'utiliser que deux tableaux intermédiaires de très petite taille en réécrivant ainsi les équations donnant les Y de la façon montrée par le tableau de la figure 9 (exemple pour un code LDPC(75, 50)) :
Les M - k2 (pour t = 3) premières lignes sont les M - k2 dernières lignes du système d'équations donnant Y, avant résolution.
Les M - k2 (pour t = 3) premières lignes sont les M - k2 dernières lignes du système d'équations donnant Y, avant résolution.
Les k2 dernières lignes sont les k2 dernières lignes du système d'équations donnant Y, après résolution.
Il suffit alors de calculer les Y dans l'ordre inverse, à savoir Y[M-1], Y [M-2], Y[0].
Le nombre d'opérations à effectuer est alors en moyenne de k2 M / 2 (calcul de Y[M-1] ... Y[M-k2]) suivi de t(M - k2) (calcul de tous les autres) soit approximativement (t + k2/2) M : la complexité n'est plus qu'une fonction linéaire de la taille.
L'algorithme utilise X[M...N] en entrée.
<Desc/Clms Page number 11>
La partie basse de X (X[0...M-1]) est utilisée comme stockage temporaire pour les Z : X[0...M-1] stocke Z[k2...M-1, O...k2-1] pour éviter un décalage circulaire en phase finale.
Les b [i] sontcalculés itérativement sur place, à partir des b[M-k2...M- 1].
Le code est défini par deux tableaux : - le tableau finB[0...k2-1] des k2 derniers éléments de b - le tableau pos[0...(n - m + 1)t] contenant les positions des éléments non nuls des séquences w[0], w[1], ..., w[n-m].
On utilise deux buffers internes de taille k2 : - reg[0...k2-1] pour calculer les b [i] - temp[0...k2-1]pour stocker les valeurs intermédiaires de Y[M- k2...M-1].
L'algorithme complet de codage rapide est alors celui montré à l'annexe 3.
Ces algorithmes sont très simples à mettre en oeuvre. Ils ont entre autre la caractéristique de définir un code par très peu de paramètres, à savoir les (n - m + 1)(t - 1) positions non nulles des "1"dans les séquences w et éventuellement k2 coefficients de codage. Même s'ils ne donnent pas tous les codes possibles répondant aux conditions a-d (par exemple, pas le code (150,125) de redondance 6/5, qui nécessite n=6 séquences w de longueur P=25), ils en donnent suffisamment pour que, dans une application quelconque où N et K sont définis a priori, on puisse trouver soit - un code (NLDPC, KLDPC) avec NLDPC = N et KLDPC = K - un code voisin (NLDPC+d, KLDPC+d), avec d faible, qui sera raccourci par non transmission de d symboles utiles mis arbitrairement à zéro.
Par exemple, pour obtenir un code de (N, K) redondance 5 / 3 (taux 0. 6), il suffit de partir d'un code (NLDPC+d, KLDPC+d) de redondance 8/ 5 (taux 0. 625) avec d = NLDPC/ 15. Pour des valeurs de N inférieures ou égales à 500 et t = 3, il est possible de construire très rapidement 932 codes différents dont les redondances sont les suivantes (on s'est volontairement limité aux redondances comprises entre 4 et 8/7, et aux codes où w[0] = {1, 1, 0, 1, 0,0, 0, ....} pour lesquels k2 = 3) : R=4/1 soit 4. 000 (105 codes)
<Desc/Clms Page number 12>
R = 5/2 soit 2. 500 (82 codes)
R = 6/3 ou 2/1 soit 2. 000 (203 codes) R=7/4 soit 1. 750 (55 codes)
R = 8/5 soit 1.600 (47 codes) R = 9/6 ou 3/2 soit 1. 500 (124 codes) R = 10/7 soit 1.428 (34 codes)
R = 11/8 soit 1. 375 (28 codes)
R = 12/9 ou 4/3 soit 1. 333 (84 codes)
R = 13/10 soit 1. 300 (20 codes)
R = 14/11 soit 1. 273 (17 codes)
R = 15/12 ou 5/4 soit 1. 250 (56 codes)
R = 16/13 soit 1. 231 (11 codes)
R = 17/14 soit 1. 214 (7 codes)
R = 18/15 ou 6/5 soit 1. 200 (34 codes)
R = 19/16 soit 1. 187 (3 codes)
R = 20/17 soit 1. 176 (2 codes)
R = 21/18 ou 7/6 soit 1. 167 (17 codes)
R = 24/21 ou 8/7 soit 1. 143 (3 codes)
De plus, toujours pour une valeur donnée de N inférieure ou égale à 500, il peut y avoir jusqu'à 12 codes différents (pour N = 480).
R = 6/3 ou 2/1 soit 2. 000 (203 codes) R=7/4 soit 1. 750 (55 codes)
R = 8/5 soit 1.600 (47 codes) R = 9/6 ou 3/2 soit 1. 500 (124 codes) R = 10/7 soit 1.428 (34 codes)
R = 11/8 soit 1. 375 (28 codes)
R = 12/9 ou 4/3 soit 1. 333 (84 codes)
R = 13/10 soit 1. 300 (20 codes)
R = 14/11 soit 1. 273 (17 codes)
R = 15/12 ou 5/4 soit 1. 250 (56 codes)
R = 16/13 soit 1. 231 (11 codes)
R = 17/14 soit 1. 214 (7 codes)
R = 18/15 ou 6/5 soit 1. 200 (34 codes)
R = 19/16 soit 1. 187 (3 codes)
R = 20/17 soit 1. 176 (2 codes)
R = 21/18 ou 7/6 soit 1. 167 (17 codes)
R = 24/21 ou 8/7 soit 1. 143 (3 codes)
De plus, toujours pour une valeur donnée de N inférieure ou égale à 500, il peut y avoir jusqu'à 12 codes différents (pour N = 480).
Par exemple, dès que N est multiple de 6 et supérieur ou égal à 288, il existe toujours trois codes de longueur N et de redondances 6/5, 3/2 et 2/1, par exemple LDPC(300,250) + LDPC(300,200) + LDPC(300,150).
Ceci est très utile pour protéger efficacement un train binaire formé de trois trains binaires chacun de longueur N et de sensibilités différentes.
Bien entendu, il est toujours possible d'envisager de nombreuses variantes de ces algorithmes, comme par exemple une permutation aléatoire des lignes et/ou colonnes de la matrice A.
Il est aussi important de signaler que l'adaptation à des codes non binaires est particulièrement simple.
<Desc/Clms Page number 13>
ANNEXE 1 for(x=0; x<n - m + 1; x++) { pos[x][0] = 0; for(pos[x][1]=pos[x][0]+1; pos[x][1]<M-1; pos[x][1]++) { for(pos[x][2]=pos[x][1]+1; pos[x][2]<M; pos[x][2]++) { (si les conditions ne sont pas satisfaites, continuer sinon, aller à ok) (arrêter : impossible de trouver un choix convenable pour pos[x][0...t-1]) ok :; }
<Desc/Clms Page number 14>
ANNEXE 2 (langage C : l'opérateur "#" correspond au OU EXCLUSIF.
/* Initialisation du passe de b, de longueur M */ for(i=M-k2; i<M; i++) b[i] = 0; /* Calcul de N valeurs successives de la réponse impulsionnelle de 1/A(z) */ b[0] = 1 ; for(i=1; i<k2; i++) b [i] = b[(i+M-(k2-k1)) % M]# b [(i+M-k2) % M]; for (i=k2; i<M; i++) b [i] = b[i-(k2-k1)]#b[i-k2]; /* S'arranger pour qu'il n'y ait qu'un 1 dans les k2 dernières positions de b filtre par A(z) */ weight = 0; /* tout sauf 1 */ while(weight ! = 1) { /* Decaler d'un cran */ for(i=1; i<M; i++) b[i-1] = b[i]; b[M-1 ] = b[M-1-(k2-k1)]# b[M-1-k2]; /* Verifier */ weight = 0; for(i=M-k2; i<M; i++) { char sum = b[i] # b[(i+k1 ) % M] # b [(i+k2) % M]; if (sum) { shift = M - i; weight++ ;
<Desc/Clms Page number 15>
/* Cas particulier ou M est interdit */ if(weight == 0) return(M~FORBIDDEN); /* decalage circulaire final a droite : b[i] = b[(i - shift) % M] */ for(dec=0; dec < shift ; { char temp = b[M-1]; for(i=M-1; i>0; i--) b [i] = b[i - 1]; b[0] = temp ; return(OK);
<Desc/Clms Page number 16>
ANNEXE 3 (langage C) : /* Phase 1 : calcul des M parites intermédiaires z.
Ces parites sont calculees en lisant les colonnes successives de la matrice de codage, a savoir A[*][M], ..., A[*][N]
Elles sont mises en tete de x a titre temporaire */ #define z x for(i=0; i<M; i++) z [i] = 0; /* Boucle sur les n-m sous-matrices a la droite de A */ cO = M; c1 = c0 + P ; for(k = 1; k ≤ n - m ; { offset = 0; for(c = cO; c < c1; c++) { if(x[c] ! = 0) for(i=0; i<t; i++) { /* p devrait etre offset + pos[i].
Elles sont mises en tete de x a titre temporaire */ #define z x for(i=0; i<M; i++) z [i] = 0; /* Boucle sur les n-m sous-matrices a la droite de A */ cO = M; c1 = c0 + P ; for(k = 1; k ≤ n - m ; { offset = 0; for(c = cO; c < c1; c++) { if(x[c] ! = 0) for(i=0; i<t; i++) { /* p devrait etre offset + pos[i].
On le decremente de k2 pour eviter le decalage du tableau z avant la phase 3 */ p = offset + pos[k*t + i]- k2 ; if(p < 0) z [p + M] + z[p + M]#1; else if(p < M) z[p] = z[p]# 1; else z [p - M] = z[p - M]#1;
<Desc/Clms Page number 17>
offset = offset + m; } c0=c1; c1 = c1 + P; } /* Phase 2 : calcul des k2 derniers symboles de parite */ ixbO = M -1 - k2 ; /* 1 : initialisation des k2 derniers elements de y temp[0...k2-1] = y[M-1, M-2, ...M-k2] */ for(k=0; k<k2; k++) temp [k] = 0; /* 2 : des k2 derniers elements de b reg[0...k2-1] = b[M-k2...M-1] */ for(i=0; i<k2; i++) reg [i] = finB[i]; /* 3 : calcul iteratif des k2 derniers symboles */ for(i=0; i < M ; {
/* b[i] ={100 z b[i-(k2-k1 )] ^ b[i-k2] avec b[i-k2]...b[i-1] = reg[0...t2-1] On doit vérifier : b[-k2] + b[k1-k2] + b[0] = 0 b [-2] + b[k1-2] + b [k2-2] 0 b[-1]+ b[k1-1] + b[k2-1 ] = 0 b[0] + b[k1] + b [k2] = 1 b[1] + b[1+k1] + b[1+k2] = 0 ... */ if(i == k2) input = 1;
/* b[i] ={100 z b[i-(k2-k1 )] ^ b[i-k2] avec b[i-k2]...b[i-1] = reg[0...t2-1] On doit vérifier : b[-k2] + b[k1-k2] + b[0] = 0 b [-2] + b[k1-2] + b [k2-2] 0 b[-1]+ b[k1-1] + b[k2-1 ] = 0 b[0] + b[k1] + b [k2] = 1 b[1] + b[1+k1] + b[1+k2] = 0 ... */ if(i == k2) input = 1;
<Desc/Clms Page number 18>
else input = 0; bi = input ^ reg[0]# reg[k1]; for(k=1; k<k2; k++) reg[k - 1] = reg [k]; reg[k2 - 1]= bi; if(bi != 0) for(k=0; k<k2; k++) if(z[(ixb0 - k + M) % M] != 0) temp [k] = temp[k] 1\ 1; ixbO = ixbO + 1; if(ixb0 == M) ixbO = 0; /* 4 : Les z ont deja ete decales a gauche pour eviter l'ecrasement. Sinon, il faudrait faire : for(k=0; k<M - k2 ; z [k] z[k + k2];
Recopie de temp a la fin de y */ #define y x for(k=0; k<k2; k++) y[M - 1 - k] = temp[k]; /* Phase 3 : calcul de y[M-k2-1, M-k2-2,0] y[k + k2 - k2] + y[k + k2 - k1] + y[k + k2 - 0] + z[k + k2] = 0 y [k] va en x[k] z[k + k2] est en x[k]
Donc : x[k + k2 - k2] + x[k + k2 - k1] + x[k + k2 - 0] + x[k] = 0
Soit: x[k + k2 - k2] = -(x[k + k2 - k1 ] + x[k + k2] + x[k])
Recopie de temp a la fin de y */ #define y x for(k=0; k<k2; k++) y[M - 1 - k] = temp[k]; /* Phase 3 : calcul de y[M-k2-1, M-k2-2,0] y[k + k2 - k2] + y[k + k2 - k1] + y[k + k2 - 0] + z[k + k2] = 0 y [k] va en x[k] z[k + k2] est en x[k]
Donc : x[k + k2 - k2] + x[k + k2 - k1] + x[k + k2 - 0] + x[k] = 0
Soit: x[k + k2 - k2] = -(x[k + k2 - k1 ] + x[k + k2] + x[k])
<Desc/Clms Page number 19>
*/ for(k = M - k2 - 1; k ≥ 0; k--) y [k] = y[k + k2 - k1] # y[k + k2]# z [k];
Claims (4)
1. Procédé de construction de codes LDPC pour la protection de trains binaires d'information, chaque train étant composé de N symboles décomposés en N-M symboles d'informations utiles X, et M symboles d'informations de redondance Ym, chaque code étant défini par une matrice de contrôle A comportant M=N-K lignes de N colonnes et t symboles non nuls dans chaque colonne, caractérisé en ce qu'il consiste : - à attribuer à toutes les lignes de la matrice de contrôle A un même nombre de symboles non nuls, - à prendre comme nombre de symboles t un nombre impair le plus petit possible, - à définir les colonnes de façon que deux colonnes quelconques de la matrice de contrôle A n'aient au plus qu'une valeur non nulle, - et à définir les lignes de façon que deux lignes de la matrice de contrôle A n'aient qu'une valeur commune non nulle.
2. Procédé selon la revendicationlcaractérisé en ce qu'il consiste : - à subdiviser la matrice de contrôle A de M lignes et N colonnes en n sous matrice de M lignes et P colonnes pour former n sous matrices de P lignes et P colonnes et à regrouper les m2 sous matrices de gauche en une sous matrice MxM et les autres en n-m sous matrice MxP, - et à déterminer Mxn séquences de vecteurs colonne w[0....n-1] de longueur M comportant t valeurs non nulles et (M-t) valeurs nulles en effectuant une autocorrélation et une intercorrélation cyclique des vecteurs colonne w.
3. Procédé selon la revendication 1 caractérisé en ce qu'il consiste : -- à subdiviser la matrice de contrôle A de M lignes et N colonnes en n sous matrices de M lignes et P colonnes pour former nxm sous matrices de P lignes et P colonnes et à regrouper les m2 sous matrices de gauche en une sous matrice MxM et les autres en n-m sous matrice MxP, - à déterminer n-m+1 séquences de vecteurs colonnes w[0....n-m] de longueur M comportant t valeurs non nulles et (M-t) valeurs nulles, - la première séquence w[0] étant obtenue par autocorrélation cyclique égale à 0,1, ou à la valeur t de façon que la séquence w[0] décalée ne coïncide avec elle même non décalée qu'en 0 ou 1 point,
<Desc/Clms Page number 21>
- les n-m séquences suivantes w [i][k] étantobtenues : - par une autocorrélation cyclique de valeur nulle ou égale à la valeur t de façon que la valeur de la séquence w[i] décalée d'un multiple de m ne coïncide jamais avec elle-même non décalée,et par une intercorrélation cyclique - et par une intercorrélation cyclique de valeur nulle ou 1 avec les séquences w[1....n-m] pour des décalages multiples de m de façon que une séquence i décalée ou non d'un multiple de m ne coïncide avec la séquence j qu'en 0 ou 1 point.
4. Procédé selon l'une quelconque des revendications 1 à 4 caractérisé en ce qu'il consiste à déterminer pour le codage d'informations utiles X,, une matrice de passage Zm égale au produit de la matrice de contrôle A par un vecteur colonne représentant N-M symboles d'information X, et à adjoindre aux symboles d'information des symboles de redondance Ym obtenus en résultat du produit de la matrice de passage Zm par une matrice B égale à l'inverse de la partie de dimension MxM de la matrice de contrôle A.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9912710A FR2799592B1 (fr) | 1999-10-12 | 1999-10-12 | Procede de construction et de codage simple et systematique de codes ldpc |
EP00402797A EP1093231A1 (fr) | 1999-10-12 | 2000-10-10 | Procédé de construction et de codage simple et systématique de codes Ldpc |
CA002322983A CA2322983A1 (fr) | 1999-10-12 | 2000-10-10 | Processus simple et systematique pour la confection et le codage de codes de controle de la parite a faible densite (ldpc) |
JP2000312558A JP2001168733A (ja) | 1999-10-12 | 2000-10-12 | Ldpcコードの構築およびコーディングのためのプロセス |
US09/686,873 US6715121B1 (en) | 1999-10-12 | 2000-10-12 | Simple and systematic process for constructing and coding LDPC codes |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9912710A FR2799592B1 (fr) | 1999-10-12 | 1999-10-12 | Procede de construction et de codage simple et systematique de codes ldpc |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2799592A1 true FR2799592A1 (fr) | 2001-04-13 |
FR2799592B1 FR2799592B1 (fr) | 2003-09-26 |
Family
ID=9550834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR9912710A Expired - Fee Related FR2799592B1 (fr) | 1999-10-12 | 1999-10-12 | Procede de construction et de codage simple et systematique de codes ldpc |
Country Status (5)
Country | Link |
---|---|
US (1) | US6715121B1 (fr) |
EP (1) | EP1093231A1 (fr) |
JP (1) | JP2001168733A (fr) |
CA (1) | CA2322983A1 (fr) |
FR (1) | FR2799592B1 (fr) |
Families Citing this family (69)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6888897B1 (en) | 2000-04-27 | 2005-05-03 | Marvell International Ltd. | Multi-mode iterative detector |
US7184486B1 (en) | 2000-04-27 | 2007-02-27 | Marvell International Ltd. | LDPC encoder and decoder and method thereof |
EP1290802A1 (fr) * | 2000-06-16 | 2003-03-12 | Aware, Inc. | Systemes et procedes pour modulation a codage ldpc |
US7000177B1 (en) | 2000-06-28 | 2006-02-14 | Marvell International Ltd. | Parity check matrix and method of forming thereof |
US6965652B1 (en) | 2000-06-28 | 2005-11-15 | Marvell International Ltd. | Address generator for LDPC encoder and decoder and method thereof |
US7072417B1 (en) * | 2000-06-28 | 2006-07-04 | Marvell International Ltd. | LDPC encoder and method thereof |
US7099411B1 (en) | 2000-10-12 | 2006-08-29 | Marvell International Ltd. | Soft-output decoding method and apparatus for controlled intersymbol interference channels |
WO2002091592A1 (fr) * | 2001-05-09 | 2002-11-14 | Comtech Telecommunications Corp. | Codes a controle de parite faible densite, et produits turbocodes faible densite |
US6938196B2 (en) * | 2001-06-15 | 2005-08-30 | Flarion Technologies, Inc. | Node processors for use in parity check decoders |
JP3808769B2 (ja) * | 2001-12-27 | 2006-08-16 | 三菱電機株式会社 | Ldpc符号用検査行列生成方法 |
JP3833545B2 (ja) * | 2002-02-13 | 2006-10-11 | 三菱電機株式会社 | 通信システム、受信機、送信機および通信方法 |
JP3946087B2 (ja) * | 2002-05-23 | 2007-07-18 | 三菱電機株式会社 | 通信システム、受信機および通信方法 |
JP4005084B2 (ja) * | 2002-07-02 | 2007-11-07 | 三菱電機株式会社 | 検査行列生成方法および検査行列生成装置 |
US7577207B2 (en) | 2002-07-03 | 2009-08-18 | Dtvg Licensing, Inc. | Bit labeling for amplitude phase shift constellation used with low density parity check (LDPC) codes |
US7020829B2 (en) | 2002-07-03 | 2006-03-28 | Hughes Electronics Corporation | Method and system for decoding low density parity check (LDPC) codes |
ES2381012T3 (es) | 2002-07-03 | 2012-05-22 | Dtvg Licensing, Inc | Procedimiento y sistema para generar códigos de comprobación de paridad de baja densidad (LDPC) |
EP2190123B9 (fr) * | 2002-07-03 | 2014-08-27 | Dtvg Licensing, Inc | Procédé et système pour la génération de codes LDPC (Low Density Parity Check) |
CN101515804B (zh) * | 2002-07-26 | 2013-01-23 | Dtvg许可公司 | 产生低密度奇偶校验码的方法和*** |
US7864869B2 (en) | 2002-07-26 | 2011-01-04 | Dtvg Licensing, Inc. | Satellite communication system utilizing low density parity check codes |
US20040019845A1 (en) | 2002-07-26 | 2004-01-29 | Hughes Electronics | Method and system for generating low density parity check codes |
US7702986B2 (en) | 2002-11-18 | 2010-04-20 | Qualcomm Incorporated | Rate-compatible LDPC codes |
KR100502609B1 (ko) * | 2002-11-21 | 2005-07-20 | 한국전자통신연구원 | Ldpc 코드를 이용한 부호화기 및 부호화 방법 |
KR100936022B1 (ko) | 2002-12-21 | 2010-01-11 | 삼성전자주식회사 | 에러 정정을 위한 부가정보 생성 방법 및 그 장치 |
KR100906474B1 (ko) | 2003-01-29 | 2009-07-08 | 삼성전자주식회사 | 저밀도 부가정보 발생용 매트릭스를 이용한 에러 정정방법 및그 장치 |
EP1597828B1 (fr) | 2003-02-26 | 2020-10-07 | QUALCOMM Incorporated | Procede et dispositif permettant d'executer des operations de codage a controle de parite de faible densite (ldpc) par permutation multi-niveaux |
US6957375B2 (en) * | 2003-02-26 | 2005-10-18 | Flarion Technologies, Inc. | Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation |
US20050100076A1 (en) * | 2003-08-04 | 2005-05-12 | Gazdzinski Robert F. | Adaptive holographic wideband communications apparatus and methods |
US20050041746A1 (en) * | 2003-08-04 | 2005-02-24 | Lowell Rosen | Software-defined wideband holographic communications apparatus and methods |
US20050084033A1 (en) * | 2003-08-04 | 2005-04-21 | Lowell Rosen | Scalable transform wideband holographic communications apparatus and methods |
KR100809619B1 (ko) | 2003-08-26 | 2008-03-05 | 삼성전자주식회사 | 이동 통신 시스템에서 블록 저밀도 패러티 검사 부호부호화/복호 장치 및 방법 |
US7334181B2 (en) * | 2003-09-04 | 2008-02-19 | The Directv Group, Inc. | Method and system for providing short block length low density parity check (LDPC) codes |
KR100922956B1 (ko) | 2003-10-14 | 2009-10-22 | 삼성전자주식회사 | 저밀도 패리티 검사 코드의 부호화 방법 |
US7376883B2 (en) * | 2003-10-27 | 2008-05-20 | The Directv Group, Inc. | Method and system for providing long and short block length low density parity check (LDPC) codes |
KR100975061B1 (ko) | 2003-11-28 | 2010-08-11 | 삼성전자주식회사 | 저밀도 패리티 검사를 이용한 패리티 정보 생성 방법 |
EP1708367A4 (fr) | 2004-01-20 | 2009-02-11 | Nec Corp | Procede de generation de matrices d'inspection, systeme de transmission de donnees, dispositif codeur, dispositif decodeur, et programme de generation de matrices d'inspection |
CA2559818C (fr) * | 2004-04-28 | 2011-11-29 | Samsung Electronics Co., Ltd. | Appareil et procede pour le codage/decodage de bloc de code de controle de parite a faible densite a longueur de code variable |
JP4282558B2 (ja) | 2004-06-30 | 2009-06-24 | 株式会社東芝 | 低密度パリティチェック符号復号器及び方法 |
KR100739684B1 (ko) | 2004-08-05 | 2007-07-13 | 삼성전자주식회사 | 저밀도 패리티 체크 행렬 생성 장치 및 방법 |
KR101208546B1 (ko) * | 2004-08-09 | 2012-12-05 | 엘지전자 주식회사 | 저밀도 패리티 체크 행렬을 이용한 부호화 및 복호화 방법 |
EP1790083B1 (fr) * | 2004-08-13 | 2011-01-12 | Dtvg Licensing, Inc | Ameliorations de conception de code et de mise en oeuvre pour des codes de verification de parite a faible densite de canaux a entrees multiples et a sorties multiples |
CN101341659B (zh) | 2004-08-13 | 2012-12-12 | Dtvg许可公司 | 用于多输入多输出通道的低密度奇偶校验码的码设计与实现的改进 |
AU2005273169B2 (en) * | 2004-08-16 | 2008-09-11 | Nokia Technologies Oy | Apparatus and method for coding/decoding block low density parity check code with variable block length |
WO2006027818A1 (fr) * | 2004-09-03 | 2006-03-16 | Mitsubishi Denki Kabushiki Kaisha | Procede de generation de code ldpc et appareil de communication |
FI121431B (fi) | 2004-09-13 | 2010-11-15 | Tamfelt Pmc Oy | Paperikoneessa käytettävä kudosrakenne ja menetelmä sen valmistamiseksi |
KR100669152B1 (ko) | 2004-11-25 | 2007-01-15 | 한국전자통신연구원 | 저밀도 패리티 검사 코드의 부호화 장치 및 방법 |
KR100913876B1 (ko) | 2004-12-01 | 2009-08-26 | 삼성전자주식회사 | 저밀도 패리티 검사 부호의 생성 방법 및 장치 |
KR100641052B1 (ko) * | 2004-12-08 | 2006-11-02 | 한국전자통신연구원 | Ldpc 부호기 및 복호기, 및 ldpc 부호화 방법 및복호화 방법 |
KR100678521B1 (ko) | 2004-12-20 | 2007-02-02 | 한국전자통신연구원 | 비균일 저밀도 패리티 검사 부호의 부호화 장치 및 방법 |
WO2006073322A1 (fr) * | 2004-12-29 | 2006-07-13 | Intel Corporation | Codes de verification de parite a faible densite gilbert a trois bandes |
CN100414841C (zh) * | 2005-05-11 | 2008-08-27 | 电子科技大学 | 一种ldpc编码的实现方法 |
US7499490B2 (en) * | 2005-06-24 | 2009-03-03 | California Institute Of Technology | Encoders for block-circulant LDPC codes |
US8196025B2 (en) | 2005-08-03 | 2012-06-05 | Qualcomm Incorporated | Turbo LDPC decoding |
US7853862B2 (en) | 2005-08-03 | 2010-12-14 | Qualcomm Incorporated | Systems and methods for a turbo low-density parity-check decoder |
US7934147B2 (en) * | 2005-08-03 | 2011-04-26 | Qualcomm Incorporated | Turbo LDPC decoding |
US7577892B1 (en) | 2005-08-25 | 2009-08-18 | Marvell International Ltd | High speed iterative decoder |
US7861131B1 (en) | 2005-09-01 | 2010-12-28 | Marvell International Ltd. | Tensor product codes containing an iterative code |
JP4558638B2 (ja) * | 2005-12-15 | 2010-10-06 | 富士通株式会社 | 符号器および復号器 |
US7644339B2 (en) * | 2006-10-02 | 2010-01-05 | Broadcom Corporation | Overlapping sub-matrix based LDPC (low density parity check) decoder |
US8117523B2 (en) * | 2007-05-23 | 2012-02-14 | California Institute Of Technology | Rate-compatible protograph LDPC code families with linear minimum distance |
CN101075811B (zh) * | 2007-06-08 | 2010-06-23 | 中国科学技术大学 | 一种三对角线结构的准循环低密度码及其构造方法 |
CN100462986C (zh) * | 2007-09-13 | 2009-02-18 | 南京大学 | 基于可编程门阵列的低密度奇偶校验编解码硬件仿真*** |
JP4618293B2 (ja) * | 2007-12-12 | 2011-01-26 | 住友電気工業株式会社 | 復号装置及び検査行列生成方法 |
US8321769B1 (en) | 2008-11-06 | 2012-11-27 | Marvell International Ltd. | Multi-parity tensor-product code for data channel |
US8516352B2 (en) * | 2009-07-21 | 2013-08-20 | Ramot At Tel Aviv University Ltd. | Compact decoding of punctured block codes |
US9397699B2 (en) * | 2009-07-21 | 2016-07-19 | Ramot At Tel Aviv University Ltd. | Compact decoding of punctured codes |
US8516351B2 (en) * | 2009-07-21 | 2013-08-20 | Ramot At Tel Aviv University Ltd. | Compact decoding of punctured block codes |
US8375278B2 (en) * | 2009-07-21 | 2013-02-12 | Ramot At Tel Aviv University Ltd. | Compact decoding of punctured block codes |
US8656244B1 (en) | 2010-10-29 | 2014-02-18 | Massachusetts Institute Of Technology | Rate adaptive nonbinary LDPC codes with low encoding complexity |
TWI487288B (zh) | 2012-01-04 | 2015-06-01 | Nat Univ Tsing Hua | 用於非二進制類循環低密度奇偶檢查碼之解碼裝置及其方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5537427A (en) * | 1991-08-21 | 1996-07-16 | International Business Machines Corporation | Modular multiple error correcting code system |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2283592A1 (fr) | 1974-08-27 | 1976-03-26 | Thomson Csf | Dispositif extracteur de synchronisation et systeme de transmission d'informations comportant un tel dispositif |
FR2431229A1 (fr) | 1978-07-12 | 1980-02-08 | Thomson Csf | Dispositif de demodulation de signaux modules en deplacement de frequence et systeme de transmission comportant un tel dispositif |
FR2546001B1 (fr) | 1983-05-10 | 1985-07-05 | Thomson Csf | Demodulateur de signaux, a enveloppe constante et phase continue, modules angulairement par un train de symboles binaires |
FR2604318B1 (fr) | 1986-09-23 | 1989-03-31 | Thomson Csf | Procede et dispositif de synchronisation symbole et leur application a la demodulation symbole de messages numeriques |
FR2605769B1 (fr) | 1986-10-22 | 1988-12-09 | Thomson Csf | Operateur polynomial dans les corps de galois et processeur de traitement de signal numerique comportant un tel operateur |
FR2605818B1 (fr) | 1986-10-27 | 1992-09-18 | Thomson Csf | Codeur-decodeur algebrique de codes en blocs reed solomon et bch, applicable aux telecommunications numeriques |
FR2607987B1 (fr) | 1986-12-05 | 1989-02-10 | Thomson Csf | Procede et dispositif de modulation et de demodulation a plusieurs etats, a niveau de protection ajustable |
FR2631146B1 (fr) | 1988-05-04 | 1991-05-10 | Thomson Csf | Procede et dispositif de codage de l'energie du signal vocal dans des vocodeurs a tres faibles debits |
FR2631147B1 (fr) | 1988-05-04 | 1991-02-08 | Thomson Csf | Procede et dispositif de detection de signaux vocaux |
FR2635420B1 (fr) | 1988-07-19 | 1990-10-19 | Thomson Csf | Procede et dispositif de demodulation de signaux a enveloppe constante et phase continue modules angulairement par un train de symboles binaires, tolerant les derives de frequence |
EP0386506A3 (fr) * | 1989-03-06 | 1991-09-25 | International Business Machines Corporation | Codage et décodage de symboles à correction d'erreurs à peu de frais |
FR2654542B1 (fr) | 1989-11-14 | 1992-01-17 | Thomson Csf | Procede et dispositif de codage de filtres predicteurs de vocodeurs tres bas debit. |
FR2670313A1 (fr) | 1990-12-11 | 1992-06-12 | Thomson Csf | Procede et dispositif pour l'evaluation de la periodicite et du voisement du signal de parole dans les vocodeurs a tres bas debit. |
FR2690551B1 (fr) | 1991-10-15 | 1994-06-03 | Thomson Csf | Procede de quantification d'un filtre predicteur pour vocodeur a tres faible debit. |
US5425038A (en) * | 1993-07-02 | 1995-06-13 | International Business Machines Corporation | Error plus single bit error detection |
US5412667A (en) * | 1993-07-08 | 1995-05-02 | Commodore Electronics Limited | Decoder for cross interleaved error correcting encoded data |
US5872798A (en) * | 1994-02-16 | 1999-02-16 | U.S. Philips Corporation | Error correctable data transmission method and device based on semi-cyclic codes |
US5745507A (en) * | 1995-03-31 | 1998-04-28 | International Business Machines Corporation | Systematic symbol level ECC for use in digital memory systems |
FR2738383B1 (fr) | 1995-09-05 | 1997-10-03 | Thomson Csf | Procede de quantification vectorielle de vocodeurs bas debit |
US5757823A (en) * | 1995-10-03 | 1998-05-26 | International Business Machines Corporation | Error detection and correction for four-bit-per-chip memory system |
US5768294A (en) * | 1995-12-11 | 1998-06-16 | International Business Machines Corporation | Memory implemented error detection and correction code capable of detecting errors in fetching data from a wrong address |
US6195777B1 (en) * | 1997-11-06 | 2001-02-27 | Compaq Computer Corporation | Loss resilient code with double heavy tailed series of redundant layers |
US6307487B1 (en) * | 1998-09-23 | 2001-10-23 | Digital Fountain, Inc. | Information additive code generator and decoder for communication systems |
US6320520B1 (en) * | 1998-09-23 | 2001-11-20 | Digital Fountain | Information additive group code generator and decoder for communications systems |
US6463563B1 (en) * | 1999-11-30 | 2002-10-08 | International Business Machines Corporation | Single symbol correction double symbol detection code employing a modular H-matrix |
-
1999
- 1999-10-12 FR FR9912710A patent/FR2799592B1/fr not_active Expired - Fee Related
-
2000
- 2000-10-10 EP EP00402797A patent/EP1093231A1/fr not_active Withdrawn
- 2000-10-10 CA CA002322983A patent/CA2322983A1/fr not_active Abandoned
- 2000-10-12 US US09/686,873 patent/US6715121B1/en not_active Expired - Fee Related
- 2000-10-12 JP JP2000312558A patent/JP2001168733A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5537427A (en) * | 1991-08-21 | 1996-07-16 | International Business Machines Corporation | Modular multiple error correcting code system |
Non-Patent Citations (5)
Title |
---|
BOUTROS J ET AL: "Generalized low density (Tanner) codes", 1999 IEEE INTERNATIONAL CONFERENCE ON COMMUNICATIONS (CAT. NO. 99CH36311), 1999 IEEE INTERNATIONAL CONFERENCE ON COMMUNICATIONS, VANCOUVER, BC, CANADA, 6-10 JUNE 1999, 1999, Piscataway, NJ, USA, USA, pages 441 - 445 vol.1, XP002143044, ISBN: 0-7803-5284-X * |
LI PING ET AL: "Low density parity check codes with semi-random parity check matrix", ELECTRONICS LETTERS, 7 JAN. 1999, IEE, UK, vol. 35, no. 1, pages 38 - 39, XP002143043, ISSN: 0013-5194 * |
MACKAY D J C: "Good error-correcting codes based on very sparse matrices", IEEE TRANSACTIONS ON INFORMATION THEORY, MARCH 1999, IEEE, USA, vol. 45, no. 2, pages 399 - 431, XP002143042, ISSN: 0018-9448 * |
PENG X -H ET AL: "EFFICIENT PERMUTATION CRITERION FOR OBTAINING MINIMAL TRELLIS OF A BLOCK CODE", ELECTRONICS LETTERS,GB,IEE STEVENAGE, vol. 32, no. 11, 23 May 1996 (1996-05-23), pages 983 - 984, XP000599121, ISSN: 0013-5194 * |
RICHARD E. BLAHUT: "Theory and practice of error control codes ISBN: 0-201-10102-5", May 1984, ADDISON-WESLEY, UNITED STATES, XP002143045 * |
Also Published As
Publication number | Publication date |
---|---|
EP1093231A1 (fr) | 2001-04-18 |
JP2001168733A (ja) | 2001-06-22 |
US6715121B1 (en) | 2004-03-30 |
FR2799592B1 (fr) | 2003-09-26 |
CA2322983A1 (fr) | 2001-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
FR2799592A1 (fr) | Procede de construction et de codage simple et systematique de codes ldpc | |
EP1829223B1 (fr) | Décodage parallèle en plusieurs couches de codes LDPC | |
TWI466451B (zh) | 編碼器、解碼器、編碼方法及解碼方法 | |
CN101073205B (zh) | 低密度奇偶校验编码器和解码器以及低密度奇偶校验编码和解码方法 | |
KR100881889B1 (ko) | 저밀도 패리티 검사(ldpc) 코드들에 대한 계층화된디코딩 방식의 개선 | |
JP4033245B2 (ja) | ターボ符号化装置およびターボ符号化方法 | |
CN104426554B (zh) | 用于低密度奇偶校验码的改善的解码器 | |
CN105075128A (zh) | 具有高并行性、低差错本底和简单编码原理的经提升ldpc码的设计 | |
EP2486661A1 (fr) | Procédé de décodage de codes non binaires | |
CN103053116B (zh) | 低密度奇偶校验码的编码方法和装置 | |
JP5774237B2 (ja) | 誤り訂正符号化方法および誤り訂正符号化装置 | |
FR2512568A1 (fr) | Systeme pour transferer des donnees binaires par une pluralite de canaux au moyen d'un codeur operant par convolution | |
La Guardia | On classical and quantum MDS-convolutional BCH codes | |
EP1905157B1 (fr) | Procede et systeme d'encodage d'une sequence de donnees | |
EP2384547B1 (fr) | Procede et dispositif de codage correcteur d'erreurs flexible et programme d'ordinateur correspondant | |
Fujiwara et al. | High-rate quantum low-density parity-check codes assisted by reliable qubits | |
FR2858141A1 (fr) | Codage d'informations par codes de reed-solomon raccourcis | |
CN103117749B (zh) | 低密度奇偶校验码的校验矩阵构造和编解码方法及装置 | |
CN109257049B (zh) | 一种修复二进制阵列码校验矩阵的构造方法及修复方法 | |
EP2724467A1 (fr) | Procédé d'encodage de données d'information en bursts | |
EP0989679A1 (fr) | Méthode de correction de données perdues et circuit correspondant | |
EP1471647B1 (fr) | Codage et décodage utilisant un code construit sur un treillis dont les sections sont basées sur des codes en bloc à bonne distance | |
CN103067024B (zh) | 低密度生成矩阵码的生成矩阵构造和编解码方法及装置 | |
EP1300952A1 (fr) | Code de détection et/ou de correction d'erreurs à haute efficacité | |
FR3022651A1 (fr) | Procedes et dispositifs de codage et de decodage correcteur d'erreurs, et programme d'ordinateur correspondant. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
CD | Change of name or company name | ||
ST | Notification of lapse |
Effective date: 20150630 |