Turbo 譯碼淺析
本文章和系列視頻,將講解 Turbo 碼的基本入門。
需要的預(yù)備知識主要是知道卷積碼的基本編碼過程,知道卷積碼的 BCJR 譯碼算法。
Turbo 碼是由多個(gè)卷積碼并聯(lián)而成的, Turbo 名字的由來,是從譯碼的角度來看的。因此,嚴(yán)格來說,應(yīng)該稱為并聯(lián)卷積碼的 Turbo 譯碼算法更合適。
注:也有串聯(lián)的卷積碼構(gòu)成 Turbo 碼,也有由多個(gè)不同的卷積碼并聯(lián)/串聯(lián)成的 Turbo 碼,本文主要講解由多個(gè)相同的卷積碼并聯(lián)構(gòu)成的 Turbo 碼。而且,為了敘述方便和公式的簡潔,我們以下面的卷積碼為例子進(jìn)行討論。

如果單獨(dú)看每一個(gè)卷積碼,我們可以用 BCJR 譯碼算法來譯碼,假如我們先用上面那一個(gè)卷積碼,做 BCJR 譯碼,則根據(jù)之前的文章和視頻講解,我們知道對每個(gè)發(fā)送比特的后驗(yàn)概率,可以用如下公式計(jì)算:
其中:
以及:
那么,我們可以很自然地想到,是否可以利用上面卷積碼得到的后驗(yàn)概率信息,來增強(qiáng)對第二個(gè)卷積碼做概率計(jì)算的可靠性?反過來,等第二個(gè)卷積碼的后驗(yàn)概率計(jì)算出來后,是否又可以用來增強(qiáng)對第一個(gè)卷積碼做概率計(jì)算的可靠性?如此往復(fù)迭代,就構(gòu)成了類似渦輪增壓的工作機(jī)制,因此,得名 Turbo 譯碼。
現(xiàn)在,我們來分析,從另外一個(gè)卷積碼的譯碼結(jié)果中,拿什么樣的概率信息給當(dāng)前這個(gè)卷積碼的譯碼使用。
最直觀的,最容易理解的,就是把第一個(gè)卷積碼的后驗(yàn)概率當(dāng)成對發(fā)送比特的概率,代入到第二個(gè)卷積碼中用到比特概率的地方。
如果令另外一個(gè)卷積碼中公式 (2) 里的先驗(yàn)概率? 等于上一個(gè)卷積碼中的后驗(yàn)概率,即:
我們來分析一下這樣做會(huì)有什么問題。從上面的公式,我們在計(jì)算? 這個(gè)概率時(shí),用到了先驗(yàn)概率,我們把
? 這個(gè)概率公式再展開分析一下,從公式 (2) 繼續(xù)分析。因?yàn)槲覀冇玫降木矸e碼是系統(tǒng)碼,即編碼的 bit 會(huì)在編碼后的碼流中原封不動(dòng)地保存,那么:
由于用的是系統(tǒng)碼,所以? 對應(yīng)的就是
,所以,公式 (5) 可以寫成:
把 (6)? 代入 (1) 則:
我們把公式 (7) 中最后三項(xiàng),分別記為:
如果把第一個(gè)卷積碼計(jì)算出來的后驗(yàn)概率,代入到第二個(gè)卷積碼的先驗(yàn)概率,則有:
可以看到,上面有兩個(gè) ,而且代入后,還有
,這樣會(huì)導(dǎo)致 “重復(fù)計(jì)算” 的感覺,參考書中好像是說不要這樣,而是用公式 (7) 中 求和的部分,作為第一個(gè)卷積碼因?yàn)榫幋a而得到的概率信息,給第二個(gè)卷積碼使用,即傳遞:
所以, Turbo 譯碼的大致流程為:
1) 對第一個(gè)卷積碼,計(jì)算? 概率
2) 利用公式 (9),計(jì)算?
3) 把? 當(dāng)成
,傳遞給第二個(gè)卷積碼
4) 對第二個(gè)卷積碼,計(jì)算? 概率
5) 利用公式 (9) (稍微變化一點(diǎn)),計(jì)算?
6) 把? 當(dāng)成
,傳遞回第一個(gè)卷積碼,轉(zhuǎn)到步驟 1 繼續(xù),直到結(jié)束.

詳細(xì)的算法描述如下:
? 表示第幾個(gè)卷積碼
? 表示第幾次迭代
,表示第
次迭代中,第?
?個(gè)卷積碼計(jì)算出來的要傳遞的外信息。
? 表示第
? 次迭代中,第 ?
?個(gè)卷積碼用到的 先驗(yàn)概率
M? 最大迭代次數(shù)
-----------------------------算法------begin
初始化: 令?? (用初始先驗(yàn)概率輸入給第一個(gè)卷積碼,一般是等概率分布的)
迭代: 按照迭代次數(shù)循環(huán)
?? 1. 用? 作為先驗(yàn)概率?
輸入給第一個(gè)卷積碼,計(jì)算
????? * 所有的
????? * 計(jì)算
?? 2. 令
?? 3. 用? 作為先驗(yàn)概率
,計(jì)算
????? * 所有的
?? 4. 如果不是最后一次迭代
????? * 計(jì)算
????? * 令
?? 5. 否則,如果是最后一次迭代
????? * 用? 作為先驗(yàn)概率
,計(jì)算
????? * 解交織
? ?
-----------------------------算法------end
我們以一個(gè)具體的例子來看譯碼的過程.

首先,做初始化,我們有的先驗(yàn)概率,是 0/1 比特的取值是等概率的,所以:
對于時(shí)刻 0 到時(shí)刻 9,我們用公式 (6) 計(jì)算出來? 概率:
計(jì)算出所有的
?初始化 0 時(shí)刻的
1 時(shí)刻的
依次類推,最后計(jì)算 9 時(shí)刻的
再計(jì)算? 概率,計(jì)算時(shí)刻 10 到時(shí)刻 1 的:
初始化時(shí)刻 10 的 ? :
計(jì)算 9 時(shí)刻的 ?
以此類推,計(jì)算 1 時(shí)刻的 ?
至此,我們可以計(jì)算 extrinsic probability 外信息:
我們把下一個(gè)卷積碼要用的先驗(yàn)概率用前面的外信息賦值:用同樣的步驟計(jì)算
, 然后計(jì)算出?
外信息,把這個(gè)外信息作為下一輪的第一個(gè)卷積碼的先驗(yàn)概率來使用,繼續(xù)上面的過程。