Tải bản đầy đủ (.doc) (14 trang)

MÃ sửa SAI HAMMING

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 (335.27 KB, 14 trang )

TRƯỜNG CAO ĐẲNG KỸ THUẬT LÝ TỰ TRỌNG
KHOA ĐIỆN-ĐIỆN TỬ
……

ĐỀ TÀI TRUYỀN SỐ LIỆU

MÃ SỬA SAI HAMMING
12CĐ- ĐT3
Nhóm LÊ HOÀNG TUẤN TÚ
NGUYỄN TRỌNG HẢI
MONG HOÀNG PHONG

MÃ SỬA SAI HAMMING
I.

Khái niệm:


_

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 1và 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

_ Mã Hamming là một bước phát triển của kiểm tra chẵn lẻ và có khả
năng sửa sai do xác định được vị trí lỗi. Số lượng bit của mã


Hamming tùy thuộc số lượng bit của chuỗi dữ liệu
_ Ta có thể lý luận như sau để xác định số lượng bit của mã Hamming.
Gọi m là số bit của chuỗi dữ liệu và n là số bit của mã Hamming, tổng
số bit phát đi là m+n
_ Với n = 1 ta xác định được 1 trong 2 kết quả : chuỗi dữ liệu sai hoặc
đúng nhưng không biết vị trí lỗi.
_ Với n = 2, 1 trong 4 trường hợp xảy ra: 2 phép kiểm tra đều cho kết
quả đúng, 2 phép kiểm tra đều cho kết quả sai, phép kiểm tra thứ nhất
sai, phép kiểm tra thứ hai đúng và ngược lại. 4 trường hợp này cho
phép kết luận được 1 bit sai ở 1 trong 3 vị trí.
- Với n=3, có 8 khả năng xảy ra và ta có thể kết luận được 1 bit sai ở 1 trong
7 vị trí.
_ Với số n bất kỳ, có 2n khả năng xảy ra và ta có thể kết luận được 1 bit
sai ở 1 trong 2n -1 vị trí.
_ Vậy để có thể phát hiện 1 lỗi tại 1 vị trí cụ thể thì số n nhỏ nhất được
chọn phải thỏa: 2n - 1 ≥ Ù m + n hay 2n ≥ Ù m + n + 1
_ Các bit của mã Hamming chèn vào vị trí 2n và dùng cho kiểm tra
chẵn lẻ. Các bit khác là bit thông tin (dữ liệu).
_ Dưới đây là một ví dụ để thấy cách xác định mã Hamming:
• Giả sử chuỗi dữ liệu cần truyền gồm 4 bit như sau :
1010


• Với m = 4 , ta chọn n = 3, bất đẳng thức trên được thỏa
• Gọi các bit của mã Hamming là H1 H2 và H4 (1, 2, 4 là các vị trí mà
ta sẽ đặt 3 bit của mã Hamming vào dòng dữ liệu). Gọi các bit dòng
dữ liệu là X3, X5, X6, X7.
Tổ hợp các bit dữ liệu và bit mã, ta đươc
1 2 3 4 5 6 7
H1 H2 X3 H4 X5 X6 X7

Giả sử ta chọn Parity chẵn, các bit mã sẽ được xác định như sau:
H1⊕ X3⊕ X5⊕X7 = 0
H1 = X3⊕ X5⊕X7 =1 ⊕ ( 0 ⊕ 0 ) = 1 ⊕ 0 = 1
Tương tự:
H2 = X3⊕ X6⊕X7 =1 ⊕ (1 ⊕ 0 ) = 1 ⊕ 1 = 0
H4 = X5⊕ X6⊕X7 =0 ⊕ (1 ⊕ 0 ) = 0 ⊕ 1 = 1
Bản tin bao gồm bit mã trở thành: 1 0 1 1 0 1 0
Ở máy thu để kiểm tra người ta thực hiện các phép toán:
C1 = H1⊕ X3⊕ X5⊕X7
C2 = H2⊕ X3⊕ X6⊕X7
C4 = H4⊕ X5⊕ X6⊕X7
Nếu C1= C2 = C4 = 0, không có lỗi xảy ra
Nếu C1 = 1, C2 = C4 = 0, một trong các bit ở vị trí 1, 3, 5, 7 bị lỗi. Nhưng
C2 = C4 = 0 có nghĩa là các bit ở vị trí 2, 3, 6, 7 và 4, 5, 6, 7 đã đúng. Vậy
bit sai phải ở vị trí 1.
Lý luận tương tự ta có các trường hợp khác. Thí dụ nếu C1= C2 = C4 = 1
thì bit lỗi là bit ở vị trí 7
Thí dụ: bản tin nhận được là 1 0 1 1 1 1 0
Mạch dò sai sẽ tính C1 , C2 , C4 như sau:
C1 = H1⊕ X3⊕5⊕X7 = 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1
C2 = H2⊕ X3⊕X6⊕X7 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
C4 = H4⊕ X5⊕ X6⊕ X7 = 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1
Vì chỉ bit X5 thuộc cả C1 và C4 nên bit sai là bit thứ 5
Quan sát tổ hợp C4 C2 C1 ta thấy C4 C2 C1 = 101 = (5)10 . Như vậy giá trị
có được của tổ hợp này cho ta biết vị trí bit sai cần sửa chữa.
Nếu tổ hợp này bằng 0 chứng tỏ bản tin nhận đúng.
Mã Hamming có thể được phát triển để dò ra hai bit sai và sửa được một bit
lỗi.



