Tải bản đầy đủ (.pdf) (59 trang)

Thiết kế modul mã hoá và giải mã mã chập

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (972.75 KB, 59 trang )

1
LỜI MỞ ĐẦU
Mã hoá và giải mã đã xuất hiện từ rất sớm đặc biệt là trong quân sự. Các yêu
cầu với một loại mã là phải có tính bảo mật cao, khả năng phát hiện và sửa lỗi trong
qua trình truyền. Để tìm ra được một loại mã thực sự hiệu quả là không đơn giản.
Trong các loại mã mã chập ra đời từ những năm 1955 cùng thời với nhiều loại mã như
mã vòng, mã BCH Mã chập là loại mã có khả năng khôi phục dữ liệu rất tốt, song khi
mới ra đời do chưa tìm được giải thuật giải mã khả thi nên ít được quan tâm. Mãi đến
năm 1967 Viterbi đã đưa ra một giải thuật giải mã tối ưu gọi là giải thuật Viterbi. Với
giải thuật Viterbi cùng với sự tiến bộ KHKT với công nghệ sản xuất các mạch tổ hợp
cỡ lớn và sự phát triển của công nghệ sản xuất bộ nhớ, mã chập ngày càng được ứng
dụng rộng rãi trong công nghệ viễn thông.
Mặc dù đã xuất hiện từ rất lâu song mã hoá vẫn là một môn học khá mới. Với
mong muốn tạo một bộ thí nghiệm về mã hoá và giải mã phục vụ cho việc học tập, đề
tài : nghiên cứu “ Thiết Kế Modul Mã hoá và Giải mã Mã Chập“. Nội dung của đề
tài là nghiên cứu và hiện thực thuật toán mã hoá mã chập và giải thuật giải mã của
Viterbi.
Mặc dù có nhiều cố gắng, nhưng do kiến thức hạn chế và thời gian thực hiện đề
tài không nhiều nên đề tài vẫn còn nhiều hạn chế và sai sót. Em rất mong nhận được sự
đánh giá nhận xét của các thầy giáo và các bạn.
Nhân đây em muốn nói lời cảm ơn sâu sắc tới các thầy giáo trong khoa đặc biệt
là thầy giáo hướng dẫn Ths Nguyễn Phương Lâm đã nhiệt tình quan tâm và giúp đỡ em
hoàn thành đồ án. Đồng thời em cũng muốn gửi lời cảm ơn tới gia đình và các bạn đã
động viên, giúp đỡ em trong quá trình hoàn thành đồ án tốt nghiệp.
Hải Phòng, ngày 9 tháng 12 năm 2008
Sinh viên : Vũ Xuân Hiệp
2
Chương I. TỔNG QUAN VỀ MÃ HOÁ
I.1. CÁC KHÁI NIỆM CƠ BẢN VỀ MÃ HOÁ
I.1.1.Định nghĩa mã hoá
Mã hoá nguồn tin X theo bộ mã M là phép ánh xạ 1:1 biến đổi một tin x


i

X
thành một tổ hợp các kí hiệu của bộ mã M.
Nguồn X = {x
1
,x
2
,x
3
, ,x
n
}
Bộ mã M = {m
1
,m
2
, ,m
k
}
Trong đó k là cơ số của bộ mã. Nếu k=2 là mã nhị phân, k=10 là mã thập phân,
k=8 là mã bát phân
Một tin x
i
được mã hoá thành x
i

m
r1
m

r2
m
rL
Trong đó L là số kí hiệu của bộ mã dùng để biểu diễn x
i
, đồng thời L cũng là độ
dài của từ mã.
Ví dụ:
Ta có nguồn tin X = {x
1
,x
2
,x
3
,x
4
}.
Nguồn này được mã hoá với bộ mã nhịu phân M={0,1}.
Mã hoá x
1
= 00, x
2
= 01, x
3
= 11, x
1
= 10.
I.1.2. Một số khái niệm cơ bản về mã hoá
a) Chiều dài từ mã
Chiều dài từ mã là số kí hiệu của bộ mã dùng để mã hoá cho từ mã đó. Ví dụ: từ

mã 10101110 được mã hoá bằng 8 kí hiệu của bộ mã nhị phân nên có chiều dài là 8.
b) Trọng lượng từ mã
Trọng lượng từ mã là tổng số các kí hiệu khác 0 của từ mã. Kí hiêu: w(x
i
) là
trọng lượng của từ mã x
i
Ví dụ: từ mã 01010111 có trọng lượng là 5.
c)Quãng cách mã
Quãng cách mã là số kí hiệu khác nhau tính theo vị trí tương ứng của 2 từ mã có
chiều dài bằng nhau. Kí hiệu quãng cách mã d(x
1
,x
2
) = w(x
1

x
2
). Trong đó

là phép
toán cộng modul 2.
3
Ví dụ: có 2 từ mã x
1
= 01011011, x
2
= 10101110
Quãng cách mã d(x

1
,x
2
) = 2.
Quãng cách của một bộ mã được dịnh nghĩa là quãng cách mã tối thiểu của 2 từ mã bất
kì của bộ mã.
I.2.MỤC ĐÍCH MÃ HOÁ VÀ CÁC ĐIỀU KIỆN KHI LẬP M Ã
Một số mục đích mà việc mã hoá nhằm tới ;
- Phối hợp nguồn tin và nơi nhận tin
- Tăng hiệu suất thông tin.
- Tăng độ tin cậy truyền tin.
- Bảo mật thông tin.
Khi thiết lập một mã nào đơ ta cần tuân theo một số điều kiện sau:
a)Điều kiện chung.
Đảm vảo tính đơn trị, nghĩa là khi nhận được một dãy tín hiệu thì phải tách ra
được thành từng từ mã một và phép tách này phải duy nhất.
b) Điều kiện riêng.
Đối với phương pháp xây dựng mã thống kê tối ưu (mã nén) thì phải làm sao
cho độ dài trung bình của mã là nhỏ nhất, còn đối với mã có thể phát hiện và sửa sai thì
phải cho phép phát hiện và sửa được lỗi càng nhiều càng tốt.
I.3.CÁC CÁCH PHÂN LO ẠI MÃ
Có nhiều cách để phân loại mã, dưới đây là một số phương pháp tiêu biểu [1]:
I.3.1. Phân loại theo trọng lượng của từ mã.
- Mã có trọng lượng không đổi
- Mã có trọng lượng thay đổi
I.3.2. Phân loại theo chiều dài của từ mã.
- Mã có chiều dài không đổi
- Mã có chiều dài thay đổi
4
I.3.3. Phân loại theo hiệu suất thông tin

