1. Các phương pháp phát hiện lỗi đơn giản
1.1. Truyền dưthừa
Truyền dưthừa hay còn gọi là phương pháp truyền mỗi ký tựhai lần. Nếu như ởphía đầu
thu hai ký tựnhận được kếtiếp nhau mà không giống nhau tức có lỗi truyền xuất hiện
1.2. Truyền phản hồi
Đây là phương pháp đơn giản đểphát hiện lỗi được sửdụng một thời khi người điều hành
làm công việc truyền dữliệu bằng trực tiếp gõ vào bàn phím. Truyền phản hồi yêu cầu
đường truyền là song công, trong đó mỗi ký tự được truyền ngay sau khi gõ bản phím. Ở
đầu thu, mỗi lần nhận đuợc một ký tựthì lập tức truyền ngược lại ký tự đó cho phía phát
và ký tự đó cũng được hiển thịtrên màn hình
11 trang |
Chia sẻ: tranhoai21 | Lượt xem: 2451 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài giảng truyền dẫn - Chương 5: Mã sửa lỗi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
1
CHƯƠNG V
MÃ SỬA LỖI
Những thông tin truyền từ A B như ta đã thấy thông thường bị sai: di(t) di(t) d’i(t)
di(t) = (... , di-1 , di , di+1 ...)
Sự sai số đó do nhiều nguyên nhân: đường dây truyền, lưu lượng truyền, loại mã dùng,
loại điều chế, loại thiết bị phát, loại thiết bị thu... Thường sai số đó cho phép trong
khoảng: 10-4 10-7 và nhóm sai phụ thuộc loại mạch.
Thường có 2 cách:
• Nếu bộ giải mã tự sửa được nó sẽ sửa trực tiếp.
• Nếu bộ giải mã không tìm được sai thì cần phải truyền lại một bộ phận dữ liệu để thực
hiện sự sửa sai. Người ta còn gọi cách đó là sửa sai bằng cách truyền lại và gọi tắt là
ARQ (Automatic Repeat Request)
1. Các phương pháp phát hiện lỗi đơn giản
1.1. Truyền dư thừa
Truyền dư thừa hay còn gọi là phương pháp truyền mỗi ký tự hai lần. Nếu như ở phía đầu
thu hai ký tự nhận được kế tiếp nhau mà không giống nhau tức có lỗi truyền xuất hiện
1.2. Truyền phản hồi
Đây là phương pháp đơn giản để phát hiện lỗi được sử dụng một thời khi người điều hành
làm công việc truyền dữ liệu bằng trực tiếp gõ vào bàn phím. Truyền phản hồi yêu cầu
đường truyền là song công, trong đó mỗi ký tự được truyền ngay sau khi gõ bản phím. Ở
đầu thu, mỗi lần nhận đuợc một ký tự thì lập tức truyền ngược lại ký tự đó cho phía phát
và ký tự đó cũng được hiển thị trên màn hình
1.3. Dùng mã lặp
Mã lặp được cấu trúc như sau: Nếu như số phần tử “1” trong các phần tử thông tin là số
lẻ thì các phần tử kiểm tra được lặp lại đúng các phần tử thông tin. Nếu như số phần tử
“1” trong các phần tử thông tinlà số chẵn thì các phần tử kiểm tra là nghịch đảo của các
phần tử thông tin
Vd: Cho hai từ mã, mỗi từ mã có 5 phần tử thông tin là : 10110 và 10100
Từ mã lặp là: 1011010110 và 1010001011
1.4. Phương pháp kiểm tra chẵn lẻ
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
2
Đơn giản nhất là phương pháp VRC (Vertical Redundancy Check).Mỗi xâu bit biểu diễn
một ký tự cần truyền đi được thêm vào một bit ( gọi là parity bit).Bit này có giá trị (tuỳ
quy ước) là 0 nếu số lượng các bít 1 trong xâu là chẵn,và ngược lại. Bên nhận sẽ căn cứ
vào đó để phát hiện lỗi
Nhược điểm của VRC là không định vị được bit lỗi nên không thể tự sửa mà phải yêu cầu
truyền lại. Mặt khác dùng phương pháp này có thể không phát hiện được các lỗi không
phải là bit đơn ( chẳng hạn co 2 bit trong xâu cùng bị lỗi, giá trị của parity bit cũng không
thay đổi).
Để khắc phục, người ta dùng thêm phương pháp LRC (Longitudinal Redundancy Chech).
LRC áp dụng kiểm tra parity bit cho từng khối các ký tự ( ví dụ cho vùng dữ liệu trong
một frame).Kết hợp cả hai phương pháp VRC-LRC sẽ cho phép kiểm soát lỗi theo cả hai
chiều, nâng cao hiệu quả đáng kể so với việc dùng riêng từng phương pháp. Hình 4-1 cho
ví dụ minh họa kiểm soát lỗi theo cả 2 phương pháp VRC-LRC.
1.5. Mã phát hiện lỗi và sửa lỗi
1.6. Mã tuyến tính
1.6.1. Định nghĩa
Ta có vectơ thông tin I của k bít
i = (i1,i2,ik)
khi đó ta tạo một từ mã có độ dài là n
c = (i1, i2, ik, Ck+1, Cn) Ci € {0,1}
1.6.2. Tính chất
1.7. Mã vòng
Việc nghiên cứu mã tuyến tính trên đây nhằm mục đích là sao ta có thể tìm một họ mã có
đủ các tính chất sau:
• mã hóa và giải mã đơn giản.
• khả năng tìm và sửa lỗi độc lập theo các gói đã truyền.
Ở phần trên chúng ta đã thấy việc kiểm tra theo VRC hoặc LRC còn những sai sót mà ta
khó tránh khỏi, với mã VRC, nếu sai số theo chiều V là số chẳn bit thì bit kiểm tra cũng
không có gì thay đổi.
Tương tự ta có nếu số bit sai là 2n, ta cũng không thể phát hiện gì được.
Mã vòng với kiểm tra CRC (Cyclic Redundancy Check) có nhiều hiệu quả hơn trong việc
thông báo lỗi.
1.7.1. Định nghĩa
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
3
Mã vòng (n,k) là một mã tuyến tính (n,k) với sự hoán vị vòng của một từ mã là một từ
mã.
C= (Cn-1 , ... , C0) € C (Cn-2 , ... , C0 , Cn-1) € C
Ta có thể viết một từ mã dưới dạng đa thức:
C(x) = Cn-1Xn-1 + C1X + Co
và theo định nghĩa trên ta có:
C(X) € C Xi.C(X) modul (Xn + 1) € C
1.7.2. Đa thức sinh
Sự nhận biết ma trận phát G của một mã vòng được đưa đến từ sự nhận biết của đa thức
bậc n-k.
Do sự chính xác của tính chất sau:
Tính chất: Tất cả các từ mã vòng (n, k) là sự nhân của đa thức g(x) bậc (n-k) kết hợp từ
dòng cuối của G và gọi là đa thức phát.
Ví dụ: Với mã tuyến tính biểu diễn ở trên, ta có ma trận
Vậy:
g(x) = x3 + x + 1
1.7.3. Tạo mã CRC
Phương pháp tạo CRC bao gồm việc dịch thông báo sang trái và chia cho một hàm cho
trước với modul 2. Kết quả dư lại của phép chia chính là CRC và được truyền theo thông
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
4
báo. Bên thu sau khi nhận được thông báo người ta cũng đem chia cho hàm biết trước
như bên phát. Nếu kết quả bằng 0, phép truyền không có sai số.
Trong thực tế, nếu dùng cách kiểm tra CRC kết hợp với ARQ thì hiệu quả rất cao.
Nếu dùng CRC với 16 bit thì có thể chỉ sai 1 bit khi ta truyền 1014 bit.
Cách tính CRC gồm bốn bước.
• Cho r bằng bậc của G(x), gắn r bit 0 vào cuối của frame, sau bit có trọng số thấp
nhất, vì thế bây giờ nó bao gồm m+r bit, tương ứng với đa thức xrM(x).
• Chia xâu bit tương ứng với xrM(x) cho G(x), dùng phép chia modulo 2.
• Lấy xrM(x) trừ đi phần dư (luôn có số bit nhỏ hơn hoặc bằng r), dùng phép trừ
modulo
• Kết quả nhận được frame được tính checksum (checksumed frame) cần phải
truyền đi - ta gọi nó là đa thức T(x).
Ví dụ: cần tính CRC cho thông báo M(x) = 110101.
Ta có thể biểu diễn M(x) dạng đa thức.
Các phép tính CRC được thực hiện 4 bước sau với các phép tính thực hiện với modul 2.
Bước 1:
Chuyển thông báo nhị phân thành đa thức
M(x) = (1).x5 + (1).x4 + (0).x3 + (1).x2 + (0).x1 + (1).x0
Bậc cao nhất là (n-1) = 5
M(x) = x5 + x4 + x2 + 1
Ta chọn độ dài của CRC. Nếu ta chọn CRC có độ dài là c bit.
Ta chọn ra hàm G(x) = xc + 1. [Thường hàm G(x) cho trước tùy giá trị c, và có nơi gọi
G(x) là P(x)].
Bước 2:
Nhân M(x).xc/G(x)
Ví dụ ta chọn c = 3
Ta có:
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
5
Bước 3:
Thực hiện phép tính M(x).x0/G(x) với modul 2, ta có được:
Bước 4:
Lập T(x)
Với T(x) = xc.M(x) + R(x)
T(x) chính là bảng thông báo cần truyền đi.
Ví dụ: Cần truyền thông tin 110101
1. Tạo M(x)
M(x) = x5 + x4 + x2 + 1
Chọn C = 3 G(x) = x3 + 1
2. Tạo M(x) x3/G(x)
3. Tính
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
6
X8
4. Tính T(x) = xcM(x) + R(x)
= x8 + x7 + x5 + x3 + x + 1
Thông tin cần truyền là:
1 1 0 1 0 1 0 1 1
1.7.4. Thu và kiểm tra CRC
Để kiểm tra sai số khi truyền, bộ phận thu đem khối thông tin thu được chia cho G(x)
theo modul 2. Nếu phần dư còn lại là 0, thì từ mã nhận được không sai, nếu phần dư khác
o thì kết quả nhận được không đúng.
Thử CRC
Ta có:
Và
Ta có:
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
7
Mà
Ví dụ ta có:
1.7.5. Mạch tạo mã CRC:
Để tạo mã CRC người ta có thể dùng phần mềm, tuy nhiên trên thực tế để nhanh chóng
hơn và giảm bớt thời gian sử dụng cho P, người ta thường dùng phần cứng để tạo CRC
và kiểm tra.
Thao tác cộng MOD-2 và dịch có thể dùng một mạch ghi dịch phản hồi về một cổng
EXOR. Số lượng cột của bộ ghi dịch phụ thuộc vào giá trị C đã chọn cho G(x) và cũng là
số bit cho mã CRC.
Error! Bookmark not defined. Mạch tạo CRC dùng bộ ghi dịch với G(x)=x3-1.
Ví dụ : Ta cần truyền thông tin:
M(x) = 1010001101 với hàm
G(x) = x5 + x4 + x2 + 1
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
8
Ta có mạch dịch và các bước thực hiện như hình vẽ.
Error! Bookmark not defined. Mạch ghi dịch với hàm G(x) = x5 + x4 + x2 + 1.
Người ta có thể tạo mã CRC dài 12 bit, 16 bit, 32 bit ... Vấn đề là chọn G(x) sao cho phù
hợp.
Thường cho 16 bit người ta chọn:
G(x) = x16 + x15 + x2 + 1
Hoặc G(x) = x16 + x12 + x5 + 1
Error! Bookmark not defined. Mạch dịch với G(x) = x16 + x15 + x2 + 1.
Mạch tạo CRC cho 16 bit như hình vẽ:
Trong mạng Ethernet, người ta truyền 1500 bytes cần CRC là 32 bit.
Và hàm G(x) được sử dụng là:
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
Và dùng Intel 82586 coprocessor on chip.
Từ những ví dụ trên ta có thể nhận xét một cách máy móc rằng: để tạo ra mạch dịch với
các cổng EXOR và các FF cho một hàm có sẵn ở đầu vào các thành phần x có giá trị 1 sẽ
có cổng EXOR, tín hiệu vòng về sẽ được đưa đến các mạch EXOR đó, số lượng các FF
trong bộ ghi dịch là C đã chọn của hàm G(x).
1.8. Mã Hamming
1.8.1. Giới thiệu
Đây là một mã tuyến tính. Mã này được R. W Hamming đưa ra vào năm 1960. Mã
Hamming sử dụng rộng rãi trong hệ truyền dữ liệu dùng kiểm tra lỗi phía trước FEC (
Forward Error Correction). Mã có khả năng sửa được một sai lỗi trong từ mã, sơ đồ cấu
tạo đơn giản và xác định phần tử lỗi.
1.8.2. Trọng lượng và khoảng cách Hamming
- Trọng lượng Hamming (Hamming weight) của véctơ từ mã v, ký hiệu là w(v)
được định nghĩa là số thành phần khác 0 có trong v.
- Khoảng cách Hamming (Hamming distance) của 2 vectơ từ mã có cùng chiều u và
v, ký hiệu là d(u,v), được định nghĩa là số vị trí mà chúng có các giá trị khác nhau
VD: u = 1001011
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
9
v = 0100011
d(u,v) = 3
Khoảng cách Hamming của u và v cũng là trọng lượng Hamming của tổng u và v
VD: u + v = 1101000
W(u+v) = 3
1.8.3. Tạo mã Hamming
Tạo mã Hamming C(7,4)
- Vị trí các dấu trong từ mã:
x y a3 z a5 a6 a7
Trong đó:
x,y,z : Là các bít mang dấu kiểm tra
a3,a5,a6,a7: Là các bít mang thông tin
- Xác định các dấu kiểm tra theo các dấu mang thông tin
x = a3 + a5 + a7
y = a3 + a6 + a7
z = a5 + a6 + a7
- Tạo mã:
Xác định các dấu trong từ mã.
Xác định các dấu kiểm tra theo tổng kiểm tr.
Đặt các dấu kiểm tra vào từ mã.
VD:
Mã Hamming mở rộng C(n,k)
Trong đó: n: từ mã
k: Dấu mang tin
r = n – k: Dấu kiểm tra
- Vị trí các dấu: x1,x2,..xn.
- Các dấu kiểm tra : Nhận các vị trí 2i (i= 0,1,2,) 2i < n
Các dấu còn lại là các dấu mang tin
- Xác định các dấu kiểm tra theo phương pháp tổng kiểm tra sau:
24 23 22 21 20 Xác định các dấu
0 0 0 0 1 x1
0 0 0 1 0 x2
0 0 0 1 1 x3
0 0 1 0 0 x4
0 0 1 0 1 x5
0 0 1 1 0 x6
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
10
0 0 1 1 1 x7
0 1 0 0 0 x8
0 1 0 0 1 x9
Tổng kiểm tra : 20 = x1 + x3 + x5 + x7 + x9
21 = x2 + x3 + x6 + x7
22 = x4 + x5 + x6 + x7
Nếu tổng kiểm tra vượt quá độ dài của từ mã thì không xử lý được.
1.8.4. Giải mã Hamming
Mang từ mã nhận được tách thành các dấu mang tin và dấu kiểm tra
Lập lại các tổng kiểm tra theo qui tắc sau:
TKT 20 = x + a3 + a5 + a7
TKT 21 = y + a3 + a6 + a7
TKT 22 =z + a5 + a6 + a7
Nếu tất cả các tổng kiểm tra bằng 0 thì từ mã nhận được không sai.
Nếu có ít nhất một TKT khác 0 thì từ mã nhận được có sai. Khi đó, lấy tất cả số thông tin
của các TKT sai thì sẽ xác định được vị trí dấu sai
VD: TKT 20 = 0
TKT 21 # 0
TKT 22 # 0
Vậy vị trí sai là bít a6
Bµi gi¶ng TruyÒn dÉn II
Bé m«n HTTT & M¹ng
11