低密度奇偶校驗(Low Density Parity Check Code,LDPC)碼是一類具有稀疏校驗矩陣的線性分組碼,不僅有逼近Shannon限的良好性能,而且譯碼復雜度較低, 結構靈活,是近年信道編碼領域的研究熱點,目前已廣泛應用于深空通信、光纖通信、衛星數字視頻和音頻廣播等領域。LDPC碼已成為第四代通信系統(4G)強有力的競爭者,而基于LDPC碼的編碼方案已經被下一代衛星數字視頻廣播標準DVB-S2采納。 編碼器實現指標分析 作為前向糾錯系統的重要部分,設計高速率低復雜度LDPC碼編譯碼器成為提高系統性能的關鍵。對LDPC碼來說,其編碼復雜度相對較大,編碼器的設計與實現是首要任務,也是譯碼器設計與實現的前提,有著十分重要的作用。 編碼速率與復雜度是評價LDPC編碼器好壞的重要指標。考慮高清晰度電視(HDTV)標準在分辨率為1920×1080,幀率為60幀/s,每個像素以24比特量化時,總數據率在2Gb/s的數量級。采用MPEG-2壓縮,要求數據率大約在20~40Mb/s。 編碼器設計思路 設LDPC碼檢驗矩陣為H、生成矩陣為G。傳統的編碼方法是利用生成矩陣G直接進行編碼。由于G并不具有稀疏性,直接編碼的復雜度與碼長N的平方成正比。本文的編碼器采用RU編碼算法。該算法通過對交換校驗矩陣行列的位置,保持矩陣的稀疏性,利用交換行列后的校驗矩陣進行編碼,有效降低了編碼的復雜度。經過行列交換的校驗矩陣具有近似下三角形式,如圖1所示。 圖1 交換校驗矩陣 設信息序列為s,碼字為C利用圖1的矩陣可對信息序列s進行編碼。碼字分為三部分:C=(s,p1,p2),其中s是信息比特序列,長度為k;p1和p2是校驗比特序列,長度分別為g和N-k-g。校驗比特序列p1、p2計算公式如下: 編碼流程如圖2所示。 圖2 編碼流程圖 設計LDPC編碼器的時候注意:在RU算法中,對校驗矩陣進行行列交換,轉化為近似下三角形式稱為編碼預處理過程。給定一個校驗矩陣,編碼預處理過程和矩陣的計算只需要做一次,所以可先用軟件完成。實際的編碼計算通過硬件實現。這樣做有利于提高編碼硬件實現的效率。 LDPC碼編碼器實現 LDPC碼編碼器硬件結構 基于RU算法的LDPC編碼實現過程主要是計算p1、p2的過程。設計編碼器時,為了提高編碼速度,將可以同時計算的步驟作并行處理,得到編碼器的硬件結構如圖3所示。 圖3 LDPC碼編碼器結構 圖3中A、B、C、E分別代表圖1中相應的矩陣,F代表Φ矩陣。從圖3可知,LDPC編碼器主要由緩沖器(buffer)、矩陣向量乘法器(MVM)、矩陣加法器(VA)、前向迭代運算器(FS)、向量合成器(CWG)等運算單元以及存儲各個矩陣相關信息的存儲器組成。因為前向迭代運算基本上是矩陣與向量的乘法計算,所以矩陣向量乘法是LDPC編碼過程最核心的單元。 分析圖3可知,編碼過程中,Cs與As的計算是同時進行的,其他的操作都是串行進行的。由于行列交換保持了矩陣的稀疏性,所以與A、B、C、E矩陣的相關運算是稀疏矩陣的運算,存儲矩陣所需的空間少同時實現的復雜度低和運算速度快。Φ是g×g的矩陣,由于在編碼預處理過程中保證了g盡量小,所以與Φ矩陣相關的運算也是比較快的。 LDPC碼編碼器復雜度 表1和表2描述了編碼器計算校驗序列p1、p2的流程及相應的復雜度。 表1 p1的計算 表2 p2的計算 從表1和表2可知RU算法的復雜度與N+g2成正比,g越小,編碼復雜度越低。所以對校驗矩陣進行行列交換時,使g盡量小是進一步降低編碼復雜度的關鍵。 表1中序號2與表2中序號4的操作涉及到下三角矩陣T。由于T-1也是下三角矩陣,為了降低復雜度,可采用前向迭代進行計算。例如:假設Qx=y,Q為下三角矩陣,求x。計算過程如下: 編碼器核心模塊——矩陣向量乘法器(MVM)的實現 矩陣與矩陣的乘法運算以及前向迭代運算實質上都是矩陣與向量的乘法。下面舉例說明矩陣向量乘法器硬件實現的過程: 假設, 對于LDPC編碼器,如何有效率地存儲各個矩陣的信息是降低復雜度的關鍵。下面給出一種矩陣存儲的方案:矩陣存儲器中記錄“1”在行中的位置以及對應行行重,如表3所示。例如矩陣X第3行的“1”元素,在行中的位置為“0”,該行的行重為1。由于LDPC編碼過程中使用的矩陣大多是稀疏矩陣,所以采用該矩陣存儲方案能比較有效地利用存儲的空間并有利于矩陣與向量乘法的快速實現。 矩陣X每行中“1”的位置可看作選擇向量s相應元素的地址索引,將選擇的所有元素相加作和,即完成X中某行與向量的運算。由于涉及的運算都是二進制加法,相加作和操作可以作如下簡化:根據矩陣每行“1”的位置選擇向量s的元素。統計被選擇的元素中“1”的個數,若結果為奇數則說明相加的結果為“1”,否則說明相加的結果為“0”。判斷結果為奇數或者偶數可由其二進制形式的末位是“1”或者“0”得到。通過設置兩個計數器分別計算各行行重和選擇的向量s相應位置的元素中“1”的個數,即可實現乘法單元的運算。 矩陣向量乘法器的硬件結構如圖4所示。 圖4 矩陣向量乘法器的硬件結構 從圖4可知矩陣向量乘法器包括以下六個部分:調度單元(Scheduler),產生各模塊單元的使能信號;緩存單元(Info_buffer),對輸入信息序列進行緩存處理;存儲器控制單元(Rom_ctrl),產生存儲器的地址信號;“1”位置存儲器(Rom_num),存儲矩陣各行“1”的位置;行重存儲器,存儲矩陣相應各行行重;乘法單元(Multipler),進行向量乘法運算,最后輸出碼字。 矩陣向量乘法器仿真結果驗證 在Quartus II環境下,實現output=Xs,得到如圖5所示時序圖。 圖5 output="Xs仿真時序圖" 圖5中“en”是使能信號,“clock”是時鐘信號,addr_num、addr_wei分別為兩個存儲器的地址信號,info_seq是輸入信息信號,rece是信息信號經過緩存后的輸出信號,num_t是“1”在各行的位置信息,row_wei_t是相應各行的行重,output是矩陣與向量相乘的結果。由圖5可知,output=[1 1 1],信號輸出有一個時鐘周期的延時,仿真結果正確。 編碼器方案驗證與優缺點分析 本文利用FPGA實現了基于RU算法的編碼器設計實現。在Quartus II軟件環境下對LDPC編碼器進行仿真,使用Stratix系列EP1s25F672I7芯片,對碼長為504的碼字進行編碼。編碼器占用約9%的邏輯單元,約5%的存儲單元,綜合后時鐘頻率達到120MHz,數據吞吐率達到33Mb/s,基本符合編碼器設計的要求。該編碼器結構是一種通用的設計方案,可以應用于各種不同的LDPC編碼中,但由于其采用通用的編碼算法,實現的復雜度高于某些特殊結構的LDPC碼編碼器,比如準循環LDPC碼。另外通過優化時序和編碼結構,可以進一步提高本文的編碼器的編碼速度。 |