卷積碼的維特比(Viterbi)譯碼

本文轉載自《卷積碼的維特比(Viterbi)譯碼》

https://www.cnblogs.com/ncdxlxk/p/9240938.html

對維特比譯碼的接觸很早就開始了,也想過要寫一篇總結性的文章,但無奈心中一直有幾個疑團沒能得到合理的解答。比如什麼時候開始進行回溯譯碼比較合適?維特比譯碼的性能相比分組碼等其他編碼的譯碼性能究竟好在哪裏,如何來評估?編碼約束度和監督位數量對維特比譯碼的性能是如何產生影響的,等等……直到前些天看到這篇來自MIT的數字通信系統課程的教案,諸多的疑惑才豁然開朗。這篇文章將通信理論中的維特比譯碼的前前後後講的非常的全面,是我讀到的關於維特比譯碼最好的文章(沒有之一)!特此翻譯過來,一來加深自己的理解,二來供大家學習討論~

 

本文翻譯自 MIT 6.02 DRAFT Lecture Notes, 2012

CHAPTER 8:Viterbi Decoding of Convolutional Codes

 

卷積碼的構造和編碼方法已經在前一章中描述過,本章將描述一種優雅高效的卷積碼譯碼方法,它避免我們對N個比特序列的2^N種可能的路徑組合做窮舉。該方法由Andrew Viterbi 發明,並以他的名字命名。

 

面臨的問題

在接收端,我們有一組對應於發射監督比特的電壓採樣序列。爲簡單並不失一般性,我們將假設接收端獲得了最佳採樣點(或者一組採樣集的均值對應一個監督位),通過與閾值比較判爲“0”或“1”(解映射),並將判決結果傳遞給譯碼器。

現在我們有了一組接收比特序列,對應於卷積編碼輸出的監督比特。在沒有關於採樣點和譯碼器其它信息的情況下,譯碼過程被稱爲硬判決譯碼(“硬譯碼”)。 如果提供給譯碼器以採樣點的“模擬”信息(以數字化形式,通過模數轉換量化),我們稱該過程爲軟判決譯碼(“軟譯碼”)。

維特比譯碼器適用於任何一種情況。直觀講,由於硬判決譯碼會對比特是0還是1做出早期判決,因此在數字化過程中丟失了部分信息。硬判決將在接收的比特序列中引入更多的誤碼,因爲它可能做出錯誤的判決,特別是對於接近閾值的電壓而言。儘管硬判決譯碼仍然可以產生最可能的發送序列,然而由於早期數字化中引入額外的錯誤,其糾錯能力將小於軟判決譯碼。但硬判決譯碼在概念上更容易理解,因此我們將從此開始,然後再介紹軟判決譯碼。

 

圖1

 

如前一章所述,網格爲了解卷積碼的譯碼過程提供了一個很好的框架(如圖1)。假設我們有表述一組碼的整個網格,並且接收到一串數字比特(或電壓樣點)。如果接收沒有錯誤,那麼定會有一些網格路徑與接收到的序列完全匹配,該路徑對應於發射監督比特(具體地說是在狀態轉移的過程中產生的發射監督比特)。從網格的每個節點發出,往上的路徑對應於“0”bit,往下的路徑對應於“1”bit,據此很容易譯得原始編碼信息。

當有誤碼發生時,我們可以做什麼?如前所述,找到最可能發送的消息序列是有吸引力的,因爲它最大限度地減少了譯碼的誤碼率。如果我們能夠想出一種方法來度量從一個狀態到下一個狀態所引入的錯誤量,那麼我們可以沿着一條路徑累積這些錯誤量,並得出沿着該路徑的總錯誤量。然後,以此得到的總錯誤量最小的路徑就是我們想要的路徑,並且發送的消息序列可以通過上面解釋的狀態轉移關係方便地確定。