II. Ví dụ dùng (11,7) mã Hamming
_

Ví dụ chúng ta có một từ dữ liệu dài 7 bit với giá trị là
"0110101". Để chứng minh phương pháp các mã Hamming
được tính toán và được sử dụng để kiểm tra lỗi, xin xem bảng
liệt kê dưới đây. Chữ d (data) được dùng để biểu thị các bit dữ
liệu và chữ p (parity) để biểu thị các bit chẵn lẻ (parity bits).

_ Đầu tiên, các bit của dữ liệu được đặt vào vị trí tương thích
của chúng, sau đó các bit chẵn lẻ cho mỗi trường hợp được
tính toán dùng quy luật bit chẵn lẻ số chẵn.
Thứ tự bit

1 2 3 4 5 6 7 8 9 10 11

Vị trí bit chẵn lẻ và các bit dữ liệu

p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7

Nhóm dữ liệu (không có bit chẵn lẻ):
p1
p2
p3
p4
Nhóm dữ liệu (với bit chẵn lẻ):

1

0


1 1 0

1 0 1

0

1

1

0 0

0
1 0

1
0 1

0 1 1 0
0 1 0 1
1 0 0 0 1 1 0 0 1 0 1

Cách tính các bit chẵn lẻ trong mã Hamming (từ trái sang phải)


_ Nhóm dữ liệu mới (new data word) - bao gồm các bit chẵn lẻ
- bây giờ là "10001100101". Nếu chúng ta thử cho rằng bit
cuối cùng bị thoái hóa (gets corrupted) và bị lộn ngược từ 1
sang 0. Nhóm dữ liệu mới sẽ là "10001100100"; Dưới đây,

chúng ta sẽ phân tích quy luật kiến tạo mã Hamming bằng
cách cho bit chẵn lẻ giá trị 1 khi kết quả kiểm tra dùng quy
luật số chẵn bị sai.
Thứ tự bit

1 2 3 4 5 6 7 8 9 10 11

Vị trí bit chẵn lẻ
và các bit dữ liệu

p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7

Nhóm dữ liệu
nhận được:

1 0 0 0 1 1 0 0 1 0 0 1

p1

1

p2
p3
p4

0
0 0

1


0
1 0

1

Kiểm
chẵn lẻ

Bit
chẵn lẻ

0 Sai

1

0 0 Sai

1

0 1 1 0

Đúng
0 1 0 0 Sai

0
1

Kiểm tra các bit chẵn lẻ (bit bị đảo lộn có nền thẫm)

_ Bước cuối cùng là định giá trị của các bit chẵn lẻ (nên nhớ

bit nằm dưới cùng được viết về bên phải - viết ngược lại từ
dưới lên trên). Giá trị số nguyên của các bit chẵn lẻ là 11 (10),


và như vậy có nghĩa là bit thứ 11 trong nhóm dữ liệu (data
word) - bao gồm cả các bit chẵn lẻ - là bit có giá trị không
đúng, và bit này cần phải đổi ngược lại.

p4 p3 p2 p1
Nhị phân 1 0 1 1
Thập phân 8

2 1 Σ = 11

