Đại học Công Nghệ - Đại học Quốc gia Hà Nội
1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hà Mạnh Hùng
MÃ HÓA KÊNH
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Hệ thống viễn thông
Cán bộ hướng dẫn: Đinh Thị Thái Mai
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hà Mạnh Hùng
MÃ HÓA KÊNH
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Điện tử - Viễn thông
HÀ NỘI - 2015
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
2
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hà Mạnh Hùng
MÃ HÓA KÊNH
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Điện tử - Viễn thông.
Cán bộ hướng dẫn: Đinh Thị Thái Mai.
HÀ NỘI – 2015
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
LỜI CẢM
ƠN
Sau quá trình học tập và nghiên cứu, em đã hoàn thành khóa luận của mình về
“Mã Hóa Kênh” dưới sự hướng dẫn và chỉ bảo tận tình của Thạc sỹ Đinh Thị Thái
Mai.
Với tình cảm trân trọng, em xin chân thành cảm ơn Thạc sỹ Đinh Thị Thái Mai đã
hướng dẫn, chỉ bảo em hoàn thành khóa luận .
Cùng với đó, em xin gửi lời cảm ơn sâu sắc tới các thầy, cô trong khoa Điện tử -
Viễn thông cùng toàn thể các thầy cô trong trường Đại Học Công Nghệ đã dạy dỗ em
trong suốt bốn năm học vừa qua.
Sự tiến bộ trong học tập và nghiên cứu của em cũng có phần rất lớn từ sự giúp
đỡ và động viên của các bạn cùng lớp và người thân. Em xin cảm ơn những tình cảm
quý báu đó.
Vì thời gian làm Khóa luận không nhiều nên bài Khóa luận của em không thể tránh
khỏi sai sót, do đó, em rất mong nhận được ý kiến đóng góp của thầy cô và các bạn.
Em xin chân thành cảm ơn!
Hà nội, ngày 21 tháng 05 năm 2015
3
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
TÓM TẮT
Tác động của kênh truyền lên tín hiệu có thể chia thành hai loại: Thứ nhất là loại
xác định như suy giảm, méo tuyến tính hoặc phi tuyến. Thứ hai là loại không xác định
như ồn cộng tính, suy giảm đa đường… Các tác động này gây ra lỗi tín hiệu với một xác
suất nào đó, và có thể làm giảm xác suất lỗi này bằng cách biến đổi trước bản tin được
truyền bằng cách đặt thêm vào bản tin một số bit nào đó, sau đó tạo mối quan hệ giữa các
bit được thêm vào và các bit gốc, từ đó làm tăng độ tin cậy của việc truyền tin qua kênh.
Quá trình trên gọi là MÃ HÓA KÊNH. Hiện nay, nhu cầu việc truyền tin tin cậy ngày
càng cao, và cũng ngày càng có nhiều phương pháp mã hóa kênh ra đời để đáp ứng yêu
cầu đó.
Khóa luận sẽ đề cập đến ba phương pháp mã hóa kênh chính là mã Hamming, mã
Xoắn và mã Turbo, quá trình tạo và giải mã của từng phương pháp cũng như mô phỏng
một cách tổng quan hoạt động của ba mã đó. Ngoài ra, khóa luận cũng đề cập đến các
kiến thức cơ bản liên quan đến các loại mã như Khoảng cách Hamming, Sơ đồ lưới, Giải
thuật MAP…
4
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
CÁC TỪ VIẾT TẮT
ASCII: American Standard Code for Information Interchange: Chuẩn mã trao đổi
thông tin Hoa Kì.
AWGN: Additive White Gaussian Noise: Nhiễu Gauss trắng.
APP : A Posterior Probability: Xác suất Posterior.
BCH: Là mã có tên viết tắt của ba người sáng lập ra là Bose, Chaudhuri và
Hocquenghem.
BER: Bit Error Rate: Tỉ lệ lỗi bit
BPSK: Binary Phase Shift Keying: Điều chế pha nhị phân.
FER: Frame Error Rate: Tỉ lệ lỗi khung.
Inter: Interleaver: Bộ chèn.
IIR: Infinite Impulse Response: Bộ lọc số có đáp ứng xung chiều dài vô hạn.
LLR: Log likelihodd Ratio: Tỉ số tin cậy.
LSB: Least Significiant Bit - Bit có trọng số thấp nhất.
MAP: Maximum A Posteriori: Là xác suất lớn nhất của 1 bit nào đó được truyền
dựa trên tín hiệu nhận được.
ML: Maximum Likelihood: Khả năng xảy ra lớn nhất.
PCCC: Parallel Concatenated Convolutional Code: Mã tích chập kết nối song
song.
RSC: Recursive Systemtic Convolutional Code: Mã tích chập hệ thống đệ quy.
SOVA: Soft VA: thuật toán Viterbi quyết định mềm.
SNR: Signal to Noise Ratio: Tỉ số tín hiệu / nhiễu.
5
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
MỤC LỤC
Hà Mạnh Hùng 1
HÀ NỘI - 2015 1
Hà Mạnh Hùng 1
Hà Mạnh Hùng 2
HÀ NỘI – 2015 2
LỜI CẢM ƠN 3
TÓM TẮT 4
CÁC TỪ VIẾT TẮT 5
MỤC LỤC 6
Chương 1: Tổng quan về mã hóa kênh 8
1.1: Giới thiệu chung: 8
Chương 2: Mã Hamming 10
2.1: Giới thiệu chung: 10
2.2: Mã Hamming: 10
2.3: Kết luận 17
Chương 3: Mã Xoắn 17
3.1: Giới thiệu chung: 17
3.2: Mã Xoắn: 18
3.4: Kết luận 29
Chương 4: Mã Turbo 30
4.1: Giới thiệu chung: 30
4.3: Giải mã mã Turbo: 42
5.2: Xây dựng hệ thống sử dụng khối mã xoắn: 56
5.3: Xây dựng hệ thống sử dụng mã Turbo: 59
6
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
5.4: So sánh tỉ lệ SNR và BER giữa các mã: 59
5.5: Kết luận: 60
Phụ lục 61
Tài liệu tham khảo 67
7
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Chương 1: Tổng quan về mã hóa kênh
1.1: Giới thiệu chung:
Trong thông tin vệ tinh, tín hiệu luôn bị ảnh hưởng lớn bởi nhiễu do nhiễu vô tuyến
từ các thiên hà hoặc quá trình phát xạ từ mặt trời. Còn trên mặt đất, tín hiệu của một thiết
bị phát luôn bị ảnh hưởng bởi nhiễu do môi trường, do phản xạ Sự có mặt của nhiễu
gây nên lỗi dữ liệu hay sai lệch giữa lối vào và ra trong hệ truyền tin. Do đó, nhu cầu đặt
ra là phải tách tín hiệu cần thiết ra khỏi nhiễu. Để thực hiện điều đó, người ta đã dùng
giải pháp mã hóa kênh các tín hiệu, tức là thêm vào thông tin gốc các bit dư để bảo vệ
trước khi chúng được phát qua kênh truyền có nhiễu.
Ý tưởng cơ bản của phương pháp mã hóa kênh là nếu như một trong số các ký hiệu
phát qua kênh bị méo do nhiễu thì những ký hiệu đó sẽ bị ảnh hưởng bởi nhiễu ít hơn, do
đó giúp giải mã các bit thông tin thực tế với độ tin cậy cao hơn. Nguyên tắc chung của
mã kênh là đưa thêm các bit dư vào dữ liệu để dựa vào đó, bộ giải mã bên thu có thể khôi
phục lại dữ liệu ít sai lệch hơn so với khi không dùng mã kênh.
Hình 1.1: Sử dụng mã hóa kênh trong truyền tin
Bằng cách mã hóa kênh như vậy, các bit thông tin có thể được biểu diễn không chỉ
biểu diễn bằng một góc dịch pha (nếu sử dụng điều chế khóa pha M-PSK) mà còn có thể
8
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
được biểu diễn bằng 4, 8 hoặc nhiều hơn nữa các ký hiệu. Với hệ thống dùng mã hóa
kênh, ở phía thu chúng ta không tách các bit thông tin thực tế mà thay vào đó là các ký
hiệu mã hóa để từ các ký hiệu đó chúng ta có thể khôi phục lại các bit thông tin gốc… Có
hai loại mã hóa kênh chính là mã khối (block code) và mã chập (convolutional code).
Mã khối tiến hành trên từng khối bản tin k bit, cho thêm (n - k) bit dư tạo nên từ mã
n bit có tốc độ bit R
0
= (n/k)R
s
R
s
: Tốc độ nguồn thông tin.
R
0
: Tốc độ dữ liệu kênh.
R = k/n : Tốc độ mã.
Có nhiều loại mã khối, như:
• Mã tuần hoàn (Cyclic codes) (Mã Hamming là một bộ phận nhỏ của mã tuần
hoàn)
• Mã lặp (Repetition codes)
• Mã chẵn lẻ (Parity codes)
• Mã Reed-Solomon (Reed Solomon codes)
• Mã BCH (BCH code)
• Mã Reed-Muller
Mã Xoắn (Convolutional code) có thể coi là chập giữa dãy lối vào và đáp ứng xung
của bộ mã. Độ dài của đáp ứng xung bằng bộ nhớ của bộ mã. Mộ mã dùng cửa sổ trượt
trên dãy bản tin đến, độ rộng cửa sổ bằng độ dài bộ nhớ. Như vậy khác với mã khối, mã
Xoắn nhận bản tin như dãy liên tục và cho bit mã ra cũng liên tục với tốc độ cao hơn. Mã
Turbo được phát triển dựa trên mã Xoắn, gồm hai mã Xoắn đệ quy hệ thống RSC kết nối
song song, phân biệt nhờ bộ xáo trộn giả ngẫu nhiên và thuật toán giải mã lặp với chất
lượng tiến tới tiệm cận Shannon.
Trong khuôn khổ của luận án, tôi chỉ trình bày về một số mã điển hình là mã
Hamming, mã Convolutional và mã Turbo.
9
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Chương 2: Mã Hamming
2.1: Giới thiệu chung:
Trong những năm của thập niên kỷ 1940, Hamming làm việc tại Bell Labs trên máy
tính Bell Model V và một máy điện cơ (electromechanical) dùng rơ-le với tốc độ rất
chậm, mấy giây đồng hồ một chu kỳ máy. Nhập liệu được cho vào máy bằng những cái
thẻ đục lỗ (punch cards), và hầu như máy luôn luôn gây lỗi trong khi đọc. Trong những
ngày làm việc trong tuần, những mã đặc biệt được dùng để tìm ra lỗi và mỗi khi tìm
được, nó nhấp nháy đèn báo hiệu, báo cho người điều khiển biết để họ sửa, điều chỉnh
máy lại. Trong thời gian ngoài giờ làm việc hoặc trong những ngày cuối tuần, khi người
điều khiển máy không có mặt, mỗi khi có lỗi xảy ra, máy tính tự động bỏ qua chương
trình đương chạy và chuyển sang công việc khác.
Hamming thường làm việc trong những ngày cuối tuần và ông càng ngày càng trở
nên bực tức mỗi khi ông phải khởi động lại các chương trình ứng dụng từ đầu, do chất
lượng kém, không đáng tin cậy của bộ máy đọc các thẻ đục lỗ. Mấy năm tiếp theo, ông
dồn tâm lực vào việc xây dựng hằng loạt các thuật toán có hiệu quả cao để giải quyết vấn
đề sửa lỗi. Năm 1950, ông đã công bố một phương pháp mà hiện nay được biết là Mã
Hamming.
2.2: Mã Hamming:
2.2.1: Khoảng cách Hamming:
Khoảng cách Hamming được sử dụng trong kỹ thuật viễn thông để tính số lượng
các bit trong một từ nhị phân (binary word) bị đổi ngược, như một hình thức để ước
tính số lỗi xảy ra trong quá trình truyền thông, và vì thế, đôi khi nó còn được gọi là
khoảng cách tín hiệu (signal distance). Việc phân tích trọng số Hamming của các bit
còn được sử dụng trong một số ngành, bao gồm lý thuyết tin học, lý thuyết mã hóa, và
10
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
mật mã học.
Trước tiên ta tìm hiểu về trọng số Hamming: trọng số Hamming của một từ mã là
số số 1 có trong từ mã đó. Ví dụ với từ mã 00111010 có trọng số Hamming là 4.
Khoảng cách Hamming được định nghĩa là các bít khác nhau giữa hai từ mã. Khoảng
cách Hamming giữa hai từ mã được lấy bằng cách dùng toán tử XOR từng bít của hai
từ mã với nhau và khoảng cách Hamming là trọng số của kết quả tìm được trong phép
XOR trên. Ví dụ ta có hai từ mã 0110101 và 1110001 ta có:
0 1 1 0 1 0 1
XOR
1 1 1 0 0 0 1
1 0 0 0 1 0 0
Vậy khoảng cách Hamming của 2 từ mã trên là 2.
2.2.2: Thuật toán:
Mã Hamming là một mã sửa lỗi tuyến , mã này có thể phát hiện một bit hoặc hai bit
bị lỗi. Mã Hamming còn có thể sửa các lỗi do một bit bị sai gây ra.
Có thể tóm tắt các bước cho việc sử dụng mã Hamming như sau:
1)Các vị trí trong một khối được bắt đầu đánh số từ 1: Bit 1, 2, 3…
2)Tất cả các bít ở vị trí số mũ của 2 được dùng làm bít chẵn lẻ. Vd: 2
0
, 2
1
, 2
2
, 2
3
,
2
4
…
3)Tất cả các vị trí khác vị trí còn lại sẽ được dùng cho các bit dữ liệu. VD: vị trí thứ
2, 3, 5, 6, 7…
4)Mỗi bit chẵn lẻ tính giá trị chẵn lẻ cho một số bit trong từ mã theo quy tắc như
sau:
• Bít chẵn lẻ ở vị trí số 1 (2
0
) sẽ kiểm tra tính chẵn lẻ của các vị trí mà số thứ tự của
vị trí đó trong hệ nhị phân có bít ngoài cùng là 1. Vd: 1 (1), 3 (11), 5 (101), 7 (111), 9
(1001)
11
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
• Bít chẵn lẻ ở vị trí số 2 (10) sẽ kiểm tra tính chẵn lẻ của các vị trí mà số thứ tự
của vị trí đó trong hệ nhị phân có bít thứ 2 là 1. Vd: 2 (10), 3 (111), 6 (110), 7 (111), 10
(1010)…
• Bít chẵn lẻ ở vị trí số 4 (100) sẽ kiểm tra tính chẵn lẻ của các vị trí mà số thứ tự
của vị trí đó trong hệ nhị phân có bít thứ 3 là 1. Vd: 4, 5, 6, 7, 12, 13, 14, 15…
• Tương tự với các bít chẵn lẻ ở vị trí cao hơn: 8, 16, 32…
• Tóm lại, mỗi bít chẵn lẻ trong mã Hamming sẽ tính giá trị chẵn lẻ mà tại đó, bit
nhị phân của vị trí AND với các bit vị trí sẽ là một số khác không.
2.2.3: Ví dụ đối với mã ASCII 7 bit:
Mã ASCII 7 bit cần 4 bit dư thừa để thêm vào dữ liệu gốc. Sở dĩ ta chọn là 4 bít vì
2
4
= 16 sẽ xác định được 16 trường hợp bị lỗi đơn bít (trong dãy ta xét có 11 bit: 7 bit dữ
liệu và 3 bit mã).
Các bít dư thừa được đặt vào vị trí 1, 2, 4 và 8.
d
7
d
6
d
5
p
4
d
4
d
3
d
2
p
3
d
1
p
2
p
1
Trong đó, bit R được dùng để tính chẵn lẻ các tổ hợp bít sau:
•Bit p
1
tính các bit thứ 3, 5, 7, 9, 11
•Bit p
2
tính các bit thứ 3, 6, 7, 10, 11
•Bit p
3
tính các bit thứ 5, 6, 7
•Bit p
4
tính các bit thứ 9, 10, 11
12
11 10 9 8 7 6 5 4 3 2 1
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 2.1: Vòng tròn trong mã Hamminh
Ví dụ, ta có chuỗi bit "1010110" và mã Hamming sử dụng bít chẵn lẻ chẵn thì
p
1
= 1, p
2
= 0, p
3
= 0, p
4
= 0
Khi đó, chuỗi dữ liệu truyền đi sẽ là 10100100110
13
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 2.2: Vòng tròn Hamming
Do mã hamming sử dụng bit chẵn-lẻ-chẵn nên tổng số bít 1 trong 1 vòng tròn là số
chẵn. Giả sử trong quá trình truyền xảy ra lỗi tại bit 11, tại phía thu, thuật toán sẽ phát
hiện ra tổng số bit 1 trong 3 vòng tròn (vòng bên trái và hai vòng trên dưới) là một số lẻ,
trái với quy tắc nên nó sẽ thay đổi giá trị của bít nằm ở vùng giao của 3 vòng tròn này.
Hình 2.3: Bit thứ 11 bị lỗi khiến tổng số bít 1 của 3 vòng tròn bên phải
là một số lẻ
2.2.4: Mô tả bằng thuật toán:
Như ta đã biết, mã Hamming là một mã khối. Và với mọi m > 2, luôn tồn tại mã
Hamming với các thông số sau:
•Chiều dài từ mã: n = 2
m
-1
14
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
•Chiều dài phần tin: k=2
m
-m-1
•Chiều dài phần kiểm tra: m=n-k
•Khả năng sửa sai: t=1
•Ma trận kiểm tra H có dạng: H = [I
m
.Q]
Trong đó I
m
là mà trận đơn vị m*m và Q là ma trận [2
m
-m-1] cột, mỗi cột là vectơ m
chiều có trọng số là 2 hoặc lớn hơn.
Ví dụ, với m=3, ma trận của mã [7,4] được viết dưới dạng
H(3,7) =
1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1
Trong thực tế, để việc tạo và giải mã Hamming một cách đơn giản, người ta đổi vị
trí các cột trong ma trận H. Khi đó, các bit kiểm tra xen kẽ với các bit mang tin.
Để việc tạo các mã đơn giản, ta chọn các bit kiểm tra x, y, z ở các vị trí tương ứng 2
i
với i=0, 1, 2… nghĩa là tại các vị trí thứ nhất, thứ hai và thứ tư của các ký hiệu (đối với
khối có 4 bit dữ liệu): t=(x, y, u
0
,z, u
1
, u
2
, u
3
)
a) Tạo mã:
t.H
t
= | x y u
0
z u
1
u
2
u
3
| .
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
= 0
1 2 3
0 2 3
0 1 3
.1 .1 .1 0
.1 .1 .1 .1 .1 0
.1 .1 .1 .1 .1 0
z u u u
y u z u u
x u z u u
+ + + =
+ + + + =
+ + + + =
15
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
1 2 3
0 2 3
0 1 3
z u u u
y u u u
x u u u
= + +
= + +
= + +
Ví dụ: Tin cần phát đi là
U = (u
0
, u
1
, u
2
, u
3
) = (1 0 1 1)
Ta có:
x = u
0
+ u
1
+ u
3
= 1 + 0 + 1 = 0
y = u
0
+ u
2
+ u
3
= 1 + 1 + 1 = 1
z = u
1
+ u
2
+ u
3
= 0 + 1 + 1 = 0
vậy từ mã phát đi sẽ là : t = (0 1 1 0 0 1 1)
b) Giải mã tại bên thu :
s = r. H
t
= |r
0
r
1
r
2
r
3
r
4
r
5
r
6
| .
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
= (S
0
, S
1
, S
2
)
0 3 4 5 6
1 1 2 5 6
2 0 2 4 5
s r r r r
s r r r r
s r r r r
= + + +
= + + +
= + + +
Ví dụ: Tín hiệu thu được là
R = (r
0
, r
1
, r
2
, r
3
, r
4
, r
5
, r
6
) = (0 0 1 0 0 1 1)
Khi đó:
s
0
=1+0+1+1=1
s
1
=0+1+1+1=1
16
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
s
2
=0+1+0+1=0
Ta có S = (1 1 0), đổi sang thập phân thì S = 6, tức là bít thứ 6 (tương ứng với r
1
) bị
lỗi, đảo bít này ta thu được chuỗi bít đúng là R = (0 1 1 0 0 1 1).
2.3: Kết luận
Có thể nói, lịch sử phát triển của mã sửa lỗi được bắt đầu bằng sự ra đời của mã
Hamming và định lý Shannon. Việc ra đời mã Hamming là cơ sở cho việc phát triển thêm
nhiều loại mã hóa mới, có độ tin cậy cao hơn sau này. Mã Hamming có tầm quan trọng
cơ bản trong lý thuyết mã hóa và được sử dụng thực tế trong thiết kế máy tính. Ưu điểm
của mã này là đơn giản, số bit kiểm tra ít, ngoài ra, mã này hoạt động tốt trong việc phát
hiện các lỗi đơn bit và một số trường hợp lỗi hai bit. Tuy nhiên, mã Hamming không thể
sửa được bản tin bị lỗi đa bit.
Chương 3: Mã Xoắn
3.1: Giới thiệu chung:
Như ta đã biết, xác suất xảy ra lỗi có thể được giảm bằng cách truyền nhiều bít hơn
số bít cần thiết, và các bít cạnh nhau phải có sự liên quan nào đó với nhau để nếu có lỗi
xảy ra thì sẽ đủ thông tin để xác định ra bít bị lỗi. Đối với mã khối, chúng được coi là các
mã không có sự ghi nhớ, với ý nghĩa là từ mã hoặc các bít dư được thêm vào chỉ là một
hàm của khối bít hiện tại. Trái lại, các mã xoắn hoạt động có sự ghi nhớ. Đối với mã
xoắn, các bit sau khi mã hóa là các hàm của các bit thông tin và các hàm của độ dài giới
hạn (constraint length). Đặc biệt, mỗi bit sau khi mã hóa (tại đầu ra của bộ mã hóa xoắn)
là tổ hợp tuyến tính của một số bit thông tin trước đó.
17
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Trong mã xoắn, tỉ lệ R = bit thông tin / bit truyền gọi là tỷ lệ mã hóa (code rate), tỷ
lệ này nhỏ hơn 1. Còn số bit thông tin xảy ra mã xoắn là độ dài giới hạn k (contraint
length).
Ví dụ, ta sẽ mã hóa một bản tin sử dụng mã xoắn, với tỷ lệ mã hóa là R = 0.5 thì với
mỗi 1 bit thông tin sẽ có 2 bit được truyền đi và sử dụng độ dài giới hạn k=3. Khi đó, bộ
mã hóa xoắn sẽ gửi ra ngoài 16 bit với mỗi 8 bit thông tin đầu vào, với mỗi 1 cặp bit ra sẽ
phụ thuộc vào bit đầu vào hiện tại và 2 bit trước đó (vì độ dài giới hạn k=3).
Hình3.15: Mã xoắn với tốc độ mã R=0.5 và k=9
Ta có thể thấy là với phương pháp mã hóa này thì mỗi bít thông tin đầu vào sẽ ảnh
hưởng tới 6 bít đầu ra.
3.2: Mã Xoắn:
3.2.1: Ví dụ về mã xoắn:
Để làm rõ hơn phương thức hoạt động của mã xoắn, ta xét một bộ mã xoắn có tốc
độ mã k=0.5.
18
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 3.2: Sơ đồ khối của mã xoắn
Với k=0.5 thì với mỗi bit đầu vào sẽ có 2 bit đầu ra. Ta có:
z
1
= x(n)
⊕
x(n-1)
⊕
x(n-2)
z
2
= x(n)
⊕
x(n-2)
Đầu vào được nối với các bộ XOR có thể được viết dưới dạng các vector nhị phân
[1 1 1] và [1 0 1], các vector này được gọi là các vector sinh.
3.2.2: Giải mã bằng sơ đồ trạng thái:
Dưới đây là sơ đồ trạng thái của bộ mã xoắn
19
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 3.3: Sơ đồ trạng thái
State = S
0
= [x(n-1), x(n-2)]
z = [z
1
, z
2
]
z
1
= x(n)
⊕
x(n-1)
⊕
x(n-2)
z
2
= x(n)
⊕
x(n-2)
3.3.3: Sơ đồ giải mã sử dụng giản đồ lưới:
Sơ đồ này nhận được từ sơ đồ trạng thái ở trên khi đặt S
0
, S
1
, S
2
, S
3
trên một đường
thẳng, đường thẳng này biểu diễn vị trí của các trạng thái tại thời gian hiện tại t=n. Sau
đó, ta đặt S
0
, S
1
, S
2
, S
3
biểu diễn thời gian t=n+1 ở bên phải như hình vẽ.
Ta được sơ đồ như sau:
Hình 3.4: Sơ đồ lưới
20
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Giả sử đầu vào được bắt đầu từ trạng thái S
0
= 00 và dữ liệu đầu vào lần lượt là:
101100 (đầu vào 1 được biểu diễn bằng nét đứt, 0 bằng nét liền). Với phương pháp như
trên ta thu được sơ đồ phức tạp hơn như sau:
Hình 3.5: Sơ đồ lưới với t=6
Khi đó, dãy dữ liệu đầu ra sẽ là: 11 10 00 01 01 01 (do tốc độ mã là 0.5 nên số bit
lối ra sẽ gấp đôi số bit lối vào).
3.3.4: Giải mã xoắn:
3.3.4.1. Giải mã sử dụng giản đồ lưới:
Giả sử một bộ mã xoắn nhận được chuỗi tín hiệu 11 01 01 00 10 11 trong thời gian
từ t=0 tới t=6 (Giả sử trạng thái khởi tạo S
0
=00). Khi đó với đầu vào là 11 thì bộ giải
mã sẽ giải mã và cho ra output = 1, sơ đồ chuyển sang trạng thái S
1
tại t=1. Sau đó, với
input = 01 thì bộ giải mã sẽ quyết định cho output = 1, cứ như vậy đi hết giản đồ lưới thì
chuỗi bit nhận được sẽ là 1 1 0 1 0 0
21
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 3.6: Đi hết giản đồ lưới thì chuỗi bit nhận được là 110100
3.3.4.2. Khoảng cách Hamming trong giải mã xoắn:
Như ta đã biết, khoảng cách Hamming h là số ký tự khác nhau giữa 2 số nhị phân.
Xét ví dụ trên, giả sử xảy ra lỗi bit đơn đối với 4 bit đầu tiên, chuỗi bit nhận được là 1111
(thay vì 1101).
Từ sơ đồ dưới, ta thấy có 2 cách đi từ S
0
, một cho input = 11 (h=0) và một cho
input = 00 (h=2).
Hình 3.7: Khoảng cách Hamming h của 2 nhánh trại S
0
22
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Rõ ràng rằng, ta sẽ chọn đường phía dưới, đường mà có khoảng cách Hamming h
nhỏ hơn.
Tiếp theo, tại t=1, đầu vào có 1 bít lỗi, và cả hai đường đi rời từ S
1
đều có khoảng
cách Hamming giống nhau h=1. Do đó, bộ giải mã sẽ xem xét cả hai đường này trong
các bước tiếp theo.
Tại t=2, input=01, thì đường đi từ S
3
sẽ có h=0. Còn đường đi từ S
2
sẽ có h=1 (có
hai đường). Do khoảng cách Hamming đã khác nhau nên ta có thể chọn đường dưới để
xác định dữ liệu ra.
Hình 3.8: Khoảng cách Hamming trong từng đoạn.
Tuy nhiên, để nâng cao độ tin cậy cho thuật toán, trong thực tế, ta sẽ tính tổng
khoảng cách Hamming H trên n đoạn mà nó đi qua:
H = h
0
+ h
1
+ … + h
n
Hình 3.9: Tổng khoảng cách Hamming H
23
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Từ sơ đồ trên, ta thấy khoảng cách Hamming sẽ được tích lũy qua từng đoạn, và sau
khi qua một số đơn vị thời gian nào đó (trong trường hợp này là t=5) thì bộ giải mã sẽ
quyết định chọn đường mà có tổng khoảng cách Hamming là nhỏ nhất.
Theo sơ đồ trên thì đường có H=1
là đường đi tốt nhất, do đó, dữ liệu đầu ra sẽ là
11010.
3.3.5: Thuật toán Viterbi trong giải mã xoắn:
Ví dụ trên thể hiện 5 đường đi trong sơ đồ lưới, sau đó dựa trên tổng khoảng cách
Hamming mới quyết định chọn đường có H là nhỏ nhất.
Tuy nhiên, đối với các bộ mã xoắn lớn hơn, như trong mạng di động, độ dài giới
hạn k có thể lên tới 6 hoặc 9 thì số đường cần xét có thể lên tới 32 hoặc 256 đường.
Thuật toán Viterbi (được phát triển vào năm 1967) cho phép loại trừ rất nhiều
đường trong tổng số các đường.
Thuật toán chỉ ra rằng, nếu có 2 đường được giao nhau thành 1 trạng thái thì ta chỉ
cần quan tâm tới đường có khoảng cách Hamming nhỏ hơn. Nói cách khác, nếu k là độ
dài giới hạn thì ta chỉ cần quan tâm tới 2
k-1
đường thay vì 2
k
đường, và độ dài đường đi
(theo đơn vị thời gian) gấp 4 hoặc 5 lần độ dài giới hạn k thì có thể nhận được thông tin
chính xác trong hầu hết các trường hợp.
Sơ đồ dưới thể hiện cách mà bộ mã hóa xác định đường đi tốt nhất ngay cả khi có
lỗi xảy ra.
- Tại t=0 , bắt đầu từ trạng thái S
0
, có 2 đường đi tiếp là đi tới S
0
với h=2 hoặc đi tới
S
1
với h=0.
- Tại t=1, có lỗi bit đơn xảy ra và có tất cả 4 đường đi từ hai trạng thái S
0
và S
1
, do
có lỗi xảy ra nên không có đường nào có tổng Hamming H=0.
24
Đại học Công Nghệ - Đại học Quốc gia Hà Nội
Hình 3.10: Thuật toán Viterbi trong giải mã xoắn
- Tại t=3, do tại mỗi trạng thái có 2 đường nên sẽ có 8 đường cần phải xét với các
tổng khoảng cách Hamming khác nhau.
Hình 3.11: Có 8 đường đi tới thời điểm t=3
Theo Viterbi, các đường có H lớn hơn sẽ không thể là đường chính xác nên bộ giải
mã sẽ loại bỏ các đường này để xử lí được nhanh hơn. Trong trường hợp này, ta sẽ loại
bỏ 4 đường có H lớn nhất
25