简体   繁体   English

如何确定 LDPC 生成器矩阵形成奇偶校验矩阵 (802.16e)

[英]How to determine LDPC generator matrix form parity check matrix (802.16e)

I have parity check table H for 802.16e standard with 1/2 rate and expansion factor 96 :我有1/2速率和扩展因子96 802.16e 标准的奇偶校验表H

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

Then I get H in binary form with sizes 1152x2304 : spy(H) img然后我得到H以二进制形式与尺寸1152x2304间谍(H)IMG

I want to get a matrix generator G from H , how can I do it?我想从H得到一个矩阵生成器G ,我该怎么做? I need to encode words by multiplying words by a generator matrix ( cw = m*G , where m - input word, cw - code word).我需要通过将单词乘以生成器矩阵( cw = m*G ,其中m - 输入单词, cw - 代码字)来编码单词。

I try different ways, but at the end i cant reach nnz(mod(G*H', 2)) equal 0 .我尝试了不同的方法,但最后我无法达到nnz(mod(G*H', 2))等于0

An old question but as I had the same and designed a solution...一个老问题,但因为我有同样的问题并设计了一个解决方案......

This LDPC code is systematic, that is, the code words contain the information bits, and the information bits are the leading bits of the code word.这种LDPC码是系统的,即码字包含信息位,信息位是码字的前导位。 All computations are made in GF2 (Galois field of size 2).所有计算均在GF2 (大小为 2 的伽罗瓦域)中进行。

Let us denote:让我们表示:

  • n the code word length (and number of columns of H and G ), n码字长度(以及HG的列数),
  • m the number of parity bits (and the number of rows of H ), m奇偶校验位数(以及H的行数),
  • k=nm the number of information bits (and the number of rows of G ), k=nm信息位数(以及G的行数),
  • [A,B] the matrix formed by concatenating left to right the two sub-matrices A and B (when A and B have the same number of rows), [A,B]由左到右连接两个子矩阵AB形成的矩阵(当AB具有相同的行数时),
  • A^ the transposed matrix of matrix A , A^矩阵A的转置矩阵,
  • Ip the identity matrix of size p , Ip大小为p的单位矩阵,
  • 0p the zero vector of size p , 0p大小为p的零向量,
  • inv(A) the inverse of square matrix A . inv(A)方阵A的逆矩阵。

If u is a k -bits word to encode (information bits) and x the corresponding n -bits code word, as the code is systematic with leading information bits, we have:如果u是要编码的k位字(信息位),而x是相应的n位代码字,因为该代码是具有前导信息位的系统,我们有:

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

where F is a k -rows, m -columns matrix.其中Fkm列矩阵。 We can also represent the parity check matrix H as H = [A,B] where A is a m -rows, k -columns matrix and B is a m -rows, m -columns (square) matrix.我们还可以将奇偶校验矩阵HH = [A,B] ,其中Amk列矩阵, Bmm列(正方形)矩阵。 As a matter of fact, B is not singular (it has an inverse).事实上, B不是奇异的(它有一个逆)。 So:所以:

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

From which it comes (we are in GF2 ):它来自(我们在GF2 ):

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

And thus:因此:

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

An octave code that computes G from H (where H is already in GF2 ) and checks that G * H^ = 0 (the Matlab code should be very similar):H计算G八度代码(其中H已经在GF2 )并检查G * H^ = 0 (Matlab 代码应该非常相似):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM