周峻輝,楊 紅,卿粼波,吳曉紅,趙祥偉
(四川大學 電子信息學院,四川 成都 610065)
隨著無線傳感器網絡[1-2]、監控技術[3]、衛星通信[4]等技術的發展,資源受限終端的應用場景日漸普遍。 但這類終端因特定場景對其低功耗、小型化的要求而面臨資源限制,所以在對其數據壓縮編碼的過程中必須要考慮計算的復雜度。傳統的信源編碼方案采用聯合編碼的方式對傳輸數據進行壓縮,在編碼端進行大量的計算,所以不再適用于這些資源受限的終端設備。 而分布式信源編碼(Distributed Source Coding,DSC)方案則是通過各編碼端獨立編碼,在解碼端充分考慮信源間相關性來實現聯合解碼,從而將大量的計算過程從對復雜度敏感的編碼端轉移到了資源相對豐富的解碼端,因此分布式信源編碼更適合應用于編碼端資源受限的場合。
現在分布式信源編碼得到了日漸深入的研究,同時對信道碼的研究更是科研人員關注的重點。現在的分布式信源編解碼系統一般采用應用廣泛的LDPC 碼[5]或 Turbo 碼[6-7]。 此 外 2009 年 Arikan 教 授提出的極化碼[8]作為第一個被嚴格證明可以達到香農極限的信道編碼方法,其具備更優良的檢錯能力、更好的碼率兼容性和更低的編譯碼計算復雜度,所以有學者開始研究將極化碼應用在分布式信源編碼中。 文獻[9-10]分別實現了一種基于極化碼的分布式信源編碼系統,但這些系統均按固定碼率進行傳輸,所以不能獲得最佳的信源壓縮性能。
本文先針對極化碼特性進行碼率自適應方案設計,并將其應用于分布式信源編解碼系統中,通過引入CRC(Cyclic Redundancy Check)校驗碼的反饋機制,使系統可以在傳輸最少的校驗位時成功譯碼。目前國內外還鮮有人在FPGA 上實現基于極化碼的分布式編解碼系統,而且基于極化碼的編碼器和解碼器的研究往往是單獨進行硬件實現,并未整合在同一個系統中。 針對這一現狀,本文將基于極化碼的DSC 系統在 FPGA 平臺上完成設計和部署,并進行仿真與結果分析。
分布式信源編碼以Slepian-Wolf 理論[11]和Wyner-Ziv 理論[12]為理論基礎,通過盡可能地利用各信源彼此之間的相關性信息,在編碼端通過獨立編碼的方式將各信源數據送入編碼器中,在解碼端通過聯合解碼的方式解碼各信源數據,如圖1 所示。

圖1 獨立編碼、聯合解碼示意圖
由于 X 和 Y 是相關信源,可以把 Y 當做 X 經過一個虛擬信道后產生的邊信息。 在解碼端根據X 通過編碼器后產生的校驗位序列,和 X 通過虛擬信道后產生的邊信息序列Y 來進行解碼,如圖2所示。

圖2 分布式信源編碼示意圖
信道極化是極化碼編碼過程中最核心的思想,它保證了極化碼傳輸的可靠性。 其原理是先將原始信道通過信道合并得到一個組合信道,再通過信道分裂,得到信道容量趨于0 或趨于1 的極化信道WN。隨著碼長的增加,極化信道的信道容量越趨近于0或者1。 信道容量趨近于1 的信道其抗干擾性好,適合用來傳輸信息;信道容量趨近于0 的信道容易受到干擾,所以一般用來傳輸收發雙方定好的凍結比特。
記極化碼碼長為 N=2n,信源序列 u=(u1,u2,…,uN),其中信息比特的集合為 uA,A 代表通過極化碼構造得到的信息比特的索引集合; 凍結比特集合為uAC,AC為凍結比特的索引集合。 極化碼的編碼過程還需要生成矩陣 GN,GN是一個大小為 N×N的矩陣,它通過 G2的克羅內克積(Kronecker product)得到。

在編碼過程中,可設凍結比特為全0,則編碼過程可表達為式(3),其中 GA表示 G 中行號位于 A 中的行構成的子矩陣:

