KHẢO SÁT MÃ HÓA NGUỒN TIN VÀ MÃ HAMMING
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Cơ Sở Phía Nam
ĐỀ TÀI : KHẢO SÁT MÃ HÓA NGUỒN TIN
VÀ MÃ HAMMING
SINH VIÊN THỰC HIỆN :
1.
2.
3.
4.
5.
MẠCH Y VINH
TRẦN ĐĂNG KHOA
TRẦN MINH KHUÊ
TRẦN ĐĂNG HƯNG
NGUYỄN HỒNG HẢO
LỚP : Đ09VTA2
GVHD : TÔN THẤT NGHIÊM
Page | 1
MÃ HAMMING
PHẦN 1 : MÃ HÓA NGUỒN TIN
I.KHÁI
1.
QUÁT VỀ MÃ
Các Thông Số Mã
Cơ số mã : + là số ký hiệu mã trong bộ chữ mã
+ Ký hiệu : m
+ Ví dụ : mã thập phân ( m=10 ) ; mã nhị phân ( m=2 )
Độ dài từ mã :
+ Là số ký tự của một mã
+ Ký hiệu : n
+ Ví dụ : một bộ mã có một từ mã là 001 thì n=3
Tổng số các từ mã của bộ mã ký hiệu là N
2.
Các Loại Mã
a.
Mã đều và mã không đều
Mã đều : là bộ mã có các từ mã với chiều dài bằng nhau
Mã không đều : là bộ mã có các từ mã với chiều dài không bằng nhau
b.
Bộ mã đầy và bộ mã không đầy
Bộ mã đầy : khi N =
Bộ mã không đầy : khi N <
c.
Xét Ví Dụ
Tin
Từ mã
A
000
B
001
C
010
D
011
E
100
F
101
G
110
H
111
Page | 2
MÃ HAMMING
Ta có : N = 8 ; n=3 ; m=2
Do bộ mã có các từ mã với chiều dài bằng nhau nên đây là bộ mã đều
Và N = ( 8 = ) đây là bộ mã đầy
Kết luận : Đây là bộ mã đều và đầy
d.
Tính prefix và prefix tối thiểu
Tính prefix : Mã có tính prefix là bộ mã thỏa điều kiện “ bất kỳ từ mã nào
cũng đều không phải là prefix của bất cứ từ mã nào khác trong bộ mã .
Tính prefix tối thiểu : Là mã có tính prefix sao cho nếu X là một prefix của
một từ mã thì αX phải là một từ mã hay là một prefix của một từ mã trong bộ mã
3.
Các Phương Pháp Biểu Diễn Mã
a.
Cây mã
Cho U = {00,01,100,1010,1011}
b.
Đồ hình kết cấu
Page | 3
MÃ HAMMING
c.
Hàm cấu trúc của mã hệ thống
Gọi n1,n2, …. ,ni là độ dài các tổ hợp sơ đẳng của mã gốc
Gọi λ1, λ2,….., λk là độ dài các tổ hợp cuối của mã gốc
g(nj) là số có thể có được các dãy ghép các tổ hợp sơ đẳng với độ dài tổng
cộng là nj với qui ước : nj = 0 g(nj) = g(0) = 1 và nj < 0 g(nj) = 0
Gọi G(nj) là số có thể có được các từ mã có độ dài bằng nj
G(nj) = g(nj – λ1) + g(nj – λ2) + ….. + g(nj – λk)
Với g(nj) = g(nj – n1) + g(nj – n2) + …… + g(nj – ni)
Qui Ước : nj = λ G(nj) = G(λ) = 1 và nj < λ G(nj) = G(λ) = 0
II.
CÁC PHƯƠNG PHÁP MÃ HÓA
1.
Mã Shannon
Phương Pháp :
Định nghĩa giới hạn của n0 : m-ni ≤ P(Ui) ≤ m1-ni (1).
Bước 1: Liệt kê Ui và P(Ui) theo thứ tự giảm dần vào cột 1 và 2
Page | 4
MÃ HAMMING
Bước 2: Pi =
Bước 3: Tính ni theo bất đẳng thức (1)
Bước 4: Đổi Pi ra dạng nhị phân
Xét Ví Dụ : Cho bộ mã U với xác suất như sau :
Ui
P(Ui)
U1
0.34
U2
0.2
U3
0.19
U4
0.1
U5
0.07
U6
0.04
U7
0.03
U8
0.02
U9
0.01
Giải :
Ui
U1
U2
U3
U4
U5
U6
U7
U8
U9
P(ui)
0.34
0.2
0.19
0.1
0.07
0.04
0.03
0.02
0.01
Pi
0
0.34
0.54
0.73
0.83
0.9
0.94
0.97
0.99
ni
2
3
3
4
4
5
6
6
7
Dạng nhị phân của Pi
0
0.01010111
0.10001010
0.10111010
0.111010100
0.11100110
0.11110000
0.11110000
0.11111101
Từ mã
00
010
100
1011
1101
11100
111100
111110
1111110
Độ dài trung bình từ mã :
Entropy của tập tin :
Chỉ số kinh tế của bộ mã :
2.
Mã Từ Điển LZ77
Giải Thuật :
Đưa chuỗi văn bản vào bộ đệm
Dùng 1 cửa sổ trượt để đọc các
ký tự cần mã hóa vào
Page | 5
MÃ HAMMING
Ngõ
ra : + Khi bắt đầu mã hóa: <0,0,k> (k là kí tự đầu tiên)
+ Lần mã hóa tiếp theo: <i,j,k> So sánh kí tự mã hóa với kí tự đã
mã hóa, nếu giống thì đưa ra từ mã <i,j,k> trong đó : i là vị trí bắt đầu
của đoạn/kí tự giống nằm trong từ điển với đoạn/kí tự đang nén ; j là
độ dài của đoạn kí tự giống ; k là ký tự kế tiếp
Xét Ví Dụ : mã hóa đoạn ký tự sau AABCBBABC
Bướ
c
1
2
3
4
5
3.
Vị trí
1
2
4
5
7
Ký tự giống
A
B
AB
Chuỗi
A
AB
C
BB
ABC
Ngõ ra
<0,0,A>
<0,0,B>
<0,0,C>
< 2,1,B>
<5,2,C>
Mã Từ Điểm LZSS
Nếu có 2 kí tự giống trở lên thì mới chép trong từ điển ra <0,i,j>
Chỉ có 1 kí tự giống hoặc không có kí tự giống <1,k>
VD: mã hóa AABBCBBAABC
Bước
1
2
3
4
5
6
7
8
Vị trí
1
2
3
4
5
6
8
11
Kí tự giống
A
B
BB
ABB
C
Ngõ ra
<1,A>
<1,A>
<1,B>
<1,B>
<1,C>
<0,3,2>
<0,7,3>
<1,C>
PHẦN 2 : MÃ HAMMING
Page | 6
MÃ HAMMING
I.
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.
Trong viễn thông (telecommunication), mã Hamming là một mã sửa lỗi
tuyến tính (linear error-correcting code), được đặt tên theo tên của người phát
minh ra nó, Richard Hamming. Mã Hamming có thể phát hiện một bit hoặc hai bit
bị lỗi (single and double-bit errors). Mã Hamming còn có thể sửa các lỗi do một
bit bị sai gây ra. Ngược lại với mã của ông, mã chẵn lẻ (parity code) đơn giản vừa
không có khả năng phát hiện các lỗi khi 2 bit cùng một lúc bị hoán vị (0 thành 1 và
ngược lại), vừa không thể giúp để sửa được các lỗi mà nó phát hiện thấy.
II.
CƠ CHẾ PHÁT HIỆN SAI VÀ SỬA SAI
III.
Page | 7
MÃ HAMMING
1.
Tổng Quang Về Kiểm Soát Sai Trên Kênh Truyền
Kiểm Soát Sai = Phát Hiện Sai + Sửa Sai
2.
Điều Kiện Phát Hiện Sai và Sửa Sai
Trọng
số hamming của từ mã : là số ký hiệu khác không trong từ mã đó
VD : W(1011) = 3 ; W(11) = 2
Khoảng
cách hamming của hai từ mã : là số ký hiệu mà từ mã này phải
thay đổi để trở thành từ mã kia
VD : d(u,v) = d(000,111) = 3 ; d(u,v) = d(1011,0111) = 2
Bất đẳng thức tam giác : d(u,v) ≤ d(u,f) + d(f,v)
Khoảng cách hamming của một bộ mã : là khoảng cách nhỏ nhất giữa hai từ
mã bất kỳ trong bộ mã đượ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).
D = mind(u,v)
với u,v thuộc U
Điều kiện để bộ mã có khả năng phát hiện được t ký hiệu sai :
D ≥ t +1
Điều
3.
kiện để bộ mã có thể sửa được t ký hiệu sai :
D ≥ 2t + 1
Ví Dụ
Xét bộ mã U = {00000,11111}
Bộ mã phát hiện được mấy sai ?
Ta có : D = min d(u,v) = 5
D≥t+1t≤4
Vậy bộ mã phát hiện được các mẫu sai 1 , 2 , 3 , 4 ký hiệu
Bộ mã sửa được mấy sai ?
Ta có : D ≥ 2t + 1 t ≤ 2
Vậy : sửa được các mẫu sai 1 , 2 ký hiệu
Page | 8
MÃ HAMMING
IV.
MÃ HAMMING
U : mã hóa chiều dài k
1.
V : mã hóa chiều dài n
Định Nghĩa
Nếu u , v thuộc không gian tuyến tính V thì ku + lv € V với k , l là các hệ số
2.
Định Lý
Khoáng cách hamming của bộ mã tuyến tính bằng trọng số hamming nhỏ
nhất của các từ mã khác 0
D = min W(v) với v ≠ 0 , v € V
3.
Đặc điểm của mã Hamming
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: 20, 21, 22, 23, 24…
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) ..
Page | 9
MÃ HAMMING
•
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ì
24 = 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.
d7
11
d6
d5
p4
d4
d3
10
9
8
7
6
d2
5
p3
d1
p2
p1
4
3
2
1
Trong đó, bit R được dùng để tính chẵn lẻ các tổ hợp bít sau:
•
Bit p1 tính các bit thứ 3, 5, 7, 9, 11
•
Bit p2 tính các bit thứ 3, 6, 7, 10, 11
•
Bit p3 tính các bit thứ 5, 6, 7
•
Bit p4 tính các bit thứ 9, 10, 11
Page | 10
MÃ HAMMING
Hình 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ì
p1 = 1, p2 = 0, p3 = 0, p4 = 0
Khi đó, chuỗi dữ liệu truyền đi sẽ là 10100100110
Page | 11
MÃ HAMMING
Hình 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 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ẻ
4.
Cơ Hệ của Bộ Mã
Page | 12
MÃ HAMMING
Nếu các vecto mã g1,g2,.,gk là cơ hệ của bộ mã tuyến tính V nếu và chỉ nếu
Các vecto trên độc lập tuyến tính
Mọi vecto mã của bộ mã V đều được biểu diễn tuyến tính qua tổ hợp tuyến tính
của các vecto cơ hệ
Thông Số Mã Hamming
Với mọi số nguyên dương r ≥ 3 , tồn tại mã hamming với các thông số sau :
r
Chiều dài từ mã : n = 2 – 1
r
Chiều dài phần tin : k = 2 – 1 – r
Chiều dài phần kiểm tra : r = n – k
Khả năng sửa sai : t = 1 ( dmin = 3 )
Ma trận kiểm tra H với các cột là một vecto r chiều khác không
5.
6.
Ma Trận Sinh
a.
Khái quát ma trận sinh
Ký Hiệu : G (k,n)
k: số vecto cơ hệ (số hàng)
n: độ dài từ mã (số cột)
Cho [a] =[u1 u2 …ui] là ma trận mang tin và ma trận sinh G thì ta có [V]=[u].
[G] viết gọn : V=u.G
Ma Trận Sinh Chuẩn
Bộ mã V có thể thay đổi bằng bộ mã V’ có cùng xác suất sai nhằm
Các bộ mã tương đương được tạo ra bằng cách biến đổi tương đương trên ma trận
sinh : hoán bị cột , tổ hợp tuyến tính các hàng củ thành hàng mới
G Gch = [Ik,k , p k,(n-k)]
b.
7.
Ma Trận Thử
Dưới dạng cấu trúc hệ thống H = [Ir.Q] Trong đó :
Ir là ma trận đơn vị
Ma trận Q gồm 2r – 1 – r cột
Mỗi cột là vector r chiều có trọng số là 2 hoặc lớn hơn
Định nghĩa : với v € V , u € U thì ma trận sinh [H] = [h1 h2 …hn-k] với v.HT =0
Định lý : nếu V có Gch = [Ik,k , p k,(n-k)] thì Hch = [-
, Ik,(n-k)]
Page | 13
MÃ HAMMING
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 cần kiểm tra xen kẽ với các bit
mang tin chứ không còn tính chất khối
8.
Xây Dựng Mã Hamming
Mã hamming có đặc điểm : Ma trận thử H có r hàng , 2r – 1 cột
Xét Ví Dụ : mã hamming ( 7,4 ) có ma trận thử H
Để việc tạo mã đơn giản ta chọn các bit kiểm tra c1 , c2 , c3 ở các vị trí tương
ứng 2i với i = 0,1,2,-----, nghĩa là các vị trí thứ nhất , thứ hai và thứ tư của
các ký hiệu từ mã
V có dạng : v= c1 c2 u1 c3 u2 u3 u4 , với u = u1 u2 u3 u4
Xác định c1,c2 ,c3 ?
Để tạo mã : v HT = 0
Ví dụ u = 1010 , v = c1 c2 1 c3 0 1 0 có v.HT =0
Page | 14
MÃ HAMMING
c3 +1 = 0 => c3= 1
c2 + 1 + 1 = 0 => c2 = 0
c1 + 1 = 0 => c1 = 1
v = 1011010
Sơ đồ tạo mã : u = u1 u2 u3 u4
v = c1 c2 u1 c3 u2 u3 u4
v HT = [c1 c2 u1 c3 u2 u3 u4 ] HT = 0
c3 = u2 + u3 + u4
c2 = u1 + u3 + u4
c1 = u1 + u2 + u4
Mạch mã hóa :
Ưu điểm :
Từ ma trận H ta dễ dàng suy ra từ mã v , nghĩa là không cần biết ma trận
sinh G ta cũng dễ dàng tìm được v
Page | 15
MÃ HAMMING
9.Sơ
Đồ Sửa Lỗi Mã Hamming
Để nhận biết sai và sửa lỗi kênh truyền ta dùng Syndrome
S = r.HT
Nếu : S = 0 thì r = v ( Không có lỗi )
S ≠ 0 thì r ≠ v ( có lỗi )
Ta có : S = r.HT mà r = v + e S = ( v + e ) . HT = v HT + e HT = e HT
Xác định được e ta suy ra v = r + e
VD : xét mã Hamming ( 7 ,4 )
Với r = r1r2r3r4r5r6r7
Syndrome : S = r HT = [ r1r2r3r4r5r6r7 ] HT
Page | 16
MÃ HAMMING
S = [ r4 + r5 + r6 + r7, r2 + r3 + r6 + r7, r1 + r3 + r5 + r7 ]
Cho :
e= 1000000 => s1= eHT = [ 1000000 ] HT= 001
e= 0100000 => s2= 010
e= 0010000 => s3= 011
e= 0001000 => s4= 100
e= 0000100 => s5= 101
e= 0000010 => s6= 110
e= 0000001 => s7= 111
Bảng Sự Thật :
Page | 17
MÃ HAMMING
Mạch Sửa Lỗi :
Ví Dụ : tín hiệu thu được r = ( r1 r2 r3 r4 r5 r6 r7 ) = ( 0 0 1 1 0 1 1 )
Khi đó :
S1= r4 + r5 + r6 + r7 = 1 + 0 + 1 + 1 = 1
S2 = r2 + r3 + r6 + r7 = 0 + 1 + 1 + 1 = 1
S3 = r1 + r3 + r5 + r7 = 0 + 1 + 0 + 1 = 0
Vậy : S = ( 1 1 0) , nếu đổi ra nhị phân là 6 , ta nhận thấy S trùng với cột số 6 của
ma trận H , có nghĩa ký hiệu sai là ký hiệu số 6(r) đầu ra thứ 6 của sơ đồ giải mã sẽ
có i=1 . Ta chỉ cần đảo bit thứ 6 theo thuật toán :
Page | 18
MÃ HAMMING
Kết luận : Mã hamming chỉ sửa được 1 lỗi / 1 đường truyền do đó được
dùng rất nhiều trong truyền dữ liệu trong mạng máy tính
Hàm Cấu Trúc Trọng Số
Giả sử V là bộ mã tuyền tính (n,k) . Gọi Ai là số các từ mã có trọng số
hamming bằng i trong bộ mã V . Hàm cấu trúc trọng số bộ mã V có dạng :
10.
Gọi hàm cấu trúc trọng số trực giao của bộ mã V là U , ta có hàm cấu trúc
trọng số của U là :
V.
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.
Page | 19