- Mã tối ưu
- Mã chưa tối ưu
I.3.4. Phân loại theo độ tin cậy
-Mã có khả năng phát hiện và sửa sai
-Mã không có khả năng phát hiện và sửa sai
I.3.5. Phân loại theo cơ số của bộ mã
Có thể xây dựng bộ mã với cơ số bất kì, trong đó mã nhị phân là phổ biến nhất.
I.3.6. Phân loại theo các cột số trong từ m ã
- Mã có trọng số: Thứ tự các cột số có ảnh hưởng đến nội dung từ mã.
- Mã khôg có trọng số: Thứ tự các cột số không ảnh hưởng đến nội dung từ mã.
I.3.7. Phân loại theo mục đích sử dụng m ã
- Mã số.
- Mã kí tự.
I.3.8. Phân loại theo quãng cách mã giữa hai từ mã kế cận
- d

const : mã vòng.
- d = const : mã Gray, mã Johnson.
I.3.8. Phân loại theo cách tạo mã.
Trong việc truyền tin có hai loại mã được sử dụng phổ biến là mã khối (Block
Code) và mã chập (Convolutional Code).
a) Mã khối
Bộ mã hoá của mã khối sẽ chia dòng thông tin thành những khối tin có k bit.
Mỗi tin được biẻu diễn thành một khối k thành phần nhị phân u = {u
1
,u
2
, ,u
k
}, u được

gọi là vector thông tin. Có tổng cộng 2
k
vector thông tin khác nhau. Bộ mã hoá sẽ
chuyển vector thông tin u thành một bộ n thành phần v = {v
1
,v
2
, ,v
n
}, v được gọi là từ
mã.Như vậy ứng với 2
k
vector thông tin sẽ có 2
k
từ mã khác nhau. Tập hợp có 2
k
từ mã
có chiều dài n được gọi là một mã khối (n,k).
5
Gọi R = k/n là tỉ số mã. R chính là số bít thông tin đưa vào bộ giải mã trên số bít
được truyền. Do n bít ra chỉ phụ thuộc vào k bit thông tin vào nên bộ mã hoá và giải
mã không có nhớ và có thể thực hiện được bằng mạch logic tổ hợp.
b) Mã chập
Bộ mã hoá của mã chập giống như bộ mã hoá của mã khối, cũng nhận k bít
thông tin u và tạo thành từ mã v là những khối n bít. Nhưng n bít của từ mã v không
chỉ phụ thuộc vào k bít thông tin mà còn phụ thuộc vào m bít thông tin trước đó. Do đó
bộ mã hoá có bộ nhớ m bít. Tập hợp dòng mã hoá n bit tạo bởi k bít thông tin và m bít
nhớ được gọi là mã chập (n,k,m). Tỉ số R=k/n được gọi là tốc độ lập mã. Do tính có
nhớ của mã chập nên nó phải được thực hiện bằng mạch dãy.
6

CHƯƠNG II. MÃ HOÁ VÀ GIẢI MÃ MÃ CHẬP
II.1.TỔNG QUAN VỀ MÃ CHẬP
II.1.1.Cấu trúc bộ mã hoá
Cũng giống như nhiều loại mã sửa lỗi khác, mã hoá mã chập đưa vào dòng dữ
liệu một lượng dư thừa bằng cách sử dụng thanh ghi dịch tuyến tính. Sơ đồ của một bộ
mã hoá mã chập được cho trong hình vẽ sau:
Hình 2.1.Sơ đồ bộ mã hoá mã chập (3,2,3)
Trong sơ đồ trên các có kí hiệu D biểu thị một khâu trễ.
Các bít thông tin được đưa lần lượt vào thanh ghi dịch, các bít mã hoá được tạo
bởi các bộ cộng modul 2 giữa bít vào và các bít lưu trong thanh ghi dịch. Đường nối
giữa bộ cộng modul 2 và các bít trong thanh ghi dịch được cho bởi các đa thức sinh.
II.1.2.Các tham số của bộ mã hoá mã chập
Một bộ mã hoá mã chập thường được xác định thông qua các tham số (n,k,m).
trong đó :
n: số bít ra tại tại một thời điểm
k: số bít vào bộ mã hoá tại tại một thời điểm
m: độ dài lớn nhất của thanh ghi dịch.
D
D
D
D
D
+
+
+
X
1
X
2
C

1
C
2
C
3
7
Tốc độ lập mã:
k
r
n

Độ dài ràng buộc (Constrain Lenght) K. Đây là một thông số rất quan trọng của
bộ mã chập. Với bộ tạo mã, độ dài ràng buộc xác định có bao nhiêu bít tại các thời
điểm trước có ảnh hưởng đến bít hiện tại. Với bộ giải mã, độ dài ràng buộc xác định
khi nào có thể quyết định được bít giải mã. Trong mã chập, độ dài ràng buộc càng lớn
thì khả năng sửa lỗi càng tốt. Độ dài ràng buộc được tính theo biểu thức:
K = m+1
Ứng với tốc độ lập mã r=1/2 ta có một số đa thức sinh [3]:
Độ dài ràng buộc
K
G
1
(D)
G
2
(D)
G
1
(D) (HEX)
G