Arikan 教授最初提出極化碼構造原理的同時,也提出了最經典的極化碼譯碼算法即SC(Successive Cancellation)連續消除譯碼算法。 隨后陸續有學者提出各種改進算法,如SCL(Successive Cancellation List)譯碼算法[13]和 CA-SCL(CRC Aided Successive Cancellation List)譯碼算法[14],這兩種算法都是在 SC 譯碼算法的基礎上發展而來的。 SC 譯碼算法先通過對接收信號的似然比進行計算得到比特估計值:

如果 ui對應凍結比特,可直接令如果 ui對應信息比特,則需要進行下式判決:

似然比通過式(6)、(7)遞歸計算:


1.3 節和 1.4 節是關于一般的非系統的極化碼編譯碼流程, 即碼字序列中不直接包含信源比特。為了采用極化碼作為本文設計的系統信道碼來實現分布式信源編解碼模型,需要直接從碼字序列中分別提取出信息比特和凍結比特,故本文采用系統極化碼[15]的編解碼形式進行設計。 記 GAA為GA中列號位于A 中的列構成的子矩陣:

根據式(9),可以通過兩步編碼的方法實現系統極化碼的編碼過程。 具體過程如下:
(1)將信息比特置于uA,凍結比特可全部置零,計算 m=uG。
(2)將mAC置零,計算根據凍結比特索引即可得出凍結比特xAC。
由于極化碼自身的特性,可以在只傳輸部分校驗位的情況下準確譯出碼字,故本文在此基礎之上設計校驗位的碼率自適應方案以動態調整碼率,具體實現的DSC 模型如圖 3 所示。

圖3 基于極化碼的碼率自適應分布式信源編解碼系統
信源的系統位通過BSC 信道產生系統位的邊信息,經過編碼后的校驗位逐個發送給解碼器。 解碼器根據帶噪的邊信息和當前獲得的校驗位的對數似然比進行譯碼,若極化碼譯碼碼字進行CRC 校驗失敗,則將更多的校驗位傳至解碼器,解碼器進行重新解碼,直至解碼成功為止。
本系統主要由四個模塊構成,如圖 4 所示。 二進制信源source 輸入給編碼模塊和邊信息處理模塊。 在邊信息處理模塊中對source 進行加噪后送入到解碼模塊。 編碼模塊對 source 進行極化碼編碼后,將校驗位全部送至刪余模塊進行緩存。 刪余模塊逐個發送校驗位至解碼模塊。 解碼模塊根據收到的校驗位和通過邊信息處理模塊傳來的全部系統位進行嘗試解碼,未收到的校驗位則相當于被打孔刪余,對應的對數似然比為零。 若解碼失敗,則反饋一個信號給緩存了全部校驗位的刪余模塊,使其按順序輸出下一位校驗位,解碼模塊有了更多的校驗位數據后再次嘗試解碼,當解碼成功時輸出譯碼碼字。

圖4 基于極化碼的分布式信源編解碼系統RTL 電路圖
編碼模塊將輸入的信源序列通過系統極化碼編碼過程產生出相應的校驗序列。 根據式(3),編碼過程需要提前準備G 矩陣、信息位索引的數據,本設計先在數值計算軟件中產生相關數據,再將相關數據導入到Vivado 中設計成 ROM 實現對數據的調用。 系統極化碼編碼過程分為三步,首先將 ROM 中的數據和輸入的信源序列緩存在寄存器中以方便進行計算;其次通過非系統極化碼編碼得到非系統碼字;最后通過系統極化碼編碼將非系統碼字轉換為系統碼字,即2.1 節中提到的兩步編碼,最后使輸出有效信號拉高。
邊信息處理模塊模擬了一個虛擬信道,它將信源序列以一定的交叉概率生成一個邊信息給解碼模塊。交叉概率越大,邊信息序列和信源序列的差異越大,解碼所需要的校驗位也越多。該模塊的狀態機只有兩步,先將信源序列等數據存入寄存器中;再以一個隨機序列為索引,將信源序列進行隨機比特翻轉生成邊信息輸出,同時使輸出有效信號拉高。
刪余模塊為本設計中碼率自適應方案的核心模塊。 它將編碼模塊輸出的校驗序列進行緩存,在第一次校驗比特發送過程中,根據交叉概率的大小發送一定數量的校驗比特,然后讓解碼器進行嘗試解碼。 若解碼器解碼失敗,則發送反饋信號給刪余模塊。 刪余模塊每次收到反饋信號后則按順序發送一位校驗比特給解碼器使其重新解碼并記錄發送校驗比特的總數。
本文根據FPGA 平臺和硬件描述語言的特性,在充分考慮資源消耗及系統吞吐率的情況下,采用了改進的SC 譯碼算法的硬件實現方式,從而使其更適合在FPGA 平臺上進行實現。 通過在解碼模塊中增加CRC 校驗環節,使解碼模塊帶有一個反饋輸出,從而實現碼率自適應方案。
3.5.1 譯碼算法的優化設計及實現
由于在極化碼譯碼過程中對數似然比的計算涉及了大量的乘法和除法運算,這極不易于在FPGA中進行實現,因此需要對對數似然比的迭代計算進行等價替代,于是采用最小和譯碼算法,可將對數似然比的遞歸算法簡化為如式(10)、(11)所示:

由于對數似然比在運算過程中始終是以浮點數的形式參與計算,而在FPGA 中直接對浮點數進行操作較為復雜,FPGA 直接操作的是一定位數的reg 類型數據,因此要將浮點數形式的對數似然比定點量化為一定比特數的定點數。 若量化比特數越多,則譯碼過程需要占用越多的資源;若量化比特數過小,則會降低譯碼性能。 最終本文采用4 比特定點量化的方案,即所有的對數似然比用4 比特表示,又由于對數似然比有正有負,且最小和譯碼算法需要對數似然比的正負符號值直接參與運算,因此采用補碼的形式,即 1000~0111 對應于-8~7。

3.5.2 CRC 校驗
加入了CRC 校驗碼的解碼模塊的示意圖如圖5所示。

圖5 解碼模塊示意圖
解碼模塊將已獲得的全部邊信息和部分校驗位一同送至SC 譯碼器進行譯碼,得到譯碼碼字后開始CRC 校驗判定。 若此刻解碼模塊獲得的校驗位位數較少,則經過SC 譯碼后得到的碼字極易有錯,不能通過CRC 校驗,于是解碼模塊將反饋使能信號拉高,指導刪余模塊進一步傳輸校驗位信息。若解碼模塊已獲得了解碼所需的足夠的校驗位位數,則能成功譯出碼字,即能通過 CRC 校驗,于是解碼模塊輸出譯碼碼字。
為驗證系統功能正確性,本文采用Xilinx 公司的Virtex-7 VC707 開發板,在Vivado 軟件中利用硬件描述語言進行設計,并使用Vivado 自帶的仿真工具,通過編寫testbench 進行系統功能正確性的仿真驗證。仿真參數進行如下配置:極化碼碼長N=256,信源序列長度 K=128,交叉概率 p=0.03。
從圖6 中可以看到,第一次進行譯碼時,刪余模塊先向解碼模塊發送了73 位校驗比特。 每次譯碼失敗后,解碼模塊通過輸出反饋信號,使刪余模塊按順序發送下一位校驗比特。 經過兩次反饋過程之后,即當發送了75 位校驗比特后,解碼模塊成功通過解碼和 CRC 校驗譯出了正確的碼字, 然后輸出譯碼碼字并使輸出有效信號out_en 拉高。

圖6 系統仿真結果
本文中極化碼壓縮碼率的計算公式可表示為:

式中NA表示信源序列長度,NAC表示需傳輸的校驗比特數。 通過改變交叉概率的大小,可得到不同的極化碼壓縮碼率,極化碼與 LDPC 碼[16]壓縮碼率對比如圖 7 所示。

圖7 極化碼與LDPC 碼壓縮碼率比較圖
將設計完成的系統進行綜合后,可以在工程總結窗口查看系統的資源占用情況,如表1 所示。

表1 系統資源消耗情況
系統的吞吐率可以通過式(14)計算得出:

式中,f 為時鐘頻率,N 為有效碼長,t 為所消耗的時鐘周期。 由于在本文中,有效碼長為 128,時鐘頻率為 200 MHz,共消耗了 27 843 個時鐘周期,由此計算出吞吐率為 919 kb/s。 表 2 是本文所設計系統的吞吐率與其他方案的比較。

表2 吞吐率比較
本文針對極化碼的特性,設計了一種碼率自適應的基于極化碼的分布式信源編解碼系統模型,并在 Xilinx 公司的 Virtex-7 VC707 開發板上完成了實現,可應用于多種數據傳輸平臺,具有一定的應用價值。 本系統的吞吐率目前主要受限于極化碼譯碼器的硬件實現方式,下一步可通過優化譯碼器結構,并引入流水線的思想進一步提高系統性能。