我們需要一種方法來收集通過網格狀態時發生的任何錯誤,以及無需遍歷整個網格的路徑導航方式(即無需窮舉所有可能路徑也能找到累積錯誤最小的那條路徑),維特比譯碼器解決了這些問題。動態規劃是一個解決優化問題的普遍方法,維特比譯碼就是其中一例。在本課程的後面,我們將在網絡路由中應用相似的概念,可以在多跳網絡中找到好的路徑。

 

維特比譯碼器

譯碼算法使用兩個度量:分支度量(branch metric,BM)和路徑度量(path metric,PM)。分支度量計算的是發射和接收內容之間的“距離”,它是爲網格中的每條分支路徑定義的。在硬判決譯碼中,給出一組已經數字化的接收監督比特,分支度量就是監督比特預測值和接收監督比特之間的漢明距離。圖2展示了一個示例,其中接收的位爲00,對於每個狀態轉移,分支路徑上的數字顯示該轉移的分支度量。其中有兩條路徑的分支量度爲0,對應於漢明距離爲0的唯一狀態和轉移關係,其他非0分支量度對應於存在位錯誤的情況。

 

圖 2

 

路徑度量值與網格中的狀態相關聯(即與整個路徑的每個節點有關)。對於硬判決解碼,它對應於網格中從初始狀態到當前狀態的最可能路徑與接收監督比特序列間的漢明距離。“最有可能”是指在計算從初始狀態到當前狀態之間的所有可能路徑度量後,取漢明距離最小的那條。具有最小漢明距離的路徑使誤碼最小化,並且當誤碼率較低時具有最大似然度。

維特比算法的關鍵點在於,接收機可以使用分支度量和先前計算的狀態路徑度量遞推地計算當前狀態的路徑度量。

 

計算路徑度量

假設接收機已經在時刻i計算好每個狀態s的路徑量度PM[s,i](設卷積碼的編碼約束度爲K,則狀態數爲2^(K-1))。在硬判決譯碼中,PM[s,i]的值是在接收監督比特與最可能發送的消息進行比較時得到的差錯比特總數(通常我們將狀態“00”作爲起始狀態)。

在時刻i的所有可能狀態中,最可能的狀態是具有最小路徑度量的狀態。如果具備最小路徑度量的狀態不止一個,那它們擁有相等的可能性。

現在,我們如何確定時刻i+1下每個狀態s的路徑度量PM[s,i+1]呢?要回答這個問題,首先要注意的是,對於i+1時刻的狀態s,它必須由i時刻的兩種可能狀態中的一箇中轉移而來。這兩個之前狀態記爲α和β,並且對於給定的狀態s,它們是固定的。實際上α和β僅由卷積碼的編碼約束度決定,與生成多項式無關。圖2顯示了每個狀態的之前狀態(箭頭的另一端),該例中,對於狀態00,α= 00 ,β= 01;對於狀態01,α= 10 ,β= 11。

任何使得發射機在i+1時刻處於狀態s的信息序列必定使得發射機在i時刻位於狀態α或β。例如,在圖2中,在時刻i+1時到達狀態01,必定符合以下兩點之一:

1. 發射機在時刻i位於狀態10,且第i個信息比特爲0。在這種情況下,發射機輸出監督位11。由於接收比特爲00,因此將產生2位誤碼,新的狀態路徑度量PM[01,i+1] = PM[10,i] + 2。

2. 發射機在時刻i位於狀態11,且第i個信息比特爲0。在這種情況下,發射機輸出監督位01。由於接收比特爲00,因此將產生1位誤碼,新的狀態路徑度量PM[01,i+1] = PM[11,i] + 1。

通過上面直觀的分析,我們看到:

 (式1)

其中α和β爲上一時刻的可能狀態。

在譯碼算法中,重要的是記錄最小漢明距離對應的那條路徑,因爲我們需要通過跟蹤所記錄的路徑,遍歷從最終狀態到最初狀態的整條路徑,然後將估計比特倒序,最終得到最可能的消息。

 

尋找最大似然路徑