Khi hai bit dữ liệu (3,7) có cùng bit chẵn lẻ kiểm tra tại vi trí
2k - ví dụ (1,2) - biến đổi giá trị (lỗi trong truyền thông) thì giá
trị của bit chẵn lẻ vẫn đúng như giá trị gốc (0,1)
• Việc đổi ngược giá trị của bit thứ 11 làm cho nhóm
10001100100
trở lại thành
10001100101.
• Bằng việc bỏ đi phần mã Hamming, chúng ta lấy được phần dữ
liệu gốc với giá trị là
0110101.
• Lưu ý, các bit chẵn lẻ không kiểm tra được lẫn nhau, nếu chỉ
một bit chẵn lẻ bị sai thôi, trong khi tất cả các bit khác là đúng,
thì chỉ có bit chẵn lẻ nói đến là sai mà thôi và không phải là các
bit nó kiểm tra (not any bit it checks).



• Cuối cùng, giả sử có hai bit biến đổi, tại vị trí x và y.
Nếu x và y có cùng một bit tại vị trí 2k trong đại diện nhị phân
của chúng, thì bit chẵn lẻ tương ứng với vị trí đấy kiểm tra cả
hai bit, và do đó sẽ giữ nguyên giá trị, không thay đổi.
Song một số bit chẵn lẻ nào đấy nhất định phải bị thay đổi,
vì x ≠ y, và do đó hai bit tương ứng nào đó có giá trị x và y khác
nhau. Do vậy, mã Hamming phát hiện tất cả các lỗi do hai bit bị
thay đổi — song nó không phân biệt được chúng với các lỗi do
1 bit bị thay đổi.

III. Mã Hamming (7,4)
_

Trong lý thuyết mã hóa , Hamming (7,4) là một mã sửa lỗi
tuyến tính mã hóa 4bit dữ liệu vào 7 bit bằng cách thêm 3 bit
chẵn lẻ . Nó là một thành viên của một gia đình lớn của mã
Hamming , nhưng mã Hamming thuật ngữ thường dùng để
chỉ mã cụ thể này mà Richard W. Hamming giới thiệu vào
năm 1950. Vào thời điểm đó, Hamming làm việc tại phòng
thí nghiệm Bell Telephone và đã thất vọng với các lỗi dễ
bị thẻ đấm người đọc, đó là lý do tại sao ông bắt đầu làm
việc trên mã sửa lỗi.

_

Mã Hamming cho biết thêm ba bit kiểm tra bổ sung cho bốn
bit dữ liệu của tin nhắn. (7,4) Hamming của thuật toán có
thể sửa bất kỳ lỗi duy nhất-bit, hoặc phát hiện tất cả các lỗi
bit đơn và hai-bit. Nói cách khác, tối thiểu khoảng cách
Hamming giữa hai từ mã đúng là 3, và từ nhận có thể được

giải mã một cách chính xác nếu họ đang ở một khoảng cách
nhất một từ từ mã đã được truyền bởi người gửi. Điều này
có nghĩa là cho các tình huống môi trường truyền dẫn mà lỗi
burst không xảy ra, Hamming của (7,4) đang có hiệu quả
(như là phương tiện sẽ phải rất ồn ào cho 2 trong 7 bit để
được lộn).

_

Mục tiêu của mã Hamming là tạo ra một tập hợp các bit
chẵn lẻ mà chồng chéo như vậy mà một lỗi duy nhất-bit (bit
là hợp lý lộn về giá trị) trong một bit dữ liệu hoặc một bit


chẵn lẻ có thể được phát hiện và sửa chữa. Trong khi nhiều
chồng chéo có thể được tạo ra, các phương pháp chung
được trình bày trong mã Hamming .

Bit #

1

2

3

4

5


6

7

Bit truyền
Vâng Không Vâng Không Vâng Không Vâng
Không Vâng Vâng Không Không Vâng Vâng
Không Không Không Vâng Vâng Vâng Vâng
_

Bảng này mô tả đó bit chẵn lẻ bìa mà truyền bit trong từ mã
hóa. Ví dụ, trang 2 cung cấp một chẵn lẻ ngay cả đối với bit 2,
3, 6, và 7. Nó cũng chi tiết mà truyền mà bit chẵn lẻ bằng cách
đọc các cột. Ví dụ, d 1 được bao phủ bởi p 1 và p 2 nhưng
không p 3 bảng này sẽ có một sự tương đồng nổi bật với ma
trận chẵn lẻ kiểm tra (H) trong phần tiếp theo.

