倪永婧,郭 巍,張靜濤
(1.河北科技大學(xué) 信息科學(xué)與工程學(xué)院,河北 石家莊 050000;2.中國電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081)
在通信中,由于信道上存在著許多干擾,因此接收機(jī)會(huì)出現(xiàn)接收錯(cuò)誤,這一點(diǎn)在無線信道中尤其嚴(yán)重。香農(nóng)的信道編碼定理指出[1],在碼長趨向無窮長時(shí),可以找到達(dá)到信道容量的編碼。BCH和LDPC就是2類經(jīng)過特殊設(shè)計(jì)的信道編碼。其中, LDPC的漢明距離隨著碼長的增加而增加[2],因此在碼長很長時(shí),可以接近信道容量。
盡管LDPC具有相當(dāng)多的優(yōu)勢(shì),但是在一些特殊場(chǎng)景中,比如功率很低的情況下,信息速率也非常低,此時(shí)LDPC引起的延遲會(huì)十分顯著。在有限碼長編碼理論中,文獻(xiàn)[3-4]研究了有限碼長信道編碼的理論性能,文獻(xiàn)[5]研究了有限碼長下的信道-信源聯(lián)合編碼,文獻(xiàn)[6]研究了接力信道中采用有限碼長編碼的優(yōu)勢(shì)。上述研究都是有限碼長編碼的理論研究,如何構(gòu)造高性能有限碼長編碼的問題,通常由RS、RM碼等構(gòu)造[7]。近年來,隨著機(jī)器學(xué)習(xí)的發(fā)展,將以深度神經(jīng)網(wǎng)絡(luò)為代表的機(jī)器學(xué)習(xí)的方法應(yīng)用在物理層上,例如調(diào)制識(shí)別[8]、序列估計(jì)[9]等,從而在一些特殊場(chǎng)景下獲得比傳統(tǒng)算法更好的性能。在信道編碼方面,文獻(xiàn)[10]將神經(jīng)網(wǎng)絡(luò)應(yīng)用在隨機(jī)編碼和Polar碼的譯碼器上。文獻(xiàn)[11]采用卷積神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)有色高斯噪聲,從而提高了LDPC在有色高斯噪聲下的性能。文獻(xiàn)[12-13]采用循環(huán)神經(jīng)網(wǎng)絡(luò),在增加了隨機(jī)置換層之后,提高了HDPC的性能,在較低運(yùn)算資源下獲得了與極大似然譯碼相近的性能。
本文將RNN應(yīng)用在短碼長LDPC譯碼器上,提高了譯碼器的性能。首先,簡單介紹了LDPC的傳統(tǒng)譯碼方法,包括和-積算法及其Trellis圖的表示,并且給出了一個(gè)簡單的Trellis圖的例子。其次是基于RNN的LDPC譯碼算法,然后對(duì)本文提出的算法進(jìn)行了仿真驗(yàn)證,最后給出結(jié)論。
置信度傳播(Belief Propagation)算法是Tanner圖上的消息傳播算法,用于計(jì)算邊緣概率分布。LDPC的和-積(Sum-Product)譯碼算法是置信度傳播算法的應(yīng)用,LDPC的其他近似譯碼算法,例如最小-和(Min-Sum)算法是對(duì)和-積算法的近似。根據(jù)文獻(xiàn)[14],當(dāng)Tanner上沒有環(huán)時(shí),LDPC的碼距上限很低,因此性能高的LDPC的Tanner圖上均有環(huán),從而置信度傳播算法的結(jié)果近似于邊緣概率分布。當(dāng)譯碼器的輸入為對(duì)數(shù)似然比時(shí),置信度傳播算法的第l次迭代如下所示[15]:
(1)
(2)
式(1)被稱作行更新,Nm,n表示校驗(yàn)矩陣第m行中除了第n列上的非零元素之外,其他非零元素的列號(hào)的集合。式(2)被稱作列更新,Mn表示第n列上所有非零元素的行號(hào)集合。LLR是譯碼器輸入的對(duì)數(shù)似然比。第l次迭代之后,每符號(hào)的邊緣概率分布為:
(3)
在機(jī)器學(xué)習(xí)中,函數(shù):
被稱為Sigmoid函數(shù),通常作為神經(jīng)網(wǎng)絡(luò)的輸出層。
將1.1節(jié)中的置信度傳播算法展開,就可以得到譯碼器的Trellis圖表示[11]。Trellis圖可以分為輸入層、中間層和輸出層3部分。輸入層的節(jié)點(diǎn)表示解調(diào)器的輸出,通常為對(duì)數(shù)似然比。中間層的節(jié)點(diǎn)表示Tanner圖中邊上傳播的信息。輸出層對(duì)中間層計(jì)算的條件概率做邊緣化處理,得到碼字中每符號(hào)的對(duì)數(shù)似然比。
Trellis圖中只有分別屬于相鄰2層的節(jié)點(diǎn)之間有邊,這些邊由碼字的校驗(yàn)矩陣決定。假設(shè)Trellis圖中共有2L個(gè)中間層,那么,當(dāng)i∈{2,4,…,2L}時(shí),第i層的輸出為:
(4)
當(dāng)i∈{2,4,…,2L}時(shí),i層的輸出為:
(5)
Trellis圖的輸出為:
(6)
以文獻(xiàn)[16]中的編碼為例,其校驗(yàn)矩陣如式(7)所示。不難看出,這是一個(gè)規(guī)則編碼,碼長很短,其Tanner中邊的數(shù)量很少。根據(jù)Trellis圖的定義,Trellis中的中間節(jié)點(diǎn)表示每次迭代中Tanner圖中對(duì)應(yīng)邊上所傳播的信息。因此式(7)所示的編碼的Trellis圖較為簡單,易于在上面進(jìn)行計(jì)算驗(yàn)證。
。
(7)
圖 1是式(7)所表示編碼的Trellis圖,中間共4層隱藏節(jié)點(diǎn),意味著該圖描述了2次置信度傳播迭代。
圖1 式(7)中校驗(yàn)矩陣對(duì)應(yīng)的Trellis圖
節(jié)點(diǎn)上的短線表示輸入譯碼器的對(duì)數(shù)似然比。奇數(shù)列表示置信度傳播算法中的行更新,偶數(shù)列代表置信度傳播算法中的列更新,因此每2列表示置信度傳播算法的一次迭代。
循環(huán)神經(jīng)網(wǎng)絡(luò)[17]是神經(jīng)網(wǎng)絡(luò)的一種,其特點(diǎn)是在網(wǎng)絡(luò)中增加了隱藏狀態(tài)。RNN的基本結(jié)構(gòu)如圖 2所示。在圖 2中,φ表示中間層,中間層可能包含一些內(nèi)部結(jié)構(gòu),常見的情況是中間層由一個(gè)全連接層和激活函數(shù)組成。Ht表示t時(shí)刻的隱藏狀態(tài),xt是t時(shí)刻的輸入,o表示輸出函數(shù)。這樣,t時(shí)刻的輸出可以表示為:
圖2 RNN的結(jié)構(gòu)
(8)
對(duì)比Trellis圖和RNN可以發(fā)現(xiàn),Trellis圖和RNN具有十分相似的結(jié)構(gòu)。RNN中的隱藏狀態(tài)是Trellis圖中每次迭代后的概率分布,RNN中的中間輸出結(jié)果是對(duì)每次迭代后的概率分布做邊緣化處理的結(jié)果。
同時(shí)也要注意到,Trellis圖和RNN的主要區(qū)別在于輸入。RNN的提出主要是為了考慮輸入序列中前后符號(hào)之間的相關(guān)性。然而,在譯碼器中,每次迭代后的輸入為同一解調(diào)輸出,循環(huán)迭代的原因是為了近似計(jì)算各符號(hào)的對(duì)數(shù)似然比。
盡管Trellis圖和RNN具有不同的物理意義,其結(jié)構(gòu)上的相似性使得采用訓(xùn)練RNN的方法來優(yōu)化Trellis圖中的權(quán)重成為可能。文獻(xiàn)[12-13]將RNN結(jié)構(gòu)應(yīng)用在BCH、RS等代數(shù)編碼上,獲得了接近于極大似然譯碼的性能。本文考慮另一種編碼,即短碼長的LDPC碼。一般認(rèn)為,LDPC的碼長越長,其性能越好。當(dāng)LDPC的碼長較短時(shí),其瀑布區(qū)的信噪比會(huì)增加,且平臺(tái)區(qū)的誤碼率也會(huì)增加。因此,LDPC通常應(yīng)用于速率較高的業(yè)務(wù)數(shù)據(jù),在這種情況下,編碼器引起的延遲可以忽略。在一些具有特殊要求的通信中,受限于發(fā)射機(jī)功率或者接收機(jī)的增益,使得信息速率較低,此時(shí)長碼長的LDPC編碼引起的延遲會(huì)難以接受。這種情況下,除了考慮BCH、RS等代數(shù)編碼之外,短碼長的LDPC編碼也是一種可能的方案。
短碼長LDPC性能較差的主要原因是碼長較短時(shí),Tanner圖上的環(huán)的半徑較小,從而導(dǎo)致碼距較小。與文獻(xiàn)[12-13]類似,如果改變譯碼中線性運(yùn)算的權(quán)重,那么可以預(yù)期一些導(dǎo)致性能惡化的邊的權(quán)重會(huì)降低,從而提高譯碼器的性能。此外,由于這種譯碼器(BP-RNN)的結(jié)構(gòu)直接來源于置信度傳播算法,因此保證了其性能不會(huì)比置信度傳播算法更差。
具體來說,在BP-RNN譯碼器中,式(4)保持不變,式(5)變?yōu)椋?/p>
,
(9)
,
(10)
損失函數(shù)采用交叉熵,定義如下:
,
(11)
式中,on是網(wǎng)絡(luò)的輸出,代表譯碼器估算的第n個(gè)符號(hào)為0的概率;yn是實(shí)際發(fā)送的碼字。交叉熵衡量的是2個(gè)概率分布之間的相似程度[1]。在訓(xùn)練中發(fā)送的是全零碼字。不難看出,此時(shí)交叉熵只與網(wǎng)絡(luò)輸出有關(guān),網(wǎng)絡(luò)輸出越接近于0,交叉熵越小。因此優(yōu)化交叉熵,同時(shí)就優(yōu)化了網(wǎng)絡(luò)的性能。
式(4)中的雙曲正切和反雙曲正切函數(shù)的計(jì)算量很大,Min-Sum算法[16]對(duì)式(4)做近似處理:
。
(12)
同樣地,在BP-RNN譯碼器中,也采用類似的近似方法,并將式(12)中的權(quán)重改為需要優(yōu)化的權(quán)重,即:
。
(13)
可以看出,BP-RNN中只調(diào)整中間層和輸出的邊的權(quán)重,并不調(diào)整輸入層邊的權(quán)重。這是由于輸入層僅僅完成每個(gè)符號(hào)的對(duì)數(shù)似然比的傳遞,并不需要改變其大小。
為了驗(yàn)證本文算法的性能,在特定的短碼長LDPC上進(jìn)行了仿真。本文采用了文獻(xiàn)[18]中的短碼長LDPC設(shè)計(jì)方法,設(shè)計(jì)了碼長為128,256和512的3種準(zhǔn)循環(huán)LDPC,其校驗(yàn)矩陣分別如圖 3、圖 4和圖 5所示。仿真中采用了深度學(xué)習(xí)框架PyTorch[19]。
圖3 LDPC(128,64)校驗(yàn)矩陣
圖4 LDPC(256,128)校驗(yàn)矩陣
圖5 LDPC(512,256)校驗(yàn)矩陣
在訓(xùn)練中,發(fā)送的碼字為全0碼,采用PyTorch實(shí)現(xiàn)的隨機(jī)梯度下降[20](SGD)算法來優(yōu)化譯碼器的權(quán)重,學(xué)習(xí)速率為10-3,mini-batch的大小為200。Gruber等人[10]的研究結(jié)果表明,在處理類似LDPC的隨機(jī)編碼時(shí),如果網(wǎng)絡(luò)設(shè)計(jì)較差,神經(jīng)網(wǎng)絡(luò)對(duì)訓(xùn)練時(shí)沒有出現(xiàn)過的碼字有可能無法正確譯碼。因此,在性能評(píng)估中,首先生成長度為64,128和512的隨機(jī)二進(jìn)制序列,然后編碼為碼率1/2的系統(tǒng)碼。這樣,所有參與性能評(píng)估的碼字均為訓(xùn)練時(shí)未出現(xiàn)的碼字(全零碼字出現(xiàn)的概率僅為2-64或更低,可以認(rèn)為不出現(xiàn)),從而增加了仿真結(jié)果的說服力。此外,文獻(xiàn)[12-13]中訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),訓(xùn)練數(shù)據(jù)為不同信噪比下的接收數(shù)據(jù)。由于LDPC本身的譯碼性能優(yōu)于文獻(xiàn)[12-13]中的BCH碼,因此本文只在低信噪比下訓(xùn)練。實(shí)際訓(xùn)練數(shù)據(jù)的信噪比為3.3 dB。同時(shí),在訓(xùn)練時(shí),RNN中的迭代次數(shù)為2,而訓(xùn)練完成后,RNN的迭代次數(shù)可以為任意多次。在調(diào)制方式為BPSK,AWGN信道的條件下,解調(diào)器輸出的對(duì)數(shù)似然比為[15]:
(14)
式中,σ2為噪聲的方差;R為碼率;Eb為每比特能量;rn為第n個(gè)符號(hào)接幅度。
圖 6是碼長128的LDPC譯碼器性能。從中可以看出,盡管BP-RNN在訓(xùn)練時(shí)只采用了2次迭代,但是在訓(xùn)練完成后,隨著迭代次數(shù)的增加,BP-RNN相對(duì)于BP的優(yōu)勢(shì)越明顯。在迭代15次時(shí),BP-RNN相比BP大約有0.5 dB的增益,且BP-RNN采用5次迭代時(shí)已經(jīng)超過BP15次迭代的性能。其次,盡管訓(xùn)練時(shí)采用了低信噪比的數(shù)據(jù),BP-RNN譯碼器在所有信噪比下的誤碼率都低于BP譯碼器。
圖6 LDPC(128,64),BP譯碼器和BP-RNN譯碼器性能
圖 7和圖 8分別是LDPC(256,128)和LDPC(512,256)的譯碼器性能。與LDPC(128,64)類似,在多次迭代的情況下,BP-RNN相比BP獲得了超過0.5 dB的增益。另一方面,RNN網(wǎng)絡(luò)優(yōu)化之后,引入了大量浮點(diǎn)數(shù)乘法運(yùn)算,從而增加了譯碼器計(jì)算復(fù)雜度,這是BP-RNN譯碼器的缺點(diǎn)。
圖7 LDPC(256,128),BP譯碼器和BP-RNN譯碼器性能
圖8 LDPC(512,256),BP譯碼器和BP-RNN譯碼器性能
本文探討了基于RNN結(jié)構(gòu)的譯碼器在短碼長LDPC上的應(yīng)用,介紹了BP-RNN譯碼器的結(jié)構(gòu),采用交叉熵作為損失函數(shù),并且對(duì)碼長分別為128,256和512的QC-LDPC進(jìn)行仿真。結(jié)果表明,在迭代次數(shù)較多的情況下,BP-RNN譯碼器運(yùn)算復(fù)雜度增加,但是相比BP譯碼器的性能有較大提高。本文的仿真均采用了雙精度浮點(diǎn)數(shù),在實(shí)際實(shí)現(xiàn)中,可否采用定點(diǎn)數(shù),從而降低運(yùn)算復(fù)雜度,提高譯碼器的吞吐率,是將來需要進(jìn)一步研究的問題。