2
(D) (HEX)
3
1 + D
2
1 + D + D
2
0x05
0x07
4
1 + D + D
3
1 + D + D
2
+ D
3
0x0B
0x0F
5
1 + D
3
+ D
4
1 + D + D
2
+ D
4
0x19
0x17
6

1 + D
2
+ D
4
+ D
5
1 + D + D
2
+ D
3
+ D
5
0x35
0x2F
7
1 + D
2
+ D
3
+ D
5
+ D
6
1 + D + D
2
+ D
3
+ D
6
0x6D

0x4F
8
1 + D
2
+ D
5
+ D
6
+ D
7
1 + D + D
2
+ D
3
+ D
4
+ D
7
0XE5
0x9F
9
1 + D
2
+ D
3
+ D
4
+ D
8
1 + D + D

2
+ D
3
+ D
5
+ D
7
+ D
8
8
Với bộ mã hoá trong hình 2.1 ta có thể xác định các tham số: n = 3 , k = 2 , m = 3. Tốc
độ mã r = 2/3 . Độ dài ràng buộc K = 4.
II.2. CÁC PHƯƠNG PHÁP BI ỂU DIỄN MÃ CHẬP
Bộ mã của mã chập có thể được biểu diễn bằng các phương pháp sau:
- Đồ hình trạng thái (state Diagram)
- Đồ hình cây (Tree Diagram)
- Đồ hình đồ hình lưới (Trellis Diagram)
Ví dụ ta có sơ đồ bộ mã hoá như sau:
Hình vẽ 2.2. Sơ đồ bộ mã hoá mã chập (2,1,2)
II.2.1. Đồ hình trạng thái
Đồ hình trạng thái của mã (2,1,2) cho trong hình 2.1 được biểu diễn như hình
vẽ dưới. Các kí hiệu trong mỗi vòng tròn biểu diễn trạng thái hi ện thời của thanh ghi
dịch, tại mỗi thời điểm bộ mã hoá sẽ ở một trong số các trạng thái đó. Các đường nối
biểu diễn sự chuyển đổi trạng thái khi có một bít vào. Các kí hiệu ghi trên các đường
nối biểu diễn bít vào/ các bít ra của bộ mã hoá, ví dụ: kí hiệu 0/10 ghi trên đường nối
từ trạng thái 10 đến trạng thái 01 nghĩa là khi có bít 0 vào bộ mã hoá và trạng thái
thanh ghi dịch là 10 thì trạng thái của thanh ghi dịch sẽ chuyển sang 01 và cặp bít sau
mã hoá là 10.
D
D

X
1
+
+
C
2
C
1
MUX
9
Hình 2.3a.Đồ hình trạng thái của bộ mã (2,1,2)
Thông thường, bộ mã hoá sẽ bắt đầu từ trạng thái 0. Lấy 1 ví dụ, khi dãy bít vào
bộ mã hoá là x = { 1011} (với trạng thái đầu của thanh ghi dịch là 0) thì dãy chuyển
đổi trạng thái là s = {00,10,01,10,11} và dãy bít sau mã hoá là c = {11,10,00,01}. Hình
dưới biểu diễn sự chuyển đổi trạng thái của bộ mã hoá với dãy bít vào cho trên (đường
in đậm.
Hình 2.3b. Sự chuyển trạng thái với chuỗi bit vào x = { 1011}
II.2.2. Đồ hình cây.
Đồ hình dạng cây biểu diễn theo thời gian tất cả các khả năng mà ta có thể đi tới
theo chiều sâu của các nhánh.
10
Hình 2.4. Đồ hình cây của bộ mã hoá (2,1,2)
Trong đồ hình cây, các đường nét liền biểu diễn nhánh khi có bít vào là 0, các
đương nét đứt biểu diễn nhành khi có bít 1 vào. Và các bít sau mã hoá được biểu diễn ở
trên mỗi nhánh cây. Với một chuỗi bít vào sẽ xác định một đường đi nhất định từ trái
sang phải trên đồ hình. Ví dụ với chuỗi bít vào x = {1011} (với trạng thái đầu của
thanh ghi dịch là 0) . Ta sẽ thực hiện việc dịch chuyển trên đồ hình như sau: đầu tiên
tại nhánh 1 ta đi xuống, cặp bít mã hoá là 11 và trạng thái thanh ghi dịch l à 10. Tiếp
theo ta thu được bít 0, do đó ta tiếp tục đi lên , cặp bít mã hoá là 10 và trạng thái thanh
ghi dịch là 01. Bít thu được tiếp theo là 1, ta đi xuống, cặp bít mã hoá là 00 và trạng

thái thanh ghi dịch là 10. Cuối cùng ta thu được bít 1, ta đi xuống, cặp bít mã hoá là 00
và trạng thái thanh ghi dịch l à 10. Cuối cùng chuỗi thông tin ra là: c = {11,10,00,00}.
II.2.3. Đồ hình lưới
Đồ hình lưới phức tạp hơn các dạng đồ hình khác, tuy nhiên nó lại được sử dụng
nhiều hơn vì nó thể hiện được sự thay đổi theo thời gian của chuỗi bít vào. Đồ hình
lưới biểu diễn tất cả các trạng thái chuyển đổi có thể xảy ra tại mỗi thời điểm. Trong đó
11
trục x là trục thời gian tăng dần, và trục y biểu diễn các trạng thái của bộ mã hoá. Mỗi
khi thu được một bít ta sẽ dịch chuyển đến một trạng thái mới theo chiều tăng dần của
trục thời gian. Đồ hình lưới dưới đây biểu diễn cho bộ tạo mã trên hình 2.1 với 4 bit
vào
Hình 2.5.a. Đồ hình lưới của bộ tạo mã (2,1,2)
Các kí hiệu trên các đường nối có dạng (x/c), ví dụ (1/01) nghĩa là sự chuyển
trạng thái đó khi có bít vào là 1 và cặp bít ra bộ mã hoá là 01.
Việc tạo các bít mã hoá sử dụng đồ hình lưới rất đơn giản. Tại mỗi thời điểm khi
có bít vào là 0 ta sẽ đi lên đến thời điểm tiếp, và khi thu được bít 1 ta sẽ đi xuống đến
thời điểm tiếp. Giả sử có chuỗi bít vào x = {1011} ta có sự chuyển đổi trạng thái như
trong hình dưới. Các đường nét đậm biểu diễn sự chuyển đổi trạng thái khi có bít vào.
Hình 2.5.b.Đồ hình lưới của bộ tạo mã (2,1,2) với chuỗi bít vào 1011
12
II.3. CÁC PHƯƠNG PHÁP GI ẢI MÃ MÃ CHẬP
Có một số phương pháp giải mã mã chập, chúng được gộp lại thành 2 phương
pháp chính:
- Giải mã theo từng chuỗi (Sequential Decoding) dựa vào giải thuật của Fano
- Giải mã dựa vào kết quả so sánh sự giống nhau giữa các từ mã (Maximmum
Likely-hood Decoding), dựa vào giả thuật của Viterbi.
Cả 2 phương pháp trên đều có chung 1 ý tưởng, được trình bày qua ví dụ sau:
Giả sử ta gửi 3 bít qua bộ mã hoá với tốc độ mã ½, ta sẽ thu được 6 bít. Sau khi
truyền đi, tại phía thu ta thu được 6 bít nhưng ta chưa biết 6 bít đó có bị lỗi hay không.
Nếu các bít thu được có lỗi ta sẽ nhận được tổ hợp của 6 bít. Ta biết rằng với sự hoán

vị của 3 bít đầu vào bộ mã hoá ta sẽ được 8 khả năng của chuỗi đầu ra và mỗi một
trong số đó lại có một bản đồ mã riêng (đường đi trong đồ hình lưới). Nhiệm vụ của bộ
giải mã là phải xác định chuỗi nào đã được gửi đi.
Giả sử ta thu được chuỗi 111100, bây giờ ta sẽ so sánh chuỗi thu được với các
chuỗi có thể được tạo ra bởi bộ mã hoá khi có 3 bit vào và xác định xem chúng khác
nhau bao nhiêu bit (chính là khoảng cách Hamming giữa các từ mã).
Ta có bảng sau:
Chuỗi bít vào
Chuỗi ra đúng từ bộ
mã hoá
Chuỗi thu được
Khoảng cách
Hamming
000
000000
111100
4
001
000011
111100
6
010
001111
111100
4
011
001100
111100
2
100

111110
111100
1
101
111101
111100
1
110
110001
111100
3
111
110010
111100
3
13
Ta thấy rằng từ mã thu được không thuộc từ mã nào trong bảng trên. Ta sẽ
xác định từ mã đúng như thế nào? Ta có 2 cách :
- Ta sẽ chọn 1 từ mã trong bảng trên có khoảng cách Hamming nhỏ nhất, hoặc
- Ta sẽ tìm tính tương quan giữa các từ mã có thể thu được với từ mã thu được
và chọn ra từ mã có tính tương quan lớn nhất là từ mã đúng.
Trong thủ tục thứ nhất ta gọi là thủ tục giải mã quyết định cứng (hard decision
decoding ), thủ tục thứ hai ta gọi là thủ tục giải mã quyết định mềm (soft decision
decoding ). Nhưng nếu chỉ dựa vào số bít khác nhau (khoảng cách hamming) giữa
chuỗi thu được và chuỗi dự đoán ta cũng chưa thể có câu trả lời chính xác ngay từ mã
nào là từ mã đúng, vì trong bảng trên ta thấy có đến 2 chuỗi có cùng khoảng cách
Hamming là 1. Hơn nữa khi độ dài chuỗi bít tăng thì số lượng phép tính sẽ tăng rất lớn
vì thế phương pháp này sẽ không hiệu quả trong thực tế. Ta cần có 1 phương pháp
khác hiệu quả hơn và cho kết qủa chính xác hơn.
Nếu ta thu được bản tin có độ dài s , số khả năng của chuỗi thu đúng là 2

s
. Làm
thế nào để xác định được bản tin đúng mà không cần phải kiểm tra 2
s
khả năng, đó
chính là ý tưởng của thuật toán giải mã.
II.3.1.Giải mã theo từng chuỗi (Sequential D ecoding)
Đây là 1 trong những phương pháp giải mã chập. Phương pháp này được đề
xuất lần đầu bởi Wozencraft và được tối ưu bởi Fano.
Phương pháp giải mã theo chuỗi được mô tả rõ nhất thông qua phương pháp
loại suy. Tại mỗi thời điểm ta có nhiều nút để lựa chọn, và mỗi hướng triển khai sẽ có
một giới hạn (Landmark). Nhưng khi chọn một hướng ta lại thường khó nhận ra giới
hạn của nó nên nhiều khi ta đã đi sai hướng. Mỗi khi nhận thấy đã đi sai hướng ta sẽ
quay trở lại điểm (nút) mà tại đó ta nhận thấy giới hạn và lặp lại qui trình trên đến khi
tìm thấy hướng đi đúng. Số lần lặp lại tuỳ thuộc vào độ chính xác của mỗi hướng đi
được chọn. Trong trường hợp số lỗi trong chuỗi thu ít, giải thuật này sẽ nhanh chóng
cho ra chuỗi từ mã đúng. Ta dễ dàng nhận thấy được nhược điểm của phương pháp này
14
là “làm thế nào để biết được giới hạn ?”. Tuy nhiên đây lại là phương pháp kh ả thi tại
thời điểm đó.
II.3.2. Thuật toán giải mã Viterbi (VA)
Thuật toán Viterbi giải mã mã chập dựa vào sự giống nhau nhất giữa các chuỗi
(Maximum Likely-hood). Theo phương pháp n ày ta sẽ giới hạn số đường dẫn tại từng
thời điểm. Nguyên tắc để giới hạn số lựa chọn là :
- Các lỗi xuất hiện không có chu kì, và xác suất lỗi nhỏ.
- Xác suất xuất hiện các lỗi cụm nhỏ hơn nhiều so với các lỗi đơn, các lỗi phân
bố ngẫu nhiên.
Giải thuật Viterbi thực hiện trên toàn bộ chuỗi thu được. Bộ giải mã sẽ tính và
tạo ma trận của các đường dẫn, cơ sở của việc quyết định sẽ dựa vào ma trận này. Tất
cả các đường dẫn được tính toán cho đến khi 2 đường dẫn gặp nhau. Sau đó ta sẽ giữ

lại nhánh có giá trị nhỏ hơn, đồng thời loại bỏ nhánh có giá trị lớn hơn. Đường dẫn
được chọn gọi là Survivors path (đường dẫn còn lại).
Ta thấy với giải thuật Viterbi sẽ có một khoảng thời gian trễ để tạo ma trận các
đường dẫn, và cũng cần có một bộ nhớ khá lớn_điều n ày khó có thể đáp ứng được vào
những năm 1967 khi m à Viterbi đưa giả giải thuật này. Tuy nhiên điều đó sẽ tạo thuận
tiện cho việc nhận ra ‘giới hạn’ của mỗi đường dẫn và thực hiện lại tại nút đó. Do có
những hạn chế về mặt kĩ thuật nh ư đã kể trên mà vào thời điểm đó giải thuật giải m ã
của Viterbi khó có thể triển khai trên thực tế.
15
CHƯƠNG III . THUẬT TOÁN GIẢI MÃ VITERBI
III. 1. CƠ SỞ TOÁN HỌC CỦA GIẢI THUẬT VITERBI
III.1.1.Thuật toán giải mã Viterbi quyết định cứng (Hard_Decison Viterbi
Algorithm-HDVA)
Với mã hoá mã chập, dòng bít vào là x sẽ cho chuỗi thông tin ra l à c. Chuỗi bít c
sẽ được phát đi qua kênh thông tin có nhiễu và khi đến phía giải mã sẽ thu được chuỗi
bit r.
Nhờ tính có nhớ của mã chập nên phía giải mã có thể căn cứ vào các từ mã thu
được tại các thời điểm trước đó để dự đoán ra từ mã sẽ thu được tại thời điểm hiện tại,
gọi là từ mã dự đoán y.
Thuật toán Viterbi sẽ đánh giá mức độ giống nhau ( Maximium Likelihood
ML) giữa chuỗi dự đoán y và chuỗi thu được r dựa trên xác xuất có điều kiện p(r|y),
nghĩa là xác suất thu được chuỗi r với điều kiện giải m ã được chuỗi y. Chuỗi y là 1
trong số những chuỗi giải mã có thể có. Hình vẽ sau sẽ mô tả kiến trúc của hệ thống :
Hình 3.1.1. Sơ đồ hệ thống truyền tin sử dụng m ã chập.
Với tốc độ mã r, số đầu vào bộ mã hoá tại một thời điểm l à k bít, và đầu ra là n
bít song song, chu ỗi bít vào sẽ được kí hiệu nh ư sau:
x={x
0
(1)
,x

0
(2)
, ,x
0
(k)
,x
1
(1)
, ,x
1
(k)
, ,x
L+m-1
(1)
, ,x
L+m-1
(k)
} , chuỗi bít ra bộ mã hoá là:
c={c
0
(1)
,c
0
(2)
, ,c
0
(n)
,c
1
(1)

, ,c
1
(n)
, ,c
L+m-1
(1)
, ,c
L+m-1
(n)
}
Convolutional
Encoder
Chanel
Viterbi
Decoder
Noise
x
r
y
c
16
trong đó L là độ dài chuỗi bít vào, m là độ dài lớn nhất của thanh ghi dịch. Các chỉ số
dưới chỉ các điểm thời gian, các chỉ số tr ên chỉ số thứ tự của các bít vào- ra tại thời
điểm đó.
Với điều kiện đầu là có m bít ở cuối chuỗi bít vào để đưa bộ mã hoá về trạng
thái toàn 0, điều đó cho phép bộ m ã hoá bắt đầu và kêt thúc đều ở trạng thái 0. chuỗi
thu được được mô tả như sau:
r={r
0
(1)

,r
0
(2)
, ,r
0
(n)
,r
1
(1)
, ,r
1
(n)
, ,r
L+m-1
(1)
, ,r
L+m-1
(n)
} và chuỗi sau giải mã là:
y={y
0
(1)
,y
0
(2)
, ,y
0
(n)
,y
1

(1)
, ,y
1
(n)
, ,y
L+m-1
(1)
, ,y
L+m-1
(n)
}
Trong giải thuật ML, thuật toán Viterbi sẽ lựa chọn y sao cho xác suất p(r|y) lớn
nhất. Giả sử kêng không có nhớ, và nhiễu tác động độc lập với các bít khác nhau. Theo
lí thuyết xác suất, xác suất của sự kiện độc lập sẽ b ằng tích của các sự kiện, do đó :
1
(1) (1) (2) (2) ( ) ( )
0
( | ) ( | ) ( | ) ( | )
L m
n n
i i i i i i
i
p r y p r y p r y p r y
 

 

 

=

1
( ) ( )
0 1
( | )
L m n
j j
i i
i j
p r y
 
 
 
 
 
 
Biểu thức trên gọi là hàm Likelihood giữa chuỗi y với điều kiện thu đ ược chuỗi
r. Việc đánh giá giá trị lớn nhất của p(r|y) t ương đương với việc đánh giá giá trị l ớn
nhất của log(p(r|y) ), bởi v ì logarit là hàm đơn điệu tăng, do đó hàm Likelihood còn
được định nghĩa như sau:
1
( ) ( )
0 1
log ( | ) log ( | )
L m n
j j
i i
i j
p r y p r y
 
 

 

 
 
 
Để đơn giản trong tính toán ta định nghĩa ma trận bit (bit metric) nh ư sau:
 
( ) ( ) ( ) ( )
| log ( | )
j j j j
i i i i
M r y a p r y b
 
 
 
Trong đó a và b là số nguyên dương nhỏ, giá trị của a,b được chọn theo kênh nhị phân
đối xứng (BSC) hoặc theo thuật toán giải m ã quyết định cứng. Hình sau minh hoạ kênh
BSC.
17
Hình 3.1.2. Mô hình kênh BSC
Với kênh BSC giá trị a,b được chọn theo 2 cách khác nhau. Thôn g thường a,b được
chọn như sau:
1
log log(1 )
a
p p

 

log(1 )b p  

Ma trận bit khi đó sẽ là:
 
( ) ( ) ( ) ( )
1
| log ( | ) log(1 )
log log(1 )
j j j j
i i i i
M r y p r y p
p p
 
  
 
 
Trong kênh nhị phân
( ) ( )
( | )
j j
i i
p r y
chỉ có thể nhận 1 trong 2 giá trị p hoặc (1-p). Bảng
sau mô tả ma trận bit theo cách thông thường :
Ma trận bít cho ta biết giá trị (trọng số) của bít thu được và bít sau khi giải mã.
Ví dụ, nếu bít giải mã là y
i
(j)
= 0 và bít thu được là r
i
(j)
= 0 thì giá trị sẽ là

 
( ) ( )
| 1
j j
i i
M r y 
. Ta có nhận xét, nó có quan hệ giống như với khoảng cách Hamming
(j) ( )
( | )
j
i i
M r y
Bít thu vào
( )
0
j
i
r 
Bít thu vào
( )
1
j
i
r 
Bít giải mã
( )
0
j
i
y 

0
1
Bít giải mã
( )
1
j
i
y 
1
0
18
do đó ma trận trên còn gọi là ma trận khoảng cách Hamming. Thuật toán Viterbi s ẽ lựa
chọn chuỗi mã y trong đồ hình lưới với giá trị nhỏ nhất/khoảng cách Hamming quan h ệ
với chuỗi thu được r.
Trong trường hợp khác a, b được định nghĩa như sau:
1
log(1 ) log
a
p p

 

logb p 
kết qua là ma trận bit sẽ như sau :
 
( ) ( ) ( ) ( )
1
| log ( | ) log
log(1 ) log
j j j j

i i i i
M r y p r y p
p p
 
 
 
 
bảng sau cho thấy ma trận bit theo cách chọn này:
Khi đó thuật toán Viterbi sẽ lựa chọn chuỗi y trong đồ hình lưới sao cho có giá
trị khoảng cách Hamming l ớn nhất với chuỗi r thu được.
Từ ma trận bit giá trị của đường dẫn của ma trận được định nghĩa như sau:
1
( ) ( )
0 1
( | ) ( | )
L m n
j j
i i
i j
M r y M r y
 
 
 

 
 
 
biểu thức trên chỉ ra tổng giá trị khi thu được chuỗi r và giải mã được chuỗi y trong đồ
hình lưới.
Giá trị nhánh ma trận thứ k được định nghĩa như sau :

(j) ( )
( | )
j
i i
M r y
Bít thu vào
( )
0
j
i
r 
Bít thu vào
( )
1
j
i
r 
Bít giải mã
( )
0
j
i
y 
1
0
Bít giải mã
( )
1
j
i

y 
0
1
19
1
( | ) ( | )
n
j j
k k k k
j
M r y M r y



Và giá trị bộ phận của nhánh thứ k được định nghĩa như sau:
0
( | ) ( | )
k
k
i i
i
M r y M r y



 
( ) ( )
0
( | )
k

j j
i i
i
M r y



Nhánh ma trận thứ k chỉ ra giá trị của việc chọn nhánh đó từ đồ hình lưới. Giá
trị bộ phận trong nhánh thứ k chỉ ra giá trị của việc chọn nhánh đó khi đi đến thời điểm
k. Thuật toán Viterbi sử dụng đồ hình lưới để tính ma trận đường đi (Path Metric). Tại
mỗi trạng thái (nút) trong đồ hình lưới ta sẽ ghi giá trị cục bộ trong nhánh đó. Giá trị
cục bộ trong nhánh ma trận được định nghĩa là giá trị khi đi từ trạng thái s =0 tại thời
điểm t = 0 đến trạng thái s = k tại thời điểm t >0. Tại mỗi trạng thái giá trị “tốt nhất”
(nhỏ nhất/lớn nhất tuỳ vào việc chọn a,b theo cách thông thường hay cách ngược lại)
được chọn từ điểm cuối của nhánh tại trạng thái đó. Tập các nhánh ma trận được chọn
gọi là Survivor Path (đường dẫn còn lại) và các nhánh còn lại là Nonsurvivor Path.
Survivor Path sẽ được lưu trong khi Nonsurvivor Path sẽ bị loại bỏ trong đồ hình
lưới. Thuật toán Viterbi sẽ chọn các nhánh riêng rẽ về phía bên trái (theo chiều tăng
của trục thời gian), kết thúc của thuật toán sẽ là ML Path (đường đi đúng). Đi ngược
lại trong ML Path ta sẽ được chuỗi giải mã.
Tóm lại thuật toán giải mã Viterbi quyết định cứng (HDVA) thực hiện như sau:
Gọi S
k,t
trong đồ hình lưới là trạng thái S
k
tại thời điểm t. Mỗi trạng thái trong
đồ hình lưới được gán một giá trị l à V(S
k,t
).
1 Khởi tạo t = 0.

- Khởi tạo V(S
0,0
) = 0 và các trạng thái khác V(S
k,t
) = +

2 Gán t = t +1.
- Tính giá trị nhánh cục bộ cho tất cả các nhánh đi từ trạng thái S
k
tại thời
điểm t đang xét. Đầu ti ên ta tìm nhánh ma tr ận thứ t
( ) ( )
0
( | ) ( | )
k
j j
t t t t
i
M r y M r y



. Nó
20
được tính như với khoảng cách Hamming
( ) ( )
1
n
j j
t t

j
r y



. Tiếp theo tính giá trị của
nhánh cục bộ trong nhánh t :
0
( | ) ( | )
t
i i
i
M r y M r y



. Nó được tính từ công thức
, 1
( ) ( | )
k t i i
V S M r y


.
3 Gán giá trị V(S
k,t
) bằng giá trị nhánh cục bộ “tốt nhất” khi đi từ trạng thái S
k
tại thời điểm t. Thông thường giá trị “tốt nhất” của nhánh cục bộ là nhánh có giá trị nhỏ
nhất.

4.Lưu giá trị “tốt nhất” của nhánh cục bộ đó, nó là 1 trong số các bít Survivor.
5. Nếu t<L+m-1, quay trở lại bước 2.
Kết quả của thuật toán Viterbi là toàn bộ đường đi giữa các trạng thái trong đồ hình
lưới tương ứng với từ mã đúng nhất.
III.1.2.Thuật toán giải mã Viterbi quyết định mềm (Soft_Decison Viterbi
Algorithm)
Thuật toán giải mã Viterbi quết định mềm có thể giải mã với từng khối nhiều
bít. Cũng giống như với thuật toán giải mã quyết định cứng nhưng với thuật toán giải
mã quyết định mềm ta không sử dụng ma trận khoảng cách Hamming. Ta c ó 2 phương
pháp triển khai thuật toán.
- Phương pháp 1: ta s ử dụng ma trận khoảng cách Euclidean (SDVA1)
- Phương pháp 2: ta s ử dụng ma trận Correlation (tương quan)(SDVA2).
a)Thuật toán giải mã Viterbi quyết định mềm_ phương pháp 1 (SDVA1)
Vởi thuật toán giải mã quyết định mềm ta không cần xác định rõ từng bít thu
vào là 0 hay 1, mà ta thu vào từng khối nhiều bit (hữu hạn hoặc vô hạn). Ý tưởng của
thuật toán là, chuỗi thu vào r có nhiều bít (vô hạn) sẽ được đưa trực tiếp vào giải mã.
Phương pháp này c ũng giống với thuật toán giải mã quyết định cứng, nhưng nó sử
dụng bình phương khoảng cách Euclidean thay v ì sử dụng khoảng cách Hamming.
Thuật toán SDVA1 được mô tả như sau:
21
Gọi S
k,t
là 1 nút trong đồ hình lưới tương ứng với trạng thái S
k
tại thời điểm t.
Tại mỗi nút trong đồ hình lưới ta sẽ xác định 1 giá trị V(S
k,t
)
1. - Khởi tạo t = 0
- Khởi tạo V(S

0,0
) = 0 , V(S
0,0
) = +

