朱勝利
(中國(guó)電子科技集團(tuán)公司第十研究所,四川 成都 610036)
信道編碼是通信系統(tǒng)的一個(gè)重要組成部分,是提高通信系統(tǒng)可靠性的重要手段。它的性能好壞直接影響通信質(zhì)量。香農(nóng)于1948 年發(fā)表了他的開創(chuàng)性論文《通信的數(shù)學(xué)理論》,并提出了著名的有噪信道編碼定理[1]。信道編碼定理指出:任何一個(gè)通信信道都有確定的信道容量C,如果通信系統(tǒng)所要求的傳輸速率R<C,則存在一種編碼方法,當(dāng)碼長(zhǎng)充分大并應(yīng)用最大似然譯碼(Maximum Likelihood Decoding,MLD)時(shí),信息的錯(cuò)誤概率可以任意小。信道編碼定理奠定了糾錯(cuò)編碼理論的基石。
香農(nóng)用信道編碼定理說(shuō)明了逼近信道容量“好碼”的存在性,美中不足的是其并沒(méi)有給出構(gòu)造“好碼”的實(shí)用方法。實(shí)際中,當(dāng)要求通信的差錯(cuò)概率很低時(shí),將迫使通信系統(tǒng)采用碼長(zhǎng)很長(zhǎng)的編碼,從而使得譯碼算法變得異常復(fù)雜而難以實(shí)現(xiàn)。因此,在香農(nóng)編碼定理出現(xiàn)后的的相當(dāng)一段時(shí)間內(nèi),隨機(jī)編碼理論僅僅作為分析、證明編碼理論的工具,而如何構(gòu)造這種性能逼近香農(nóng)限的“好碼”從而讓其應(yīng)用于實(shí)踐,并未引起人們足夠的重視。
經(jīng)過(guò)大量研究,BERROU 等人于1993 年提出了一種新的信道編碼方案——Turbo 碼[2]。為了實(shí)現(xiàn)隨機(jī)編碼的思想,他們將卷積編碼和隨機(jī)交織器巧妙地結(jié)合在一起,并采用軟輸出迭代譯碼來(lái)逼近最大似然譯碼,從而獲得幾乎接近香農(nóng)理論極限的譯碼性能。這一理論成果的公布立即在編碼界引起轟動(dòng),也為香農(nóng)隨機(jī)編碼理論的應(yīng)用奠定了基礎(chǔ)。
Turbo 碼是級(jí)聯(lián)碼的一種,常用的是并行級(jí)聯(lián)卷積碼(Parallel Concatenated Convolutional Code,PCCC)。該碼是由兩個(gè)獨(dú)立遞歸系統(tǒng)卷積碼(Recursive Systematic Convolutional,RSC)構(gòu)成的并行級(jí)聯(lián)碼[3]。除此之外,有學(xué)者提出了串行級(jí)聯(lián)卷積碼(Serial Concatenated Convolutional Code,SCCC)[4]。本文研究對(duì)象為PCCC。交織器的存在讓Turbo 碼中加入了近似隨機(jī)成分,使其能夠達(dá)到非常接近香農(nóng)限的性能。事實(shí)上,Turbo 碼的性能與香農(nóng)限僅僅相差0.7 dB。Turbo 碼的級(jí)聯(lián)結(jié)構(gòu)還有一個(gè)好處是其可以將短碼變?yōu)殚L(zhǎng)碼,從而大大擴(kuò)展其應(yīng)用范圍。Turbo 碼的出現(xiàn)標(biāo)志著信道編碼理論與技術(shù)研究進(jìn)入了一個(gè)嶄新的階段,結(jié)束了長(zhǎng)期以來(lái)人們將信道截止速率作為實(shí)際容量的歷史,同時(shí)改變了人們構(gòu)造“好碼”的傳統(tǒng)觀念。
一般而言,信道編碼通過(guò)舍棄一部分信道容量來(lái)獲得糾錯(cuò)能力的提升。舍棄部分信道容量主要表現(xiàn)為在編碼器的輸出中加入部分與輸入比特相關(guān)的校驗(yàn)比特,以提高糾錯(cuò)能力,但由于校驗(yàn)比特的加入使得編碼效率下降。通常情況下,要在編碼效率和誤比特率之間取得一定平衡。刪余作為提高碼率的一種主要方法,本質(zhì)上是按照某種規(guī)律固定地刪除編碼器輸出信息中的部分比特,刪除比特的多少最終決定Turbo 碼的碼率。為了讓接收端能夠更準(zhǔn)確的譯碼,刪余器需要準(zhǔn)確指出被刪除校驗(yàn)比特的位置,一般情況下采用刪余矩陣來(lái)表示。刪余操作的存在使得Turbo 碼能夠靈活輸出各種不同碼率的碼字,從而適應(yīng)不同的應(yīng)用場(chǎng)景。
目前,國(guó)外許多大學(xué)和研究機(jī)構(gòu)都在進(jìn)行Turbo 碼的研究,且已有幾家公司能夠提供與Turbo碼有關(guān)的產(chǎn)品;國(guó)內(nèi)也有很多高校在研究Turbo 碼在相關(guān)領(lǐng)域的應(yīng)用。Turbo 碼具有接近香農(nóng)限的性能,特別適用于對(duì)功率要求嚴(yán)格的場(chǎng)合,如能源極端受限的深空及衛(wèi)星通信中,以及為了降低被發(fā)現(xiàn)的概率而要求發(fā)射信號(hào)功率盡可能低的軍事通信中。另外,Turbo 碼近似隨機(jī)碼,有很好的距離特性,因而有很強(qiáng)的抗衰落和抗干擾能力。目前,Turbo碼已經(jīng)成為第三代移動(dòng)通信系統(tǒng)的標(biāo)準(zhǔn)之一[5],也已經(jīng)開始有關(guān)其關(guān)鍵技術(shù)的標(biāo)準(zhǔn)化,如3GPP LTE及Wimax 等無(wú)線標(biāo)準(zhǔn)組織紛紛將其作為其信道編碼方式。此外,Turbo 碼在文本傳輸和數(shù)據(jù)存儲(chǔ)等方面也有應(yīng)用。
Turbo 編碼的硬件實(shí)現(xiàn)一直都是Turbo 碼研究的重要課題,也是將Turbo 推向商業(yè)化應(yīng)用的基礎(chǔ)和難點(diǎn)。目前,業(yè)界對(duì)Turbo 碼譯碼算法的研究較多[6-11],而對(duì)其編碼的硬件實(shí)現(xiàn)研究相對(duì)較少。時(shí)述有等人提出了一種基于FPGA 的Turbo 碼編碼算法,交織器采用實(shí)時(shí)產(chǎn)生的方式,當(dāng)碼長(zhǎng)很長(zhǎng)時(shí)時(shí)序控制變得相當(dāng)困難[12]。張永超等人分別利用數(shù)字信號(hào)處理(Digital Signal Process,DSP)和現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)對(duì)Turbo 碼的編碼進(jìn)行了研究分析,指出了兩種實(shí)現(xiàn)方式的優(yōu)劣,對(duì)工程實(shí)踐具有一定的參考[13]。沈業(yè)兵等人提出了一種突發(fā)通信中Turbo碼編譯碼的FPGA 實(shí)現(xiàn)方案[14]。藺吉順等人針對(duì)CCSDS 標(biāo)準(zhǔn)Turbo 碼提出了一種性能較好的編碼實(shí)現(xiàn)方法,但由于編碼過(guò)程利用ROM 表實(shí)現(xiàn),不利于算法的實(shí)時(shí)擴(kuò)展[15]。
針對(duì)現(xiàn)有算法的不足和具體項(xiàng)目的工程需要,基于FPGA 提出了一種可以實(shí)現(xiàn)不同碼長(zhǎng)、不同碼率的Turbo 碼編碼方法。該方法實(shí)現(xiàn)資源消耗較少,硬件結(jié)構(gòu)簡(jiǎn)單,可擴(kuò)展性好,時(shí)序穩(wěn)定,具有較強(qiáng)的工程實(shí)踐價(jià)值。
Turbo 碼一般由兩個(gè)反饋的RSC 分量編碼器和一個(gè)交織器并行連接而成,校驗(yàn)位經(jīng)過(guò)刪余處理后得到不同碼率的碼字[16]。RSC 編碼器只輸出編碼的校驗(yàn)序列,然后通過(guò)刪余進(jìn)行碼率調(diào)整,與原始信息序列一起輸出得到Turbo 碼的編碼輸出序列。一種常用的Turbo 碼編碼器,如圖1 所示。
圖1 Turbo 編碼器的結(jié)構(gòu)
Turbo 碼編碼時(shí)輸入信息X1,第一路直接進(jìn)入編碼器1 進(jìn)行編碼,輸出校驗(yàn)序列O1;原始信息經(jīng)過(guò)交織器進(jìn)行交織處理,以增加信息的隨機(jī)性。交織之后的信息序列X2 送入編碼器2 進(jìn)行編碼,輸出校驗(yàn)序列O2。編碼器1 和編碼器2 的輸出送入刪余處理模塊生成特定碼率的Turbo 碼,刪余之后的數(shù)據(jù)和原始信息序列復(fù)用生成最后的碼字。
分量編碼器是Turbo 碼邊編碼中非常重要的一環(huán),其設(shè)計(jì)的好壞直接決定了Turbo 碼的糾錯(cuò)性能。Turbo 碼的發(fā)明者之一Thitimajshima 在研究Turbo碼的分量碼時(shí)發(fā)現(xiàn),信噪比對(duì)分量碼的誤比特性能具有重要影響。高信噪比時(shí),非系統(tǒng)卷積碼優(yōu)于系統(tǒng)卷積碼;低信噪比時(shí),系統(tǒng)卷積碼優(yōu)于非系統(tǒng)卷積碼。另外,循環(huán)編碼器可以改善碼的比特誤碼率性能。實(shí)際中,Turbo 碼的優(yōu)勢(shì)主要體現(xiàn)在低信噪比條件下,因此Turbo 碼分量碼一般選擇系統(tǒng)卷積碼。Turbo 碼RSC 編碼器的結(jié)構(gòu),如圖2 所示。
圖2 Turbo 碼RSC 編碼器的結(jié)構(gòu)
從圖2 可以看出,該分量編碼器的記憶深度為4,對(duì)應(yīng)16 種狀態(tài)。該分量編碼器由后向連接多項(xiàng)式g1=1+x3+x4和前向連接多項(xiàng)式g2=1+x+x3+x4共同組成,對(duì)應(yīng)的多項(xiàng)式生成矩陣為:
交織器對(duì)Turbo 碼具有重要作用,主要作用是提高低重序列的輸出碼重和減小譯碼輸出之間的相關(guān)性。交織器直接影響Turbo 碼的距離譜和性能,可以提高Turbo 碼的抗突發(fā)錯(cuò)誤的能力,還可以改善Turbo 碼的重量分布,最終在接收端使用基于SISO 的迭代譯碼算法可以降低誤碼率(Symbol Error Rate,BER)。一般而言,Turbo 碼的交織器主要有分組交織器和偽隨機(jī)交織器兩種類型,而偽隨機(jī)交織器可以獲得更好的編碼性能。本文采用CCSDS 推薦的交織器,具體采用二次置換多項(xiàng)式交織器。該交織器對(duì)存儲(chǔ)空間的需求較少,操作簡(jiǎn)便,復(fù)雜度較低,結(jié)構(gòu)靈活,性能優(yōu)良。
對(duì)于指定的信息塊長(zhǎng)度k,交織算法如下進(jìn)行。
令k=k1*k2。對(duì)于s=1,2,…,k,π(s)可以表示為:
如圖1 所示,正常情況下如果不存在刪余(打孔),則使用兩個(gè)RSC 分量編碼器的Turbo 編碼輸出的碼率為1/3。也就是說(shuō),在編碼序列中,每3個(gè)比特中僅有1 個(gè)信息比特和2 個(gè)校驗(yàn)比特。為了得到不同碼率的Turbo 編碼,有選擇地刪除編碼輸出序列中的一些冗余校驗(yàn)位是很有必要的,而這一過(guò)程由刪余操作來(lái)完成。
刪余通常是按周期、有規(guī)律進(jìn)行的。以碼率為1/n的Turbo 碼為例,定義一個(gè)刪除周期,假設(shè)為T。在每個(gè)周期內(nèi),共有T個(gè)信息輸入到編碼器,經(jīng)編碼后得到nT編碼比特。與nT個(gè)編碼比特相聯(lián)系的是一個(gè)n×T的刪余矩陣P,具有如下形式:
刪余矩陣P中的元素Pij取值為1 或者0,1 表示對(duì)應(yīng)位置的編碼比特被容許輸出,0 表示對(duì)應(yīng)位置雖然存在編碼比特但是不會(huì)輸出。從信息傳輸?shù)慕嵌葋?lái)看,這些不被輸出的比特被刪除了,也是刪余的含義。對(duì)于前面提到的Turbo 碼,可以通過(guò)如下刪余舉證得到1/2 碼率的Turbo 碼:
首先,兩個(gè)分量編碼器的所有寄存器初始化為0,運(yùn)行一個(gè)周期(486+0)bit,從而產(chǎn)生一個(gè)長(zhǎng)為980 bit 的碼塊。每個(gè)周期的前486 bit,輸入開關(guān)在低位接收輸入數(shù)據(jù),最后4 bit 開關(guān)切換到高位,從移位寄存器中接收反饋信號(hào)。該反饋和最左邊的加法器反饋抵消,從而對(duì)寄存器進(jìn)行清零操作。寄存器清零期間,編碼器仍將繼續(xù)輸出非零編碼序列。系統(tǒng)的未編碼輸出包括486 個(gè)原始信息比特和最后移位寄存器中的數(shù)據(jù)。
假設(shè)分量編碼1 的輸出為O1=[O1,1O1,2O1,3…O1,490],編碼器2 的輸出為O2=[O2,1O2,2O2,3…O2,490],之后結(jié)合信息序列打孔復(fù)用后得到整體輸出980 bit的碼字。
根據(jù)Turbo 碼的編碼結(jié)構(gòu),基于FPGA 的Turbo編碼器設(shè)計(jì)的關(guān)鍵在于RSC 編碼器的設(shè)計(jì)、交織模塊的設(shè)計(jì)、打孔模塊的設(shè)計(jì)以及各模塊時(shí)序的控制。在實(shí)際工程應(yīng)用時(shí),數(shù)據(jù)流是按要求組幀的。這就要求Turbo 碼對(duì)相同的輸入狀態(tài)產(chǎn)生相同的輸出結(jié)果,意味著在每一次編碼完畢后需要對(duì)分量編碼器的寄存器清零。而兩個(gè)分量編碼器的寄存器能否同時(shí)歸零對(duì)Turbo 碼的性能具有一定的影響。
對(duì)于卷積碼而言,要使編碼網(wǎng)格終止比較簡(jiǎn)單,只需在輸入信息序列后加入m(編碼約束長(zhǎng)度)個(gè)0 即可。但是,對(duì)于系統(tǒng)遞歸卷積碼編碼器,由于有反饋的存在,編碼器的狀態(tài)很難確定,添0 的策略并不能達(dá)到網(wǎng)格終止的目的。此外,由于交織器的存在,編碼器1 回到全0 狀態(tài)時(shí),編碼器2 不一定回到全0 狀態(tài)。業(yè)界學(xué)者提出了很多比較實(shí)用的方法,最簡(jiǎn)單的是在輸入端設(shè)置開關(guān)電路來(lái)實(shí)現(xiàn)網(wǎng)格的終止。另一種方法是只對(duì)RSC 編碼器1 的信息序列后加入m個(gè)0 比特,使其狀態(tài)回到全0,而對(duì)編碼器2 不做處理,可以在任何狀態(tài)停止編碼。這樣僅僅喪失了一定的性能。本文中采用數(shù)據(jù)末尾補(bǔ)1 的做法。
對(duì)于交織器的實(shí)現(xiàn),業(yè)界主要有兩種實(shí)現(xiàn)方式:一種是根據(jù)交織關(guān)系,利用FPGA 實(shí)時(shí)產(chǎn)生交織器的輸出;另一種使用ROM 表,即利用軟件工具如MATLAB,根據(jù)交織關(guān)系產(chǎn)生交織輸出,并存儲(chǔ)于ROM 表中。實(shí)際上,當(dāng)交織長(zhǎng)度增加時(shí),利用第一種方法實(shí)現(xiàn)編碼會(huì)帶來(lái)很大延遲,不利于Turbo編碼的實(shí)現(xiàn)。本文主要使用第二種實(shí)現(xiàn)方式,將交織關(guān)系存儲(chǔ)于ROM 表,方便調(diào)用。在數(shù)據(jù)交織時(shí),數(shù)據(jù)通過(guò)一個(gè)偽雙口RAM,順序?qū)懭?,而讀出時(shí)則根據(jù)ROM 表輸出的數(shù)據(jù)讀出。因?yàn)镽OM 表中的數(shù)據(jù)其實(shí)是原始信息下標(biāo)的交織序列,對(duì)應(yīng)RAM的讀出地址。當(dāng)面對(duì)不同的交織關(guān)系時(shí),只需替換增加對(duì)應(yīng)的ROM 表即可。
基于以上設(shè)計(jì)原則及技術(shù)需求,所提基于FPGA 的Turbo 碼編碼算法的流程如圖3 所示。
圖3 算法流程
如圖3 所示,算法實(shí)現(xiàn)時(shí),對(duì)于每一幀數(shù)據(jù),首先在幀尾補(bǔ)m個(gè)1 得到新的信息序列,其中m為RSC 移位寄存器的深度。這樣可以使得每一幀編碼完畢后兩個(gè)RSC 移位寄存器的狀態(tài)均歸零,然后對(duì)補(bǔ)“1”之后的信息序列和對(duì)應(yīng)的交織序列分別進(jìn)行編碼。圖3 左側(cè)是編碼器2 的主要編碼路徑,右側(cè)是編碼器1 的編碼路徑。因?yàn)榫幋a器2 的輸入數(shù)據(jù)要先進(jìn)行交織處理,交織后的輸出序列相對(duì)原始信息序列存在一定的延遲。為了對(duì)齊兩個(gè)編碼器的輸入,需要對(duì)送入編碼器1 的信息序列進(jìn)行延遲處理。數(shù)據(jù)對(duì)齊后,兩個(gè)編碼器同時(shí)進(jìn)行編碼。最后,為了得到不同碼率的Turbo 碼,對(duì)兩個(gè)編碼器輸出校驗(yàn)比特通過(guò)刪余模塊進(jìn)行刪余處理。由于刪余模塊每次輸出多個(gè)比特,為了得到連續(xù)輸出,先將刪余之后數(shù)據(jù)的使能進(jìn)行隔斷,達(dá)到時(shí)序控制的目的,之后利用串轉(zhuǎn)換模塊將使能不連續(xù)的并行數(shù)據(jù)轉(zhuǎn)化為使能連續(xù)的串行數(shù)據(jù)輸出,從而完成編碼。
整個(gè)Turbo 編碼的核心是分量編碼器的實(shí)現(xiàn)。為了給出詳細(xì)的編碼實(shí)施方案,圖4 給出了分量編碼器的具體實(shí)現(xiàn)過(guò)程。
如圖4 所示,分量編碼器按比特進(jìn)行編碼。每次輸入1 bit,輸出時(shí)按不同的碼率輸出多個(gè)比特。編碼從第1 個(gè)比特開始,輸入比特信息后需要計(jì)算反饋多項(xiàng)式的反饋量Fd。以具有4 個(gè)反饋移位寄存器的RSC 為例,假設(shè)其值為lfsr(4)、lfsr(3)、lfsr(2)、lfsr(1),則反饋值Fd 為lfsr(4)與lfsr(3)的異或,然后計(jì)算寄存器的更新量ad=Fd xor lfsr(4),進(jìn)而得到兩比特輸出。Dout1 是輸入信息比特din,而Dout2 是寄存器更新值ad 與lfsr(4)、lfsr(3)、lfsr(1)異或的結(jié)果,即Dout2=ad xor lfsr(1) xor lfsr(3) xor lfsr(4)。完成一次編碼輸出后需要更新移位寄存器,由寄存器更新值ad 替換lfsr(1)的值,原1、2、3 位置的值左移即可,及l(fā)fsr(4 to 3)=lfsr(3 to 1),lfsr(1)=ad。寄存器更新后,繼續(xù)下一比特的編碼。編碼時(shí),考慮到移位寄存器的清零需求,需要對(duì)輸入數(shù)據(jù)的數(shù)量進(jìn)行判斷。當(dāng)i <Len+1,即還未到對(duì)寄存器清零時(shí),輸入下一個(gè)比特繼續(xù)上邊的編碼過(guò)程;若不然,則與上面過(guò)程不同的是,寄存器的更新值ad永遠(yuǎn)為零。之后對(duì)輸入信息數(shù)量進(jìn)行判斷,如果i <Len+4,則繼續(xù)下一個(gè)比特的編碼,否則說(shuō)明已經(jīng)完成當(dāng)前所有比特信息的編碼,且編碼器狀態(tài)已經(jīng)清零,編碼結(jié)束,直到下一幀數(shù)據(jù)到來(lái)再繼續(xù)以上編碼。
圖4 分量編碼器的實(shí)現(xiàn)流程
為了驗(yàn)證算法的有效性,在Xilinx 公司的XC7VX690T 芯片上實(shí)現(xiàn)了Turbo(486,980)的編碼。表1 是整個(gè)Turbo 編碼器消耗的主要硬件資源,其中包括為了實(shí)現(xiàn)編碼器而存在的數(shù)據(jù)產(chǎn)生、對(duì)外接口處理等必要模塊。從表1 可以看出,算法實(shí)現(xiàn)占用的硬件資源十分少,說(shuō)明該編碼器實(shí)現(xiàn)復(fù)雜度低、硬件資源消耗少等優(yōu)勢(shì)。
表1 主要硬件資源消耗
為了進(jìn)一步驗(yàn)證算法的有效性,本文使用Xilinx 旗下ISE 軟件自帶的Isim Simulator 對(duì)所提算法中的主要功能模塊進(jìn)行仿真。針對(duì)分量編碼器的仿真結(jié)果如圖5 所示。
圖5 中din 為輸入串行的信息比特?cái)?shù)據(jù),din_valid 為其對(duì)應(yīng)的使能,編碼器的輸出為dout,對(duì)應(yīng)輸出使能為dout_valid??梢钥吹剑敵鰀out 為并行4 位的,這是為了支持不同的碼率,而4 位輸出可以支持到1/6 Turbo 編碼。
圖5 Turbo 分量編碼器的仿真結(jié)果
刪余處理模塊的仿真結(jié)果,如圖6 所示。以1/2 碼率來(lái)說(shuō),它的編碼矩陣為P=[1 0;0 1],即Turbo 編碼輸出的4 bit 中,除了信息位,校驗(yàn)位根據(jù)需要取編碼器1 或者2 的輸出。圖6 中,din_valid 表示編碼器的輸出使能。由于在此之前對(duì)兩個(gè)編碼器的輸入做了數(shù)據(jù)對(duì)齊處理,因此兩個(gè)編碼器的輸出共用一個(gè)使能。Index 決定輸出哪一個(gè)編碼器的校驗(yàn)位,dout 和dout_valid 分別表示模塊的輸出及使能。
圖6 刪余處理模塊仿真結(jié)果
從前面的描述可以看出,目前Turbo 碼的輸出中信息位和校驗(yàn)位是并行的。為了根據(jù)不同的碼率將其轉(zhuǎn)換為串行數(shù)據(jù),考慮到信息位和校驗(yàn)位的關(guān)系,將刪余模塊的輸出使能進(jìn)行隔斷,具體操作時(shí)需要根據(jù)碼率來(lái)調(diào)整輸出使能的狀態(tài),方便后續(xù)模塊的處理。另外,為了適應(yīng)后續(xù)處理模塊對(duì)時(shí)鐘頻率的不同要求,這里通過(guò)fifo 對(duì)時(shí)鐘進(jìn)行適配處理。數(shù)據(jù)隔斷模塊的仿真結(jié)果如圖7 所示。
圖7 碼率調(diào)整,數(shù)據(jù)隔斷模塊仿真結(jié)果
圖7 中:wr_clk 表示寫時(shí)鐘;rd_clk 表示讀時(shí)鐘;din 表示打孔輸出后的數(shù)據(jù),即刪余模塊的輸出;din_valid 是其對(duì)應(yīng)連續(xù)使能;rate 表示碼速率,00指1/2;dout 和dou_valid 分別表示輸出信息及輸出使能。可以看出,dout_valid 已不再連續(xù),在1/2 碼率下數(shù)據(jù)隔一拍輸出一次。
編碼數(shù)據(jù)使能隔斷后,需要對(duì)編碼數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換處理并讓輸出使能連續(xù)。這部分工作由并串處理模塊完成。對(duì)應(yīng)Isim 的仿真結(jié)果如圖8 所示,其中dout_valid 為最終編碼輸出使能??梢钥吹剑琩out_valid 從之前的隔斷狀態(tài)更新為連續(xù)狀態(tài)。
圖8 并串轉(zhuǎn)換模塊仿真結(jié)果
針對(duì)實(shí)際工程的需求,提出了一種基于FPGA的Turbo 碼快速實(shí)現(xiàn)算法。該算法首先利用仿真軟件生成交織關(guān)系,存儲(chǔ)于ROM 表中用于交織路RSC 的編碼。相比于實(shí)時(shí)交織關(guān)系計(jì)算,利用ROM 表實(shí)現(xiàn)使得交織序列的延遲較小且固定,利于編碼之前交織序列和原信息序列的對(duì)齊,同時(shí)更易控制時(shí)序。在每一幀數(shù)據(jù)后添加“1”,使得每一幀數(shù)據(jù)編碼后兩路RSC 的移位寄存器能夠同時(shí)歸零。為了兩路RSC 能夠同時(shí)進(jìn)行編碼,對(duì)信息序列進(jìn)行延遲處理。為了得到特定碼率的Turbo 碼以適應(yīng)不同的工程需求,對(duì)編碼模塊輸出的兩路校驗(yàn)序列進(jìn)行刪余處理,同時(shí)隔斷使能信號(hào)以輸出完整的Turbo 碼字。隔斷使能使得特定碼率Turbo 碼的產(chǎn)生時(shí)序易于控制,便于后續(xù)并串轉(zhuǎn)換模塊的處理。此外,利用Isim Simulator 軟件仿真驗(yàn)證了所提方法正確性,并在Xilinx 的XC7VX690T 芯片上驗(yàn)證了編碼器的有效性。仿真及實(shí)際工程應(yīng)用說(shuō)明,該編碼器結(jié)構(gòu)簡(jiǎn)單,硬件資源消耗少,且易于擴(kuò)展,性能良好,具有較強(qiáng)的工程參考及實(shí)踐價(jià)值。