方家鑫,劉純武,黃芝平
(國(guó)防科技大學(xué)智能科學(xué)學(xué)院,湖南 長(zhǎng)沙 410000)
極化碼作為一種新型的編碼方式,被Arika[1]提出并證明在二進(jìn)制對(duì)稱無(wú)記憶信道中,極化碼相較于turbo 碼和LDPC 碼更能達(dá)到香農(nóng)極限,理論上是“最優(yōu)編碼”。近年更是被新興的5G 納入其中作為控制信道編碼方式,從而吸引了很多學(xué)者的關(guān)注研究,獲得了快速發(fā)展。
當(dāng)前,極化碼的譯碼方式主要有軟件和硬件兩種途徑,但是在軟件上由于CPU 是采用串行方式工作的,從而對(duì)快速譯碼帶來(lái)了極大的制約,而FPGA 由于其具有高速并行計(jì)算的特點(diǎn)剛好適用于此。此外,極化碼譯碼本身是采用遞歸方式進(jìn)行的,因此在FPGA 里能夠?qū)崿F(xiàn)資源共享,易于實(shí)現(xiàn)。
目前,極化碼的譯碼算法主要可以分為兩大類。第一類是SC 譯碼算法以及基于SC 譯碼算法的改進(jìn)算法[2-7],主要代表是SCL(Successive Cancellation List,列表連續(xù)抵消算法)譯碼算法,SCL 算法中保留了串行譯碼的特性,在譯碼每個(gè)信息比特時(shí)允許同時(shí)保留多個(gè)候選路徑,通過(guò)降低正確路徑丟失的概率來(lái)改善譯碼性能。第二類是信息傳播算法,將編碼領(lǐng)域中的經(jīng)典算法,如MPA(Message Propagation Algorithm,消息傳播算法)應(yīng)用于polar 碼譯碼。但是在這些常見(jiàn)算法中,許多算法如BP 和ML 譯碼算法由于運(yùn)算過(guò)程中涉及大量的乘除運(yùn)算,不利于硬件實(shí)現(xiàn)。相較之下,SC 譯碼器和基于SC 的SCL 譯碼器當(dāng)中的“蝶形運(yùn)算”單元存在非常簡(jiǎn)單的實(shí)現(xiàn)方式,簡(jiǎn)化后的運(yùn)算只涉及取符號(hào)運(yùn)算,取最小值運(yùn)算和加法運(yùn)算,不含任何乘除法運(yùn)算,非常適合芯片實(shí)現(xiàn)。最后,由于SC 譯碼算法固有的誤差傳播現(xiàn)象,前序信息比特的錯(cuò)誤會(huì)嚴(yán)重影響后序信息比特的譯碼,這將嚴(yán)重影響譯碼的性能表現(xiàn),因此采用基于SC 算法的新型譯碼方式——SCL,該算法旨在通過(guò)引入路徑度量值,獲得L個(gè)譯碼序列來(lái)進(jìn)行選擇,避免SC 那樣局限于單一序列的估計(jì),從而提高譯碼性能。但是由于SCL 譯碼器本質(zhì)上可以認(rèn)為由L個(gè)SC 譯碼器組成,使得其在存儲(chǔ)空間、功耗、譯碼復(fù)雜度、時(shí)延方面都大大增加。
基于極化碼在FPGA 中易于實(shí)現(xiàn)的優(yōu)點(diǎn)和SCL 算法的優(yōu)越性,本文的主要工作為運(yùn)用SCL 譯碼算法,在FPGA 中實(shí)現(xiàn)極化碼譯碼器并在運(yùn)行效率和占用資源等方面有所提升。
極化碼的基本思想是通過(guò)信道極化,使用“好”的信道傳輸信息比特,而在“差”的信道上放置編譯碼雙方都已知的固定比特即凍結(jié)比特,通常設(shè)置為0。對(duì)于一個(gè)(N,K)極化碼,N代表碼長(zhǎng),K代表信息比特?cái)?shù),其編碼方式為:
圖1 N=4、L=2時(shí)的SCL譯碼路徑示意圖
其中,α,β代表上一層的對(duì)數(shù)似然比值,u代表與當(dāng)前譯碼位相關(guān)的已譯碼比特,sgn為符號(hào)函數(shù)。
采用樹(shù)形流水線結(jié)構(gòu)后[8-9],PE(Processing Element,處理單元)電路成為譯碼器的重要組成部分[10],對(duì)PE 的改進(jìn)優(yōu)化將對(duì)整個(gè)硬件電路產(chǎn)生極大的影響。常規(guī)的PE單元主要包含f節(jié)點(diǎn)模塊和g節(jié)點(diǎn)模塊。在f節(jié)點(diǎn)模塊中包含一個(gè)異或單元、一個(gè)絕對(duì)值比較單元與一個(gè)選擇器單元。而g模塊則較之更加復(fù)雜,首先將輸入的對(duì)數(shù)似然比值轉(zhuǎn)換成補(bǔ)碼形式,再將轉(zhuǎn)換成的補(bǔ)碼輸入加法器和減法器,生成帶符號(hào)位的數(shù)值,g模塊的輸出值由已譯碼的部分和作為控制選擇輸出,最后通過(guò)一個(gè)2 輸入選擇器決定是輸出f模塊的結(jié)果還是g模塊的結(jié)果。由此可見(jiàn),f節(jié)點(diǎn)和g節(jié)點(diǎn)計(jì)算相對(duì)獨(dú)立,整體計(jì)算效率較低。為改善此問(wèn)題,將f節(jié)點(diǎn)和g節(jié)點(diǎn)關(guān)聯(lián)起來(lái)進(jìn)行計(jì)算。對(duì)g節(jié)點(diǎn)中加法器和減法器運(yùn)算進(jìn)行分析,發(fā)現(xiàn)sgn(α+β)⊕sgn(β-α)與sgn(β2-α2) 符號(hào)一致,而sgn(β2-α2) 正 好對(duì)應(yīng)判斷α,β的絕對(duì)值相對(duì)大小。故可以將g節(jié)點(diǎn)中加法器和減法器的結(jié)果取符號(hào)位進(jìn)行異或操作,作為f節(jié)點(diǎn)絕對(duì)值輸出的控制端。則此時(shí)f節(jié)點(diǎn)中2 輸入數(shù)據(jù)選擇器的輸出m為:
圖2 改進(jìn)后的PE單元結(jié)構(gòu)
此外,由于在對(duì)譯碼器進(jìn)行譯碼時(shí),每層的f與g節(jié)點(diǎn)的相關(guān)計(jì)算數(shù)值都需要保存下來(lái)參與到下一層的計(jì)算,因此,這些數(shù)據(jù)的大小將會(huì)影響存儲(chǔ)空間資源,故在整個(gè)譯碼器的計(jì)算過(guò)程中,對(duì)存儲(chǔ)的似然比值進(jìn)行量化,縮小數(shù)值大小,進(jìn)而降低硬件資源消耗。這樣雖然PE 中涉及的加減運(yùn)算可能會(huì)影響存儲(chǔ)所需寬度,但經(jīng)過(guò)量化縮小即可不引入更多消耗,且由于與譯碼判決相關(guān)的是判決層的數(shù)值符號(hào),并不受絕對(duì)大小影響,因此并不會(huì)影響判決結(jié)果。
在本文的SCL 譯碼器實(shí)現(xiàn)過(guò)程中,采用的FPGA 芯片是Xilinx 公司Virtex-7 系列的xc7vx485tffg1157-2。在硬件驗(yàn)證過(guò)程中,考慮到FPGA 開(kāi)發(fā)板存儲(chǔ)資源有限,在PC 端完成了極化碼的編碼與信道加擾,然后將接收端得到的信道LLR 量化后傳送給FPGA,F(xiàn)PGA 接收到譯碼信息后開(kāi)始進(jìn)行譯碼工作。
首先,為了綜合考慮譯碼誤碼性能與譯碼復(fù)雜度,需要選取合適的路徑數(shù)即列表寬度L,在MATLAB 中進(jìn)行了仿真,結(jié)果如圖3 所示:
圖3 SCL算法L取值不同的誤比特率
從圖3 可以明顯看到,列表寬度L為1 時(shí)性能較差,隨著列表寬度的增加,誤碼性能越來(lái)越好,但是從圖中可以看到L為4 與L為8 的結(jié)果相差很小,考慮到實(shí)現(xiàn)的復(fù)雜度,選擇列表寬度為4。接著驗(yàn)證譯碼器的正確性進(jìn)行,碼字經(jīng)過(guò)polar 編碼器進(jìn)行編碼,經(jīng)過(guò)調(diào)制,信道傳輸后,在接收端收到對(duì)應(yīng)的LLR 值,按照譯碼器設(shè)計(jì)對(duì)這些LLR 值進(jìn)行處理,通過(guò)VIVADO 自帶仿真軟件modelsim 對(duì)譯碼器進(jìn)行硬件仿真,然后使用在線邏輯分析儀去抓取在FPGA 上的譯碼結(jié)果。
如圖4 所示,上面的圖為碼長(zhǎng)1 024,碼率0.5 的極化碼采用SCL 譯碼在modelsim 中的部分仿真結(jié)果,data表示譯碼輸出結(jié)果。下面的圖為在開(kāi)發(fā)板上用邏輯分析儀抓取的FPGA 運(yùn)行結(jié)果波形圖,對(duì)應(yīng)實(shí)際譯碼結(jié)果,跟源碼比較,得出本次譯碼結(jié)果正確。
圖4 N=1 024時(shí)的運(yùn)行結(jié)果
使用Vivado 2017 進(jìn)行綜合,在綜合報(bào)告里可以查看所消耗的資源,如表1 所示:
表1 編碼長(zhǎng)度為1 024的綜合資源結(jié)果
對(duì)于譯碼器的硬件設(shè)計(jì)來(lái)說(shuō),譯碼器的糾錯(cuò)能力和吞吐率是評(píng)價(jià)其性能的兩大重要指標(biāo)。其中吞吐率的定義為:
其中,N代表碼長(zhǎng),fmax表示譯碼的最高時(shí)鐘頻率,tc表示譯碼所需的時(shí)鐘周期數(shù),吞吐率計(jì)算結(jié)果為39.5 Mbit/s。對(duì)不同碼長(zhǎng)的polar 碼在FPGA 上進(jìn)行測(cè)試,優(yōu)化后的SCL譯碼器和常規(guī)的SCL 譯碼器相比,占用的硬件資源減少了30%以上,譯碼的最高頻率提高了20%左右。對(duì)于譯碼器的糾錯(cuò)能力,將回傳的譯碼結(jié)果與原碼進(jìn)行比對(duì),得到經(jīng)過(guò)量化操作后硬件譯碼的誤碼率,如圖5 所示:
圖5 量化操作后的硬件譯碼誤碼率
可以看到,譯碼器在保證譯碼高效的情況下,譯碼的誤碼水平與仿真結(jié)果接近,譯碼性能良好。
如今極化碼的相關(guān)理論研究日益增多,但是在硬件平臺(tái)中實(shí)現(xiàn)的較少,還有很大的提升空間?;诖吮疚牟捎脴O化碼的SCL 譯碼算法,對(duì)其FPGA 硬件實(shí)現(xiàn)進(jìn)行一定改進(jìn)優(yōu)化,最后在開(kāi)發(fā)板上進(jìn)行實(shí)現(xiàn)。測(cè)試結(jié)果表明改進(jìn)之后的譯碼器在資源消耗、吞吐率方面有了一定提升,具有很強(qiáng)的工程實(shí)用性。