劉欣, 劉洋, 王斌, 張育芝
(西安科技大學通信與信息工程學院, 西安 710054)
空間耦合低密度奇偶校驗(spatially coupled low density parity check,SC-LDPC)碼作為一種能夠證明可達容量限的編碼方案而受到中外學者的廣泛關注。SC-LDPC碼由Kudekar等[1]于2011年首次提出,并證明了當碼長足夠長時,SC-LDPC碼在二元刪除信道(binary erasure channel, BEC)下采用置信傳播(belief propogation, BP)譯碼算法可獲得接近于相應分組LDPC碼采用最大后驗概率(maximum a posterior, MAP)譯碼算法時的性能,即SC-LDPC碼具有“閾值飽和”特性。之后,Kudekar等[2]還證明了SC-LDPC碼在二進制無記憶對稱(binary memoryless symmetric, BMS)信道下也存在“閾值飽和”現象。然而,SC-LDPC碼優異的“閾值飽和”特性需要在碼長很長時才能實現,當采用BP譯碼算法時,實現復雜度呈指數倍增加,無法在實際中應用。Iyengar等[3]、Ali等[4]提出了將滑窗譯碼算法應用于SC-LDPC碼譯碼,開啟了SC-LDPC碼滑窗譯碼算法性能和譯碼復雜度的研究。除滑窗譯碼算法外,Bazzi等[5]將線性規劃譯碼算法引入SC-LDPC碼的譯碼上,用于分析和證明SC-LDPC碼集的閾值飽和特性。上述關于SC-LDPC碼的譯碼算法研究主要集中于實現譯碼復雜度和譯碼性能之間的有效折中。
近年來,深度學習技術在各個領域均取得了突破性進展[6]。目前,在信道譯碼方面的研究仍處于初步探索階段[7]。文獻[8]針對高密度奇偶校驗碼,采用卷積神經網絡(convolution neural network,CNN)進行迭代譯碼,獲得了優于BP譯碼算法的性能。為了降低訓練的參數個數,文獻[9]將譯碼參數與迭代次數相結合形成循環神經網絡(recurrent neural network,RNN)進行迭代譯碼,用于有效解決中短碼長線性分組碼的譯碼問題。文獻[10]分別利用多層感知機(multi-layer perceptron,MLP)、CNN以及RNN設計線性分組碼譯碼器。結果表明,基于RNN的譯碼器性能最好,但計算時間最長,CNN譯碼器性能次之,MLP譯碼器性能最差。目前,尚未有深度學習技術應用于SC-LDPC碼的譯碼。
為此,基于深度學習方法提出了一種SC-LDPC碼的深度迭代譯碼算法,通過在消息傳遞邊上引入權重系數并采用深度神經網絡對權重系數進行訓練來優化消息的可靠性度量值。
SC-LDPC碼通過將L個相同但互不相關的規則LDPC分組碼通過空間耦合的方式連接成一條耦合鏈來構造,具體包括邊展開和隨機置換兩個步驟。
步驟1邊展開:考慮L個相同但互不相關的(dv,dc)規則LDPC分組碼,其中dv、dc分別為變量節點和校驗節點的度分布,每一個LDPC碼對應于SC-LDPC碼耦合鏈上的一個位置,記為u(u=1,2,…,L)。考慮滿連接的邊展開方式,設a為dv和dc的最大公約數,且a>1。那么一定存在一組正整數d′v和d′c滿足dv=ad′v和dc=ad′c,且最大公約數gcd(d′v,d′c)=1,即每個位置上有d′c個變量節點和d′v個校驗節點。位置u上的每一個變量節點有且僅通過一條邊連接到位置u+i(i=0,1,…,a-1)上的一個校驗節點。耦合鏈的末端需要添加a-1個校驗節點以確保所有變量節點的邊均能夠連接到校驗節點上。定義耦合寬度w=a-1。每個位置均進行上述邊展開操作,就形成了一條(dv,dc,L)耦合鏈,其中L為耦合長度。
步驟2隨機置換:由(dv,dc,L)耦合鏈構造一個SC-LDPC碼,只需要對(dv,dc,L)耦合鏈進行一個“M-lifting”操作[11],其中M為隨機置換矩陣大小。具體來說,將(dv,dc,L)耦合鏈看作一個原模圖,然后進行“復制-置換”操作,即先將耦合鏈復制M次,然后再對M個耦合鏈中的邊進行隨機置換,得到一個(dv,dc,L,M)SC-LDPC碼。
(dv,dc,L)SC-LDPC碼集的基矩陣為
(1)
式(1)中:Bi(i=0,1,…,w)為分量基矩陣,大小為d′v×d′c,表示位置u上的d′c個變量節點和位置u+i上d′v個校驗節點之間的邊連接關系。
通過耦合,將每個位置上的每個變量節點dv條邊分別連接到w+1個相鄰位置的校驗節點上,即將LDPC碼原模圖的基矩陣B拆分成w+1個分量基矩陣。分量基矩陣Bi(i=0,1,…,w)需滿足式(2),且Bi中元素均為非負整數。
(2)
(dv,dc,L)SC-LDPC碼集的設計碼率為
(3)
以(3,6,L)SC-LDPC碼耦合鏈為例描述其構造過程。圖1(a)為(3,6)規則LDPC碼原模圖,基矩陣B=[3 3]。圖1(b)為L個相同但互不相關的LDPC碼原模圖。然后,將L個互不相關的LDPC碼原模圖按照邊展開規則連接得到一條SC-LDPC碼耦合鏈,如圖2所示。每一個LDPC碼原模圖對應耦合鏈上一個耦合位置,位置依次標記為1,2,…,L,耦合寬度w=a-1=2,a=gcd(3,6)=3,耦合鏈的末端添加了2個校驗節點,分別標記為位置L+1和位置L+2。耦合鏈上的變量節點度是規則的,每一個變量節點連接3個校驗節點;校驗節點度是輕微非規則的,耦合鏈中間位置(位置3~L)上的每一個校驗節點連接6個變量節點,耦合鏈兩端的位置2和位置L+1的2個校驗節點各連接4個變量節點,位置1和位置L+2的2個校驗節點各連接2個變量節點。