現在我們可以來描述譯碼器是如何找到最大似然路徑了。初始時,狀態00代價爲0,其它2^(k-1)-1個狀態代價爲正無窮(∞)。

算法的主循環由兩個主要步驟組成:首先計算下一時刻監督比特序列的分支度量,然後計算該時刻各狀態的路徑度量。路徑度量的計算可以被認爲是一個“加比選”過程:

1.將分支度量與上一時刻狀態的路徑度量相加。

2.每一狀態比較達到該狀態的所有路徑(每時刻每個狀態只有兩條這樣的路徑進行比較,因爲只有兩條來自前一時刻狀態的分支)。

3.每一狀態刪除其餘到達路徑,保留最小度量的路徑(稱爲倖存路徑),該路徑對應於錯誤最少的路徑。

圖3顯示了維特比譯碼器從一個時刻到下一個時刻的譯碼過程。這個例子顯示接收到的位序列爲11 10 11 00 01 10,以及接收器如何處理它。第四部分顯示了具有相同路徑度量四個不同狀態,在這個階段,通向這四個狀態的任一路徑都是最可能發送的比特序列(它們都具有度量爲2的漢明距離)。最下面的部分只顯示倖存路徑的情況,倖存路徑是有可能成爲最大似然路徑的路徑。還有很多其他路徑可以被刪除,因爲它們不可能有狀態回溯回來。維特比譯碼器之所以能被實際應用,是因爲倖存路徑的數量遠遠小於網格中所有可能路徑的總數。

 

圖 3

 

關於維特比譯碼器的另一個重點是,未來的知識將幫助它打破任何關係,甚至可能導致在特定時刻步驟被認爲“最可能”的路徑發生改變。圖4繼續圖3中的例子,直到所有接收到監督比特序列都被譯碼,得到最有可能的發送消息路徑,其具有兩位錯誤。

 

圖 4

 

軟判決譯碼

硬判決譯碼通過將接收到的電壓信號與閾值進行比較,數字化後將其傳遞給譯碼器進行譯碼。結果,我們失去了部分信息:電壓爲0.500001時數字化結果的可信度肯定比電壓爲0.999999時低得多,但兩者都被視爲“1”,且譯碼器現在以相同的方式對待它們,儘管0.999999比其他值更可能是“1”。

軟判決譯碼(有時也稱爲“軟輸入維特比譯碼”)建立在這一觀察上,它在譯碼之前不會數字化輸入樣本。相反,它使用具備連續性的模擬樣本(經採樣量化)作爲譯碼器的輸入。例如,如果期望的發射監督位爲0並且接收到的電壓爲0.3V,那麼我們可以使用0.3(或0.32或某些此類函數)作爲該位的值,而不是數字化它。

一個恰當的度量計算方式是求接收電壓和預期電壓之差的平方,其中的技術原理將在後面講到。如果卷積碼產生p個監督比特,它們對應的模擬樣本是v = v1,v2,...,vp,可以按如下方式構建軟判決分支度量:

       (式2)

u = u1,u2,...,up是預期的p個監督位(爲0或1)。圖5顯示了p=2時,當u爲00時的軟判決分支度量。

圖5 

 

軟判決譯碼算法與前述硬判決譯碼的譯碼過程相同,除了分支度量不再是整數漢明距離而是一個正實數。

事實證明,當信道經受加性高斯噪聲時,該軟判決度量與正確譯碼的概率密切相關。首先,我們來看1個監督比特位時的簡單情況(可直接擴展爲其它一般情況),假設接收機獲得的第i個監督位對應的數據爲電壓vi(在硬判決譯碼中,根據vi是小於還是大於0.5,它將判爲爲0或1),當發送信息位爲ui時(0或1),vi將被接收的概率是多少?當信道噪聲爲零均值加性高斯噪聲時,此事件的PDF由下式給出:

                (式3)

其中,ui=0時,di=vi^2;ui=1時,di=(vi-1)^2。