2. - Gán t = t +1
- Tính giá trị cục bộ của mỗi nhánh ma trận đi từ S
k,t
.Đầu tiên ta tìm nhánh
ma trận thứ t
( ) ( )
0
( | ) ( | )
k
j j
t t t t
i
M r y M r y



. Nó được tính bằng bình phương khoảng
cách Euclidean
 
2
( ) ( )
1
n
j j
t t

j
r y



. Tiếp theo tính giá trị của nhánh cục bộ trong nhánh t
:
0
( | ) ( | )
t
i i
i
M r y M r y



. Nó được tính từ công thức
, 1
( ) ( | )
k t i i
V S M r y


.
3 Gán giá trị V(S
k,t
) bằng giá trị nhánh cục bộ “tốt nhất” khi đi từ trạng thái S
k
tại thời điểm t. Thông thường giá trị “tốt nhất” của nhánh cục bộ là nhánh có giá trị nhỏ
nhất.

4.Lưu giá trị “tốt nhất” của nhánh cục bộ đó, nó là 1 trong số các bít survivor.
5. Nếu t<L+m-1, quay trở lại bước 2.
b) Thuật toán giải mã Viterbi quyết định mềm_ phương pháp 2 ( SDVA2)
Thuật toán SDVA2 được trình bày dưới đây. Hàm Likelihood được tính bằng
hàm mật độ phân bố xác suất Gaussian :
( ) ( )
2
0
( ) /
( ) ( )
0
1
( | )
j j
i i b
r y E N
j j
i i
p r y e
N
 

