一種基于FPGA的QC_LDPC碼的譯碼器設(shè)計(jì)
摘要 針對(duì)QC_LDPC碼的短環(huán)對(duì)碼性能的重要影響,采用了1種圍數(shù)為8的QC_LDPC碼設(shè)計(jì)。算法首先分別對(duì)3個(gè)不同的子矩陣進(jìn)行移位運(yùn)算,每個(gè)子矩陣分別與它們移位后生成的子矩陣共同組合形成1個(gè)新的子矩陣,然后再將新生成的3個(gè)子矩陣組合成1個(gè)矩陣構(gòu)成基陣,最后將該矩陣轉(zhuǎn)置后用單位矩陣及其移位矩陣隨機(jī)擴(kuò)展即可得到所需校驗(yàn)矩陣。根據(jù)該校驗(yàn)矩陣的特殊結(jié)構(gòu),采用分層迭代譯碼算法,選用Altera公司的Stratix III系列FPGA,實(shí)現(xiàn)碼率為1/2、碼長(zhǎng)為3456的正規(guī)(3,6)QC_LDPC碼譯碼器的布局布線。
本文引用地址:http://m.butianyuan.cn/article/246737.htmLDPC碼是近年來(lái)發(fā)展較快且日趨成熟的一種信道編碼方案,因其具有的優(yōu)越性能和實(shí)用價(jià)值而被人們認(rèn)知,但由于隨機(jī)結(jié)構(gòu)的LDPC碼編譯碼器硬件實(shí)現(xiàn)較為復(fù)雜,具有的準(zhǔn)循環(huán)特性QC_LDPC碼已成為IEEE 802.11n(WiFi)、IEEE 802.16e(WiMAX)、(DVB—S2)等眾多標(biāo)準(zhǔn)的信道編碼方案。LDPC碼是一種基于稀疏校驗(yàn)矩陣的線性分組碼,具有類似于Turbo碼的良好糾錯(cuò)性能。1981年Tanner提出的用二部圖表示一個(gè)低密度線性分組碼的方法,成為L(zhǎng)DPC碼的主要分析工具。若LDPC碼的Tanner圖是無(wú)環(huán)的,那么與積SP(Sum—Product)譯碼算法可實(shí)現(xiàn)最佳譯碼,若存在環(huán)尤其是短環(huán)的話,則由和積算法計(jì)算所得的概率并非真正的后驗(yàn)概率(這是因?yàn)榈^(guò)程中的獨(dú)立性假設(shè)不能成立),因而譯碼并不是最優(yōu)的逐符號(hào)最大后驗(yàn)概率譯碼,因此,環(huán)的存在大幅影響了譯碼的性能。MacKay和Neal經(jīng)過(guò)大量的仿真結(jié)果證明信息傳遞算法(Message —Passing Algorithm,MPA)在Tanner圖中有環(huán)的情況下仍具有較好的譯碼性能,但短環(huán)的存在還是會(huì)降低譯碼性能。因此通過(guò)增大碼的最小圍數(shù)(環(huán)長(zhǎng)),可提高碼字的性能,圍數(shù)達(dá)到一定的值就可接近無(wú)環(huán)時(shí)的性能。
文獻(xiàn)提出一種圍數(shù)為8的低密度校驗(yàn)矩陣的設(shè)計(jì)算法,獲得的QC_LDPC碼在AWGN信道下的仿真結(jié)果表明,其具有逼近隨機(jī)QC_LDPC碼的誤碼率性能。本文采用該算法構(gòu)造的校驗(yàn)矩陣屬于正規(guī)的QC_LDPC碼,具有更好的分塊循環(huán)移位特性,大幅降低了編譯碼復(fù)雜度,而Mansour和Sha nbhag則提出了一種LDPC譯碼策略——分層譯碼(Lnyered decoding),本文采用分層譯碼方案,為降低硬件復(fù)雜度,在Mansour和Shanbhag的基礎(chǔ)上進(jìn)一步優(yōu)化,采用更為簡(jiǎn)單的歸一化最小和算法(NMS)代替了傳統(tǒng)的和積算法(SPA)。整個(gè)譯碼過(guò)程只包含比較、移位和加減運(yùn)算,運(yùn)算量比SPA算法大幅降低,同時(shí)譯碼性能損失可不超過(guò)0.1 dB。
1 校驗(yàn)矩陣的構(gòu)造
該方法構(gòu)造的是一個(gè)列重為3,行重>3的校驗(yàn)矩陣。首先構(gòu)造3個(gè)子矩陣D、E和F,然后將子矩陣D、D和F按照行的方向排列生成H1,H1=[D E F],再將H1轉(zhuǎn)置生成矩陣H2,最終用pxp的單位矩陣及其移位矩陣作為隨機(jī)因子,對(duì)矩陣H2中的“1”進(jìn)行隨機(jī)擴(kuò)展,即可生成所需的校驗(yàn)矩陣H。
1.1 子矩陣D的構(gòu)造
構(gòu)造一個(gè)v行、v2列的矩陣D0,其中D0的元素D0(1,1)=D0(2,1)=D0(3,1)=…=D0(v,1)=1,其余元素均為0,
(1)將矩陣D0中的元素向右循環(huán)移位,每移動(dòng)1位生成一個(gè)新矩陣。當(dāng)D0中所有元素為1的列移動(dòng)到第v2列時(shí)移位完畢,共生成v2-1個(gè)新矩陣D1,D2,D3,…,Dv2-1。
(2)將D0,D1,D2,D3,…,Dv2-1按照列的方向排列便生成子矩陣D=[D0,D1,D2,…,Dv2-1]T,其維數(shù)為v3×v2。
1.2 子矩陣E的構(gòu)造
(1)構(gòu)造一個(gè)v行、v2列的矩陣E0,其中E0中的元素E0(1,1)=E0(2,2)=E0(3,3)=…=E0(v,v)=1,其余元素均為0,即E0的前v列所構(gòu)成的塊為單位矩陣。如,當(dāng)v=4時(shí)
(2)將v個(gè)E0矩陣按照列的方向排列生成矩陣E1=[E0,E0,…,E0]T。
(3)將矩陣E1向右循環(huán)移位,每移動(dòng)v位生成一個(gè)新矩陣,由此共生成v-1個(gè)新矩陣,分別記為E2,E3,…,Ev。
(4)將E1,E2,E3,…,Ev按照列的方向排列生成子矩陣E=[E1,E2,E3,…,Ev]T,其維數(shù)為v3×v2。
1.3 子矩陣F的構(gòu)造
(1)構(gòu)造一個(gè)v行v2、列的矩陣F0。其中F0中的元素F0(1,1)=F0(2,v+1)=F0(3,2v+1)=…=F0(v,v2-v+1)=1,其余元素均為0。即在F0中,從第2行開(kāi)始,每行中的元素“1”的列位置較上一行中的“1”向右移動(dòng)v位。假設(shè),當(dāng)v=4時(shí)
(2)將F0向右循環(huán)移位,每移動(dòng)1位生成v-1個(gè)新矩陣,共生成個(gè)新矩陣時(shí)停止移位,將新矩陣記為F1,F(xiàn)2,F(xiàn)3,…,F(xiàn)v-1。
(3)將F0,F(xiàn)1,F(xiàn)2,F(xiàn)3,…,F(xiàn)v-1按照列的方向排列,生成的矩陣記為Fv=[F0,F(xiàn)1,F(xiàn)2,F(xiàn)3,…,F(xiàn)v-1]T。
(4)將v個(gè)Fv按照列的方向排列生成矩陣F=[Fv,F(xiàn)v,…,F(xiàn)v]T,其維數(shù)為v3×v2。
1.4 矩陣H2的擴(kuò)展算法
將生成的子矩陣按行排列得到H1
1.5 擴(kuò)展H2得到校驗(yàn)矩陣H
(1)設(shè)一個(gè)單位矩陣I的維數(shù)為p×p,則
(2)隨機(jī)產(chǎn)生1-p之間的隨機(jī)數(shù),該隨機(jī)數(shù)即為單位矩陣的循環(huán)移位數(shù)。
(3)將矩陣H2中的“1”用產(chǎn)生的隨機(jī)數(shù)來(lái)替代。
(4)將矩陣中的隨機(jī)數(shù)用對(duì)應(yīng)的置換矩陣替代填充,而矩陣H2中的元素“0”用p×P的零矩陣代替,由此即可生成所需的校驗(yàn)矩陣H,其維數(shù)為3pv2×pv3。
c++相關(guān)文章:c++教程
評(píng)論