該PDF的對數似然函數與-di^2成比例。一組發送碼序列U = ui,u2,...,up得到接收序列V = v1,v2,...,vp,其聯合概率密度函數爲各獨立樣點PDF的乘積。該路徑的對數PDF爲各獨立樣點對數似然函數的和,且與-∑i(di^2)成比例。

但這恰恰是我們在公式2中定義的分支度量的負值,維特比譯碼器最小化不同的可能路徑度量,而最小化路徑度量等同於最大化對數似然度!

這意味着軟判決譯碼器產生與接收的電壓序列相對應的最大似然路徑。

我們之所以選擇平方和作爲公式2的分支度量,是由於其與對數PDF的直接關係。不同的噪聲分佈(除了高斯)可能需要不同的軟解碼分支度量,以獲得與正確譯碼PDF類似的聯繫。

 

實現更高和更精細的匹配速率:打孔

按目前爲止所描述的,卷積碼的最大碼率爲1/r,其中r是由卷積碼1比特輸入生成的監督比特數。但是如果我們想要一個大於1/2的碼率,或者一些在1/r和1/(r+1)之間的碼率呢?

一種叫做打孔的通用技術給我們提供了一種方法。其思想很簡單:編碼器不發送每一個監督位,而是在輸出流上進行打孔,僅發射由收發雙方約定好的部分碼流。例如,對於1/2卷積編碼,一個人通過在編碼輸出上每3bit刪除一個特定位,原本每3bit需要發送6bit監督數據,而現在只需要發送4bit,由此得到3/4碼率的編碼輸出。

在這個例子中,設卷積編碼器爲1/2編碼,在打孔前,需要發送p0[0]p1[0]p0[1]p1[1]p0[2]p1[2],在打孔之後則只發送p0[0]p1[0]-p1[1]p0[2]-,其中-表示被刪除的比特。

在譯碼器中,當使用打孔編碼時,被刪除的監督位不參與分支度量的計算,除此之外的譯碼過程與以前相同。我們可以把每一個缺失的監督位看作一個空白(“-”),運行譯碼器時只需跳過空白。

 

編碼和譯碼的實現複雜度

關於卷積編碼器和維特比譯碼器的時間和空間複雜度,我們必須回答兩個重要的問題:

1. 編碼器需要多少狀態和存儲空間?

2. 譯碼器需要多少時間完成譯碼?

第一個問題容易回答:在編碼器端,需要的存儲空間與編碼約束度K成線性關係;需要的時間與消息長度n成線性關係。編碼器比維特比譯碼器的實現要容易的多。譯碼器需要的時間取決於編碼約束度K和接收序列長度(與n成線性關係)。在每個時刻,譯碼器需要計算轉移至每一狀態的兩條分支路徑,共2^(K-1)個狀態,需要進行2^K次比較,因此譯碼n比特信息的時間複雜度爲O(n*2^K)。

此外,按目前所描述的來看,我們只能在最末端解碼消息的第一位。有一點需要表明,雖然未來的知識是有用的,但假設編碼約束度爲6,第1000時刻的比特不太可能會改變我們對第1時刻比特的譯碼結果。事實上,在實踐中,譯碼器計算長度一旦滿足編碼約束度的幾倍就可以開始譯碼。實驗數據表明,無論監督比特流對應於消息比特有多長,5·K的消息比特時間(左右)是一個合理的譯碼窗口。

 

設計優秀的卷積碼

到此,人們可能自然地會想到一個問題,“什麼樣的生成多項式能促成一個優秀的卷積碼?換句話說,是否有系統的方法來產生優秀的卷積碼?或者,給定兩個卷積碼,是否有一種方法來分析它們的生成矩陣,並確定它們在接下來的過程中如何相互關聯並執行?瞭解了這些,使得我們能在一個有噪聲的信道上以儘可能高的速率進行通信。