Trong đó: E
b
là năng lượng thu được trên các bít của từ mã.
N
0
là mật độ phổ của nhiễu đơn biên.
Bít thu được là biến ngẫu nhiên Gaussian với giá trị trung bình
( )j

i b
y E
và N
0
/2. Lấy
log của hàm Likelihood được :
1
( ) ( )
0 1
log ( | ) log ( | )
L m n
j j
i i
i j
p r y p r y
 
 
 

 
 
 
22
( ) ( ) 2
1
0
0 1
0
( )
log

j j
L m n
i i b
i j
r y E
N
N

 
 
 
 

 
  
 
 
 
 
 
 
 
1
( ) ( ) 2
0
0 1
0
1 ( )
( ) log
2

L m n
j j
i i b
i j
L m n
r y E N
N

 
 
 
 
  
 
 
 
1
( )2 ( ) ( ) ( )2
0
0 1
0
1 ( )
2 log
2
L m n
j j j j
i i i b i b
i j
L m n
r r y E y E N

N

 
 
 
 
 
   
 
 
 
 
với
( )2j
i
y
= 1
1
( ) ( )
1 2
0 1
L m n
j j
i i
i j
C r y C
 
 
 
 

 
 
 
với C
1
và C
2
là một số hạng , không phải l à hàm của y
1 2
( )C r y C  
đến đây ta thấy ma trận bít có thể được định nghĩa như sau:
( ) ( ) ( ) ( )
( | )
j j j j
i i i i
M r y r y
Thuật toán SDVA2 được mô tả như sau:
Gọi S
k,t
là 1 nút trong đồ hình lưới tương ứng với trạng thái S
k
tại thời điểm t.
Tại mỗi nút trong đồ hình lưới ta sẽ xác định 1 giá trị V(S
k,t
)
2. - Khởi tạo t = 0
- Khởi tạo V(S
0,0
) = 0 , V(S
0,0

) = +

