通信系統(tǒng)中Viterbi譯碼的Matlab仿真與實現(xiàn)
摘要 數(shù)字通信作為一種前向糾錯編碼技術卷積碼起著重要的作用。相應地,信息接收端對卷積碼的譯碼實現(xiàn)也提出了更高的要求。文中提出的卷積碼譯碼Matlab仿真方案,旨在用Viterbi譯碼實現(xiàn)對卷積碼譯碼的功能。仿真結(jié)果表明,維特比是一種良好的譯碼方式。
關鍵詞 Viterbi譯碼;卷積碼;Matlab仿真
在現(xiàn)代通信中,信源、信宿和信道是組成通信系統(tǒng)的最基本單元。其中信源是產(chǎn)生信息的源,信宿是信息的目的地,信道則是傳送載荷信息的信號所通過的通道,信源和信宿之間是通過信道連接的。通常從兩方面來衡量通信系統(tǒng)的性能指標:數(shù)量和質(zhì)量。一般數(shù)量指標用有效性渡量,而質(zhì)量指標用可靠性度量。前者主要取決于信源的統(tǒng)計特性,而后者主要取決于信道的統(tǒng)計特性。在信道中傳輸數(shù)字信號,一般要求信源端把信息轉(zhuǎn)換成電信號,并用盡量低速率的二進制數(shù)字信號表示,然而為了匹配信道的特性,彌補信道的缺陷,減少傳輸中的損傷,以更高的速率和更可靠的性能傳輸信息,需要對信息進行信道編碼。而卷積碼就是一種有效的前向糾錯信道編碼方式。維特比譯碼與卷積碼算法共同實現(xiàn)了前向糾錯,消除數(shù)據(jù)流中潛在的噪聲,從而增加了數(shù)據(jù)傳輸?shù)目煽啃?,改進了多噪聲及衰落信道下譯碼的準確性,提高了數(shù)字系統(tǒng)的性能。
1 卷積碼編碼原理
卷積碼是一個有限記憶系統(tǒng),它將信息序列分隔成長度為k的一個個分組,在某一時刻的編碼輸出不僅取決于本時刻的分組而且取決于本時刻以前的(N-1)個分組,這種距離性決定了卷積碼潛在的糾錯能力。
下面以參數(shù)(2,1,7)的卷積碼為例說明卷積碼編碼原理。此卷積碼的卷積多項式參數(shù)為k=1,n=2,N=7,碼的生成多項式為(171,133)卷積碼編碼器在任何一段時間內(nèi)產(chǎn)生的n個碼元不僅取決于這段時間中的k個信息位,而且還取決于前N-1段規(guī)定時間內(nèi)的信息位。其意義為:輸人為1 bit時,輸出為2 bit,移位寄存器的個數(shù)為m=N-1=6,該編碼器的狀態(tài)數(shù)為2m=64,記為Si,i=0~63,觀察卷積碼的狀態(tài)轉(zhuǎn)移圖可得結(jié)論:
圖1中D表示將輸入延遲一個時間單位;⊕表示異或;X,Y為輸入經(jīng)過不同的延時后的異或結(jié)果。
在編碼器狀態(tài)確定的情況下,不同輸入所對應的編碼器狀態(tài)網(wǎng)格圖如圖2所示。
由于(2,1,7)狀態(tài)數(shù)較多為64,所以用只有8個狀態(tài)的卷積碼(2,1,4)來說明卷積碼編碼器的狀態(tài)轉(zhuǎn)移過程。實線表示輸入為0,虛線表示輸入為1。觀察圖2可知,從第5組節(jié)點開始每個節(jié)點都可以由兩個狀態(tài)轉(zhuǎn)移而來。類似可得出(2.1,7)從第8組節(jié)點開始每個節(jié)點可由兩個狀態(tài)轉(zhuǎn)移而來。
2 維特比譯碼原理
Viterbi譯碼是卷積碼的最大似然譯碼算法,是一種實用化的概率算法。它的基本思想是把已接收序列與所有可能的發(fā)送序列作比較,選擇其中碼距最小的一個序列作為發(fā)送序列。從圖2的卷積碼網(wǎng)格圖可以看出,卷積碼編碼過程就是編碼器狀態(tài)沿著時間軸的一個轉(zhuǎn)移過程。Vi terbi譯碼則是在如圖2所示的網(wǎng)格圖上搜索最可能的狀態(tài)跳轉(zhuǎn)路徑,設(n,k,m)編碼器輸出的碼序列為T,寄存器長度為L,經(jīng)過離散無記憶通道(DMC)傳輸后送入譯碼器的序列是R=T+E,其中E為信道的錯誤序列。譯碼器根據(jù)接收序列R,按最大似然譯碼準則找到接收序列在如圖2所示的編碼器網(wǎng)格圖上所走過的路徑,這個過程就是譯碼器計算和尋找最大似然函數(shù)的過程,或者說是尋找最大度量路徑的過程。其中最大似然函數(shù)為
尋找最大度量路徑時首先要在t時刻讀取所有狀態(tài)的幸存路徑度量值,再根據(jù)t+1時刻的輸入算出跳轉(zhuǎn)路徑的度量值,將t時刻的幸存路徑度量值和t+1時刻的跳轉(zhuǎn)值相加,可得到t+1時刻到狀態(tài)S的幸存路徑度量值。這樣每個狀態(tài)都有一個幸存路徑,根據(jù)這些幸存路徑和最終編碼器所處的狀態(tài)就可以得到編碼器的狀態(tài)轉(zhuǎn)移路徑即譯碼結(jié)果。
3 維特比譯碼實現(xiàn)
維特比算法是將接收到的信號序列和所有可能的發(fā)送信號作比較,選擇其中漢明距離最小的序列作為現(xiàn)在的發(fā)送信號序列。譯碼一般由圖2所示的網(wǎng)格圖中的S0狀態(tài)開始,由于有6個寄存器,當每個寄存器的值都為已知時再輸入才能得到唯一的編碼器輸出,所以譯碼初期連續(xù)接收12 bit的信息,它是由6 bit的輸入得來的,由于6 bit的輸入有64種可能的輸出,所以將接收到的12 bit與64種可能相比對找出漢明距最小的一組即為想要的編碼器輸入也即譯碼器的輸出。
一個完整的譯碼器一般包括以下7部分:狀態(tài)發(fā)生器、累加器、比較器、度量值寄存器、信息序列寄存器、判決器、其他控制電路等,如圖3所示。
對于(2,1,7)卷積碼,在一個譯碼周期內(nèi),累加器完成64條支路度量值計算,比較器組完成同一狀態(tài)的路徑距離值比較,將較小者存入64個度量值寄存器。判決器選出64個信息序列寄存器中的最小者,并將相應信息序列寄存器的譯碼結(jié)果輸出。
當確定各寄存器的初值后,從當前狀態(tài)經(jīng)過加比選蝶形運算后,到達下一狀態(tài),通過對每一分支度量的累積計算,經(jīng)比較分析找到與接收序列距離最近的幸存路徑。程序中的Nextstaterow是經(jīng)過加比選得到的下一狀態(tài),將每次加比選的結(jié)果Nextstaterow保存下來放在一個數(shù)組Nextsatate中,當譯碼完成后Nextsatate中的各值即為譯碼所走過的路徑,按照Nextsatate中的值,通過如圖2所示的網(wǎng)格圖回溯即可得到譯碼結(jié)果。
在信息傳輸?shù)倪^程中,由于各種噪聲的影響會造成接收到的數(shù)據(jù)有可能是誤碼,但連續(xù)出現(xiàn)2 bit的誤碼的概率又非常小,所以這里只考慮出現(xiàn)一比特誤碼的情況。當出現(xiàn)誤碼時兩條岔路漢明距相等,由于基本不會出現(xiàn)2 bit的誤碼所以等到下一個節(jié)點時判斷漢明距的大小就可以找到正確的輸出。
圖4是譯碼輸出與編碼器輸入的比對,誤碼率很低,在所截取的圖片中無誤碼出現(xiàn),由仿真結(jié)果可清楚地看出譯碼器的輸出與編碼器的輸入完全重合,說明譯碼器具有良好的前向糾錯功能,用于通信系統(tǒng)可以提高信息傳輸?shù)目煽啃浴?br />
4 結(jié)束語
驗證了Viterbi譯碼方案的可行性,這種譯碼方法得到的輸出誤碼率可低至10-6。這種方案已用于某導航系統(tǒng)中,經(jīng)測試,該譯碼方案在低信噪下也能達到較低誤碼率。