原則上,許多因素決定了卷積碼的有效性。人們期望卷積碼糾正錯誤的能力取決於編碼約束度K,因爲編碼約束度越大,任何給定的消息比特對監督位的貢獻程度越大,對比特錯誤的復原能力也就越大。人們也希望隨着監督比特數量的增加,錯誤的恢復能力會更高,因爲這對應於一個較低的碼率(更多的冗餘)。最後同樣重要的一點是,生成多項式的係數在決定卷積碼的性能方面確實有一定的作用。

幸運的是,有一個度量,稱爲卷積碼的自由距離,它囊括了這些衡量維度,並對卷積碼的糾錯能力起主要決定作用。

 

自由距離

由於卷積碼是線性的,因此所有我們所學的線性碼都適用於這裏。特別是,任何線性碼的漢明距離,即任意兩個有效碼字之間的最小漢明距離,等於具有最小碼重的非零碼字中1的個數。一個碼字的碼重爲其所含1的個數。

對卷積碼而言,任意兩個有效碼字之間的最小漢明距離稱爲自由距離。具體而言,一個卷積碼的自由距離等於全零路徑與從狀態00重新回到狀態00的最小非零路徑之間的路徑度量之差。圖6舉例說明這一概念。

 

圖 6

 

在這個例子中,自由距離是4,它需要8個輸出位才能回到正確的狀態,所以如果數據塊從第一個監督位開始,人們期望這個卷積碼每8bit數據塊能夠糾正(4-1)/2 = 1位錯誤。事實上,這種糾錯能力基本上與(8,4,3)二維奇偶監督碼相同。

注意,這個例子中的自由距離是4,而不是5:從初始00狀態回到狀00態之間最小的非零路徑如下:00→10→11→01→00,相應的路徑度量值變化如下:0→2→2→3→4。在下一節中,我們將發現生成器的一個小的改變(如以101替換110),也將大大影響卷積碼的性能。

如果是以相同方式定義的,爲什麼我們要重新定義一個“自由距離”,而不是也把它叫做漢明距離?原因是,漢明距離爲D的任何編碼(無論是否爲線性碼),都可以糾正任何(D-1)/2位形式的錯誤。如果我們把同樣的概念應用於卷積碼,我們將會以爲我們可以糾正固定位數的錯誤,如在上例中我們可以糾正任何單比特錯誤。

現在,卷積碼產生無邊界的比特流,這明顯不同於分組碼。(D-1)/2不太適合於描述卷積碼真正的糾錯性能。當這些錯誤離得足夠遠時,卷積碼(使用Viterbi譯碼)可以糾正t = (D-1)/2位形式的錯誤,所以我們使用的是自由距離。從某種意義上說,在一個間隔很近的突發塊中,錯誤可以連續發生,只要沒有超過t個錯誤出現,譯碼器就可以糾正它們。

 

選擇好的卷積碼

自由距離概念還提供了一種構造良好卷積碼的方法。給定譯碼資源預算(如硬件資源),首先爲編碼約束度K確定一個邊界,然後,根據最大速率選擇r的上限。給定一個具體的K和r,就已經把生成多項式的選取方案限定在一定範圍內了。人們可以編寫一個程序,遍歷所有可能的生成多項式組合,計算自由距離,並選擇最大自由距離的卷積碼。卷積碼完全通過指定生成多項式來產生(如果列出生成多項式,則K和r都是隱含在其中的了)。

 

比較編碼的糾錯性能

這一部分討論如何比較不同編碼的糾錯性能,並評估在不同控制條件下實現不同編碼的仿真結果。本節有兩個目標:第一,從“最佳實踐意義”角度比較不同編碼器,並討論常見的陷阱;第二,比較某些特定的卷積碼和二維奇偶監督碼,並討論某些編碼器比其它編碼器執行得更好的原因。

有兩個衡量標準:第一是譯碼後的誤碼率(BER),有時也稱爲譯碼錯誤概率;第二個是碼率。對於這兩種度量,我們關心它們如何隨信道參數的變化而變化,例如BSC中的ε值(即信道的底層比特差錯概率)或信道上的噪聲程度(對於加性高斯噪聲信道,我們將在下一章中詳細描述)。

