薛 文 余 海 王建新 束 鋒
(南京理工大學(xué)電子工程與光電技術(shù)學(xué)院, 南京, 210094)
LDPC碼是一種接近香農(nóng)極限的好碼,廣泛應(yīng)用于衛(wèi)星通信、深空通信及無線通信領(lǐng)域。歐洲第2代衛(wèi)星電視標(biāo)準(zhǔn)[1]就采用了LDPC碼作為前向糾錯(cuò)碼。國際空間數(shù)據(jù)系統(tǒng)咨詢委員會(huì)[2]也在其近地及深空通信的標(biāo)準(zhǔn)選擇LDPC碼作為糾錯(cuò)編碼之一。LDPC碼是由Gallager于1963年提出的[3],起初沒有得到重視,直到20世紀(jì)90年代末期Mackay等“再發(fā)現(xiàn)”了LDPC碼,并提出了和積算(Sum-product algorithm, SPA)[4],使得LDPC碼真正成為了一種實(shí)用的接近香農(nóng)極限的好碼。和積算法從糾錯(cuò)性能角度來說是一種最優(yōu)的譯碼算法,但是考慮到硬件實(shí)現(xiàn)時(shí)復(fù)雜度還是較大。文獻(xiàn)[5]中針對(duì)譯碼算法中的校驗(yàn)節(jié)點(diǎn)更新算法,提出了一種簡(jiǎn)化算法,用比較運(yùn)算代替了SPA中的非線性運(yùn)算,叫做最小和算法(Min-sum algorithm, MSA)。這種算法不僅降低了算法復(fù)雜度,同時(shí)還是一種不需要信道估計(jì)的算法。MSA的糾錯(cuò)性能相比SPA有比較明顯的下降。針對(duì)這個(gè)問題,文獻(xiàn)[6,7]中給出了兩種修正算法,分別叫做規(guī)范化最小和算法(Normalized min-sum algorithm, NMSA)和偏移最小和算法(Offset min-sum algorithm, OMSA)。這兩種修正算法對(duì)簡(jiǎn)化過的校驗(yàn)節(jié)點(diǎn)更新算法進(jìn)行了修正,使其計(jì)算結(jié)果更接近于SPA中的結(jié)果,從而在略微增加了計(jì)算復(fù)雜度的前提下大大改善了譯碼性能,使得修正后的MSA能夠很接近SPA的性能水平。
除此之外,通過對(duì)LDPC碼譯碼迭代方式的改進(jìn)也可以影響譯碼性能。Mansour等借鑒Turbo碼的譯碼方式,提出了另一種迭代譯碼方式,叫做Turbo譯碼消息傳播(Turbo decoding message passing, TDMP)[8,9]方式,也被稱為分層譯碼(Layer decoding)。研究表明,達(dá)到同樣的譯碼性能,TDMP所需的迭代次數(shù)要遠(yuǎn)小于兩相消息傳播(Two phase message passing,TPMP)。國內(nèi)針對(duì)準(zhǔn)循環(huán)LDPC碼硬件實(shí)現(xiàn)工作也較多,文獻(xiàn)[10]提出了一種基于IR-UWB系統(tǒng)的高速準(zhǔn)循環(huán)LDPC編解碼器,其設(shè)計(jì)思路值得參考。評(píng)價(jià)一個(gè)LDPC譯碼器的優(yōu)劣也并沒有一個(gè)簡(jiǎn)單的標(biāo)準(zhǔn)。正如在文獻(xiàn)[11]中提到的,譯碼器的好壞要從資源消耗、吞吐率和糾錯(cuò)能力這3個(gè)方面來進(jìn)行綜合考量。
本文的設(shè)計(jì)需求是設(shè)計(jì)一個(gè)高效的FPGA實(shí)現(xiàn)硬件譯碼器。目前適合高效實(shí)現(xiàn)的LDPC碼主要是一些準(zhǔn)循環(huán)的Block-LDPC碼,本文選擇了802.16e(WiMAX)標(biāo)準(zhǔn)中定義的準(zhǔn)循環(huán)LDPC碼作為實(shí)現(xiàn)目標(biāo)。
對(duì)幾種常用校驗(yàn)節(jié)點(diǎn)更新算法及其改進(jìn)算法,SPA,MSA,NMSA和OMSA,利用密度進(jìn)化原理進(jìn)行了性能估計(jì)。圖1是上述幾種算法的估計(jì)性能比較圖。實(shí)際通信中接收信號(hào)的信噪比是未知的,考慮估計(jì)誤差,以上幾種算法性能估計(jì)如圖2所示。在不考慮信噪比估計(jì)誤差時(shí)SPA性能最佳,MSA最差,NMSA與OMSA基本相當(dāng),考慮信噪比估計(jì)誤差,SPA性能惡化,而MSA,NMSA和OMSA的性能幾乎不變。其原因主要是校驗(yàn)節(jié)點(diǎn)更新算法的差異性,MSA中校驗(yàn)節(jié)點(diǎn)更新算法的表達(dá)式為
(1)
其中主要運(yùn)算為求最小值的運(yùn)算,比較運(yùn)算的結(jié)果對(duì)于輸入數(shù)據(jù)的絕對(duì)大小并不敏感。進(jìn)一步比較NMSA和OMSA,發(fā)現(xiàn)NMSA更加適合于硬件實(shí)現(xiàn)。這兩種算法對(duì)校驗(yàn)節(jié)點(diǎn)更新結(jié)果的修正方式為
(2)
L(rji)=sgn(L(rji))·maxL(rji)-β,0
(3)
圖1 幾種典型算法的性能估計(jì)及比較 圖2 考慮噪聲估計(jì)誤差后的性能估計(jì)結(jié)果
Fig.1 Performance estimation and comparison Fig.2 Performance estimation result considering noise
of typical algorithm estimation errors
可以看出,式(2)中的運(yùn)算效果與校驗(yàn)節(jié)點(diǎn)更新值的絕對(duì)大小完全無關(guān),但是式(3)中的偏移因子β如果設(shè)定好后,其被修正值一定要與之對(duì)應(yīng),如果被修正值的絕對(duì)大小發(fā)生改變,則修正效果將會(huì)改變。因此從這個(gè)意義上來說,NMSA雖然消耗的資源略多,但是NMSA顯然更加實(shí)用。
最初Mackay提出的譯碼算法中迭代方式都采用了TPMP方式即迭代過程分為水平迭代和垂直迭代兩個(gè)基本步驟,TDMP方式的譯碼流程和TPMP方式有很大不同。這種譯碼迭代方式主要適用于準(zhǔn)循環(huán)LDPC碼。準(zhǔn)循環(huán)LDPC碼一般都是Block-LDPC碼,其校驗(yàn)矩陣的是一個(gè)分塊矩陣。
(4)
式中Pi,j是z×z的子矩陣,一部分為全零陣,另一部分為單位置換陣,單位置換陣是指單位陣進(jìn)行循環(huán)移位所得到的矩陣,其特點(diǎn)是行重和列重均為1,這個(gè)特性很適用于TDMP譯碼。一般在表示校驗(yàn)矩陣時(shí),常用特定的數(shù)字替代式(4)中的子矩陣,這樣得到的矩陣稱為母矩陣(Base matrix),可用來表示結(jié)構(gòu)相同但碼長(zhǎng)不同的一類準(zhǔn)循環(huán)LDPC碼。母矩陣中每行所對(duì)應(yīng)的校驗(yàn)矩陣稱為一個(gè)塊行,每列對(duì)應(yīng)的校驗(yàn)矩陣稱為一個(gè)塊列。為了敘述方便先定義一些變量。定義Pi為一個(gè)n維數(shù)組,其中n表示LDPC碼的碼長(zhǎng),用于存放變量節(jié)點(diǎn)的后驗(yàn)概率。定義Qi為一個(gè)n維數(shù)組,用于存放傳遞給校驗(yàn)節(jié)點(diǎn)的消息。定義Rij為一個(gè)Mb×n的數(shù)組,用于存放各層校驗(yàn)節(jié)點(diǎn)更新的結(jié)果。
(1) 初始化
(5)
(2) 子迭代
第p次迭代中,第m次子迭代中的第s個(gè)節(jié)點(diǎn)更新的表達(dá)式為
Q(1:Nb)(s)=P(1:Nb)(s)-Rp,(1:Nb)(s)
(6)
Rp,(1:Nb)(s)=fQ(1:Nb)(s)
(7)
P(1:Nb)(s)=Q(1:Nb)(s)+R(1:Nb)(s)
(8)
其中函數(shù)f表示校驗(yàn)節(jié)點(diǎn)更新的計(jì)算公式,可以選擇各種不同的算法。對(duì)于每個(gè)子迭代要完成z個(gè)節(jié)點(diǎn)的更新,每次迭代要完成Mb次子迭代。
圖3 TDMP與TMPM變量節(jié)點(diǎn)后驗(yàn)概率的概率質(zhì)量函數(shù)的進(jìn)化Fig.3 Evolution of variable node posterior probability probability mass function for TDMP and TPMP
(3) 判決與停止迭代條件
每完成一次迭代可以對(duì)后驗(yàn)概率Pi進(jìn)行判決,判決結(jié)果若滿足校驗(yàn)矩陣則譯碼成功,否則返回步驟(2),直到達(dá)到最大迭代次數(shù)退出。
利用離散密度進(jìn)化的思想,給出了準(zhǔn)循環(huán)LDPC碼的TDMP離散密度進(jìn)化算法。圖3是各變量節(jié)點(diǎn)P消息的概率質(zhì)量函數(shù)隨迭代次數(shù)增加的進(jìn)化過程。同樣的迭代次數(shù)下,TDMP譯碼的密度進(jìn)化過程明顯更快,其相應(yīng)的誤比特率也較TPMP更低,所以實(shí)現(xiàn)高速譯碼器,應(yīng)該選擇TDMP方式。
目前大多數(shù)譯碼器采用定點(diǎn)實(shí)現(xiàn),一般經(jīng)定點(diǎn)化后性能會(huì)有不同程度的下降。譯碼算法進(jìn)行定點(diǎn)化時(shí)需要考慮輸入的初始化信息的量化精度和迭代譯碼過程中消息在進(jìn)行運(yùn)算時(shí)的量化精度。
利用TDMP的離散密度進(jìn)化算法先對(duì)輸入初始消息的量化精度進(jìn)行優(yōu)化。分別采用不同的輸入量化精度,并采用離散蜜度進(jìn)化算法對(duì)譯碼性能進(jìn)行估計(jì)。圖4是輸入消息不同量化精度下利用密度進(jìn)化得到的誤比特率性能估計(jì)結(jié)果。量化精度為5 bit時(shí)最差,而量化精度為6 bit和7 bit時(shí)在較低信噪比下性能相當(dāng),但是高信噪比時(shí)量化精度高的性能反而更差。從圖4中可以看出,P消息值隨迭代次數(shù)增加而增加,因此會(huì)出現(xiàn)限幅效應(yīng),相比之下,輸入消息量化為6 bit時(shí)初始值較小因此限幅效應(yīng)影響較小。將輸入消息量化為7 bit時(shí),中間量化位寬調(diào)整為8 bit,再次使用離散密度進(jìn)化算法進(jìn)行性能估計(jì),結(jié)果如圖5所示。此時(shí)輸入位寬為7 bit的性能略好于輸入為6 bit,但是差距很小。不妨將輸入消息的量化精度暫定為6 bit。改變迭代中間過程中消息的位寬,估計(jì)性能,結(jié)果如圖6所示。當(dāng)位寬為6 bit時(shí)性能較差,位寬采用7 bit和8 bit時(shí)性能幾乎一致。綜上所述,輸入消息的量化位寬選擇設(shè)定為6 bit,而迭代中間過程消息的量化位寬選擇為7 bit是比較合理的設(shè)定。利用離散密度進(jìn)化對(duì)硬件實(shí)現(xiàn)時(shí)的具體參數(shù)進(jìn)行優(yōu)化設(shè)計(jì),取代原有的靠仿真確定具體實(shí)現(xiàn)參數(shù)的方法,大大提高了效率,且最終實(shí)現(xiàn)結(jié)果也證明這種優(yōu)化方法達(dá)到了較好的效果。
圖5 不同輸入量化位寬和中間量化位寬下的性能比較 圖6 不同中間消息位寬下的性能比較
Fig.5 Performance comparison of different input Fig.6 Performance comparison of different
quantization bit width and intermediate intermediate message widths
quantization bit width
圖7 LDPC譯碼器實(shí)現(xiàn)框圖Fig.7 LDPC decoder implementation block diagram
高效譯碼器的FPGA實(shí)現(xiàn)過程中有幾個(gè)關(guān)鍵點(diǎn):高效的迭代譯碼結(jié)構(gòu)、設(shè)計(jì)結(jié)構(gòu)更加優(yōu)化的譯碼器功能模塊、合理的存儲(chǔ)結(jié)構(gòu)以及合理的流水線結(jié)構(gòu)。其中節(jié)點(diǎn)更新單元及存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)是難點(diǎn),本文采用了基于TS結(jié)構(gòu)的高效節(jié)點(diǎn)更新單元,并提出了一種適合碼字結(jié)構(gòu)的P消息存儲(chǔ)單元結(jié)構(gòu),較好解決了這兩個(gè)難點(diǎn)問題。
1.2節(jié)中給出了TDMP的譯碼具
體流程,按照這個(gè)實(shí)現(xiàn)流程,譯碼器的實(shí)現(xiàn)框圖如圖7所示。譯碼器可以分成以下幾個(gè)主要部分:
(1)分層消息處理單元:
分層消息處理單元(Layer message processing, LMU)是主要的運(yùn)算模塊,主要完成變量節(jié)點(diǎn)后驗(yàn)概率值(P消息)和校驗(yàn)節(jié)點(diǎn)消息(R消息)的更新運(yùn)算。
(2)P消息循環(huán)存儲(chǔ)器
這是本文提出的一種重要的實(shí)現(xiàn)結(jié)構(gòu),其功能是高效存儲(chǔ)上一次子迭代得到的P消息,并且能高效地讀出提供給下一次子迭代,相當(dāng)于一個(gè)交織器。
(3)R消息存儲(chǔ)器
該模塊用于存儲(chǔ)每一層更新的R消息。由于每次子迭代時(shí)都需要利用上一次迭代中該層對(duì)應(yīng)的R消息,因此在每次迭代中每一層的R消息都必須保留以備下次迭代時(shí)調(diào)用。
(4)P消息分配器
由于校驗(yàn)矩陣中每層中都存在一些全零陣,因此每次進(jìn)行分層消息處理時(shí)只是將部分P消息存儲(chǔ)器(非零子矩陣所對(duì)應(yīng)的P存儲(chǔ)器)中的消息傳遞給分層消息處理單元,所以需要對(duì)P消息進(jìn)行分配。
(5)判決輸出模塊
對(duì)P消息進(jìn)行判決,并通過校驗(yàn)決定是否停止迭代。
分層消息處理單元在實(shí)現(xiàn)時(shí)先完成式(1)中的運(yùn)算,然后再根據(jù)式(2)進(jìn)行校正得到最終計(jì)算結(jié)果。式(1)中運(yùn)算的硬件實(shí)現(xiàn)過程為
(9)
式中:Minpos表示最小值所對(duì)應(yīng)的消息標(biāo)號(hào),Min2表示求序列中次小值的函數(shù)。文獻(xiàn)[12]中對(duì)求解一個(gè)序列的最小值和次小值的問題進(jìn)行了詳盡論述,并給出了一種稱為樹形結(jié)構(gòu)(Tree structure, TS)的高效實(shí)現(xiàn)結(jié)構(gòu),如圖8所示。
圖8 校驗(yàn)節(jié)點(diǎn)更新單元的實(shí)現(xiàn)結(jié)構(gòu)Fig.8 Implementation structure of check node renew unit
圖9 P消息循環(huán)存儲(chǔ)器結(jié)構(gòu)圖Fig.9 P message cycle memory structure
該模塊是譯碼器中的核心模塊。該循環(huán)存儲(chǔ)器將每個(gè)變量節(jié)點(diǎn)對(duì)應(yīng)的P消息存于其中。根據(jù)校驗(yàn)矩陣的結(jié)構(gòu)分為Nb塊,每塊的深度為z。譯碼時(shí)先將所有的初始化消息寫入存儲(chǔ)器中,由于準(zhǔn)循環(huán)碼的每個(gè)非零矩陣都是單位置換陣,因此每個(gè)存儲(chǔ)器都是循環(huán)存儲(chǔ)結(jié)構(gòu)。每次子迭代選擇該層中非零子矩陣所對(duì)應(yīng)的存儲(chǔ)塊,從這些存儲(chǔ)塊中按照該子矩陣的偏移量確定起始位置,并以并行度p從每個(gè)存儲(chǔ)塊中一次同時(shí)讀出p個(gè)消息,讀出的消息經(jīng)過分層消息處理單元進(jìn)行更新后以并行度p寫回到循環(huán)緩沖區(qū)中的原來存儲(chǔ)位置。這個(gè)循環(huán)存儲(chǔ)器關(guān)鍵就是要實(shí)現(xiàn)從任意一個(gè)起始地址開始一次同時(shí)讀出或者寫入p個(gè)消息,其結(jié)構(gòu)如圖9所示。
文獻(xiàn)[13]采用了圖10所示結(jié)構(gòu)來實(shí)現(xiàn)同樣的功能。這種結(jié)構(gòu)依靠Benes網(wǎng)絡(luò)來實(shí)現(xiàn)數(shù)據(jù)交織,即實(shí)現(xiàn)從任意起始位置同時(shí)讀出p個(gè)消息,而存儲(chǔ)消息則是采用寄存器存儲(chǔ)。采用這種結(jié)構(gòu)在碼長(zhǎng)較短時(shí)還是比較高效的,但是隨著碼長(zhǎng)的增加其資源消耗會(huì)越來越大。采用RAM存儲(chǔ)消息,雖然由于實(shí)現(xiàn)結(jié)構(gòu)的問題,不適合使用大容量的塊狀隨機(jī)存儲(chǔ)器(Block RAM , BRAM),但是如果使用分布式RAM實(shí)現(xiàn)存儲(chǔ)器,相比采用觸發(fā)器會(huì)大大節(jié)省資源消耗。Benes網(wǎng)絡(luò)的實(shí)現(xiàn)復(fù)雜度也相當(dāng)高,即使像文獻(xiàn)[13]中那樣對(duì)Benes網(wǎng)絡(luò)進(jìn)行了簡(jiǎn)化,當(dāng)規(guī)模較大時(shí)其資源消耗依然很可觀。因此本文提出的這種結(jié)構(gòu)更加高效,更適合于FPGA實(shí)現(xiàn),且在碼長(zhǎng)增加時(shí),所消耗的資源基本與碼長(zhǎng)呈線性關(guān)系。
由于R消息更新時(shí)只對(duì)非零矩陣進(jìn)行,對(duì)于每個(gè)層來說,全零矩陣對(duì)應(yīng)的R消息永遠(yuǎn)是零,因此在存儲(chǔ)時(shí),每一層只需要存儲(chǔ)非零子矩陣對(duì)應(yīng)的R消息即可。R消息存儲(chǔ)器的具體結(jié)構(gòu)如圖11所示??紤]到譯碼器實(shí)現(xiàn)的并行度p,要求R消息存儲(chǔ)器每次能夠同時(shí)并行輸出p個(gè)消息,當(dāng)R消息更新計(jì)算完成后也能夠同時(shí)并行輸入p個(gè)消息,因此可以將存儲(chǔ)器的位寬設(shè)置為wp位,其中w表示R消息的量化精度。
圖10 基于Benes網(wǎng)絡(luò)的P消息存儲(chǔ)器 圖11 R消息存儲(chǔ)器結(jié)構(gòu)
Fig.10 P message memory based on Benes network Fig.11 R message memory structure
常規(guī)的校驗(yàn)方法是將判決結(jié)果代入校驗(yàn)矩陣中計(jì)算校驗(yàn)值。文獻(xiàn)[13]提出了一種更為實(shí)用的方法,即對(duì)比本次迭代的譯碼結(jié)果和上次迭代的譯碼結(jié)果,如果發(fā)現(xiàn)兩次相同則認(rèn)為譯碼已經(jīng)完成,否則繼續(xù)迭代直到達(dá)到最大迭代次數(shù)。這種方法是基于譯碼算法的收斂性,即當(dāng)譯碼正確后再次進(jìn)行迭代,其結(jié)果也應(yīng)該是正確的,這樣電路實(shí)現(xiàn)的復(fù)雜性就降低了。
譯碼整個(gè)流程可以用圖12所示有限狀態(tài)機(jī)進(jìn)行控制,說明如下:
(1) 消息初始化
譯碼器一開始處在空閑狀態(tài),當(dāng)檢測(cè)到有效數(shù)據(jù)到來時(shí)進(jìn)入初始化變量節(jié)點(diǎn)的狀態(tài),譯碼器需要等待所有節(jié)點(diǎn)初始化完成后才可以開始譯碼。
(2) 分層消息處理
圖12 譯碼器的有限狀態(tài)機(jī)Fig.12 Finite state machines for decoder
圖13 子迭代過程的流水線結(jié)構(gòu)Fig.13 Pipeline structure of sub-iterative process
如果只考慮主要迭代過程所消耗的時(shí)鐘個(gè)數(shù),則可以大概估計(jì)出譯碼器的吞吐率為
Rateth=k/(z/p)Mbfclk
(10)
式中k表示碼字中信息位的長(zhǎng)度,fclk表示FPGA工作時(shí)鐘頻率。
圖14 讀寫旁路時(shí)序圖Fig.14 Read and write bypass timing diagram
根據(jù)設(shè)計(jì)思路,在Xilinx公司的XC6VLX130T FPGA平臺(tái)上對(duì)各個(gè)主要模塊進(jìn)行了實(shí)現(xiàn),資源消耗見表1,基保FF表示觸發(fā)器,Slice為FPGA的一種組成單元,LUT表示查找表。
表1 各主要模塊資源消耗
圖15是分層消息處理單元在FPGA平臺(tái)上利用Chipscope軟件抓取的輸入輸出數(shù)據(jù)的實(shí)際數(shù)。利用分布式RAM和讀寫控制邏輯在FPGA上實(shí)現(xiàn)了P消息循環(huán)存儲(chǔ)器,存儲(chǔ)容量為64 Byte??梢詫?shí)現(xiàn)在循環(huán)存儲(chǔ)器中任意起始位置開始同時(shí)讀寫連續(xù)8個(gè)消息。其中每個(gè)消息位寬為7 bit。單個(gè)P消息循環(huán)存儲(chǔ)器在FPGA平臺(tái)上。
圖15 分層消息處理單元在FPGA實(shí)現(xiàn)平臺(tái)上驗(yàn)證波形Fig.15 Verify waveform on FPGA platform of layer message processing unit
圖16 P消息循環(huán)存儲(chǔ)器在FPGA平臺(tái)上的驗(yàn)證波形Fig.16 Verify waveform on FPGA platform of P message cycle memory
實(shí)現(xiàn)的資源消耗見表1。圖16是P消息循環(huán)存儲(chǔ)器在FPGA平臺(tái)上利用Chipscope軟件抓取的實(shí)際數(shù)據(jù)流。由于并行度p=8,消息位寬為7 bit,因此每次需要同時(shí)寫入或讀出分層消息處理模塊的R消息位寬為56 bit。分層消息處理模R消息需要每層都要保存,RAM的深度為z/p×Mb,考慮到整個(gè)譯碼器實(shí)現(xiàn)中其他部分并未用到BRAM,因此這樣采用BRAM實(shí)現(xiàn)R存儲(chǔ)器可以節(jié)省其他資源的消耗。表2是整個(gè)譯碼器的總資源消耗,以及參考文獻(xiàn)中譯碼器的資源消耗。選擇幾個(gè)FPGA實(shí)現(xiàn)的譯碼器,校驗(yàn)矩陣都是WiMAX協(xié)議定義的類型。比較結(jié)果表明,本文中實(shí)現(xiàn)的譯碼器消耗的觸發(fā)器資源明顯更少,而吞吐率在參考文獻(xiàn)中的幾個(gè)譯碼器中較高。綜合后最大工作時(shí)鐘可以達(dá)到98.7 MHz,根據(jù)計(jì)算在這個(gè)時(shí)鐘速率下對(duì)2/3碼率可以達(dá)到157 Mbps的吞吐率,對(duì)3/4碼率譯碼可以達(dá)到236 Mbps的吞吐率;與文獻(xiàn)[13,14]相比具有較明顯優(yōu)勢(shì);與文獻(xiàn)[15]相比,由于該譯碼器適應(yīng)Wimax的所有碼率,如果與同碼率情況相比本文的譯碼器在吞吐率上也具有一定優(yōu)勢(shì)。將設(shè)計(jì)的硬件譯碼器下載到FPGA平臺(tái)上進(jìn)行測(cè)試,將編碼后的信號(hào)經(jīng)過加噪量化后逐幀送入譯碼器進(jìn)行譯碼,并測(cè)試其誤比特率性能,其實(shí)測(cè)性能曲線如圖17所示。結(jié)果表明LDPC硬件譯碼器的性能與浮點(diǎn)數(shù)值仿真的結(jié)果相差不大,在中低信噪比下譯碼性能只比浮點(diǎn)仿真時(shí)差0.1 dB左右。該譯碼器應(yīng)用于某實(shí)際數(shù)字通信系統(tǒng)中,性能表現(xiàn)良好,與未編碼的情況進(jìn)行比較,其編碼增益在誤碼率為10-5時(shí)大于6 dB。
表2 譯碼器總資源消耗比較
圖17 實(shí)測(cè)FPGA誤比特率與浮點(diǎn)仿真誤比特率比較Fig.17 Comparison of bit error rate between floating-point simulation and FPGA decoder
本文首先采用離散密度進(jìn)化原理對(duì)譯碼器設(shè)計(jì)過程中的算法選擇及實(shí)現(xiàn)參數(shù)進(jìn)行了優(yōu)化,相比直接采用數(shù)值仿真進(jìn)行優(yōu)化的方法,極大地提高了效率,且經(jīng)過優(yōu)化的譯碼器與純浮點(diǎn)仿真相比譯碼性能僅僅相差0.1 dB,由于采用了經(jīng)過優(yōu)化的實(shí)現(xiàn)參數(shù),使譯碼器在進(jìn)行硬件實(shí)現(xiàn)時(shí)有更高的實(shí)現(xiàn)效率。在具體實(shí)現(xiàn)中,本文提出了一種基于分布式RAM和讀寫控制的循環(huán)P消息存儲(chǔ)器,相比傳統(tǒng)的采用Benes網(wǎng)絡(luò)和寄存器的實(shí)現(xiàn)結(jié)構(gòu)大大減小了 邏輯資源的消耗,由于采用Xilinx公司的FPGA特有的分布式RAM使得RAM的使用效率大大提高。針對(duì)流水線結(jié)構(gòu)進(jìn)行了優(yōu)化,解決了流水線沖突問題,并通過讀寫旁路技術(shù)進(jìn)一步縮短了迭代時(shí)間,降低了功耗。最終達(dá)到了157 MHz的較高吞吐率及較好的譯碼性能。測(cè)試性能表明與幾種典型的同類型譯碼器相比,本文提出的硬件譯碼器結(jié)構(gòu)和實(shí)現(xiàn)方案在消耗較少硬件資源的前提下可以獲得更高的吞吐率和更接近浮點(diǎn)仿真的性能,較好地解決了譯碼器硬件實(shí)現(xiàn)過程中在性能資源和吞吐率之間的矛盾,是一種高效的LDPC碼硬件譯碼器。