白建國,郝向新,鄭 亮,代澤薈
(內蒙古電力(集團)有限責任公司鄂爾多斯電業局,鄂爾多斯 014399)
無人機遠距離通信數據鏈是這些年發展日趨成熟的無線傳輸系統,它的主要功能主要是利用無人機飛行平臺,將安裝在機身的光電設備(如光電吊艙)所采集的連續圖像實時,傳輸到地面監視點。目前采用的主要技術手段也非常豐富,比如Wi- Fi、微波、3G 或者4G 公網以及COFDM 技術等。本課題所采用的無人機遠距離通信數據鏈技術方案需要在通信距離150km 的情況下,回傳速率可以達到2Mb/s 以上,可以滿足無人機超遠距離通信應用的需要。因此,我們需要采用接近香農限的編碼方式LDPC。
LDPC 碼全稱低密度奇偶校驗碼,是一種線性分組碼,其通常由奇偶校驗矩陣定義,該奇偶校驗矩陣是一個稀疏矩陣,所以叫低密度奇偶校驗碼。碼長較長的LDPC 碼可以在極低的信噪比條件下實現無差錯傳輸,具有逼近香農限的性能,如圖1所示:

圖1 LDPC碼性能
LDPC 碼主要優點:一是碼長比較長的LDPC 碼可以在極低的信噪比條件下實現無差錯傳輸,具有逼近香農限的性能;二是LDPC 碼通常用BP 算法譯碼,該譯碼算法復雜度和奇偶校驗矩陣中非零元素成正比,奇偶校驗矩陣中非零元素和碼長成正比,從而對長碼長LDPC 碼可以實現線性時間復雜度譯碼,從而逼近香農限不僅存在,而且是可實現的;三是BP 譯碼算法具有內在并行性,可以用高度并行的結構實現,可以達到極高的譯碼吞吐量,吞吐量達到上Gb/s 的譯碼器已經出現。
LDPC 碼的缺點:一是LDPC 碼屬于分組碼,具有分組碼的普遍缺點:改變碼率和碼長比較困難;二是為了實現線性時間復雜度編碼,LDPC 碼編碼通常是用奇偶校驗矩陣來完成的,這要求其奇偶校驗矩陣具有特殊的結構,這個在設計LDPC 碼的時候必須專門考慮;三是LDPC 碼的譯碼算法具有較高復雜度,實現成本高;四是性能比較好的LDPC 碼碼長比較長,譯碼延遲大,比較適合寬帶通信;五是LDPC 碼在短碼長時性能比較差。
LDPC 碼可以分成正則(reg ular)和非正則(ir regular)兩種:正則LDPC 碼奇偶校驗矩陣的每行的行重量都是相同的,每列的列重量也是相同的;而非正則LDPC 碼的行列重量可以不相同,是符合一定的分布。對于相同碼長和碼率的LDPC 碼,非正則LDPC 碼性能要比正則LDPC 碼好。正則LDPC 碼性能取決于奇偶校驗矩陣的girth,girth 越高性能越好;非正則LDPC 碼的性能主要取決于奇偶校驗矩陣列重量的次數分布,girth 也有一定的影響。
通常,通信系統中使用較多的是二元域LDPC。二元域LDPC 的奇偶校驗矩陣H 是一個只有0元素和1元素的矩陣,其大小為,n 表示碼長,m 表示校驗位長度,信息比特長度k=n-m。下面敘述中的LDPC 都是指二元域LDPC。
如果定義LDPC 的H 矩陣中的1 元素的位置是隨機,則該LDPC 碼被稱為隨機的;如果定義LDPC 的H 矩陣中的1元素的位置是有一定結構的,則該LDPC 被稱為結構化的。
通常,結構化LDPC 碼可以通過一個大小為(mb×z)×(nb×z)的矩陣H 來定義。它由大小為z×z 循環移位矩陣塊或大小z×z 為0的矩陣組成,形式如下:


所以,H 矩陣的大小是M×N,其中N=nb×z,M=mb×z,z 是一個正整數。基礎矩陣Hb 的大小為mb×nb,形式如下:

這種結構化LDPC 有幾個概念:H 是Hb的擴展矩陣(expand matrix),Hb是H 的基礎矩陣(base matrix),z 是擴展因子(expand factor)。
擴展基礎矩陣的時候將Hb中的非負元素替換為z×z 大小的置換矩陣,并將其中的-1元素置換為z×z 大小為的零矩陣。
置換矩陣使用的是循環右移置換,所以在基礎矩陣中元素0表示z×z 單位陣,元素1表示z×z 單位陣循環右移一列對應的矩陣,-1元素表示z×z 零矩陣。
這樣的結構化LDPC,信息長度K 等于N-M,這里N 是碼塊比特長度,M 是校驗比特長度。通過改變擴展因子z 的大小,一個基礎矩陣可以支持不同的碼長。
基礎矩陣的修正準則定義如下:

式中,zmax是最大的擴展因子(the largest expand factor),這里等于512;z 是對應當前碼長的擴展因子;[]表示向下取整。
本項目中的LDPC 碼是一種具有準循環結構的LDPC 碼,這類碼字具有編碼結構簡單的特點。QC-LDPC 碼的校驗陣可以通過一個模版矩陣擴展得到,模版矩陣Hb可以分成兩部分Hb1和Hb2,其中Hb1對應系統位部分,Hb2對應校驗位部分,這樣:

Hb2可以分成兩部分Hb和H'b2,其中矢量Hb的列重量是奇數,H'b2具有雙對角結構:

LDPC 碼是系統碼,整個碼字可以分成信息部分S 和校驗部分P。編碼的過程就是從一個碼字的信息位算出校驗位的過程。為了方便描述,信息部分S 被分成kb=nb-mb個z 比特組:
u=[u(0)u(1)…u(kb-1)]T
其中每個元素u 表示如下列向量:

使用基礎矩陣Hb,校驗位P 被分成mb個z 比特組:

其中每個元素v 表示如下列向量:

編碼過程分成兩步:
(1)初始化:計算v(0);
(2)遞歸:從v(i)計算v(i+1),0≤i≤mb-2。
v(0)可以通過對Hb的行求和得到:

這里1≤x≤mb-2,表示Hb中的惟一一個非負和非成對元素的行索引,其中Pi表示循環右移i 位的z×z 的單位陣。通過上面方程可以解出v(0)。
考慮到H'b2的結構,可以得到以下遞歸:

這里P-1=0zxz
(1)計算v(0)

在計算v(0)的過程中,將前mb-1個中間值存儲,i=0,1,...mb-2。(mb=4,kb=28),那么v(0)可以表示如下:

(2)計算v(1)

由于P(0,28)=0,上式可化簡為:
v(1)=m(0)+v(0)
(3)計算v(i+1)

模版矩陣Hb可以分成兩部分Hb1和Hb2,其中Hb1對應系統位部分,Hb2對應校驗位部分矩陣劃分:

LDPC 碼的標準譯碼算法是BP 算法(Bel ief Propagation 算法,也叫Message Passing 算法)。下面將詳細介紹該算法,該算法是基于定義LDPC 碼奇偶校驗矩陣H(m×n),n 為LDPC 碼的碼長,m 為校驗位長度。下面介紹一下后面用到的符號:
N(m)={n:Hmn=1}表示參加第m 個校驗方程的所有比特的下標的集合;M(n)={m:Hmn=1}表示第n 個比特參加的所有校驗方程的集合;N(m) 表示參加第m 個校驗方程的除去第n 個比特所有比特的下標的集合;M(n)m 表示第n 個比特參加的除去第m 個校驗方程所有校驗方程的集合;yn為信道軟信息;qbn為譯碼輸出軟信息,即P(xn=b);為譯碼輸出硬判決;qbmn表示從第n 個變量節點到第m 個校驗節點關于xn=b 的概率信息,即在除了第m 個校驗方程外,比特節點n 參加的其他校驗方程和信道軟信息yn給出的xn=b 的概率;rbmn表示從第m 個校驗節點到第n 個變量節點的信息,即在第m 個校驗方程的除去第n 個比特以外其他比特的概率用{qmn'}n'≠n 給出和xn=b 的情況下第m 個校驗方程通過的概率。
BP(Believe Propagation)置信傳播算法是目前應用最多的也是性能比較好的一種算法,它的一般譯碼過程如下[1]:
概率域BP 算法步驟:
(1)初始化
按照下面公式初始化q0mnand q1mn:

(2)校驗節點更新
按照下面公式更新r0mn和r1mn:

其中,
(3)變量節點更新
按照下面公式更新q0mn和q1mn:


(5)迭代中止判斷
按照下面公式對譯碼輸出數據進行硬判決:

概率域BP 算法涉及到大量乘法運算,運算量大,并且動態范圍大數值穩定性不好,在實際應用中通常使用對數域BP 算法。
對數域BP 算法將使用下面對數似然比[2]:

Min-Sum 算法和標準對數域BP 算法的差別在兩點:
第一,直接用信道軟信息yn對碼字比特的對數似然比進行初始化,不需要信道噪聲方差信息σ2,也就是不需要估計碼字所對應的信道信噪比。

其中

在AWGN 條件下,Min-Sum 算法比標準對數域BP 算法有大概0.3dB 左右的性能損失,并且在低信噪比條件下迭代次數也要多一些。性能損失和LDPC 碼的行重量有關,行重量越大近似運輸誤差越大,性能損失也越大。

其中常數A 和LDPC 碼的校驗矩陣H 的行重量有關系,可能取值為0.6~0.9,確切的數值要通過仿真來確定。
在AWGN 條件下,修正最小和算法性能要比標準BP 算法性能大概差0.1dB,如圖2所示:
分層譯碼算法和標準BP 算法的區別在于在迭代中當更新完H 矩陣中每一行非零元素對應的LLR(rmn)后馬上更新該行每個非零元素對應列所有非零元素對應的LLR(qmn),然后再對H 矩陣中的下一行進行譯碼。該算法和標準BP 算法比可以加快譯碼收斂,節約迭代次數以提高吞吐量,最好情況下可以節約一半的迭代次數。
分層對數域BP 算法步驟:
(1)初始化

圖2 修正最小和算法性能與標準BP算法性能比較
按照下面公式初始化LLR(qmn):

(2)校驗節點和變量節點更新按照下面公式更新LLR(rmn):

其中:

(3)LLR(qn)更新
按照下面公式更新LLR(qn):

(4)迭代中止判斷
按照下面公式對譯碼輸出數據進行硬判決:


圖3 分層BP譯碼算法和普通BP譯碼算法的性能比較
LDPC 譯碼采用簡化的分層譯碼算法,這使得LLR(qmn)不直接存儲,降低對硬件資源的需求,整個譯碼流程如圖4所示。
(1)初始化。初始信息LLR(qn)直接用信道軟信息yn 對碼字的比特軟信息進行初始化,LLR(qn)=yn,并且按照擴展因子512 個LLR(qn)值為一組,存入LLR RAM 中。同時R Storage Memory 也進行初始化,校驗信息即外信息LLR(rmn)=0。
(2)更新變量節點和外信息。R Storage Memory 將未更新的外信息LLR(rmn)信息讀出,與交織后的比特軟信息qn進行LLR(qmn)=LLR(qn)-LLR(rmn)運算,變量節點信息LLR(qmn)輸入到CNU 模塊計算出外信息,對應的計算公式為LLR將此外信息一路存回至R Storage Memory 中,覆蓋對應的舊的LLR(rmn)。一路送入至對應的加法器計算出新的比特軟信息,LLR(qn)=LLR(qmn)+LLR(rmn),新的比特軟信息經過反交織模塊處理后存入LLR RAM 中,更新qn。
(3)迭代終止判斷。當完成一次迭代后,我們根據=0來判斷譯碼是否結束,滿足或達到最大迭代次數結束整個譯碼過程,否則跳到(2) 繼續迭代。
通過仿真,考慮實現的難度我們采用分層BP 算法,結果表明所實現的文中LDPC 編譯碼算法的性能相比于其他編碼方式在信噪比上有了很大的提高,有效地提高了系統的有效通信距離。