這裏,我們只關注編碼的譯碼後誤碼率。

 

基於BSC的譯碼誤碼率

對於BSC,變量是ε(譯者注:BSC全稱爲二元對稱信道,這裏BSC的ε表示譯碼前的錯誤比特率),當ε變化時,我們關心不同的編碼器將會如何表現(以BER衡量)。圖7顯示了幾個不同的線性二維奇偶監督碼和卷積碼的譯碼誤碼率隨BSC錯誤率ε變化的情況。

 

圖 7

 

圖中顯示,碼率爲1/3的二維奇偶監督碼在高ε時表現得最爲穩健,而兩個1/2碼率的卷積碼在其它誤碼率下表現很好。圖中同樣可以看出,(7,4)和(15,11)漢明碼要劣於其它編碼。

這些結論的問題是,他們沒有考慮到編碼的編碼效率,其中一些編碼的開銷要比其他編碼高很多。這樣,如圖7曲線所示譯碼誤碼率隨ε的變化,將具有相同碼率的編碼在一起比較纔有意義。因此,可以將(8,4)二維奇偶監督碼與其他三個卷積碼進行比較,並得出以下結論:

1. 兩個卷積碼(3,(7,5))(生成多項式爲(111, 101))和(4,(14,13))(生成多項式爲(1110, 1101))表現最好,它們明顯優於(3,(7,6))卷積碼(我們從Bussgang關於如何選取好的卷積碼的文章獲得這些碼)。(3,(7,5))和(4,(14,13))這兩個碼(自由距離分別爲5和6)表現優異的原因是它們具有比(3,(7,6))(自由距離爲4)更大的自由距離。

2. 有趣的是,結果顯示自由距離爲5的(3,(7,5))表現要強於自由距離爲6的(4,(14,13))。其原因是,在(3,(7,5))下,從狀態00返回到狀態00的網格邊數僅爲3,對應於一組6個連續編碼比特。相關的狀態轉換是00→10→01→00,相應的路徑度量爲0→2→3→5。相比之下(4,(14,13))雖然擁有大小爲6的自由距離,但它需要經過4條網格邊來實現000→100→010→001→000的狀態轉移,意味着在長度爲8的滑動窗內它能糾正2bit內的錯誤。

此外,從5到6(偶數)的自由距離的增加並不能提高編碼的糾錯能力。

3. 對於(8,4)二維奇偶監督碼和(3,(7,6))卷積碼,譯碼後的BER大致相同。其原因是該K=3的卷積碼的自由距離爲4,這意味着它可以在與(8,4)二維奇偶監督碼長度相似的塊上糾正1個比特錯誤。直觀地說,這兩個方案的監督位利用了相同長度的歷史信息。在二維奇偶監督碼情況下,行監督位來自兩個連續的消息位,而列監督位則來自間隔一位的兩個消息位,同時我們也發送消息位。所以我們用編碼約束度K=3的卷積碼來與之比較,證明(3,(111,110))不是一個好的卷積碼。

4. (7,4)漢明碼類似於(8,4)二維奇偶監督碼,但它具有更高的碼率(4/7對1/2),這意味着它用更低的開銷實現了相同的糾錯功能。因此,可以得出結論,它是比(8,4)二維奇偶監督碼更好的編碼。

但是,如何比較不同碼率下的譯碼誤碼率呢?我們需要一種方法來衡量不同碼率編碼的冗餘量。要做到這一點,我們需要改變模型來解釋物理(模擬)層上發生的情況。處理這個問題的一般方法是使用信噪比(SNR)作爲控制變量(X軸),發送信號通過高斯噪聲干擾的信道。下一章詳細地研究了這個噪聲模型,這裏我們只描述在這個模型下比較編碼性能時所獲得的基本直覺和結果。該模型對於理解軟判決譯碼的好處也是必不可少的,因爲軟譯碼直接使用接收的電壓樣本作爲譯碼器的輸入,而無需先對每個樣本進行數字化。通過比較軟判決譯碼和硬判決譯碼,能觀察到增加了多少的增益。

 