2. – Gán t = t +1
- Tính giá trị cục bộ của mỗi nhánh ma trận đi từ S
k,t
.Đầu tiên ta tìm nhánh
ma trận thứ t
( ) ( )
0
( | ) ( | )
k
j j
t t t t
i
M r y M r y



. Nó được tính từ sự tương quan giữa r
i
(j)

y
i
(j)
( ) ( )
1
n
j j
i i

j
r y


. Tiếp theo tính giá trị của nhánh cục bộ trong nhánh t
:
0
( | ) ( | )
t
i i
i
M r y M r y



. Nó được tính từ công thức
, 1
( ) ( | )
k t i i
V S M r y


.
23
3 Gán giá trị V(S
k,t
) bằng giá trị nhánh cục bộ “tốt nhất” khi đi từ trạng thái S
k
tại thời điểm t. Thông thường giá trị “tốt nhất” của nhánh cục bộ là nhánh có giá trị nhỏ
nhất.

4.Lưu giá trị “tốt nhất” của nhánh cục bộ đó, nó là 1 trong số các bít survivor.
5. Nếu t<L+m-1, quay trở lại bước 2.
*> Nhận xét:
- Trước hết ta nhận thấy giải thuật HDVA đơn giản, dễ thực hiện h ơn giải thuật
SDVA.
- Trong giải thuật HDVA ta thu v ào và xử lí với từng từ mã, trong giải thuật
SDVA ta thu vào và x ử lí với cả chuỗi thông tin.
- Theo tính toán hệ số tăng ích của mã (Coding Gain) trong gi ải thuật SDVA
lớn hơn so với giải thuật HDVA 3Db
III.2.PHÂN TÍCH THUẬT TOÁN GIẢI M Ã VITERBI QUYẾT
ĐỊNH CỨNG
Do điều kiện thời gian có hạn nên để đơn giản trong thuật toán điều khiển mô
hình ta chỉ xét với giải thuật giải mã Viterbi quyết định cứng. Ta sẽ trình bày thông qua
một ví dụ, để thấy rõ giải thuật giải mã Viterbi hoạt động như thế nào.
Một cách mô tả dễ hiểu nhất thuật toán giải mã Viterbi là sử dụng đồ hình lưới .
Đồ hình lưới dưới đây cho ví dụ với sơ đồ mã hoá (2,1,2) cho trong h ình 2.2, với bản
tin vào có độ dài 15 bít:
Hình 3.2.1. Đồ hình lưới của bộ mã hoá (2,1,2) với 17 thời điểm
24
Bốn trạng thái có thể của bộ m ã hoá được biểu diễn theo chiều dọc. Các cột
cho ta các trạng thái có thể của bộ m ã hoá. Cột đầu cho thấy trạng thái khởi đầu của bộ
mã hoá, các cột tiếp theo biểu diễn trạng thái của bộ m ã hoá tại các thời điểm t. Trong
bản tin dài 15 bít ta cần thêm 2 bít để đưa bộ mã hoá trở về trạng thái đầu (flushing
bit), dó đó bản tin đang xét sẽ có 17 b ít. Trong đồ hình trên các đường nét liền biểu
diễn sự chuyển đổi trạng thái khi có bít v ào là bít 1, các đường nét liền biểu diễn sự
chuyển đổi trạng thái khi có bít v ào là bít 0.
Bảng chuyển đổi trạng thái d ưới đây sẽ cho thấy sự t ương ứng giữa các đường
nối trên đồ hình lưới :
Bít vào / trạng thái tiếp theo
Trạng thái

