簡體   English   中英

如何確定 LDPC 生成器矩陣形成奇偶校驗矩陣 (802.16e)

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

我有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

然后我得到H以二進制形式與尺寸1152x2304間諜(H)IMG

我想從H得到一個矩陣生成器G ,我該怎么做? 我需要通過將單詞乘以生成器矩陣( cw = m*G ,其中m - 輸入單詞, cw - 代碼字)來編碼單詞。

我嘗試了不同的方法,但最后我無法達到nnz(mod(G*H', 2))等於0

一個老問題,但因為我有同樣的問題並設計了一個解決方案......

這種LDPC碼是系統的,即碼字包含信息位,信息位是碼字的前導位。 所有計算均在GF2 (大小為 2 的伽羅瓦域)中進行。

讓我們表示:

  • n碼字長度(以及HG的列數),
  • m奇偶校驗位數(以及H的行數),
  • k=nm信息位數(以及G的行數),
  • [A,B]由左到右連接兩個子矩陣AB形成的矩陣(當AB具有相同的行數時),
  • A^矩陣A的轉置矩陣,
  • Ip大小為p的單位矩陣,
  • 0p大小為p的零向量,
  • inv(A)方陣A的逆矩陣。

如果u是要編碼的k位字(信息位),而x是相應的n位代碼字,因為該代碼是具有前導信息位的系統,我們有:

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

其中Fkm列矩陣。 我們還可以將奇偶校驗矩陣HH = [A,B] ,其中Amk列矩陣, Bmm列(正方形)矩陣。 事實上, B不是奇異的(它有一個逆)。 所以:

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

它來自(我們在GF2 ):

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

因此:

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

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