_

Hơn nữa, nếu các cột chẵn lẻ trong bảng trên đã được gỡ bỏ

Vâng Vâng Không Vâng


Vâng Không Vâng Vâng
Không Vâng Vâng Vâng

sau đó có trùng với các hàng 1, 2, và 4 của ma trận tạo
mã (G) dưới đây cũng sẽ được hiển nhiên.
_


IV.

Vì vậy, bằng cách chọn các phạm vi bảo hiểm bit chẵn lẻ một
cách chính xác, tất cả các lỗi với một khoảng cách Hamming
của 1 có thể được phát hiện và sửa chữa, đó là điểm của việc
sử dụng một mã Hamming.

Hamming ma trận
_ Nguyên lý của mã Hamming bắt nguồn từ việc khai triển và mở
rộng quan điểm chẵn lẻ. Việc khai triển này bắt đầu bằng việc
nhân các ma trận, được gọi là Ma trận Hamming (Hamming
matrices), với nhau. Đối với mã Hamming (7,4), chúng ta sử
dụng hai mã trận có liên quan gần gũi, và đặt tên cho chúng là:



_

Các cột vectơ trong
là nên tảng hạch của
và phần trên
của
(4 hàng đầu) là một ma trận đơn vị (identity matrix). Ma
trận đơn vị cho phép vectơ dữ liệu đi qua trong khi làm tính
nhân, và như vậy, các bit dữ liệu sẽ nằm ở 4 vị trí trên cùng


(sau khi nhân). Sau khi phép nhân hoàn thành, khác với cách
giải thích ở phần trước (các bit chẵn lẻ nằm ở vị trí 2k), trật tự

của các bit trong từ mã (codewords) ở đây khác với cách bố trí
đã nói (các bit dữ liệu nằm ở trên, các bit kiểm chẵn lẻ nằm ở
dưới).
_ Chúng ta dùng một nhóm 4 bit dữ liệu (số 4 trong cái tên của
mã là vì vậy) chủ chốt, và cộng thêm vào đó 3 bit dữ liệu thừa
(vì 4+3=7 nên mới có số 7 trong cái tên của mã). Để truyền gửi
dữ liệu, chúng ta hãy nhóm các bit dữ liệu mà mình muốn gửi
thành một vectơ. Lấy ví dụ, nếu dữ liệu là "1011" thì vectơ của
nó là:

_ Giả sử, chúng ta muốn truyền gửi dữ liệu trên. Chúng ta tìm
tích của
và p, với các giá trị môđulô 2 [3]:

Máy thu sẽ nhân
với r, để kiểm tra xem có lỗi xảy ra hay không.
Thi hành tính nhân này, máy thu được (một lần nữa, các giá trị đồng
dư môđulô 2):


Vì chúng ta được một vectơ toàn số không cho nên máy thu có thể
kết luận là không có lỗi xảy ra
Sở dĩ một vectơ toàn số không có nghĩa là không có lỗi, bởi vì khi
được nhân với vectơ dữ liệu, một sự thay đổi trong nền tảng xảy ra
đối với không gian bên trong vectơ (vector subspace), tức là hạch
của
. Nếu không có vấn đề gì xảy ra trong khi truyền thông, r sẽ
nằm nguyên trong hạch của
và phép nhân sẽ cho kết quả một
vectơ toàn số không.

Trong một trường hợp khác, nếu chúng ta giả sử là lỗi một bit đã xảy
ra. Trong toán học, chúng ta có thể viết:
môđulô 2, trong đó ei là vectơ đơn vị đứng thứ i (ith unit vector), có
nghĩa là, một vectơ số 0 có một giá trị 1 trong vị trí i (tính từ 1 tính đi).
Biểu thức trên nói cho chúng ta biết rằng có một bit bị lỗi tại vị trí i.
Nếu bây giờ chúng ta nhân

với cả hai vectơ này:

Vì r là dữ liệu thu nhận được không có lỗi, cho nên tích của
và r bằng 0. Do đó

