王宏俊,杜長斌,楊自恒,丁 群
(黑龍江大學(xué)電子工程學(xué)院,哈爾濱150080)
基于(2,1,7)卷積碼實現(xiàn)低誤碼率通信的DSP設(shè)計*
王宏俊,杜長斌,楊自恒,丁 群*
(黑龍江大學(xué)電子工程學(xué)院,哈爾濱150080)
為降低數(shù)字通信系統(tǒng)傳輸差錯并提高可靠性,從工程應(yīng)用角度出發(fā),在DSP硬件平臺上實現(xiàn)(2,1,7)卷積碼。用MATLAB仿真影響(2,1,7)卷積碼性能的各個參數(shù),與約束度為3和碼率為3/4、2/3的卷積碼進行對比,其仿真結(jié)果為DSP硬件實現(xiàn)奠定理論基礎(chǔ)。最后選用TI公司的TMS320DM6437型號,在CCS3.3開發(fā)環(huán)境上運行。實驗表明:約束度為7、碼率為1/2的卷積碼在較低的信噪比(SNR=6 dB)下誤碼率則可達到10-6,且DSP實現(xiàn)的(2,1,7)卷積碼方便可行,快速穩(wěn)定,譯碼準確,并具有較強的糾錯能力。
信道編碼;(2,1,7)卷積碼;DSP實現(xiàn);低誤碼率;約束長度;碼率;MATLAB仿真
信道編碼是數(shù)字通信系統(tǒng)的重要組成部分。在通信系統(tǒng)中,信道傳輸特性不理想以及噪聲的存在,會導(dǎo)致接收端出現(xiàn)接收信號的錯誤,因此用于信道糾錯的信道編碼是數(shù)字通信系統(tǒng)中極為重要的一個環(huán)節(jié)。
常用的糾錯編碼按其碼字結(jié)構(gòu)形式和對信息序列處理方式的不同可分成兩大類:分組碼和卷積碼。在分組碼的一個碼組內(nèi),監(jiān)督校驗位r僅與本碼組內(nèi)的k個信息碼元有關(guān),而與其他碼元無關(guān),這種信息序列處理的方式稱為分組碼。卷積碼是伊利亞斯于1955年提出的,卷積碼編碼時充分利用了各信息組之間的相關(guān)性,即編碼器對每一個長度為k的信息碼元產(chǎn)生長度為n的碼組(又稱作子碼)。子碼中的校驗元,不僅與本子碼的k個信息碼元有關(guān),而且還與此前m個子碼中的信息碼元有關(guān)[1]。然而,在與分組碼同樣的碼率R和設(shè)備復(fù)雜度的條件下,無論在理論上還是從實際上均已證明卷積碼的性能優(yōu)于分組碼,且實現(xiàn)最佳譯碼也較分組碼容易[2]。
針對卷積碼的優(yōu)良特性,國內(nèi)外學(xué)者開展了廣泛的研究。但一般多為理論上的編譯碼原理推導(dǎo),并只局限在MATLAB、System View等工具的軟件仿真,如文獻[3]提出的卷積碼的System View實現(xiàn),文獻[4]提出的卷積編碼及其維特比譯碼算法的軟件實現(xiàn)等。盡管文獻[5]提出了卷積碼的DSP實現(xiàn),但約束度僅為3,不能滿足實際應(yīng)用需要。本文以軟件無線電為研究背景,兼顧綜合譯碼的復(fù)雜度和糾錯能力,選用(2,1,7)“NASA”卷積碼,用MATLAB仿真工具準確計算出經(jīng)過高斯信道、不同信噪比下的誤碼率,并繪制出誤碼率曲線。
DSP是軟件無線電(SDR)必需的基本器件,是其靈魂和核心所在。在發(fā)送端,將待發(fā)送的模擬音頻或視頻信號經(jīng)過視頻轉(zhuǎn)換芯片進行數(shù)字化,送入DSP進行壓縮和卷積編碼處理,DSP通過其外部存儲器接口EMIF與FPGA相連,F(xiàn)PGA作為協(xié)同處理器,主要完成數(shù)據(jù)的擴頻、BPSK調(diào)制等工作,D/A模塊將調(diào)制后的數(shù)字信號轉(zhuǎn)換成模擬信號后經(jīng)RF無線射頻發(fā)射出去。
接收時,來自天線的信號經(jīng)過RF處理和變換,然后通過FPGA模塊進行解調(diào),在DSP模塊中解壓縮和維特比譯碼,處理后的數(shù)據(jù)送至多功能用戶終端。工作框圖如圖1所示。
圖1 系統(tǒng)工作原理圖
圖2給出了二進制卷積碼的編碼器例子。
圖2 (2,1,7)卷積碼編碼器
圖中 D1D2D3D4D5D6為移位寄存器(D觸發(fā)器),信息序列從左面輸入,編碼器的工作受時鐘脈沖控制。在每個時鐘脈沖到來時輸入一個信息碼元,例如第j個時鐘脈沖送入uj,下一個時鐘脈沖,即第j+1個時鐘脈沖送入uj+1,······移位寄存器中的存儲數(shù)據(jù)在每個時鐘作用下右移一位,則當(dāng)輸入信息碼元為uj時,D1D2D3D4D5D6中分別存放著此前輸入的uj-1,uj-2,uj-3,uj-4,uj-5,uj-6,經(jīng)運算可得到兩個校驗元vj,1和vj,2,
在編碼器輸出端,由旋轉(zhuǎn)開關(guān)實現(xiàn)并/串轉(zhuǎn)換,每個時鐘周期輸出一個子碼,例如第j個時鐘脈沖輸出子碼cj=(vj,1,vj,2)。顯然cj中的校驗元vj,1和vj,2不僅與 uj有關(guān),同時還與 uj-1,uj-2,uj-3,uj-4,uj-5,uj-6有關(guān),即與此前m=6個子碼中的信息元有關(guān)。且每一個信息元,如uj,經(jīng)過6個時鐘周期后,其對校驗元vj,1和vj,2的影響將消失。由此可見,m =6為編碼存儲,表示信息組在編碼器中的存儲周期[6]。
同理可知,第j+1個時鐘周期將輸出子碼cj+1=(vj+1,1,vj+1,2),其中
因此,卷積碼的每個信息元,不但參與決定本子碼的校驗元,還要參與決定其后續(xù)子碼的校驗元。這就是說,信息碼元使前后相繼的子碼之間產(chǎn)生約束關(guān)系,即子碼之間存在相關(guān)性[1]。不難看出,第j個時鐘周期輸入的信息碼元uj,僅在子碼cj,cj+1,cj+2,cj+3,cj+4,cj+5,cj+6中出現(xiàn),在cj+7中就沒有uj的影響了。換言之,信息碼元 uj把 cj,cj+1,cj+2,cj+3,cj+4,cj+5,cj+67個子碼聯(lián)系在一起,這7個子碼之間存在相關(guān)性[7]。通常用編碼約束度N表示子碼之間的這種關(guān)聯(lián)關(guān)系,顯然N=m+1=7。以上編碼器輸出的每個子碼,信息位數(shù)k=1,輸出碼組長n= 2,碼率k/n=1/2,一般表示為(2,1,7)卷積碼。其中,碼率和約束度是衡量卷積碼的兩個重要參數(shù)。
設(shè)輸入信息序列u=(1 1 1 0 1 0 1 0 0 1),計算得c=(1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 0 0 1 0),在MATLAB中仿真得到的結(jié)果為圖3所示。MATLAB命令窗口顯示的編碼輸出為
圖3 MATLAB仿真卷積編碼輸出序列
在這里注意到,輸入序列u=(1 1 1 0 1 0 1 0 0 1)只有10比特,而發(fā)送的碼序列卻包含了32比特,碼率并不是1/2。這是由于編碼器有m=6個記憶單元,編碼器必須“刷新”其緩存器才能完成碼序列,子碼序列中最后多余的12比特即對應(yīng)于編碼移位寄存器的清空過程。因此,雖然理論值的碼率為1/2,但有效碼率卻是10/32=5/16,這種碼率的降低稱為分數(shù)碼率損失。如果使用碼率為R,而記憶深度為M的卷積碼發(fā)送一條包含K個信息比特的消息是,有效碼率為[8]
因此,卷積碼在K?M(K遠遠大于M)時最有效,即待發(fā)送的信息序列長度遠大于寄存器的存儲長度。在此條件下,有效碼率漸進的達到該碼先前定義的本身的碼率R。
維特比譯碼算法是一種最大似然譯碼算法,該算法譯碼速度快,譯碼器也相對簡單,是一種很有效的譯碼方法,目前廣泛的應(yīng)用于各種數(shù)字傳輸系統(tǒng)。
Viterbi譯碼的詳細原理參見文獻[2],這里只作簡單介紹。Viterbi算法的基本思想就是利用網(wǎng)格圖,在眾多的競爭路徑中搜索一條最接近接收信息的路徑,稱之為幸存路徑。對于(2,1,7)卷積碼,共有26種狀態(tài),在每一個譯碼時刻t,每個狀態(tài)節(jié)點都向外送出2條路徑,同時也接收2條來自其他節(jié)點的路徑[9]。在接收到的2條路徑中,將累積度量值最小的一條保留下來,而將另一條路徑淘汰。因此,在每個譯碼周期中只保留64條幸存路徑,任意一條幸存路徑代表一個確定的譯碼輸出。
一個完整的Viterbi譯碼器一般包括以下7個部分:狀態(tài)發(fā)生器、累加器、比較器、度量值寄存器、幸存路徑寄存器、判決器、控制電路等[10],如圖4所示。
圖4 維特比譯碼器基本結(jié)構(gòu)
這些步驟就構(gòu)成了維特比算法,將編碼輸出結(jié)果作為譯碼器的輸入,MATLAB仿真結(jié)果如圖5所示。
圖5 MATLAB仿真譯碼器輸出
本節(jié)為體現(xiàn)(2,1,7)卷積碼優(yōu)越的性能,對不同碼率、不同約束度、不同回溯長度的卷積碼進行分析、仿真和比較。得出的結(jié)論是:碼率越低,性能越好;約束度越大,系統(tǒng)性能越好,但是會提高系統(tǒng)的復(fù)雜性。最終兼顧復(fù)雜性和可靠性,選擇碼率為1/2,約束度為7的(2,1,7)卷積碼,為DSP的實現(xiàn)奠定了夯實的理論基礎(chǔ)[11]。
圖6給出了不同信噪比下,發(fā)送10 000比特的卷積編碼的蒙特卡洛仿真結(jié)果,可以直觀的看出:經(jīng)過(2,1,7)卷積編碼可以降低數(shù)字通信系統(tǒng)的誤碼率,從而提高了系統(tǒng)的可靠性。
圖6 未編碼與卷積編碼系統(tǒng)的誤碼率比較
從圖中可以看出,當(dāng)信噪比較小時,未編碼的誤碼率反而比采用編碼的誤碼率低,這是因為誤比特太多導(dǎo)致接收到的信息幾乎無效。但是當(dāng)信噪比稍高后卷積編碼的誤碼率就大大降低了。
卷積碼的碼率R=k/n,它是卷積碼的一個重要參數(shù)。當(dāng)改變卷積碼的碼率時,系統(tǒng)的誤碼性能也將隨之發(fā)生變化,仿真結(jié)果如圖7所示。
觀察圖7可以得出如下結(jié)論:當(dāng)改變系統(tǒng)碼率時,隨著卷積碼碼率的逐漸提高,系統(tǒng)的誤碼率也呈現(xiàn)出增大的趨勢,也就是說,碼率越低,系統(tǒng)的誤碼率就越小,誤碼性能就越好。
圖7 不同碼率對卷積碼性能的影響
對于碼率一定的卷積碼,當(dāng)約束度N發(fā)生變化時,系統(tǒng)的誤碼性能也會隨之發(fā)生變化。仿真如圖8所示。
圖8 不同約束度對卷積碼性能的影響
從圖8中可以清楚地看到:在低信噪比時,(2,1,3)卷積碼的性能優(yōu)于(2,1,7)卷積碼,但此時二者的誤碼率都非常高,在工程上無法實際應(yīng)用。當(dāng)信噪比高于一定值后,(2,1,7)卷積碼的性能快速優(yōu)于(2,1,3)卷積碼。所以說當(dāng)碼率一定且信噪比高于一定值時,增加約束度可以明顯降低系統(tǒng)的誤碼率。但是隨著約束度的增加,譯碼設(shè)備的復(fù)雜性也會隨之增加。所以對于碼率為1/2的卷積碼,我們在選取約束度時一般為3~9。
回溯長度是在Viterbi譯碼過程中一個很重要的參數(shù),它決定了維特比譯碼的精度,同時也影響著譯碼延遲,隨著它的不斷變化誤碼性能也隨之改變[12]。
將反饋深度分別取值為9,19,30和35。仿真結(jié)果如圖9所示。
圖9 不同回溯長度對卷積碼性能的影響
從圖9中的誤碼率曲線可以清楚地看到:當(dāng)回溯長度逐漸增加,系統(tǒng)的誤碼率隨之逐漸降低,但是當(dāng)回溯程度增加到5N時(N為編碼的約束度),誤碼率數(shù)值變化不大,這里的(2,1,7)卷積碼在回溯長度達到35左右基本趨于穩(wěn)定。因此在選取回溯長度時,通常取回溯長度為5N。
在MATLAB仿真測試中,信源為隨機產(chǎn)生的10 000個二進制碼元,經(jīng)過卷積編碼后進入高斯信道,然后經(jīng)過卷積譯碼后進入信宿,流程圖如圖10所示。
圖10 MATLAB仿真(2,1,7)卷積碼流程圖
在接收端計算誤碼率,不同系統(tǒng)的誤碼率的比較如表1所示。
表1 誤碼率的比較
通過對比以上數(shù)據(jù)可以得出:經(jīng)過卷積編碼的系統(tǒng)在信噪比 SNR=8 dB時,誤碼率已經(jīng)達到10-6,而未經(jīng)編碼的系統(tǒng)若達到相同的誤碼率則信噪比至少需要提高一倍,由此可見卷積編碼對系統(tǒng)誤碼率的影響。同時,經(jīng)過觀察數(shù)據(jù)也可發(fā)現(xiàn),當(dāng)信噪比SNR>4 dB后,(2,1,7)卷積碼的誤碼率明顯優(yōu)于(2,1,3)卷積碼,且快速下降到10-6及以下。由此也可以看出,(2,1,7)卷積碼符合工程需要,可以在DSP上運行實現(xiàn),仿真圖如圖11所示。
圖11 (2,1,7)卷積碼性能比較圖
基于各種考慮,選擇在TI的TMS320DM6437上實現(xiàn)卷積碼的編譯碼。C64X+系列DSP具有很高的操作靈活性和速度。它具有先進的修正哈佛結(jié)構(gòu)、專門硬件邏輯的CPU、片內(nèi)存儲器、片內(nèi)外設(shè)和專用的指令集,同時C64X+系列的螺旋結(jié)構(gòu)能夠?qū)SP的CPU和片內(nèi)存儲器與外設(shè)配置組合在一起,可滿足電子市場眾多領(lǐng)域的應(yīng)用要求[10]。
(2,1,7)卷積碼的生成多項式為:
其中,D表示時鐘延遲。編碼原理不再贅述,主要的變成思路如下:
(1)定義數(shù)據(jù)長度、編碼碼率、編碼延遲寄存器深度和輸入待編碼信息;這里取輸入數(shù)據(jù)為:
UcInput[9]={0x07,0x4b,0x55,0x6c,0x47,0x36,0xb4,0x47,0x53}
(2)輸入的數(shù)據(jù)打包為byte的數(shù)據(jù),將byte數(shù)據(jù)的每一位取出來;
(3)初始化卷積編碼延遲寄存器;
(4)根據(jù)(2,1,7)卷積碼的生成多項式對每個數(shù)據(jù)進行卷積編碼,并將編碼結(jié)果輸出到outbuffer;
(5)將卷積結(jié)果輸出。
在CCS3.3環(huán)境運行結(jié)果如下所示:
編程思路如下:
(1)大致同編碼步驟1,定義數(shù)據(jù)長度、編碼碼率、編碼延遲寄存器深度,以及譯碼節(jié)點狀態(tài)數(shù)。
(2)維特比譯碼,具體流程如圖12所示。
圖12 譯碼流程圖
(3)回溯過程,獲得保留的最大似然路徑。
第1步,先從最后一個數(shù)據(jù)節(jié)點取出最大狀態(tài)度量值的狀態(tài),以此為回溯起始狀態(tài);
第2步,根據(jù)保留路徑獲得每個節(jié)點的數(shù)據(jù)。(4)輸出譯碼結(jié)果如下所示。
從譯碼結(jié)果中可以看出,其輸出與原始數(shù)據(jù)完全一致,可見譯碼正確。
對于卷積碼,沒有明顯的分組結(jié)構(gòu),糾錯能力無法像分組密碼那樣簡潔的描述出來,這里用df(自由距離)表示糾錯比特個數(shù)t:
完整的說法是:采用最大似然譯碼時,卷積碼能在3~5個約束度內(nèi)糾正t個錯誤。本文中約束度為7,則可以理解為21比特~35比特內(nèi)可糾正t個錯誤。在(2,1,7)卷積碼中,自由距離df=10,則t應(yīng)取不超過的最大整數(shù)4。
為驗證卷積碼的糾錯能力,編寫了一段測試程序:
(1)首先對輸入數(shù)據(jù)進行編碼ConvoCodingTail_1(ucInput,cViterbiInTmp,DATA_LEN+4);
(2)然后對輸出數(shù)據(jù)進行譯碼ViterbiDecSs_1(cViterbiInTmp,cDecOut,DATA_LEN);
(3)將譯碼輸出結(jié)果與輸入數(shù)據(jù)進行比較,如果不相同,輸出"FAIL";相同則輸出"SUCCESS",同時將譯碼結(jié)果顯示出來。
在該測試實驗過程中,隨機修改卷積編碼輸出序列中的個別比特值,以模擬高斯信道中的突發(fā)差錯,然后再進行譯碼。若譯碼成功,則繼續(xù)添加該輸出序列中的錯誤比特,直至譯碼失敗。經(jīng)多次測試,反復(fù)試驗,得出數(shù)據(jù)如表2所示。
表2 測試(2,1,7)卷積碼糾錯能力總結(jié)表
分析上表可知,該卷積碼大約能夠在4.3個約束度內(nèi)糾正4個隨機錯誤,提高了系統(tǒng)的糾錯能力,達到了信道編碼的目的。
基于DSP實現(xiàn)的(2,1,7)卷積碼性能優(yōu)良,系統(tǒng)運行穩(wěn)定、高效,且經(jīng)(2,1,7)卷積編碼輸出的信息比特誤碼率在低信噪比下仍能達到10-6,且具有較好的糾錯能力,大大增強了信道抗干擾能力,是目前國際衛(wèi)星通信和其他通信系統(tǒng)中廣泛使用的一種標準卷積碼。
[1]孫麗華,謝仲華,陳榮伶.信息論與糾錯編碼[M].北京:電子工業(yè)出版社,2005:191-201.
[2]張博.卷積碼的譯碼研究及DSP實現(xiàn)[D].碩士論文,天津大學(xué),2008:1-3.
[3]李曉瑞,張毅,徐伯慶.卷積碼的System View實現(xiàn)[J].儀器儀表學(xué)報,2005,26(增刊):488-490.
[4]劉少陽,鄒永.(2,1,7)卷積編碼及其維特比譯碼算法的軟件實現(xiàn)[J].信息與電子工程,2006,4(6):467-469.
[5]Hasnain SK,Beg A,Monir SM G.Performance Analysis of Viterbi Decoder Using a DSP Technique[C]//Proceedings of INMIC 2004 8th International Conference,2004:201-207.
[6]Mohamed F M,AhmedH Tewfik.Convolutional Decoding in the Presence of Synchronization Errors[J].IEEE Journal on Selected Areas in Communications,2010,28(2):218-227.
[7]Richard BWells.工程應(yīng)用編碼與信息理論[M].尹長川,羅濤,騰勇,譯.北京:機械工業(yè)出版社,2003:167-170.
[8]Hocevar D E,Gatherer A.Achieving Flexibility in a ViterbiDecoder DSP Coprocessor[C]//Vehicular Technology Conference,2000:2257-2264.
[9]黃肖玲,楊華龍.大約束度卷積碼快速譯碼方法的研究[J].通信學(xué)報,2010,31(3):57-64.
[10]Mohamad R,Anas N M.Performance Analysis of Convolutional Interleaver on TMS320C6711 Digital Signal Processing Kit[C]//International Conference on Computer Applications and Industrial E-lectronics(ICCAIE),2010:516-520.
[11]于沛東,李靜,彭華.一種利用軟判決的信道編碼識別新算法[J].電子學(xué)報,2013,41(2):301-306.
[12]詹明,周亮.一種基于對稱性的雙向雙二進制卷積Turbo碼譯碼結(jié)構(gòu)研究[J].電子與信息學(xué)報,2012,34(5):1179-1184.
DSP Design Based on the(2,1,7)Convolutional Code to Achieve Low Error Rate Communication*
WANG Hongjun,DU Changbin,YANG Ziheng,DINGQun*
(Electronic Engineering College,Heilongjiang University,Harbin 150080,China)
In order to reduce transmission errors in digital communication systems,and enhance the reliability of the channel,from the perspective of engineering application,DSP technology is utilized to achieve(2,1,7)convolutional code.Using MATLAB to simulate the factor of affecting(2,1,7)convolutional code performance and compare that with convolutional code of constraint length 3 and code rate 3/4,2/3 respectively,the result lays the theoretical foundation for hardware implementation.Finally,TICompany’s TMS320DM6437 is applied to run in CCS3.3 environment.The experiment shows that after convolutional code of constraint length 7 and code rate 1/2,error code rate can still achieve 10-6in lower SNR(SNR=6 dB).And DSP hardware implementsworks easily,operates stably and fast,decodes correctly and has a strong error correction capability.
channel coding;(2,1,7)convolutional code;DSP implement;low error rate communication;constraint length;code rate;MATLAB simulation
10.3969/j.issn.1005-9490.2014.01.024
TN914.31 文獻標識碼:A 文章編號:1005-9490(2014)01-0097-06
項目來源:國家自然科學(xué)基金項目(61072072);黑龍江省高?!艾F(xiàn)代傳感技術(shù)”創(chuàng)新團隊項目(2012TD007)
2013-05-03修改日期:2013-06-07
EEACC:6210B;6150
王宏俊(1989-),女,漢族,黑龍江省佳木斯市人,黑龍江大學(xué)電子工程學(xué)院,碩士研究生,研究方向信息處理與保密通信,yyxzj_love@126.com;
丁 群(1957-),女,漢族,黑龍江省哈爾濱人,黑龍江大學(xué)電子工程學(xué)院,教授,博士生導(dǎo)師,研究方向信息安全與保密通信,qunding@aliyun.com。