hiện tại
00
2
= 0
01
2
= 1
10
2
= 2
11
2
= 3
00
2
= 0
0
x
1
x
01
2
= 1
0
x
1
x
10
2
= 2

x
0
x
1
11
2
= 3
x
0
x
1
Bảng 3.2.1.Bảng trạng thái của bộ mã hoá trong hình 2.1
Trong bảng trên các dấu x chỉ ra rằng không có sự chuyển đổi trạng thái tương ứng.
Ta luôn chú ý rằng tại thời điểm ban đầu, trạng thái khởi tạo của bộ mã hoá
là 0, cuối cùng có thêm 2 bít flushing để đưa bộ mã hoá về trạng thái đầu.
Với bộ mã hoá trên ta giả sử chuỗi bít vào là x = {01011100101000100
2
} ,
theo trên chuỗi mã ra là : c = {00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10 11
2
}, hai
bít cuối là các bít flushing. Biểu đồ dưới đây cho thấy sự chuyển đổi trạng thái trong đồ
hình lưới khi ta mã hoá 15 bit cho t rên.
25
Hình 3.2.2.Đường dẫn trong đồ hình lưới với chuỗi bít vào x
Các bít vào và bít mã hoá được cho bên dưới của biểu đồ.
Bảng dưới đây sẽ cho thấy cặp b ít mã hoá khi có bit vào t ại một trạng thái của
bộ mã hoá:
Từ mã ra
Trạng thái

hiện thời
Input = 0:
Input = 1:
00
00
11
01
11
00
10
10
01
11
01
10
Bảng 3.2.2.Bảng từ mã ra / bit vào
Để thuận tiện hơn ta sử dụng đồ hình lưới tại 1 thời điểm như sau:
Hình 3.2.3. Đồ hình lưới tại một thời điểm.

×