Vậy, tích của
với vectơ nền chuẩn tại cột thứ i (the ith standard
basis vector) làm lộ ra cột ở trong
, vì thế mà chúng ta biết rằng lỗi
đã xảy ra tại vị trí cột này trong
. Vì chúng ta đã kiến tạo
dưới
một hình thức nhất định, cho nên chúng ta có thể hiểu giá trị của cột
này như một số nhị phân - ví dụ, (1,0,1) là một cột trong
, tương
đồng giá trị với cột thứ 5, do đó chúng ta biết lỗi xảy ra ở đâu và có
thể sửa được nó.
Lấy ví dụ, giả sử chúng ta có:


Nếu thi hành phép nhân:

Tích của phép nhân cho chúng ta một kết quả tương đương với cột

thứ 2 ("010" tương đương với giá trị 2 trong số thập phân), và do đó,
chúng ta biết rằng lỗi đã xảy ra ở vị trí thứ 2 trong hàng dữ liệu, và vì
vậy có thể sửa được lỗi.
Chúng ta có thể dễ dàng thấy rằng, việc sửa lỗi do 1 bit bị đảo lộn
gây ra, dùng phương pháp trên là một việc thực hiện được. Bên cạnh
đó, mã Hamming còn có thể phát hiện lỗi do 1 bit hoặc 2 bit bị đảo
lộn gây ra, dùng tích của
khi tích này không cho một vectơ số
không. Tuy thế, song mã Hamming không thể hoàn thành cả hai việc.

V.

Cách sửa l ỗi mã hamming:
_ Mã hamming là một trương hợp của mã vòng
_ Mã hamming co d = 3, có khả năng sửa được một lỗi
_ Một từ mã hamming được biểu diễn dưới dạng tổng quát

c1c2ic4iiic8i… ở đây i là các bit tin và c là các bit kiểm tra.


_ Các bit c là kết quả của phép đo XOR giá trị chỉ vị trí của các bit 1 vớ
i nhau. Quá trình kiểm tra lỗi bên thu diễn ra tương tự như bên phát.
Nếu kết quả của phép XOR là một giá trị khác 0 thì đó chính là vị trí
của bit lỗi.
_ Ví dụ xét khả năng sửa lỗi đơn của mã hamming (7,11) trong trường
hợp từ mã mang tin là 1011101
• Từ mã hamming có dạng c
Các bit 1 ở các vị trí 3,6,9 và 11 đổi các số này sang nhị phân
3↔ 0011, 6↔0110, 9↔ 0111, 11↔1011
• Tính XOR 0011


0110

0111

1011= 1001


Vậy từ mã hamming phát đi là 10100110101
Giả sử ở bên thu thu được từ mã 10000110101. Đổi giá trị chỉ vị trí
của các bit 1 sang nhị phân rồi tính XOR tương tự bên phát
1 ↔0001, 6↔0110, 7↔ 0111 ,9↔ 1001, 11↔ 1011
0001

0110

0110

1001

1011 = 3

• Từ đây phát hiện được bit lỗi là ở vị trí thứ 3. Vậy từ mã thu được sửa l
ại là 10100110101 giống bên phát

MÃ HAMMING VÀ IT CH ẴN L Ẻ B Ổ SUNG

VI.
_


Nếu chúng ta bổ sung thêm một bit vào mã Hamming, thì mã
này có thể dùng để phát hiện những lỗi gây ra do 2 bit bị lỗi, và
đồng thời nó không cản trở việc sửa các lỗi do một bit gây ra.
Nếu không bổ sung một bit vào thêm, thì mã này có thể phát
hiện các lỗi do một bit, hai bit, ba bit gây ra, song nó sẽ cản trở


việc sửa các lỗi do một bit bị đảo lộn. Bit bổ sung là bit được áp
dụng cho tất cả các bit sau khi tất cả các bit kiểm của mã
Hamming đã được thêm vào.
_ Khi sử dụng tính sửa lỗi của mã, nếu lỗi ở một bit chẵn lẻ bị
phát hiện và mã Hamming báo hiệu là có lỗi xảy ra thì chúng ta
có thể sửa lỗi này, song nếu chúng ta không phát hiện được lỗi
trong bit chẵn lẻ, nhưng mã Hamming báo hiệu là có lỗi xảy ra,
thì chúng ta có thể cho rằng lỗi này là do 2 bit bị đổi cùng một
lúc. Tuy chúng ta phát hiện được nó, nhưng không thể sửa lỗi
được.



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×