通信系統(tǒng)中Viterbi譯碼的Matlab仿真與實現(xiàn)
2 維特比譯碼原理
Viterbi譯碼是卷積碼的最大似然譯碼算法,是一種實用化的概率算法。它的基本思想是把已接收序列與所有可能的發(fā)送序列作比較,選擇其中碼距最小的一個序列作為發(fā)送序列。從圖2的卷積碼網(wǎng)格圖可以看出,卷積碼編碼過程就是編碼器狀態(tài)沿著時間軸的一個轉(zhuǎn)移過程。Vi terbi譯碼則是在如圖2所示的網(wǎng)格圖上搜索最可能的狀態(tài)跳轉(zhuǎn)路徑,設(shè)(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所示。本文引用地址:http://cafeforensic.com/article/155065.htm
對于(2,1,7)卷積碼,在一個譯碼周期內(nèi),累加器完成64條支路度量值計算,比較器組完成同一狀態(tài)的路徑距離值比較,將較小者存入64個度量值寄存器。判決器選出64個信息序列寄存器中的最小者,并將相應(yīng)信息序列寄存器的譯碼結(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。這種方案已用于某導(dǎo)航系統(tǒng)中,經(jīng)測試,該譯碼方案在低信噪下也能達到較低誤碼率。
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
評論