周峻輝,楊 紅,卿粼波,吳曉紅,趙祥偉
(四川大學(xué) 電子信息學(xué)院,四川 成都 610065)
隨著無線傳感器網(wǎng)絡(luò)[1-2]、監(jiān)控技術(shù)[3]、衛(wèi)星通信[4]等技術(shù)的發(fā)展,資源受限終端的應(yīng)用場景日漸普遍。 但這類終端因特定場景對其低功耗、小型化的要求而面臨資源限制,所以在對其數(shù)據(jù)壓縮編碼的過程中必須要考慮計(jì)算的復(fù)雜度。傳統(tǒng)的信源編碼方案采用聯(lián)合編碼的方式對傳輸數(shù)據(jù)進(jìn)行壓縮,在編碼端進(jìn)行大量的計(jì)算,所以不再適用于這些資源受限的終端設(shè)備。 而分布式信源編碼(Distributed Source Coding,DSC)方案則是通過各編碼端獨(dú)立編碼,在解碼端充分考慮信源間相關(guān)性來實(shí)現(xiàn)聯(lián)合解碼,從而將大量的計(jì)算過程從對復(fù)雜度敏感的編碼端轉(zhuǎn)移到了資源相對豐富的解碼端,因此分布式信源編碼更適合應(yīng)用于編碼端資源受限的場合。
現(xiàn)在分布式信源編碼得到了日漸深入的研究,同時(shí)對信道碼的研究更是科研人員關(guān)注的重點(diǎn)?,F(xiàn)在的分布式信源編解碼系統(tǒng)一般采用應(yīng)用廣泛的LDPC 碼[5]或 Turbo 碼[6-7]。 此 外 2009 年 Arikan 教 授提出的極化碼[8]作為第一個(gè)被嚴(yán)格證明可以達(dá)到香農(nóng)極限的信道編碼方法,其具備更優(yōu)良的檢錯(cuò)能力、更好的碼率兼容性和更低的編譯碼計(jì)算復(fù)雜度,所以有學(xué)者開始研究將極化碼應(yīng)用在分布式信源編碼中。 文獻(xiàn)[9-10]分別實(shí)現(xiàn)了一種基于極化碼的分布式信源編碼系統(tǒng),但這些系統(tǒng)均按固定碼率進(jìn)行傳輸,所以不能獲得最佳的信源壓縮性能。
本文先針對極化碼特性進(jìn)行碼率自適應(yīng)方案設(shè)計(jì),并將其應(yīng)用于分布式信源編解碼系統(tǒng)中,通過引入CRC(Cyclic Redundancy Check)校驗(yàn)碼的反饋機(jī)制,使系統(tǒng)可以在傳輸最少的校驗(yàn)位時(shí)成功譯碼。目前國內(nèi)外還鮮有人在FPGA 上實(shí)現(xiàn)基于極化碼的分布式編解碼系統(tǒng),而且基于極化碼的編碼器和解碼器的研究往往是單獨(dú)進(jìn)行硬件實(shí)現(xiàn),并未整合在同一個(gè)系統(tǒng)中。 針對這一現(xiàn)狀,本文將基于極化碼的DSC 系統(tǒng)在 FPGA 平臺(tái)上完成設(shè)計(jì)和部署,并進(jìn)行仿真與結(jié)果分析。
分布式信源編碼以Slepian-Wolf 理論[11]和Wyner-Ziv 理論[12]為理論基礎(chǔ),通過盡可能地利用各信源彼此之間的相關(guān)性信息,在編碼端通過獨(dú)立編碼的方式將各信源數(shù)據(jù)送入編碼器中,在解碼端通過聯(lián)合解碼的方式解碼各信源數(shù)據(jù),如圖1 所示。
圖1 獨(dú)立編碼、聯(lián)合解碼示意圖
由于 X 和 Y 是相關(guān)信源,可以把 Y 當(dāng)做 X 經(jīng)過一個(gè)虛擬信道后產(chǎn)生的邊信息。 在解碼端根據(jù)X 通過編碼器后產(chǎn)生的校驗(yàn)位序列,和 X 通過虛擬信道后產(chǎn)生的邊信息序列Y 來進(jìn)行解碼,如圖2所示。
圖2 分布式信源編碼示意圖
信道極化是極化碼編碼過程中最核心的思想,它保證了極化碼傳輸?shù)目煽啃浴?其原理是先將原始信道通過信道合并得到一個(gè)組合信道,再通過信道分裂,得到信道容量趨于0 或趨于1 的極化信道WN。隨著碼長的增加,極化信道的信道容量越趨近于0或者1。 信道容量趨近于1 的信道其抗干擾性好,適合用來傳輸信息;信道容量趨近于0 的信道容易受到干擾,所以一般用來傳輸收發(fā)雙方定好的凍結(jié)比特。
記極化碼碼長為 N=2n,信源序列 u=(u1,u2,…,uN),其中信息比特的集合為 uA,A 代表通過極化碼構(gòu)造得到的信息比特的索引集合; 凍結(jié)比特集合為uAC,AC為凍結(jié)比特的索引集合。 極化碼的編碼過程還需要生成矩陣 GN,GN是一個(gè)大小為 N×N的矩陣,它通過 G2的克羅內(nèi)克積(Kronecker product)得到。
在編碼過程中,可設(shè)凍結(jié)比特為全0,則編碼過程可表達(dá)為式(3),其中 GA表示 G 中行號位于 A 中的行構(gòu)成的子矩陣:
Arikan 教授最初提出極化碼構(gòu)造原理的同時(shí),也提出了最經(jīng)典的極化碼譯碼算法即SC(Successive Cancellation)連續(xù)消除譯碼算法。 隨后陸續(xù)有學(xué)者提出各種改進(jìn)算法,如SCL(Successive Cancellation List)譯碼算法[13]和 CA-SCL(CRC Aided Successive Cancellation List)譯碼算法[14],這兩種算法都是在 SC 譯碼算法的基礎(chǔ)上發(fā)展而來的。 SC 譯碼算法先通過對接收信號的似然比進(jìn)行計(jì)算得到比特估計(jì)值:
如果 ui對應(yīng)凍結(jié)比特,可直接令如果 ui對應(yīng)信息比特,則需要進(jìn)行下式判決:
似然比通過式(6)、(7)遞歸計(jì)算:
1.3 節(jié)和 1.4 節(jié)是關(guān)于一般的非系統(tǒng)的極化碼編譯碼流程, 即碼字序列中不直接包含信源比特。為了采用極化碼作為本文設(shè)計(jì)的系統(tǒng)信道碼來實(shí)現(xiàn)分布式信源編解碼模型,需要直接從碼字序列中分別提取出信息比特和凍結(jié)比特,故本文采用系統(tǒng)極化碼[15]的編解碼形式進(jìn)行設(shè)計(jì)。 記 GAA為GA中列號位于A 中的列構(gòu)成的子矩陣:
根據(jù)式(9),可以通過兩步編碼的方法實(shí)現(xiàn)系統(tǒng)極化碼的編碼過程。 具體過程如下:
(1)將信息比特置于uA,凍結(jié)比特可全部置零,計(jì)算 m=uG。
(2)將mAC置零,計(jì)算根據(jù)凍結(jié)比特索引即可得出凍結(jié)比特xAC。
由于極化碼自身的特性,可以在只傳輸部分校驗(yàn)位的情況下準(zhǔn)確譯出碼字,故本文在此基礎(chǔ)之上設(shè)計(jì)校驗(yàn)位的碼率自適應(yīng)方案以動(dòng)態(tài)調(diào)整碼率,具體實(shí)現(xiàn)的DSC 模型如圖 3 所示。
圖3 基于極化碼的碼率自適應(yīng)分布式信源編解碼系統(tǒng)
信源的系統(tǒng)位通過BSC 信道產(chǎn)生系統(tǒng)位的邊信息,經(jīng)過編碼后的校驗(yàn)位逐個(gè)發(fā)送給解碼器。 解碼器根據(jù)帶噪的邊信息和當(dāng)前獲得的校驗(yàn)位的對數(shù)似然比進(jìn)行譯碼,若極化碼譯碼碼字進(jìn)行CRC 校驗(yàn)失敗,則將更多的校驗(yàn)位傳至解碼器,解碼器進(jìn)行重新解碼,直至解碼成功為止。
本系統(tǒng)主要由四個(gè)模塊構(gòu)成,如圖 4 所示。 二進(jìn)制信源source 輸入給編碼模塊和邊信息處理模塊。 在邊信息處理模塊中對source 進(jìn)行加噪后送入到解碼模塊。 編碼模塊對 source 進(jìn)行極化碼編碼后,將校驗(yàn)位全部送至刪余模塊進(jìn)行緩存。 刪余模塊逐個(gè)發(fā)送校驗(yàn)位至解碼模塊。 解碼模塊根據(jù)收到的校驗(yàn)位和通過邊信息處理模塊傳來的全部系統(tǒng)位進(jìn)行嘗試解碼,未收到的校驗(yàn)位則相當(dāng)于被打孔刪余,對應(yīng)的對數(shù)似然比為零。 若解碼失敗,則反饋一個(gè)信號給緩存了全部校驗(yàn)位的刪余模塊,使其按順序輸出下一位校驗(yàn)位,解碼模塊有了更多的校驗(yàn)位數(shù)據(jù)后再次嘗試解碼,當(dāng)解碼成功時(shí)輸出譯碼碼字。
圖4 基于極化碼的分布式信源編解碼系統(tǒng)RTL 電路圖
編碼模塊將輸入的信源序列通過系統(tǒng)極化碼編碼過程產(chǎn)生出相應(yīng)的校驗(yàn)序列。 根據(jù)式(3),編碼過程需要提前準(zhǔn)備G 矩陣、信息位索引的數(shù)據(jù),本設(shè)計(jì)先在數(shù)值計(jì)算軟件中產(chǎn)生相關(guān)數(shù)據(jù),再將相關(guān)數(shù)據(jù)導(dǎo)入到Vivado 中設(shè)計(jì)成 ROM 實(shí)現(xiàn)對數(shù)據(jù)的調(diào)用。 系統(tǒng)極化碼編碼過程分為三步,首先將 ROM 中的數(shù)據(jù)和輸入的信源序列緩存在寄存器中以方便進(jìn)行計(jì)算;其次通過非系統(tǒng)極化碼編碼得到非系統(tǒng)碼字;最后通過系統(tǒng)極化碼編碼將非系統(tǒng)碼字轉(zhuǎn)換為系統(tǒng)碼字,即2.1 節(jié)中提到的兩步編碼,最后使輸出有效信號拉高。
邊信息處理模塊模擬了一個(gè)虛擬信道,它將信源序列以一定的交叉概率生成一個(gè)邊信息給解碼模塊。交叉概率越大,邊信息序列和信源序列的差異越大,解碼所需要的校驗(yàn)位也越多。該模塊的狀態(tài)機(jī)只有兩步,先將信源序列等數(shù)據(jù)存入寄存器中;再以一個(gè)隨機(jī)序列為索引,將信源序列進(jìn)行隨機(jī)比特翻轉(zhuǎn)生成邊信息輸出,同時(shí)使輸出有效信號拉高。
刪余模塊為本設(shè)計(jì)中碼率自適應(yīng)方案的核心模塊。 它將編碼模塊輸出的校驗(yàn)序列進(jìn)行緩存,在第一次校驗(yàn)比特發(fā)送過程中,根據(jù)交叉概率的大小發(fā)送一定數(shù)量的校驗(yàn)比特,然后讓解碼器進(jìn)行嘗試解碼。 若解碼器解碼失敗,則發(fā)送反饋信號給刪余模塊。 刪余模塊每次收到反饋信號后則按順序發(fā)送一位校驗(yàn)比特給解碼器使其重新解碼并記錄發(fā)送校驗(yàn)比特的總數(shù)。
本文根據(jù)FPGA 平臺(tái)和硬件描述語言的特性,在充分考慮資源消耗及系統(tǒng)吞吐率的情況下,采用了改進(jìn)的SC 譯碼算法的硬件實(shí)現(xiàn)方式,從而使其更適合在FPGA 平臺(tái)上進(jìn)行實(shí)現(xiàn)。 通過在解碼模塊中增加CRC 校驗(yàn)環(huán)節(jié),使解碼模塊帶有一個(gè)反饋輸出,從而實(shí)現(xiàn)碼率自適應(yīng)方案。
3.5.1 譯碼算法的優(yōu)化設(shè)計(jì)及實(shí)現(xiàn)
由于在極化碼譯碼過程中對數(shù)似然比的計(jì)算涉及了大量的乘法和除法運(yùn)算,這極不易于在FPGA中進(jìn)行實(shí)現(xiàn),因此需要對對數(shù)似然比的迭代計(jì)算進(jìn)行等價(jià)替代,于是采用最小和譯碼算法,可將對數(shù)似然比的遞歸算法簡化為如式(10)、(11)所示:
由于對數(shù)似然比在運(yùn)算過程中始終是以浮點(diǎn)數(shù)的形式參與計(jì)算,而在FPGA 中直接對浮點(diǎn)數(shù)進(jìn)行操作較為復(fù)雜,F(xiàn)PGA 直接操作的是一定位數(shù)的reg 類型數(shù)據(jù),因此要將浮點(diǎn)數(shù)形式的對數(shù)似然比定點(diǎn)量化為一定比特?cái)?shù)的定點(diǎn)數(shù)。 若量化比特?cái)?shù)越多,則譯碼過程需要占用越多的資源;若量化比特?cái)?shù)過小,則會(huì)降低譯碼性能。 最終本文采用4 比特定點(diǎn)量化的方案,即所有的對數(shù)似然比用4 比特表示,又由于對數(shù)似然比有正有負(fù),且最小和譯碼算法需要對數(shù)似然比的正負(fù)符號值直接參與運(yùn)算,因此采用補(bǔ)碼的形式,即 1000~0111 對應(yīng)于-8~7。
3.5.2 CRC 校驗(yàn)
加入了CRC 校驗(yàn)碼的解碼模塊的示意圖如圖5所示。
圖5 解碼模塊示意圖
解碼模塊將已獲得的全部邊信息和部分校驗(yàn)位一同送至SC 譯碼器進(jìn)行譯碼,得到譯碼碼字后開始CRC 校驗(yàn)判定。 若此刻解碼模塊獲得的校驗(yàn)位位數(shù)較少,則經(jīng)過SC 譯碼后得到的碼字極易有錯(cuò),不能通過CRC 校驗(yàn),于是解碼模塊將反饋使能信號拉高,指導(dǎo)刪余模塊進(jìn)一步傳輸校驗(yàn)位信息。若解碼模塊已獲得了解碼所需的足夠的校驗(yàn)位位數(shù),則能成功譯出碼字,即能通過 CRC 校驗(yàn),于是解碼模塊輸出譯碼碼字。
為驗(yàn)證系統(tǒng)功能正確性,本文采用Xilinx 公司的Virtex-7 VC707 開發(fā)板,在Vivado 軟件中利用硬件描述語言進(jìn)行設(shè)計(jì),并使用Vivado 自帶的仿真工具,通過編寫testbench 進(jìn)行系統(tǒng)功能正確性的仿真驗(yàn)證。仿真參數(shù)進(jìn)行如下配置:極化碼碼長N=256,信源序列長度 K=128,交叉概率 p=0.03。
從圖6 中可以看到,第一次進(jìn)行譯碼時(shí),刪余模塊先向解碼模塊發(fā)送了73 位校驗(yàn)比特。 每次譯碼失敗后,解碼模塊通過輸出反饋信號,使刪余模塊按順序發(fā)送下一位校驗(yàn)比特。 經(jīng)過兩次反饋過程之后,即當(dāng)發(fā)送了75 位校驗(yàn)比特后,解碼模塊成功通過解碼和 CRC 校驗(yàn)譯出了正確的碼字, 然后輸出譯碼碼字并使輸出有效信號out_en 拉高。
圖6 系統(tǒng)仿真結(jié)果
本文中極化碼壓縮碼率的計(jì)算公式可表示為:
式中NA表示信源序列長度,NAC表示需傳輸?shù)男r?yàn)比特?cái)?shù)。 通過改變交叉概率的大小,可得到不同的極化碼壓縮碼率,極化碼與 LDPC 碼[16]壓縮碼率對比如圖 7 所示。
圖7 極化碼與LDPC 碼壓縮碼率比較圖
將設(shè)計(jì)完成的系統(tǒng)進(jìn)行綜合后,可以在工程總結(jié)窗口查看系統(tǒng)的資源占用情況,如表1 所示。
表1 系統(tǒng)資源消耗情況
系統(tǒng)的吞吐率可以通過式(14)計(jì)算得出:
式中,f 為時(shí)鐘頻率,N 為有效碼長,t 為所消耗的時(shí)鐘周期。 由于在本文中,有效碼長為 128,時(shí)鐘頻率為 200 MHz,共消耗了 27 843 個(gè)時(shí)鐘周期,由此計(jì)算出吞吐率為 919 kb/s。 表 2 是本文所設(shè)計(jì)系統(tǒng)的吞吐率與其他方案的比較。
表2 吞吐率比較
本文針對極化碼的特性,設(shè)計(jì)了一種碼率自適應(yīng)的基于極化碼的分布式信源編解碼系統(tǒng)模型,并在 Xilinx 公司的 Virtex-7 VC707 開發(fā)板上完成了實(shí)現(xiàn),可應(yīng)用于多種數(shù)據(jù)傳輸平臺(tái),具有一定的應(yīng)用價(jià)值。 本系統(tǒng)的吞吐率目前主要受限于極化碼譯碼器的硬件實(shí)現(xiàn)方式,下一步可通過優(yōu)化譯碼器結(jié)構(gòu),并引入流水線的思想進(jìn)一步提高系統(tǒng)性能。