2017-05-10 3 views
0

Je table de contrôle de parité H pour 802.16e standart avec débit 1/2 et le facteur d'expansion 96:Comment déterminer la matrice de contrôle de parité de la forme d'une matrice de générateur LDPC (802.16e)

Hb = 
-1 94 73 -1 -1 -1 -1 -1 55 83 -1 -1 7 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 27 -1 -1 -1 22 79 9 -1 -1 -1 12 -1 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 
-1 -1 -1 24 22 81 -1 33 -1 -1 -1 0 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 -1 
61 -1 47 -1 -1 -1 -1 -1 65 25 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 
-1 -1 39 -1 -1 -1 84 -1 -1 41 72 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 
-1 -1 -1 -1 46 40 -1 82 -1 -1 -1 79 0 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 
-1 -1 95 53 -1 -1 -1 -1 -1 14 18 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 
-1 11 73 -1 -1 -1 2 -1 -1 47 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 
12 -1 -1 -1 83 24 -1 43 -1 -1 -1 51 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 
-1 -1 -1 -1 -1 94 -1 59 -1 -1 70 72 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 
-1 -1 7 65 -1 -1 -1 -1 39 49 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 
43 -1 -1 -1 -1 66 -1 41 -1 -1 -1 26 7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 

Puis i get H en binaire forme avec des tailles 1152x2304: spy(H) img

Je veux obtenir un générateur de matrice G à partir de H, comment puis-je le faire? J'ai besoin de coder les mots en multipliant les mots par une matrice de générateur (cw = m * G, où m - mot d'entrée, cw - mot de code).

J'essaie de différentes manières, mais à la fin je ne peux pas atteindre nnz (mod (G * H », 2)) égale à 0.

Répondre

0

Une vieille question, mais comme je l'avais même et conçu une solution ..

Ce code LDPC est systématique, c'est-à-dire que les mots de code contiennent les bits d'information, et les bits d'information sont les bits d'attaque du mot de code. Tous les calculs sont faits en GF2 (champ de Galois de taille 2).

Notons:

  • n la longueur de mot de code (et le nombre de colonnes du H et G),
  • m le nombre de bits de parité (et le nombre de rangées de H),
  • k=n-m le nombre de bits d'information (et le nombre de lignes de G),
  • [A,B] la matrice formée par concaténer gauche à droite, les deux sous-matrices A et B (lorsque A et B ont le même nombre de lignes),
  • A^ la matrice transposée de la matrice A,
  • Ip la matrice de la taille de l'identité p,
  • 0p le vecteur zéro de taille p,
  • inv(A) l'inverse de la matrice carrée A.

Si u est un k mot -bits pour coder (bits d'information) et x le mot de code -bits n correspondant, comme le code est systématique avec les principaux bits d'information, nous avons:

x = u * G 
    = u * [Ik,F] = [u,u * F] = [u,c] 
c = u * F 

F est une matrice k -rows, m -columns. On peut également représenter la matrice de contrôle de parité H comme H = [A,B]A est un m -rows, k -columns matrice et B est une matrice m -rows, m -columns (carré). En fait, B n'est pas singulier (il a un inverse).Alors:

H * x^ = [A,B] * x^ = [A,B] * [u,c]^ = A * u^ + B * c^ = 0n^ 
(H * x^)^ = u * A^ + c * B^ = 0n 
(H * x^)^ * inv(B^) = u * A^ * inv(B^) + c = 0n 

D'où il vient (nous sommes en GF2):

c = u * (A^ * inv(B^)) 

Et ainsi:

F = A^ * inv(B^) 
G = [Ik,A^ * inv(B^)] 

Un code octave qui calcule G de H (où H est déjà dans GF2) et vérifie que G * H^ = 0 (le code Matlab devrait être très similaire):

pkg load communications 

function F = make_gen_min(H) 
    m = size(H, 1); 
    n = size(H, 2); 
    k = n - m; 
    A = H(1:m, 1:k); 
    B = H(1:m, k+1:n); 
    F = transpose(A) * inv(transpose(B)); 
endfunction 

function G = make_gen(H) 
    m = size(H, 1); 
    n = size(H, 2); 
    k = n - m; 
    F = make_gen_min(H); 
    G = [gf(eye(k), 2), F]; 
endfunction 

H = [...]; 

G = make_gen(H); 
if(any(G * transpose(H))) 
    disp ("Error: G * transpose(H) != 0"); 
else 
    disp ("Note: G * transpose(H) == 0"); 
endif