圖1 (3,6)規則LDPC碼原模圖Fig.1 Potograph of (3,6) regular LDPC code

圖2 (3,6,L) SC-LDPC碼耦合鏈Fig.2 The coupled chain of (3,6,L) SC-LDPC code
根據式(2)可知,每個分量基矩陣為B0=[1 1]=B1=B2,則(3,6,L)SC-LDPC碼集的基矩陣為
(4)
(3,6,L)SC-LDPC碼的設計碼率為
(5)
傳統的BP迭代譯碼算法是在Tanner圖邊上迭代更新變量節點消息和校驗節點消息。具體來說,每一個校驗節點根據從與其相連的變量節點處接收到的消息計算輸出給變量節點的消息。同樣地,每一個變量節點進行類似的過程,根據從與其相連的校驗節點處接收的消息計算輸出給校驗節點的消息。當達到最大迭代次數時,變量節點將接收的所有信息進行判決。由此可以看出,每個變量節點傳遞給相連的校驗節點的消息均相等;反之亦然,每個校驗節點傳遞給相連的每個變量節點的消息也相等,即Tanner圖上每個節點相連的邊上的消息的可靠性度量值相等,會帶來錯誤消息的持續傳播,降低譯碼收斂速度。
針對此問題,提出一種深度迭代譯碼算法,在消息傳遞及更新過程中引入權重系數,并采用深度神經網絡對其訓練獲取該權重系數,以此來優化每次迭代過程中不同邊上消息的可靠性度量值,從而減少SC-LDPC碼在傳統迭代譯碼算法下的迭代次數,加快收斂速度。具體來說,將迭代譯碼中Tanner圖的邊信息作為全連接深度神經網絡(deep neural network, DNN)的輸入,經過多層DNN處理Tanner圖邊上的消息,降低邊上錯誤消息的權重,增大正確消息的權重,以此來優化消息傳遞過程中邊上消息的可靠性度量值。

圖3 含4層隱藏層的深度神經網絡架構Fig.3 DNN architecture with 4 hidden layers
設定最大迭代次數為Lmax,SC-LDPC碼長為N,N=d′cLM,Tanner圖中總邊數為E,E=dv×N。神經網絡包含一層輸入層,2Lmax層隱藏層,一層輸出層。輸入層是一個N長的矢量,由接收碼字的對數似然比(log likelihood ratio, LLR)信息構成。所有隱藏層的神經元數量均為E,每一個神經元對應于Tanner圖中的一條邊上的信息。對于奇數層,每一個神經元的信息對應于Tanner中變量節點傳遞給校驗節點的消息;對于偶數層,每一個神經元的信息對應于Tanner中校驗節點傳遞給變量節點的消息。神經網絡會給Tanner圖中的每一條邊分配權重系數,并對其進行訓練。輸出層是長度為N的譯碼碼字。深度神經網絡結構如圖3所示。深度迭代譯碼算法具體步驟如下。
步驟1初始化。計算接收碼字初始LLR值lv,其計算公式為
(6)
式(6)中:yv為對應第v個碼比特Cv的信道輸出,v=1,2,…,N;Pr(Cv=1|yv)為接收到yv后變量節點為Cv=1的概率;Pr(Cv=0|yv)為接收到yv后變量節點為Cv=0的概率。
步驟2變量節點消息更新,可表示為
(7)
式(7)中:i=1,2,…,2Lmax,式(7)僅對奇數i更新;e=(v,c)為Tanner圖中連接第v個變量節點和第c個校驗節點的邊;wi,v為初始LLR值lv的權重;e′=(v,c′)為Tanner圖中連接第v個變量節點和第c′個校驗節點的邊,其中c′不包含第c個校驗節點;xi-1,e′為e′邊對應的LLR;wi,e,e′為對數似然比xi-1,e′的權重;對于所有的e′,初始化x0,e′=0。
步驟3校驗節點消息更新。
(8)
式(8)中:e′=(v′,c)為Tanner圖中連接第v′個變量節點和第c個校驗節點的邊,其中v′不包含第v個變量節點,式(8)僅對偶數i更新。
步驟4判決輸出。
(9)
式(9)中:w2Lmax+1,v為初始LLR值lv的最終權重;x2Lmax,e′為e′邊對應的LLR;w2Lmax+1,v,e′為對數似然比x2Lmax,e′的最終權重;σ(x)=max(0,x)為激活函數。
利用交叉熵函數作為損失函數進行訓練。
(10)
式(10)中:L(o,y)為信道輸出y與神經網絡輸出o的損失;ov為神經網絡的輸出;yv為傳輸碼字的第v個比特。
為了驗證深度迭代譯碼算法的譯碼性能,構造多組不同參數的SC-LDPC碼的校驗矩陣。發送端依次使用不同碼率的SC-LDPC碼進行編碼,采用BPSK調制,傳輸信道選取加性高斯白噪聲(additive white Gaussian noise, AWGN)信道,接收端分別采用深度迭代譯碼算法,傳統迭代譯碼算法以及滑窗譯碼算法進行譯碼恢復信息。
搭建的仿真實驗環境為Tensorflow1.15,采用Python腳本語言,GPU使用NVIDIA的RTX3070顯卡。訓練數據集由經過AWGN信道傳輸后的接收序列生成,信噪比變化范圍為0~6 dB,訓練數據集的Batchsize大小為5 000,Minibatch大小為100,其中每個信噪比包含200組數據,測試數據集的生成與訓練數據類似。DNN訓練所采用的參數配置如表1所示。

