You are on page 1of 39

使用硬體描述語言實現:

Turbo Code 編碼器


目錄
1 Turbo Code 編碼器專題

2 Turbo Code 理論

3 MATLAB模擬-Turbo Code

4 VHDL實現-Convolution Code編碼器

5 VHDL實現-Turbo Code 編碼器

6 VHDL實現-Viterbi 解碼
http://msalab.ncut.edu.tw/
專題製作簡介
❖簡介
▪ .通道編碼目前已有相關的應用被提出,且活用於日常生活應
用中。通道編碼亦稱為錯誤更正碼(Error-Correcting Codes),
其可以分為代數碼(Codes On Algebra)、圖形碼(Codes On
Graph)和幾何碼(Codes On Geometry)三大類。

▪ .我們的專題使用通道編碼中的迴旋碼的觀念來架構渦輪碼,
並且使用BCJR解碼渦輪碼,首先使用MATLAB模擬渦輪碼,再
者將MATLAB語言轉換為硬體描述語言(VHDL)撰寫,落實將通
訊理論和硬體實作結合。

http://msalab.ncut.edu.tw/
專題製作流程

學習 模擬 硬體
(通道編碼) (MATLAB) (VHDL)

認識通道編碼 使用MATLAB模擬 撰寫VHDL硬體語言

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Turbo Code 編碼
▪ .Turbo Code 編碼我們使用迴旋碼(convolutional codes) 並聯所組成。並將
訊息位元送入第一個組成碼,並將訊息位元經過交錯器(inteerleaver)將原
本排序打亂再送入第二個組成碼,如圖所示。
u V(1)
V(2)

暫存器 暫存器

V(3)

u’
交錯器 暫存器 暫存器

http://msalab.ncut.edu.tw/
Turbo Code 理論
▪ .其中訊息區塊u,包含了K個訊息位元及m個使循環編碼器中暫存全回
到0狀態的結尾位元。如下:

u = (u 0 u1 u 2 ... u k'-1 ) ; k' = k + m

V (1) = (v0(1) v1(1) v 2(1) ... v k'-1(1) )

V (2) = (v0(2) v1(2) v 2 (2) ... v k'-1(2) ) ;V (3) = (v0 (3) v1(3) v 2 (3) ... v k'-1(3) )

▪ .經由Turbo Code編碼器可得u對應碼字為:

v = (v0(1) v0(2) v0(3) , v1(1) v1(2) v1(3) , v2 (1) v2 (2) v2 (3) , ... , vk'-1(1) vk'-1(2) vk'-1(3) )

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖區塊交錯器
▪ .渦輪碼編碼器中,我們將訊息位元送入第一個組成碼,且將訊息位元
經過交錯器(Interleaver)將原本排序打亂後再送入第二個組成碼。其基
本概念是將資料以列(Row-Wise)從上至下、從左至右寫入,並且以行
向(Column-Wise)從左至右、從上至下讀取。
寫入資料:
u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11 u12 u13 u14 u15 u16

寫入資料
u1 u2 u3 u4

取 u5 u6 u7 u8
資 u9 u10 u11 u12

u13 u14 u15 u16
讀取資料:
u1 u5 u9 u13 u2 u6 u10 u14 u3 u7 u11 u15 u4 u8 u12 u16

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Convolutional Code 籬笆架構
▪ . 在執行Viterbi演算法之前,首先要知道如何建構出迴旋碼系統的籬笆架
構。考慮一(2,1)迴旋碼架構如下。

V(1) 狀態變數S

State State
0 1
u
State State
暫存器 0 暫存器 1
0 0
0 1
(2)
V 1 0
1 1

G(D) = [1 + D21 + D +D2 ]

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Convolutional Code 籬笆狀態
▪ . 由上面我們可得Convolutional Code籬笆結構所有可能的狀態、輸入與輸
入。 State u = +1 State
S’ u = -1 S
0/00
S0 S0
(00) 1/ (00)
11

1
S1 0/1 S1
(01) (01)
1/0
0

1
0/0
S2 S2
(10) 1/1 (10)
0
10
0/

S3 S3
(11) (11)
1/01

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Convolutional Code-Viterbi 解碼
▪ . Viterbi演算法的步驟:
▪ (1)起始狀態為籬笆圖的最左邊,因此無漢明距離之量測。
▪ (2)由某個時間單位j = m開始,進入每一狀態的所有長度j段分支的倖存路
徑,計算倖存路徑距離的量測。對每一狀態,挑選並儲存一條具有最小
漢明距離的倖存路徑及累積倖存路徑值。
▪ (3)j 增加1,將當下狀態有可能的分支路徑皆比較其漢明距離,並且累加
前一狀態倖存路徑的值,以較其所有的路徑,留下具有最小的漢明距離
的倖存路徑和儲存倖存路徑值,並且刪除其他不具有最小漢明距離的路
徑。
▪ (4)若,則重複上述步驟(3),否則停止。

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Convolutional Code-Viterbi 解碼
▪ .假設迴旋編碼器電路接法為 G(D) = [1 + D + D ,1 + D ] 迴旋碼編碼器接收正確序 2 2

列(11,10,11,11,01,01,11),使用Viterbi解碼演算法:

接收序列: 11 10 11 11 01 01 11
S0 S0 S0 S0 S0 S0 S0 S0
00 00 00 00 00 00 00 00
1/1

1/1
1

1
11

1
S1 S1 S1 S1 S1 S1 S1 S1

0/
0/

01 01 01 01 01 01 01 01
01
0/

S2 S2 S2 S2 S2 S2 S2 S2
10 10 10 10 10 10 10 10

1/
01

1
0/0
S3 S3 S3 S3 S3 S3 S3 S3
11 11 11 11 11 11 11 11
解碼結果: 1 0 0 1 1 0 0

http://msalab.ncut.edu.tw/
Turbo Code 理論
❖Convolutional Code-Viterbi 解碼
▪ .假設迴旋編碼器電路接法為 G(D) = [1 + D + D ,1 + D ] 迴旋碼編碼器接收錯誤序 2 2

列(11,10,11,10,01,01,11),使用Viterbi解碼演算法:
錯誤
累積錯誤 累積錯誤
接收序列: 11 10 11 10 01 01 11
1 2
S0 S0 S0 S0 0/00 S0 0/00 S0 S0 S0
00 00 00 00 00 00 00 00

1/1
1/1

1/1
累積錯誤

1
1

1
3

11
11

S1 S1 S1 S1 S1 S1 S1 S1

0/
0/

01 01 01 01 01 01 01 01
累積錯誤 累積錯誤
1 2

10
10

0/
0/

S2 S2 S2 S2 S2 S2 S2 S2
10 10 10 10 10 10 10 10

1/
累積錯誤

01

1
1

0/0
S3 S3 S3 S3 S3 S3 S3 S3
11 11 11 11 11 11 11 11
解碼結果: 1 0 0 1 1 0 0

選擇錯誤少的路徑

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

組成碼 迴旋碼(2,1,2)
產生矩陣 1+ D
TC (7,5) = [1 ]
1+ D + D 2

訊息位元長度 1000
訊息區塊數 100
碼率 1/2,1/3,2/3,3/4
解碼方式 BCJR解碼

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

❖Rc=1/2

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

❖Rc=1/3

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

❖Rc=2/3

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

❖Rc=3/4

http://msalab.ncut.edu.tw/
MATLAB模擬-Turbo Code

http://msalab.ncut.edu.tw/
VHDL實現- Convolutional Code 編碼器
❖VHDL實現-Convolutional Code 編碼器
▪ 1.迴旋碼編碼器G(D) = [1 + D + D ,1 + D ] 使用的參數
2 2

B Y(0)

A 暫存器 暫存器
S1(i) S(0) S2(i) S(1)
Y(1)
▪ 2.迴旋碼編碼器-使用VHDL模擬圖

指撥開關

紅燈
綠燈
http://msalab.ncut.edu.tw/
VHDL實現- Convolutional Code 編碼器
▪ 3.迴旋碼編碼器-FPGA燒錄成果
▪ 輸入位元:(00000000)

y[1] y[0]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

OFF = ‘1’
初始狀態
0 0 0 0 0 0 0 0 0 0
ON = ‘0’

第一筆資料 輸入位元

http://msalab.ncut.edu.tw/
VHDL實現- Convolutional Code 編碼器
▪ 4.迴旋碼編碼器-FPGA燒錄成果
▪ 輸入位元:(10000000)

y[1] y[0]
1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0

OFF = ‘1’
初始狀態
0 0 1 0 0 0 0 0 0 0
ON = ‘0’

第一筆資料 輸入位元

http://msalab.ncut.edu.tw/
VHDL實現-Turbo Code
❖VHDL實現-Turbo Code 編碼器
▪ 1.渦輪碼編碼器內部使用的參數
input_data S0~S15

迴旋碼
(ys0~ys15)
yp00 S15 xor 0
yp01 S14 xor 0
yp02 S13 xor S15
yp03 S12 xor S14
S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15 yp04 S11 xor S13
yp05 S10 xor S12 ys0~ys15
yp06 S9 xor S11
yp07 S8 xor S10
yp08 S7 xor S9
S0 S1 S2 S3 yp09 S6 xor S8
(0,0) (0,1) (0,2) (0,3) yp010 S5 xor S7
yp011 S4 xor S6
yp012 S3 xor S5
yp013 S2 xor S4
S4 S5 S6 S7 yp014 S1 xor S3
(1,0) (1,1) (1,2) (1,3) yp015 S0 xor S2

迴旋碼
S8 S9 S10 S11 (yp00~yp015)
(2,0) (2,1) (2,2) (2,3)
yp10 S15 xor 0
yp11 S11 xor 0
S12 S13 S14 S15 yp12 S7 xor S15
(3,0) (3,1) (3,2) (3,3)
yp13 S3 xor S11
yp14 S14 xor S7
yp15 S10 xor S3
yp16 S6 xor S14 yp00~yp015
S0,S4,S8,S12,S1,S5,S9,S13,S2,S6,S10,S14,S3,S7,S11,S15 yp17 S2 xor S10
yp18 S13 xor S6
yp19 S9 xor S2
yp110 S5 xor S13
yp111 S1 xor S9
yp112 S12 xor S5
yp113 S8 xor S1
yp114 S4 xor S12
yp115 S0 xor S8

http://msalab.ncut.edu.tw/
VHDL實現-Turbo Code
▪ 2.渦輪碼編碼器-使用VHDL模擬圖
▪ (1) 渦輪碼編碼器無交錯器模擬結果

http://msalab.ncut.edu.tw/
VHDL實現-Turbo Code
▪ (2) 渦輪碼編碼器具交錯器模擬結果

http://msalab.ncut.edu.tw/
VHDL實現-Turbo Code
▪ 3.渦輪碼編碼器-FPGA燒錄成果
▪ 輸入位元:(0000)
0 0 0 0 0 0 0 0 0 0 0 0

yp3 yp2 yp1 yp0 ys3 ys2 ys1 ys0 S3 S2 S1 S0


具交錯迴旋碼 (1,5) 無交錯迴旋碼 (1,5) 系統位元

S3 S2 S1 S0 初始狀態 S3 S2 S1 S0 初始狀態
0 0 0 0 0 0 0 0 0 0 0 0

OFF = ‘1’
初始狀態

0 0 0 0 0 0
ON = ‘0’

第一筆資料

http://msalab.ncut.edu.tw/
VHDL實現-Turbo Code
▪ 4.渦輪碼編碼器-FPGA燒錄成果
▪ 輸入位元:(1100)
0 0 0 1 1 1 1 1 0 0 1 1

yp3 yp2 yp1 yp0 ys3 ys2 ys1 ys0 S3 S2 S1 S0


具交錯迴旋碼 (1,5) 無交錯迴旋碼 (1,5) 系統位元

S3 S1 S2 S0 初始狀態 S3 S2 S1 S0 初始狀態
0 1 0 1 0 0 0 0 1 1 0 0

OFF = ‘1’
初始狀態
1

0 0 1 1 0 0
ON = ‘0’

第一筆資料

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
❖VHDL實現-Viterbi 解碼
▪ 1.Viterbi解碼內部使用的參數
S00 S10 S20 S30 S40 S50 S60
B00 B10 B20 B30 B40 B50 B60
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0 0/00 C40 S0 0/00 C50 S0 0/00 C60 S0
00 00 00 00 00 00 00 00

B2 1

B3 11

B411
C52 C62

1/
1/111

1/1

1/
1/102

C22 C32 C42

1
1
B
B

1
1
1

S01 S11 S21 S31 S41 S51


2 2 2 2
B2 1 B3 1 2
B4 1 B5/11 B6/11
S1 S1 S1 0/B1 S1 0B/1 S1 0/1 S1 0 S1 0 S1
B
01 01 C12 01 1/ 23 C24 01 1/ 33 C34 01 1/0 43 C44 01 C54 01 01
00 00 0
C26 C36 C46 C56

C11 S12 S22 S32 S42 4 S52


2 4 4 B5 /10
B1 0 B2 0 C21 4
B3 0 C31 B4 10 C41 0
S2 S2 0/1 S2 0/1 S2 0/1 S2 0/ S2 S2 S2
B B B
10 10 1/ 10 1/ 25 C23 10 1/ 35 C33 10 1/0 45 C43 10 10 10
B101 01 01 1
3
S13 26 S23 61 S33 6 S43 56 01 S53
C13 B /01 C25 B3/0 C35 B40/01 C45 B 0/
S3 S3 S3 0 B27 S3 0 B37 S3 B47 S3 S3 S3
11 11 11 1/10 11 1/10 11 1/10 11 11 11

編碼輸入序列: S0 S1 S2 S3 S4 S5 S6

解碼輸出序列: q[2] q[1] q[0] q4[1] q4[0] q6[1] q6[0]

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ 2.Viterbi 解碼-使用VHDL模擬圖
▪ (1)輸入正確輸入序列的Viterbi解碼:

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ (2)輸入錯誤位元輸入序列的Viterbi解碼:

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼

▪ (1)輸入正確輸入序列:(00000000000000)的Viterbi解碼

S00 S10 S20 S30 S40 S50 S60


B00 B10 B20 B30 B40 B50 B60
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0 0/00 C40 S0 0/00 C50 S0 0/00 C60 S0
00 00 00 00 00 00 00 00

B2 1

B3 11

B411
C52 C62

1/
1/111

1/1

1/
1/102

C22 C32 C42

1
1
B
B

1
1
1

S01 S11 S21 S31 S41 S51


2 2 2 2
B2 1 B3 1 2
B4 1 B5/11 B6/11
S1 S1 S1 0/B1 S1 0B/1 S1 0/1 S1 0 S1 0 S1
B4
01 01 C12 01 1/ 23 C24 01 1/ 33 C34 01 1/0 3 C44 01 C54 01 01
00 00 0
C26 C36 C46 C56

C11 S12 S22 S32 S42 4 S52


2 4 4 B5 /10
B1 0 B2 0 C21 4
B3 0 C31 B4/10 C41 0
S2 S2 0/1 S2 0/1 S2 0/1 S2 0 S2 S2 S2
B B3 B 10 10
10 10 1/ 10 1/ 25 C23 10 1/ 5 C33 10 1/0 45 C43 10
B101 01 01 1
3
S13 26 S23 36 S33 6 S43 56 01 S53
C13 B /01 C25 B /01 C35 B40/01 C45 B 0/
S3 S3 S3 0 B27 S3 0 B37 S3 B47 S3 S3 S3
11 11 11 1/10 11 1/10 11 1/10 11 11 11

S0=00 S1=00 S2=00 S3=00 S4=00 S5=00 S6=00


0 0
解碼: 0 0 0 0 0

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼

▪ (2)輸入錯誤輸入序列:(00010000000000)的Viterbi解碼

S00 S10=1 S20=1 S30 S40 S50 S60


B00 B10 B20 B30 B40 B50 B60
S0 0/00 S0 0/00 C10=1 S0 0/00 C20=0 S0 0/00 C30=0 S0 0/00 C40 S0 0/00 C50 S0 0/00 C60 S0
00 00 00 00 00 00 00 00

B2 1

B3 11

B411
C22 C52 C62

1/
1/111

1/1

1/
1/102

C32 C42

1
1
B
B

1
1

C21=2
1

S01 S11 S21=2 S31 S41 S51


2 2 2 2
B2/11 B3 1 2
B4 1 B5/11 B6/11
S1 S1 S1 0B S1 0B/1 S1 0/1 S1 0 S1 0 S1
B
01 01 C12 01 1/ 23 01 1/ 33 C34 01 1/0 43 C44 01 C54 01 01
00 C23 00 0
C36 C46 C56
C26
C31 S52
S12=1 24 C24=1 S22=3 S32 S42 4
2
B1 0 B 0 4
B3 0
4
B4 10 C41 B5 /10
0
S2 S2 0/1 C11=1 S2 0/1 S2 0/1 S2 0/ S2 S2 S2
B B3 C33 B 10 10
10 10 1/ 10 1/ 25 10 1/ 5 10 1/0 45 C43 10
B101 01 01 1
3 C25=1
C13 S13 26 S23=2 36 S33 6 S43 56 01 S53
B / 01 B /01 C35 B40/01 C45 B 0/
S3 S3 S3 0 B27 S3 0 B37 S3 B47 S3 S3 S3
11 11 11 1/10 C27 11 1/10 C37 11 1/10 11 11 11

S0=00 S1=01 S2=00 S3=00 S4=00 S5=00 S6=00


0 0
解碼: 0 0 0 0 0

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼

▪ (1)輸入正確輸入序列:(11011010011100)的Viterbi解碼

S00 S10 S20 S30 S40 S50 S60


B00 B10 B20 B30 B40 B50 B60
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0 0/00 C40 S0 0/00 C50 S0 0/00 C60 S0
00 00 00 00 00 00 00 00

B2 1

B3 11

B411
C52 C62

1/
1/111

1/1

1/
1/102

C22 C32 C42

1
1
B
B

1
1
1

S01 S11 S21 S31 S41 S51


2 2 2 2
B2 1 B3 1 2
B4 1 B5/11 B6/11
S1 S1 S1 0/B1 S1 0B/1 S1 0/1 S1 0 S1 0 S1
B4
01 01 C12 01 1/ 23 C24 01 1/ 33 C34 01 1/0 3 C44 01 C54 01 01
00 00 0
C26 C36 C46 C56

C11 S12 S22 S32 S42 4 S52


2 4 4 B5 /10
B1 0 B2 0 C21 4
B3 0 C31 B4/10 C41 0
S2 S2 0/1 S2 0/1 S2 0/1 S2 0 S2 S2 S2
B B3 B 10 10
10 10 1/ 10 1/ 25 C23 10 1/ 5 C33 10 1/0 45 C43 10
B101 01 01 1
3
S13 26 S23 6 S33 6 S43 56 01 S53
C13 B /01 C25 B3/01 C35 B40/01 C45 B 0/
S3 S3 S3 0 B27 S3 0 B37 S3 B47 S3 S3 S3
11 11 11 1/10 11 1/10 11 1/10 11 11 11

S0=11 S1=01 S2=10 S3=10 S4=01 S5=11 S6=00


0 0 0
解碼: 1 1 1 1

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼

▪ (2)輸入錯誤輸入序列:(11001010011100)的Viterbi解碼

S00 S10 S20=2 S30 S40 S50 S60


B00 B10 B20 B30 B40 B50 B60
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0 0/00 C40 S0 0/00 C50 S0 0/00 C60 S0
00 00 00 00 00 00 00 00

B2 1

B3 11

B411
C52 C62

1/
1/111

1/1 C21 C22=1

1/
1/102

C32 C42

1
1
B
B

1
1
1

S01 S11=1 S21=3 S31 S41 S51


2 2 2 2
B2 1 B3 1 2
B4 1 B5/11 B6/11
S1 S1 S1 0/B1 S1 0B/1 S1 0/1 S1 0 S1 0 S1
B4
01 01 C12=1 01 1 23
/00 01 1/ 33 C34 01 1/0 3 C44 01 C54 01 01
C23=1 00 0
C26 C36 C46 C56

C11 S12 S22=2 S32 S42 4 S52


2 4 4 B5 /10
B1 0 B2 0 4
B3 0 C31 B4 10 C41 0
S2 S2 0/1 S2 0/1 S2 0/1 S2 0/ S2 S2 S2
B B
=

B
10 10 1/ 10 1/ 25 C24=2 10 1/ 35 C33 10 1/0 45 C43 10 10 10
B101 01 01 1
3 6
C13=1 S13=1 6 S23=1 B3 S33 6 S43 56 01 S53
B2/01 0 1 B40/01 B 0/
S3 S3 S3 0 B27 C27=0
C25
S3 0/ C35
S3
C45
S3 S3 S3
B37 B47
11 11 11 1/10 11 1/10 11 1/10 11 11 11

S0=11 S1=00 S2=10 S3=10 S4=01 S5=11 S6=00


0 0 0
解碼: 1 1 1 1

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ 3.渦輪碼編碼器-FPGA燒錄成果 S00 S10 S20 S30
B00 B10 B20
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0
00 00 00 00 00

B2
1/111

1/1
1/102 C22

1/1
C32

1
B

1
1

1
S11 2 S21 S31
B2 1 1
S1 S1 S1 0/1 S1 0/1 S1
01 01 C12 01 1/ C24 01 C34 01
00 1/0
0

B2
C26 C36

3
S01 2 C11 S12 4 S22 S32
B1/10 B2 0 C21
0 C31
S2 S2 0 S2 0/1 S2 0/1 S2
10 10 10 1/ C23 10 1/ C33 10
1 01
B1/01 01

B2
3

5
S13 26 S23 S33
C13 B /01 C25 01
S3 S3 S3 0 S3 0/ C35
S3
11 11 11 1/10 11 1/10 11
B27

編碼輸入序列: S0(0)S0(1) S1(0)S1(1) S2(0)S2(1) S3(0)S3(1)


解碼輸出序列: Q(0) Q(1) Q2 Q3
OFF = ‘1’
D11 D12 D13 D14

ON = ‘0’
Q3 Q2 Q(1) Q(0)
S3(1)S3(0) S2(1)S2(0) S1(1)S1(0) S0(1)S0(0)

Viterbi 解碼輸出 輸入資料

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ (1)輸入正確輸入序列的Viterbi解碼(00000000) S00 S10 S20 S30
B00 B10 B20
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0
00 00 00 00 00

B2
1/111

1/1
1/102 C22

1/1
C32

1
B

1
1

1
S11 2 S21 S31
B2 1 1
S1 S1 S1 0/1 S1 0/1 S1
01 01 C12 01 1/ C24 01 C34 01
00 1/0
0

B2
C26 C36

3
S01 2 C11 S12 4 S22 S32
B1/10 B2 0 C21
0 C31
S2 S2 0 S2 0/1 S2 0/1 S2
10 10 10 1/ C23 10 1/ C33 10
1 01
B1/01 01

B2
3

5
S13 26 S23 S33
C13 B /01 C25 01
S3 S3 S3 0 S3 0/ C35
S3
11 11 11 1/10 11 1/10 11
B27

編碼輸入序列: 00 00 00 00
解碼輸出序列: 0 0 0 0

OFF = ‘1’
D11 D12 D13 D14
0 0 0 0 0 0 0 0
ON = ‘0’
0 0 0 0
S3(1)S3(0) S2(1)S2(0) S1(1)S1(0) S0(1)S0(0)

Viterbi 解碼輸出 輸入資料

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ (2)輸入錯誤位元輸入序列Viterbi解碼(00000001)
S00=1 S10=1 S20 S30
B00 B10 B20
S0 0/00 S0 0/00 C10=0 S0 0/00 C20 S0 0/00 C30 S0
00 00 00 00 00

B2
1/111

1/1
1/1 02 C22

1/1
C32

1
1

1
B
1

1
C1
S11=2 2 S21 S31
B2 1

1=
S1 0/1 1
S1 S1 0/1

2
S1 S1
01 01 01 1/ C24 01 1/ C34 01
00 00

B2
1 C26 C36

3
2=
S01=1 12 C1 S12=3 4 S22 S32
B 0 B2 0 C21 C31
S2 S2 0/1 S2 0/1 S2 0/1
0
S2
10 10 1 10 1/ C23 10 1/ C33 10
B1/01 01 01

B2
3

5
C1
3= S13=2 26 S23 S33
1 B /01 C25 01
S3 S3 S3 0 S3 0/ C35
S3
11 11 11 1/10 11 1/10 11
B27

編碼輸入序列: 10 00 00 00
解碼輸出序列: 0 0 0 0
OFF = ‘1’
D11 D12 D13 D14
1 0 0 0 0 0 0 0
ON = ‘0’
0 0 0 0
S3(1)S3(0) S2(1)S2(0) S1(1)S1(0) S0(1)S0(0)

Viterbi 解碼輸出 輸入資料

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ (3)輸入正確輸入序列的Viterbi解碼(00000011)
S00 S10 S20 S30
B00 B10 B20
S0 0/00 S0 0/00 C10 S0 0/00 C20 S0 0/00 C30 S0
00 00 00 00 00

B2
1/111

1/1
1/102
C22

1/1
C32

1
B

1
1

1
S11 2 S21 S31
B2 1 1
S1 S1 S1 0/1 S1 0/1 S1
01 01 C12 01 1/ C24 01 1/ C34 01
00 0 0

B2
C26 C36

3
S01 2 C11 S12 4 S22 S32
B1/10 B2 0 C21
0 C31
S2 S2 0 S2 0/1 S2 0/1 S2
10 10 10 1/ C23 10 1/ C33 10
1 01
B1/01 01

B2
3

5
S13 26 S23 S33
C13 B /01 C25 01
S3 S3 S3 0 S3 0/ C35
S3
11 11 11 1/10 11 1/10 11
B27

編碼輸入序列: 00 00 00 11
解碼輸出序列: 0 0 0 1
OFF = ‘1’
D11 D12 D13 D14
1 1 0 0 0 0 0 0
ON = ‘0’
1 0 0 0
S3(1)S3(0) S2(1)S2(0) S1(1)S1(0) S0(1)S0(0)

Viterbi 解碼輸出 輸入資料

http://msalab.ncut.edu.tw/
VHDL實現-Viterbi 解碼
▪ (4)輸入錯誤位元輸入序列Viterbi解碼(10000011)
S00=1 S10=1 S20 S30
B00 B10 B20
S0 0/00 S0 0/00 C10=0 S0 0/00 C20 S0 0/00 C30 S0
00 00 00 00 00

B2
1/111

1/1
1/102
C22

1/1
C32

1
B

1
1

1
C11=2 S11=2 2 S21 S31
B2 1 1
S1 S1 S1 0/1 S1 0/1 S1
01 01 01 1/ C24 01 1/ C34 01
00 0 0

B2
C26 C36

3
S01=1 C12=1
2 S12=3 4 S22 S32
B1 0 B2 0 C21 C31
S2 S2 0/1 S2 0/1 S2 0/1
0
S2
10 10 1 10 1/ C23 10 1/ C33 10
B1/01 01 01

B2
3 C13=1

5
S13=2 26 S23 S33
B /01 C25 01
S3 S3 S3 0 S3 0/ C35
S3
11 11 11 1/10 11 1/10 11
B27

編碼輸入序列: 10 00 00 11
解碼輸出序列: 0 0 0 1
OFF = ‘1’
D11 D12 D13 D14
1 1 0 0 0 0 0 1
ON = ‘0’
1 0 0 0
S3(1)S3(0) S2(1)S2(0) S1(1)S1(0) S0(1)S0(0)

Viterbi 解碼輸出 輸入資料

http://msalab.ncut.edu.tw/

You might also like