• 沒有找到結果。

Viterbi 演算法是在 1967 年由 Viterbi 所提出來的[23]來對迴旋碼進行解碼 的,近年來,Viterbi 演算法則有非常廣泛的應用,例如數位通訊系統、語音辨識 等。此演算法為最大近似解碼(Maximum Likelihood Decoding ; MLD),簡單地說 便是依據接收訊號來尋找在格狀圖上所有可能的路徑,最後選擇一條最短路徑來 當作最佳解碼路徑。演算法中包括了計算各個路徑與所收到訊號之間的相似度,

並且去除掉一些不可能成為最佳選擇的路徑。當幾個路徑進入同一狀態時,在這 幾個路徑之間的其中一個會因有「適當」的計量值(metric)而被選擇,而這被選 擇的路徑也就是存活路徑(survivor path)。所謂的「適當」則要根據計量值的定義。

在格狀圖中的所有狀態都要進行這樣的存活路徑選擇。在接下來的時間也是根據 這樣的法則來去除不可能的路徑,如此,在收集到一定長度的訊號後便可以將解 碼位元輸出了。底下我們用一個例子來說明這演算法。

為了描述 Viterbi 演算法是如何動作之前,我必需先定義出格狀圖,這是根 據編碼器而產生的。如圖 3-7 所示,我們用一個簡單的(n,k,m)=(2,1,2)的迴旋碼 編碼器來舉例說明,它由 2 個移位暫存器,2 個模 2(Modulo-2)加法器所組成,

而模 2(Modulo-2)的加法器可以由 XOR 閘來實現。迴旋碼編碼器基本上是一個有 限狀態機(Finite state Machines),我們可以用狀態圖來描述其輸入輸出的關係,

由之編碼器可以建立如圖 3-8 所示的狀態圖。其中每一狀態點為編碼器內暫存器 之值,輸入與輸出位元則表為v v(1) (2)/u 。通常我們會將這狀態圖轉成格狀圖來說 明,因為對於時間與狀態之間的轉換有較好的表達能力。如圖 3-9 所示,實線代 表輸入 0,虛線代表輸入 1。對圖 3-9 來說,因為編碼器有二個移位暫位器,所 以共會有 4 個狀態,分別為 S0(0,0),S1(1,0),S2(0,1),S3(1,1),每一個狀態有 2 條路徑指向下一個狀態,一條為當輸入位元 0 時,另一條則是輸入位元為 1 時。

圖 3-7 (2,1,2)之迴旋碼編碼器

圖 3-8 (2,1,2)迴旋碼編碼器之狀態圖 圖 3-9 (2,1,2) 迴旋碼編碼器之格狀圖 為了說明方便,我們使用 Hard Decision 的 Viterbi 來說明 Viterbi 是如何運作的,

然而在吾人的實作中是使用 Soft Decision 的 Viterbi,而二者的差別只需將底下所 使用的漢明距離改為歐幾里德(Euclidean)距離即可。在說明 Viterbi 演算法之前,

我們先定義一些名詞:

z 碼句(code word) Cw i j :由狀態( , ) S 轉移到狀態i S 所對應的編碼器輸j 出。

z 分支計量值(Branch metric) Bm i j t :在時間 t ,接收到的訊號( ( )( , , ) r t )和 碼句之間的相似度(Likelihood),可用漢明距離表示。

z 路徑計量值(Path metric) Pm i j t :在時間 t,接收到的碼和由狀態( , , ) S 轉i

移到狀態S 之間的相似度。 j

z 存活計量值(Survivor metric) Sm j t :在時間 t,進入狀態( , ) S 的最小路徑j 計量值。

( , )

Cw i j 、Bm i j t 、( , , ) Pm i j t 、( , , ) Sm j t 之間可表示如下: ( , ) ( , , ) ( , ) ** ( )

( , , ) ( , , ) ( , 1) 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-36)

假設有一全零資料序列

u

=(0000000),經過編碼後,我們可以得到編碼後的輸出 序列為

v

=(00,00,00,00,00,00,00),而 v 序列在經過通道的輸輸過程中受到雜訊的 干擾,使得第 1 及第 3 位元由 0 變成 1,而解碼器所收到的序列為

(10,00,00,00,10,00,00),經由以下的 Viterbi 演算法,可求得解碼之結果為

ˆ

u

=(0000000)=

u

I. 如圖 3-10 所示,在 t = 0 時,從狀態S 開始,其存活計量值為 0。若輸入 0,0 則路徑向上,在 t = 1 時,狀態S 輸出 00。若輸入 1,則路徑向下,在 t = 10 時,狀態點S ,輸出為 11。若輸出位元與 r 之所對應的位元相同時,則我1 們給此位元之計量值為 0,反之為 1。因此,我們可以算出分支計量值

(0, 0,1) 1

Bm = 及Bm(0,1,1)= 。因為在 t = 1 時,每一狀態只有一條路徑進入,1 所以存活計量值Sm(0,1)= 、1 Sm(1,1)= 。 1

time stage: 0 1

存活計量值的狀態所走的路徑為存活路徑,由存活路徑,也就是在圖中線條

若路徑很長(也就是訊號序列長),則需要一個很大的記憶體。因此,我們必須在 路徑到達一定長度時加以截斷。當我們要截斷最前面的路徑時,必須要將其資料 取出(解碼)。一般而言,若路徑之截斷長度(也就是被截斷存活路徑的長度)為 5.8m 時,不管任何一種路徑取出資料,所增加的解碼錯誤率是可以忽略的,也就是說,

其最後面的一個分支都會重合成一條,如圖 3-13 所示。

Best selected

Correct path

Decoded sequence Survivor Depth

圖 3-13 Viterbi 演算法之截斷長度示意圖

相關文件