卷積編譯碼盤的設(shè)計與實現(xiàn)
摘要:本文簡要介紹了(2,1,3)卷積碼的編譯碼設(shè)計與實現(xiàn)、編碼電路可以用FPGA實現(xiàn)。譯碼采用維特比譯碼算法,應(yīng)用高速數(shù)字信號處理器TMS320C50,實時完成高速處理任務(wù),核心算法用軟件實現(xiàn)。通過對算法進行分解優(yōu)化,譯碼速度快。通過加載不同的譯碼軟件可以在同一硬件平臺上實現(xiàn)多種信道編譯碼算法。在工程中具有較高的應(yīng)用價值和發(fā)展遠景。
本文引用地址:http://www.ex-cimer.com/article/242241.htm關(guān)鍵詞:維特比譯碼 卷積碼 DSP
引言
對于一般的線性分組碼(如循環(huán)碼、BCH碼等),它們的共同特點是:一個碼字的監(jiān)督單元僅與本碼組的k位信息碼元有關(guān),與其它碼字的碼元無關(guān)。而卷積碼的特點在于本組的碼元不僅與當(dāng)有輸入的k個信息有關(guān),而且還與前面m個時刻輸入的信息有關(guān)。卷積碼的糾錯能力隨著m的增加而增大,而差錯率隨著m的增加而指數(shù)下降。在編碼效率與設(shè)備復(fù)雜性相同的前提下,卷積碼的性能優(yōu)于分組碼。隨著大規(guī)模集成電路技術(shù)的發(fā)展,采用維特比譯碼的卷積編碼技術(shù)已成了廣泛采用的糾錯方案。在本系統(tǒng)中,輸入卷積編碼器的信息序列是32Kbit/s的比特流,經(jīng)(2,1,3)卷積編碼器成為64Kbit/s的比特流,再經(jīng)擴頻、調(diào)制、無線信道、解調(diào)、解擴,由卷積譯碼器經(jīng)譯碼判決還原出32Kbit/s的信息序列。實踐證明,在該系統(tǒng)中引入卷積編譯碼,大大提高了數(shù)據(jù)傳輸?shù)馁|(zhì)量。
(2,1,3)卷積碼最佳編碼器
編碼方案
實現(xiàn)(2,1,3)卷積編碼主要有兩種方法,其生成多項式分別為:
g(1)=(1 0 0 0)
g(2)=(1 1 0 1)
和g(1)=91 0 1 1)
g(1)=(1 1 1 1)
根據(jù)梅森(Mason)增益公式分別計算其生成函數(shù):
其中:
Δi恰似Δ那樣定義,但它只是和第i個前向路不相連的部分,即當(dāng)計算Δi時,從圖中去掉第I個前向路徑上的所有狀態(tài)以及與這些狀態(tài)相連的所有分支。
計算出兩者的生成函數(shù)分別為
其中X是輸出符號中1的個數(shù),Y是輸入比特的權(quán)重,Z是分支輸入比特的持續(xù)時間(每一分支在任何時刻都為1。從生成函數(shù)的第一項X的冪次可以看出,第一種編碼方案(系統(tǒng)碼)的自由距離d=4。第二種編碼方案(最佳碼)的自由距離d=6。因此,我們選擇第二種編碼方案,它的自由距離最大。
(2,1,3)卷積碼編碼器的實現(xiàn)
根據(jù)前面的分析可知,(2,1,3)最佳卷積編碼器的生成多項式為:g(1)=(1 0 1 1)
g(2)=(1 1 1 1)
相應(yīng)的編碼電路示于圖1.
編碼器可完全由硬件電路實現(xiàn),這樣編碼延時可達到最小。編碼電路只需要m=3級移位寄存器,n=2個模2加法器以及用于編碼器串行輸出的多路器就可以了。
卷積譯碼器的設(shè)計
卷積碼的譯碼方式有三種:維特比譯碼、序列譯碼和門限譯碼。維特比譯碼具有最佳性能,但硬件實現(xiàn)復(fù)雜;門限譯碼(亦稱大數(shù)邏輯譯碼)性能最差,但硬件簡單,序列譯碼在硬件和性能方面介于維特比譯碼和門限譯碼之間??紤]到工程的需要和實際情況,需選擇造價低、性能好、結(jié)構(gòu)好、體積小、易于更新?lián)Q代的方法和設(shè)計產(chǎn)品。因此選用最佳卷積碼譯碼方式——維特比譯碼。
譯碼器的實現(xiàn)
考慮到維特比譯碼算法的硬件實現(xiàn)的復(fù)雜性和本系統(tǒng)要求對信號進行處理的實時性,我們選用T公司DSP芯片TMS320C50作為譯碼器的CPU以實現(xiàn)軟件譯碼。TMS320C50是目前世界上速率最快的DSP芯片之一,其特點是運算速率快、片內(nèi)資源豐富、體積小、開發(fā)容易。實踐證明,對于約束長度較短的(2,1,3)卷積碼,DSP實現(xiàn)是最佳方案,一片單周期指令為35ns的芯片TMS320C50PQ57,可以同時完成兩路維特比譯碼,而且外部電路簡單,成本低。譯碼器框圖示于圖2.
TMS320C50具有兩路串口,每一路串口又分為接收發(fā)送兩部分,且這兩個部分可以并行工作,時序上可以被外部提供的并行工作,時序上可以被外部提供的幀同步脈沖來控制。我們實現(xiàn)的卷積譯碼器就是利用它的兩路串口來工作的,連續(xù)的數(shù)據(jù)流經(jīng)串口來工作的。連續(xù)的數(shù)據(jù)流經(jīng)串口接收,放到相應(yīng)的內(nèi)存單元中,在片內(nèi)經(jīng)過譯碼處理,現(xiàn)將譯碼判決的結(jié)果從串口的發(fā)送部分送到下一級。
譯碼算法
算法分解
眾所周知,維特比算法的核心思想是由狀態(tài)圖或刪格圖確定幸存路徑,如果在某一節(jié)點上發(fā)展某條路徑已不可能獲得最大似然函數(shù),那么就放棄這條路徑,然后在剩余的幸存路徑上重新選擇具有最小漢的明距的路徑。將此算法進行分解即下面操作的重復(fù)。
如圖3所示,在某一時間單元,對于狀態(tài)Sn(n=0,1,2,…7)有兩個“前一狀態(tài)”,即編碼器可能從上一時間單元的狀態(tài)Sn1或狀態(tài)Sn2(n1,n2=0,1,2…,7;n1≠n2)進入狀態(tài)Sn。將Sn1-Sn的n比特編碼輸出與當(dāng)前時間單元的n比特譯碼輸入相比較,不同的比特數(shù)與狀態(tài)Sn1的部分路徑度量相加,便得到了從狀態(tài)Sn1進入狀態(tài)Sn這條路徑的部分路徑度量;同查也對狀態(tài)Sn2進行操作。比較新產(chǎn)生的兩個部分路徑度量,取度量較小的那條路徑為狀態(tài)Sn的幸存路徑。這一操作依次進行下去,就完成了維特比算法的主步驟。
算法優(yōu)化
上述分解的實現(xiàn)是整個程序的關(guān)鍵,它的運行效率直接關(guān)系到整個譯碼程序的運行速度,因此必須進行優(yōu)化,總體上以內(nèi)存空間換取運行速度。之所以把以速度作為程序?qū)崿F(xiàn)上的第一指標(biāo),是因為譯碼器需要實時地完成64Kbps比特流的譯碼,實時性是譯碼器的重要指標(biāo)。我們采用下述手段來進行優(yōu)化:
從維特比算法步驟2的實現(xiàn)上可以看出,程序需要保留兩張表,一張(稱為表1)存放前一時間單元各個幸存路徑及其度量,另一張表(稱為表2)用來存放當(dāng)前時間單元新產(chǎn)生的各個幸存路徑及其度量。在每一個時間單元譯碼完畢,進入下一個時間單元時,都需要將表2的內(nèi)容拷貝到表1中,這是一個很大的開銷,而且的確是一個可以節(jié)省的開銷。在程序中,是這樣來去除這個開銷的:在時間單元X,表1存放時間單元x-1的幸存路徑及其度量,表2存放時間單元x新產(chǎn)生的幸存路徑及其度量;進入到時間單元x+1,表1用來存放新產(chǎn)生的幸存路徑及其度量;再進入到時間單元x+2,表2用來存放新產(chǎn)生的幸存路徑及其度量;……。這樣一來,就可以免去兩個表之間的拷貝,不過這時需要有兩段程序。那么,不過這時需要有兩段程序。那么,我們在處理前一段數(shù)據(jù)時,把譯碼產(chǎn)生的幸存路徑有其度量存放在表1中;處理前一段數(shù)據(jù)時,則把幸存路徑及其度量存放往表2中存放。就這樣交替進行下去。
兩路譯碼程序
本系統(tǒng)實現(xiàn)的是兩路譯碼,要同時進行兩路譯碼,實際上就是在C50上運行一個兩任務(wù)的程序,最重要的是譯碼核心程序即要實現(xiàn)共享,又要盡可能做到兩路數(shù)據(jù)的獨立,這種設(shè)計是符合多任務(wù)原理的,兩路譯碼程序流程圖如圖4所示。
結(jié)語
我們研制出的這種性能是最佳的(2,1,3)卷積編譯碼器,編碼采用維特比算法,算法核心由軟件實現(xiàn),采用高速DSP作為CPU。實踐證明,在系統(tǒng)中引入卷積編譯碼,大大提高了數(shù)據(jù)傳輸?shù)馁|(zhì)量。
評論