高斯噪聲模型和Eb/N0的概念

考慮一組n bit長的信息。我們有兩個編碼:C1碼率爲k/n1,C2碼率爲k/n2,設n2>n1。因此,對於k bit信息,當使用C1編碼時,我們發射n1位,當使用C2編碼時,發射n2位。顯然,使用C2消耗更多的資源,因爲它需要在信道上發送更長的時間。

衡量C1資源消耗的一個簡單方式是運行一個實驗,將位1映射爲特定電壓V1,將位0映射爲特定電壓V0。由於在下章中將會講到的一個原因,與譯碼有關的是V1和V0之間的電壓差,因此我們假設這兩個電壓中值爲0。爲方便起見,設V1=sqrt(Es),V0=-sqrt(Es),Es爲每個樣點的能量。該能量(或者說功率)與所使用的電壓的平方成比例。

現在我們使用C1編碼,k bit消息被編碼成n1 bit。先假定每一編碼比特以一個電壓樣點發送(爲簡化描述),則每一位的能量Eb=(n1/k)*Es。同樣對於C2編碼,每一位的能量Eb=(n2/k)*Es。在高斯噪聲信道中,每一個電壓樣點被幹擾成具備一定方差的高斯分佈,該方差即代表噪聲的大小(方差越大,噪聲越大,BSC的誤碼率ε也就會越大)。因此,適合用於比較不同編碼碼率下的譯碼誤碼率的x軸變量應爲Eb/N0,它表示每個信息比特的能量與信道高斯噪聲能量之比。

 

圖 8

 

圖8展示了模擬不同具有代表性的Eb/N0值的高斯信道的性能實驗結果,實驗中的每一個數據點都是統計200萬個信息比特在一個噪聲信道上編碼和傳輸的結果。最上面的曲線顯示未編碼時的誤碼率。X軸爲Eb/N0,以dB爲單位。y軸顯示對數刻度上的誤碼率。從結果看,這些點值得注意:

1. 好的卷積碼明顯優於漢明碼和二維奇偶監督碼。

2. 軟判決譯碼明顯優於硬判決譯碼。對於相同的譯碼誤碼率,軟解碼相對於硬譯碼有2至2.3 dB的增益,即硬譯碼將不得不通過增加信噪比(1.6倍左右)來實現與軟譯碼相同的譯碼誤碼率。

 

總結

從一開始作爲影響力巨大的卷積碼的譯碼方法,到現在維特比譯碼器已經成爲工程系統和各領域中應用最廣泛的算法之一。現代磁盤驅動器通過PRML技術來加速訪問;語音識別系統,自然語言系統,以及各種通信網絡使用此方法或其變種。

事實上,用更現代的觀點描述,可將本課中描述的軟判決譯碼技術看作在隱馬爾科夫模型(HMM)中尋找最大似然的狀態集路徑。一些基本現象被建模爲一個馬爾可夫狀態機,它的狀態之間有一定概率的轉換。我們觀測到被噪聲污染的各狀態,並將觀測結果拼接起來,以確定最可能的狀態轉移序列。事實證明,維特比解碼器是解決這類問題的極好起點(有時也是完備解)。

另一方面,儘管有着不可否認的成功,維特比譯碼並不是解卷積碼的唯一方法。一方面,它確實需要窮舉每個狀態,因此它的計算複雜度與編碼約束度K呈指數關係。當K很大時,可以使用其他解碼方法,例如BCJR或Fano的序貫譯碼方案。

卷積碼本身在有線和無線鏈路上非常流行。它有時被用作外部塊糾錯碼的“內部碼”,但也可自己作爲外部糾錯碼使用。Turbo碼是目前實踐中使用性能最高的譯碼器之一,卷積碼即可作爲其內部組件。

 

 

·END·

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章