Turbo碼原理簡介
Turbo碼原理簡介
1993年C.Berrou、A.Glavieux和P.Thitimajshiwa首先提出了稱之為Turbo碼的並行級聯編譯碼方案。Turbo碼效能取決於碼的距離特性。線性碼的距離分佈同於重量分佈,如果低重量的輸入序列經編碼得到的還是低重量的輸出序列,則距離特性變壞。該特性對於塊碼來說不存在問題;然而對於卷積碼,則是個非常嚴重的問題。因為卷積碼的距離特性是影響誤位元速率的一個非常重要的因素。
在Turbo碼中,利用遞迴系統卷積碼(RSC)編碼器作為成員碼時,低重量的輸入序列經過編碼後可以得到高重量的輸出序列。同時交織器的使用,也能加大碼字重量。實際上,Turbo碼的目標不是追求高的最小距離,而是設計具有儘可能少的低重量碼字的碼。Turbo碼由兩個遞迴系統卷積碼(RSC)並行級聯而成。譯碼採用特有的迭代譯碼演算法。
1 Turbo碼編碼原理
典型的Turbo碼編碼器結構框圖如圖2所示:由兩個反饋的編碼器(稱為成員編碼器)通過一個交織器I並行連線而成。如果必要,由成員編碼器輸出的序列經過刪餘陣,從而可以產生一系列不同位元速率的碼。例如,對於生成矩陣為g=[g1,g2]的(2,1,2)卷積碼通過編碼後,如果進行刪餘,則得到位元速率為1/2的編碼輸出序列;如果不進行刪餘,得到的位元速率為1/3。一般情況下,Turbo碼成員編碼器是RSC編碼器。原因在於遞迴編碼器可以改善碼的位元誤位元速率效能。
2 編碼
方案中使用的Turbo碼為1/3位元速率的並行級聯碼,它的編碼器由兩個相同的位元速率為1/2的RSC編碼器及交織器組成,如圖4所示。
由於與非遞迴卷積碼相比,遞迴卷積碼產生的碼字重量更大,所以這裡採用了兩個相同的系統遞迴卷積碼(RSC)。資訊序列分成相同的兩路,第一路經過RSC編碼器1,輸出系統碼及校驗碼。另一路先通過交織器進行交織,使資訊序列在1幀內重新排列順序,然後經過RSC編碼器2得到系統碼和對應的校驗碼,由於該系統碼和實際上都是原資訊序列,只是排列順序不同,在接收端完全可以通過對進行交織得到,因此在傳輸過程中可以省去,而只保留對應的校驗位。在具體實現中, RSC編碼器2的輸入是通過對RSC編碼器1的系統輸出進行交織來得到的。再經過並/串轉換,作為整個Turbo碼編碼器的輸出。對應於每1位資訊位元,該編碼器輸出3位,因此其位元速率為1/3。如果採用了奇偶刪餘,即在並/串轉換時,在校驗位奇位上取,偶位上取或反之,則位元速率可升為1/2。
由於RSC編碼器不能如非遞迴編碼器一樣通過輸入連“0”序列來使編碼器復位(網格終止),因此通過設計如圖8所示的A、B間的開關來控制編碼器終止,當一幀結束時,開關由A打到B,則經過m時刻後,編碼器復位,可以對下一幀資料進行編碼。這裡m=2。只有RSC編碼器1(外編碼器)進行了網路終止,RSC編碼器2保持開放。
3 譯碼
由於Turbo碼是由兩個或多個成員碼經過不同交織後對同一資訊序列進行編碼。譯碼時,為了更好地利用譯碼器之間的資訊,譯碼器應該利用軟判決資訊,而不是硬判決資訊。因此,一個有兩個成員碼構成的Turbo碼的譯碼器是由兩個與成員碼對應的譯碼單元和交織器與解交織器組成的,將一個譯碼單元的軟輸出資訊作為下一個譯碼器單元的輸入,為了進一步提高譯碼效能,將此過程迭代數次。這就是Turbo碼的迭代譯碼演算法的原理。
Turbo碼可以利用多種譯碼演算法,如最大似然譯碼MAP、Log-MAP演算法、Max-log-MAP演算法和SOVA演算法等。
圖所示為Turbo碼迭代譯碼器的結構。
Turbo碼譯碼器為序列結構,兩個編碼器所產生的校驗資訊通過串並轉換被分開,分別送到對應的譯碼器輸入端。首先,第一級譯碼器根據系統位資訊L(ys|u)和第一級編碼器的校驗位資訊L(y1|x1)得到輸出資訊(此時譯碼器2外資訊Le[C2](u)=0),輸出資訊包含兩部分,一部分是由譯碼器根據碼字相關性提取出來的外資訊,用Le[C1](u)表示;另一部分來自於系統位對應的通道輸出,在傳遞給下一級譯碼器之前,被減去。Le[C1](u)在交織之後被送到譯碼器2作為先驗資訊,譯碼器2因此根據校驗位資訊、系統位資訊和Le[C1](u)這三者共同做出估計,得到輸出資訊L(u),L(u)在減去Le[C1](u)+L(ys|u)之後,得到譯碼器2的外資訊Le[C2](u),它在解交織之後,反饋給第一級譯碼器作為先驗資訊,結合Le[C2](u),譯碼器1重新做出譯碼估計,得到改善的外資訊。而此時的外資訊又可以傳遞到譯碼器2,如此往復,形成迭代過程。最終,當達到預先設定的迭代次數或滿足迭代結束條件時,譯碼結束,取L(u)的符號作為最終硬判決輸出。
a)SOVA譯碼演算法
傳統Viterbi演算法用來計算卷積碼的最大似然(ML)序列,只提供硬判決輸出。但在級聯絡統中,前級硬判決實際上相當於丟失了資訊,使後級譯碼器無法從解調得到的軟輸出中獲益。SOVA是改進的Viterbi演算法,它可以給出譯碼結果的可靠性值(軟輸出),這個可靠性值作為先驗資訊傳遞給下級譯碼器,從而提高譯碼效能。
b) LOG-MAP譯碼演算法
LOG-MAP是改進的MAP(最大後驗概率)演算法,它在對數域進行計算,可以將MAP演算法中大量的乘法運算化簡為加法運算,從而降低計算量。除此之外,它的基本原理與經典MAP演算法相同。
MAP演算法由Bahl等人於1974年提出,因此又稱為BCJR演算法。與Viterbi演算法不同,它估計出最大似然位元,而前者產生最大似然序列。也就是說Viterbi演算法提供整體最優解,而MAP演算法則提供個體最優解。
前面已經提到,卷積碼編碼過程實際就是一個有限狀態機的狀態轉移過程。設t時刻編碼器從狀態St-1轉移到狀態St,對應的輸入為ut=k,k∈{0,1},輸出校驗位為xt, 它與ut一起傳輸到接收端,譯碼器的任務就是根據接收訊號yt來儘可能恢復ut。圖3.23示意了這一過程。由於ut與狀態轉移是對應的,因此,有
(3.20)
式中表示接收序列[y1….yN]。因此,只要得到所有的
(3.21)
就可以通過對其中那些對應於的狀態轉移概率求和來得到資訊位元的後驗概率。由貝葉斯定理,
(3.22)
上式右側分子項聯合概率可作進一步化簡:
(3.23)
以上的化簡過程中應用了馬爾可夫信源的性質,即t時刻以後的狀態只與St及以後的輸入有關,而與t時刻之前的狀態和輸入無關,也就是說得到了t時刻的狀態,之後的狀態轉移就不再依賴於以及t-1時刻的狀態。(3.23)式分為三部分,可以分別定義如下,令:
則聯合概率可寫為:
(3.24)
其中,和可以用遞迴方法求出:
(3.25)
(3.26)
通常,編碼器的初始狀態已知,對於編碼器1,幀結束時網路終止,因此其終了狀態了也是已知的,因此有
以及
對於編碼器2,由於網格不終止,可以認為它的終了狀態是平均分佈的。另外,有
(3.27)
式中為資訊符號,為對應於狀態轉移的編碼輸出符號。上式中為資訊符號的先驗概率,而條件概率可由如前所述的通道模型得到。
MAP演算法可按以下步聚實現:
1.對於每個時刻t,根據解調軟輸出y和資訊符號u計算式(3.27);
2.根據式(3.25)及式(3.26)遞迴計算及;
3.根據式(3.24)計算聯合概率;
4.根據式(3.20)得到;
5.計算每個資訊符號的對數似然比
式(3.22)中的分母在第5步中被約去,因此不必求得具體數值。另外,在具體實現中,上述概率計算都是在對數域中進行的,因此乘法運算都變成了加法運算。
3.5.4SOVA和LOG-MAP譯碼演算法效能比較
在實現過程中,選用了SOVA和LOG-MAP兩種譯碼演算法,並對兩者的效能進行了模擬比較。
圖3.24 SOVA和LOG-MAP譯碼演算法在不同迭代次數下的誤位元速率曲線
模擬中採用1/3位元速率的Turbo碼,共傳輸了20000幀(每幀210位元,共2百萬位元),採用與軟體中相同的螺旋交織方案,通過高斯白噪聲(AWGN)通道,分別採用LOG-MAP和SOVA譯碼,迭代1-5次。圖3.24,3.25分別表示了兩種譯碼演算法的誤位元速率和誤幀率曲線。
由圖3.24,3.25可得到如下結論:
(1) 在相同的迭代次數和訊雜比條件下,LOG-MAP譯碼的誤位元速率和誤幀率效能都明顯優於SOVA。
(2) 迭代次數越高,誤位元速率效能越好。但是,大部分迭代增益都出現在前兩次迭代中。
(3) 在訊雜比較小時(低於0dB),SOVA迭代譯碼誤位元速率隨訊雜比增大降低較快,訊雜比較大時誤位元速率改善較緩慢。因此,在通道噪聲比較弱時,減少迭代次數不會對誤位元速率效能造成太大影響,卻可以降低譯碼時延;而通道環境比較差時,可增加迭代次數來提高誤位元速率效能。
(4) LOG-MAP譯碼的效能非常優異,2次迭代在訊雜比為-0.5dB時誤位元速率即可達到10-6。
圖3.25 SOVA和LOG-MAP譯碼演算法在不同迭代次數下的誤位元速率曲線
從誤位元速率效能看,Log-MAP優於SOVA。從實現複雜度看,SOVA譯碼演算法實現比較容易,更簡單。因此,可以根據實際需要來選擇譯碼方式。
3.5.5譯碼迭代終止條件
Turbo碼的迭代譯碼終止條件的設計是個很重要的問題,因為迭代譯碼是個很耗資源的計算,另一方面,過多的迭代可能會造成溢位或者振盪,從而得到錯誤的輸出結果。
最簡單的終止方法就是指定迭代次數,實驗表明經過5次左右迭代之後,能夠從以後的迭代過程中獲得的好處就很少了,因此可以指定迭代次數,使譯碼過程在達到設定數值時結束。這是本專案中採取的方法之一。
然而,固定迭代次數有兩個弊端。當通道特性較好時,多餘的迭代造成了計算資源的浪費,另一方面,當通道特性差,誤位元速率高時,又不能充分發揮出Turbo碼的效能。理想的情況下,迭代次數應隨著誤碼情況動態的變化。
另一種譯碼終止演算法是在資訊序列中加入CRC校驗字,每次迭代之後即檢測資訊序列是否有錯,無錯時譯碼即結束,為防止誤位元速率很高時不能完全糾錯的情況,還必須設定最大迭代次數,達到這一數值後,即使譯碼結果仍然有錯誤,迭代過程也被強制終止。CRC校驗適用於通道特性比較好的情況,實驗表明在這種情況下,只需一兩次迭代就可以得到正確結果。它的缺點是必須加入多餘的校驗位,降低了通訊效率。
另外一種效果較好的方法是採用檢測成員編碼器輸出之間的交叉資訊熵,當發現熵值低於某一門限時,表明再次迭代能夠獲得的增益已經很小,因此終止譯碼。這種方法能夠非常好的挖掘出Turbo碼的潛力。它的缺點是計算交叉資訊熵需要較大的計算量和存貯空間。
多進位制正交擴頻系統中軟資訊的提取
多進位制正交擴頻系統:
l 進位制數:
l 每個進位制代表編碼交織位元個數:
l 個編碼資料為()
l 個編碼位元需要個正交擴頻碼()
l 擴頻碼的波形為(),是由構成的N維偽隨機碼序列波形
l 通道:AWGN通道,疊加一個N維的零均值且雙邊譜為高斯白噪聲
l 接收訊號:R
假設傳送等概,
l 個編碼資料的第j位為0,即的那些碼子的集合記為;
l 個編碼資料的第j位為1,即的那些碼子的集合記為;
則關於第個編碼位元的對數似然比(軟資訊)為
(1)
其中AWGN通道下,接收訊號的先驗概率為
(2)
便於電路實現的、次最優的軟資訊提取:
l 利用MAX近似公式
(3)
l (1)式變為
l 將(2)式代入(1)式可得:
其中表示接收序列R和本地偽碼序列之間的歐式度量。
AWGN下如果傳送位元0和1的能量相等,則歐式度量就等價於相關度量,即
其中就是相關匹配濾波器的輸出。
在多進位制正交擴頻系統接收端,與碼子D()相對應偽碼的相關匹配濾波器的輸出設為,即
,
根據碼子D中第j個位元的取值對D進行分組:
則第j個位元的軟判決資訊為:
進一步歸一化為
其中
表示的置信度資訊,越接近+1表示判決為1的可能性越大;
越接近-1表示判決為0的可能性越大。
Turbo碼測試報告
一、 測試的Turbo碼引數
1、 資料幀長:4096
2、 位元速率:1/2
3、 生成矩陣:(13,15)
4、 編碼後一幀長度:4096*2+12=8204
5、 訊雜比範圍:0~9dB,間隔1dB
6、 測試長度1000幀
二、 測試內容
1、 Turbo軟判決下效能
2、 Turbo硬判決下效能(譯碼之前是解調輸出的硬判決)
3、 4-16walsh碼軟資訊提取下的Turbo碼效能
相關文章
- 視訊編碼原理簡介
- Flutter原理簡介Flutter
- metaq原理簡介
- HSF原理簡介
- Spring原理簡介Spring
- Xposed原理簡介及其精簡化
- Varnish(一)簡介與原理
- ppium簡介及工作原理
- MapReduce工作原理流程簡介
- HttpSession工作原理簡介HTTPSession
- WebSocket原理及技術簡介Web
- Thanos工作原理及元件簡介元件
- 大資料框架原理簡介大資料框架
- android IPC及原理簡介Android
- CRC校驗原理簡介及C程式碼實現說明C程式
- Go之NSQ簡介,原理和使用Go
- iptables基礎原理和使用簡介
- 瀏覽器的渲染原理簡介瀏覽器
- 喇叭的基本發音原理簡介
- FastDFS分散式儲存原理簡介AST分散式
- 精準化測試原理簡介
- 資訊理論-Turbo碼學習
- HTML 指令碼簡介HTML指令碼
- Bash 指令碼簡介指令碼
- 從提升樹到 XGBoost, 原理簡介
- 01 . Vue簡介,原理,環境安裝Vue
- el-form中rules的原理簡介ORM
- js事件委託原理簡單介紹JS事件
- 編譯原理 START 龍虎鯨書簡介編譯原理
- GoldenGate的簡介與複製原理Go
- butterknife原始碼簡單分析&原理簡述原始碼
- CPU Turbo和GPU Turbo的區別 CPU Turbo是什麼意思?GPU
- MHA常用指令碼簡介指令碼
- (1) Shell 指令碼簡介指令碼
- flask 原始碼解析:簡介Flask原始碼
- 活動內碼表簡介
- 01 . ELK Stack簡介原理及部署應用
- java中的編碼簡介Java