3.2 外部接收機(Outer Receiver)
3.2.2 Viterbi 解碼器
Viterbi 演算法在 1967 年由 Viterbi 所提出,用來對迴旋碼進行解碼。此演算 法為最大近似解碼(Maximum Likelihood Decoding ; MLD),簡單地說便是依據接 收訊號來尋找在格狀圖上所有可能的路徑,最後選擇一條最短路徑來當作最佳解 碼路徑。演算法中包括了計算各個路徑與所收到訊號之間的相似度,並且去除掉 一些不可能成為最佳選擇的路徑。當幾個路徑進入同一狀態時,在這幾個路徑之 間的其中一個會因有「適當」的計量值(Metric)而被選擇,而這被選擇的路徑也 就是存活路徑(Survivor Path)。所謂的「適當」則要根據計量值的定義。在格狀 圖中的所有狀態都要進行這樣的存活路徑選擇。在接下來的時間也是根據這樣的 法則來去除不可能的路徑,如此,在收集到一定長度的訊號後,便可以將解碼位 元輸出了。底下我們用一個例子來說明此演算法。
為了描述 Viterbi 演算法是如何動作之前,我必需先定義出格狀圖,這是根 據編碼器而產生的。如圖 3-12 所示,我們用一個簡單的(n,k,m)=(2,1,2)的迴旋碼 編碼器來舉例說明,它由 2 個移位暫存器,2 個模 2(Modulo-2)加法器所組成,
而模 2(Modulo-2)的加法器可以由 XOR 閘來實現。迴旋碼編碼器基本上是一個有 限狀態機(Finite state Machines),我們可以用狀態圖來描述其輸入輸出的關係,
因此編碼器可以建立如圖 3-13 所示的狀態圖。其中每一狀態點為編碼器內暫存 器之值,輸入與輸出位元則表為v v(1) (2)/u 。通常我們會將這狀態圖轉成格狀圖來
狀圖,實線代表輸入 0,虛線代表輸入 1。對圖 3-13 之格狀圖來說,因為編碼器 有二個移位暫位器,所以共會有 4 個狀態,分別為 S0(0,0),S1(1,0),S2(0,1),S3(1,1),
每一個狀態有 2 條路徑指向下一個狀態,一條為當輸入位元 0 時,另一條則是輸 入位元為 1 時。
圖 3-12 (2,1,2)之迴旋碼編碼器
圖 3-13 (2,1,2)迴旋碼編碼器之狀態圖與格狀圖
為了說明方便,我們使用 Hard Decision 來說明 Viterbi 解碼器是如何運作的,
然而在我們的模擬中則是使用 Soft Decision 的 Viterbi 解碼器,而二者的差別只
需將底下所使用的漢明距離改為歐幾里德(Euclidean)距離即可。在說明 Viterbi where ** is hamming distance calculation Bm i j t Cw i j r t
Pm i j t Bm i j t Sm j t
=
= + −
(3-26) 以下我們說明 Viterbi 演算法的步驟,假設有一全零資料序列u=(0000000),
經過編碼後,我們可以得到編碼後的輸出序列為v=(00,00,00,00,00,00,00),而 v 序列在經過通道受到雜訊的干擾,使得第 1 及第 3 位元由 0 變成 1,而解碼器所 收到的序列為(10,00,00,00,10,00,00) 說明 Viterbi 演算法經由以下的 Viterbi 演算 法,可求得解碼之結果為uˆ=(0000000)= u。
(0,1) 1
¾ 步驟三
在 Viterbi 演算法中,我們必須將所有狀態及其對應的存活路徑儲存起來,
若路徑很長(也就是訊號序列長),則需要一個很大的記憶體。因此,我們必須在 路徑到達一定長度時加以截斷。當我們要截斷最前面的路徑時,必須要將其資料 取出(解碼)。一般而言,若路徑之截斷長度(也就是被截斷存活路徑的長度)為 5.8m 時,不管任何一種路徑取出資料,所增加的解碼錯誤率是可以忽略的,也就是說,
其最後面的一個分支都會重合成一條,如圖 3-17 所示。
Best selected
Correct path
Decoded sequence Survivor Depth
圖 3-17 Viterbi 演算法之截斷長度示意圖