表1 參數配置Table 1 Parameter configurations
首先,構造兩組不同度分布的SC-LDPC碼,分別為(3,6,15,32)SC-LDPC碼與(4,8,15,32)SC-LDPC碼。(3,6,15,32) SC-LDPC碼耦合鏈長度15,隨機置換矩陣大小為32,耦合寬度w=2,分量基矩陣為B0=B1=B2=[1 1],設計碼率為0.433 3。 (4,8,15,32)SC-LDPC碼耦合鏈長度15,隨機置換矩陣大小為32,耦合寬度w=3,分量基矩陣為B0=B1=B2=B3=[1 1],設計碼率為0.4。仿真結果如圖4所示,窗口尺寸分別為3和4。結果表明,當迭代次數均為5時,深度迭代譯碼算法的譯碼性能優于傳統迭代譯碼算法和滑窗譯碼算法的譯碼性能。

實線為深度迭代譯碼算法;虛線為傳統迭代譯碼算法;點線為滑窗譯碼算法圖4 度分布不同時,SC-LDPC碼的譯碼性能對比Fig.4 Performance comparisons of SC-LDPC codes with different degree distributions
其次,構造三組不同耦合長度的(3,6,L,32)SC-LDPC碼,耦合長度L依次取10,15,20,分量基矩陣均為B0=B1=B2=[1 1],設計碼率依次為0.4,0.433 3和0.45。譯碼性能對比結果如圖5所示,可以看出,在不同耦合長度下,當迭代次數均設置為5時,深度迭代譯碼算法的譯碼性能優于傳統迭代譯碼算法和滑窗譯碼算法的譯碼性能,且隨著L的增大,譯碼性能逐漸提升,與SC-LDPC碼的自身特性相吻合。

圖5 耦合長度不同時,SC-LDPC碼的譯碼性能對比Fig.5 Performance comparisons of SC-LDPC codes with different coupling lengths
最后,構造兩組隨機置換矩陣大小不同的(3,6,15,M)SC-LDPC碼,隨機置換矩陣大小M分別取32和64,分量基矩陣均為B0=B1=B2=[1 1],設計碼率均為0.433 3。誤碼性能對比結果如圖6所示,可以看出,在不同的M下,當迭代次數均設置為5時,深度迭代譯碼算法的譯碼性能均優于傳統迭代譯碼算法和滑窗譯碼算法,且M越大,譯碼性能越好,這與SC-LDPC碼的特性保持一致。

圖6 置換矩陣大小不同時,SC-LDPC碼的譯碼性能對比Fig.6 Performance comparisons of SC-LDPC codes with different random permutation matrix sizes
提出了一種SC-LDPC碼的深度迭代譯碼算法,得出如下結論。
(1)該算法在消息傳遞過程中引入權重系數,并采用深度神經網絡對其訓練獲取該系數,可以優化邊上消息的可靠性度量值,加快譯碼收斂速度,提升譯碼性能。
(2)仿真結果表明,在相同迭代次數下,對于不同度分布,不同耦合長度,不同隨機置換矩陣大小的SC-LDPC碼,所提出的深度迭代譯碼算法的譯碼性能均優于傳統迭代譯碼算法和滑窗譯碼算法的譯碼性能,同時還保留了SC-LDPC碼本身的特性。
(3)將深度學習技術與傳統無線技術相結合,可以有效提升傳統算法的性能,智能通信有望成為未來通信發展的主流方向之一。