Nếu các đường dây tồn tại trong một môi trường xuyên nhiễu thí dụ như mạng điện thoại công cộng. Điều này có nghĩa là các tín hiệu đại diện cho bit 1 bị đầu thu
dịch ra như bit nhị phân 0 và ngược lại. Để xác suất thông tin thu được bởi DTE đích giống thông tin đã truyền đạt được giá trị cao, cần phải có một vài biện pháp để nơi thu có khả năng nhận biết thông tin thu được có chứa lỗi hay không, nếu có lỗi sẽ có một cơ cấu thích hợp để thu về bản copy chính xác củathông tin.
Để chống sai khi truyền dữ liệu thường có 2 cách : • Dùng bộ giải mã có khả năng tự sửa sai
• Truyền lại một bộ phận của dữ liệu để thực hiện việc sửa sai, cách này gọi là ARQ – Automatic Repeat Request .
Mô hình minh hoạ việc bảo vệ và sửa sai như sau :
a.) Phương pháp kiểm tra chẵn lẻ theo ký tự ( parity bit )
Phương pháp thông dụng nhất được dùng để phát hiện lỗi của bit trong truyền không đồng bộ và truyền đồng bộ hướng ký tự là phương pháp parity bit. Với cách này máy phát sẽ thêm vào mỗi ký tự truyền một bit kiểm tra parity đã được tính toán trước khi truyền. Khi nhân được thông tin truyền, máy thu sẽ thực hiện các thao tác tính toán trên các ký tự thu được , và so sánh với bit parity thu được. Nếu chúng bằng nhau, được giả sử là không có lỗi, ở đây ta dùng từ giả sử, bởi vì cách này có thể không phát hiện được lỗi trong khi lỗi vẫn tồn tại trong dữ liệu. Nhưng nếu chúng khác nhau thì chắc chắn một lỗi xảy ra .
- Dùng kiểm tra chẵn lẻ để dò ra một bit sai:
Để tính toán parity bit cho một ký tự, số các bit trong mã ký tự được cộng module 2 với nhau và parity bit được chèn thêm sao cho tổng số các bit 1 bao gồm cả parity bit là chẵn (even parity) hoặc là lẻ (odd parity)
Trong bộ mã ASCII mỗi ký tự có 7 bit và một bit kiểm tra. Với kiểm tra chẵn giá trị của bit kiểm tra là 0 nếu số lượng các bit có giá trị 1 trong 7 bit là chẵn và có giá trị 1 trong trường hợp ngược lại.
Với kiểm tra lẻ thì ngược lại. Thông thường người ta sử dụng kiểm tra chẵn và bit kiểm tra gọi là P. Giá trị kiểm tra đó cho phép ở đầu thu phát hiện những sai sót đơn giản
Thí dụ Kí tự Mã ASCII Từ mã phát đi Bit kiểm tra P A 1000001 10000010 0 E 1010001 10100011 1
Phương pháp parity bit chỉ phát hiện các lỗi đơn bit (số lượng bit lỗi là số lẻ ) và không thể phát hiện các lỗi khi số bit lỗi là một số chẵn.
- Dùng kiểm tra chẵn lẻ để dò sai hai bit:
Vì mỗi lần thực hiện kiểm tra chẵn lẻ cho phép dò ra một bit lỗi nên ta có thể nghĩ rằng nếu thực hiện nhiều phép kiểm tra đồng thời cho phép dò được nhiều lỗi. Thí dụ, để dò ra 2 lỗi của một chuỗi dữ liệu có thể thực hiện hai phép kiểm tra, một với các bit chẵn và một với các bit lẻ.
Cho chuỗi dữ liệu: 01101000
Lần lượt thực hiện kiểm tra chẵn với các bit ở vị trí 1, 3, 5, 7 và các bit ở vị trí 2, 4, 6, 8. Gọi P1 và P2 là các bit kiểm tra:
P1=0+1+1+0 = 0 và P2=1+0+0+0 = 1.
Chuỗi dữ liệu phát: 01101000 01.
Máy thu dò ra lỗi khi 2 bit liên tiếp bị sai. Tuy nhiên, nếu hai bit sai đều là 2 bit chẵn (hoặc 2 bit lẻ) thì máy thu cũng không dò ra.
b.Phương pháp kiểm tra theo ma trận
Khi truyền đi một khối thông tin, mỗi ký tự được truyền đi sẽ được kiểm tra tính chẵn lẻ theo chiều ngang, đồng thời cả khối thông tin này cũng được kiểm tra tính chẵn lẻ theo chiều dọc. Như vậy cứ sau một số byte nhất định thì một byte kiểm tra chẵn lẻ cũng được gửi đi. byte chẵn lẻ này được tạo ra bằng cách kiểm ta tính chẵn lẻ của khối ký tự theo cột. Dựa vào các bit kiểm tra ngang và dọc ta xác định được toạ độ của bit sai và sửa được bit sai này. Một Frame coi như một khối ký tự sắp xếp có 2 chiều. mỗi ký tự có bit kiểm tra chẵn lẻ P.Nếu ta sắp xếp các bit của ký tự đúng vị trí tương ứng từ trên xuống thì ta có một khối các ký tự
Tính theo chiều ngang, giá trị bit chẵn lẻ P của dòng thứ i sẽ là : Rj = b1j + b2j + ……+bnj đây là phép cộng modun 2 Với Rj : bit kiểm tra thứ tự thứ j
bij : bit thứ i của ký tự thứ j n : số lương bit trong một ký tự Nếu tính theo chiều dọc ta có :
Ci = bi 1 + bi 2 + bi 3 ... + bi m Với Ci :: bit kiểm tra cột thứ i
Chúng ta có thể thấy rằng mặc dù các lỗi 2 bit trong một ký tự sẽ thoát khỏi kiểm tra parity theo hàng, nhưng chúng sẽ bị phát hiện bởi kiểm tra parity theo cột tương ứng. Dĩ nhiên điều này là đúng chỉ khi không có lỗi 2 bit xảy ra trong cùng một cột tại cùng thời điểm. Rõ ràng xác suất xảy ra trường hợp này nhỏ hơn nhiều so với xác suất xảy ra lỗi 2 bit trong một ký tự. Việc dùng kiểm tra theo ma trận cải thiện đáng kể các đặc trưng phát hiện lỗi của kiểm tra chẵn lẻ
Tuy nhiên phương pháp này cũng không hoàn toàn hiệu quả. Giả sử bit thứ nhất và bit thứ 3 của ký tự thứ nhất bị sai kiểm tra hàng sẽ không bị sai, nhưng kiểm tra chẵn lẻ của cột sẽ phát hiện bit thứ nhất và thứ 3 bị sai, ta biết sự truyền bị sai nhưng không biết sai ở vị trí nào. Bây giờ ta lại giả thiết rằng bit thứ nhất và bit thứ 3 của ký tự thứ 5 cũng bị sai đồng thời vớí bit thứ nhất và bit thứ 3 của ký tự thứ nhất, lúc đó ta không phát hiện được cột bị sai, kết quả thu được bị sai nhưng ta không phát hiện được.
Khi bậc sửa sai lớn (S>2) thì thiết bị phức tạp. Thực tế hay dùng các mã có bậc sửa sai S ≤ 2 : tức là có khả năng sửa được 1, 2 chỗ sai trong từ mã.
a.)Mã hamming:
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 mãn: 2n - 1 U m + n hay 2n U 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).
- Mã H có 3dmin = có thể phát hiện và sửa tất cả lỗi sai bậc 1 (r=1, s=1)
- Mã H có 4dmin = có thể phát hiện sữa chữa bậc 2 (r =2) và sửa sai bậc 1 (S = 1). Để thành lập mã H ta chọn một bộ mã đầy có chiều dài từ mã m phần tử mang tin. Thêm vào đó K phần tử dư (kiểm tra) thì được 1 từ mã H có độ dài n=m+K.
Quá trình mã hóa, dịch mã của mã H sửa sai bậc 1 như sau:
-Mã hóa: đầu tiên xác định K. Sai có thể xuất hiện ở 1 trong các phần tử của từ mã, kể cả không có sai trong từ mã. Ta có n+1 khả năng xảy ra khi từ mã được truyền đi. Ở đây ta xét sai bậc 1 là loại sai có thể sửa được.
Chọn K sao cho có thể phân biệt được n+1 trường hợp nói trên. Để đảm bảo điều đó, K cần thỏa mãn bất phương trình: 2K ≥ n +1
Bảng 2.2: Các phần tử dư trong mã Hamming
m 1 2 3 4 5 6 7 8 9
K 2 3 3 3 4 4 4 4 4
n 3 5 6 7 8 9 10 11 12
Vị trí của các phần tử dư: Để thuận tiện cho việc phát hiện sai thì K nằm ở các vị trí là bội của 2 trong độ dài từ mã n. Tức là tại các vị trí 1, 2, 4, 8, …
Các vị trí còn lại là các vị trí mang tin. Ví dụ: mã H có n=7 thì vị trí của các phần tử mang tin và phần tử dư như sau:
K1 K 2 m4 K3 m3 m2 m1
1 2 3 4 5 6 7
_2o_ 21 22
Với cách xếp đặt như trên thì khi kiểm tra, kết quả kiểm tra sẽ chỉ rõ vị trí sai trong từ mã.
- Các phần tử K có thể có giá trị 0 hay 1 tùy thuộc vào phần tử mang tin tham gia vào phép kiểm tra.
- Nếu dùng phép kiểm tra chẵn: số phần tử 1 trong phép kiểm tra luôn chẵn. - Có bao nhiêu phần tử K có bấy nhiêu phép kiểm tra để phát hiện sai. Sau đây ta xét có những phần tử nào của từ mã tham gia vào phép kiểm tra.
Bảng 2.3:Biểu diễn các phần tử kiểm tra
Số thứ tự vị trí Vị trí biểu diễn ở hệ 2 Các phần tử của mã nhận được 1 2 3 4 5 6 7 001 010 011 100 101 110 111 K1 K2 m4 K3 m3 m2 m1 Sau đó ta thành lập bảng so sánh kiểm tra:
K1 m4 m3 m1
K2 m4 m2 m1
K3 m3 m2 m1
Phép kiểm tra 1 gồm có K1 và các phần tử mang tin mà thứ tự của chúng trong từ mã khi viết ở hệ hai có phần tử 1 ở cuối cùng. Đó là các số:
0001 0011 0101 0111
Tương ứng với phần tử đứng ở vị trí 1 (K1), vị trí thứ 3 (m4), vị trí 5 (m3), vị trí 7 (m1).
- Nhìn vào bảng 1 ta xem ở cột thứ 1 ứng với các phần tử 1 trong cột này, ta dóng sang phải, sẽ tìm được các phần tử tgia vào phép kiểm tra 1.
- Phép kiểm tra 2 gồm các phần tử mà số thứ tự của nó viết ở hệ 2 có phần tử 1 ở hàng 2:
0010 0011 0110 0111
Tương tự như trên, ta dóng từ các con số 1 ở cột 2 ra và tìm được các phần tử tgia phép kiểm tra thứ 2 là K2m4m2m1.
- Phép kiểm tra 3 gồm các phần tử mà số thứ tự của nó viết ở hệ hai có phần tử 1 ở hàng thứ 3.
101 0110 0111
Trên cơ sở bảng hai ta tìm các giá trị của K trong từ mã = cách thực hiện các phép kiểm tra chẵn (lẻ).
Ví dụ: lấy từ mã ứng với số 1 là 0001 ta viết thứ tự từ mã nhận đươc: m = 4 → K = 3 → n = 7
? ? 0 ? 0 0 1 Theo bảng hai ta có:
-Phép kiểm tra 1: K1 + m4 + m3 + m1 = 0 (mod 2) ?+0+0+1=0 => K1 =1 -Phép kiểm tra 2: K2 + m4 + m2 + m1 = 0 ?+0+0+1=0 => K2 =1 - Phép kiểm tra 3: K3 + m3 + m2 + m1 = 0 ?+0+0+1=0 => K3 =1
Như vậy số 1 sau khi mã hóa thành mã H có n=7 sẽ có dạng: 1101001 -Dịch mã: Ở phía thu bộ dịch mã tiến hành phep kiểm tra chẵn như bảng 2. Nếu kết quả phép cộng trong phép kiểm tra ≠ 0 thì có sai. Các kết quả viết ở hệ 2 khi dịch sang hệ 10 cho ta vị trí phần tử sai ở trong từ mã. Từ mã H cho các giá trị từ 0÷ 9.
Bảng 2.4:Biểu diễn vị trí và các giá trị của các phần tử
10 Vị trí và các giá trị của các phần tử K1 K2 m4 K3 m3 m2 m1 0 1 2 3 4 5 6 7 8 9 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Ví dụ: cho quá trình dịch mã, phát hiện sai sữa:
cho từ mã H của 6: 1 1 0 0 1 1 0 1 2 3 4 5 6 7 (số thứ tự các phần tử) giả sử sai ở phần tử thứ 6. Ta ký hiệu phần tử sai = 1 gạch ngang, ta có từ mã là: 1 1 0 0 1 0 0 Nhận được từ mã này, phía thu tiến hành các phép kiểm tra theo bảng 2 để phát hiện có sai hay không và sai ở vị trí nào?
Ta nhận được kết quả kiểm tra được viết theo giá trị từ lớn đến nhỏ của K là: 1102 ~ 610 :chứng tỏ sai ở vị trí thứ 6.
Muốn sửa được sai nhiều hơn thì phải tăng chiều dài từ mã và số phần tử dư K. Nhìn vào bảng hai ta thấy rõ 2 điểm
- Nếu đặt các phần tử K ở các vị trí là bội của 2 như 1, 2, 4, 8…thì mỗi phần tử K chỉ tham gia vào 1 phép kiểm tra, điều đó cho phép kiểm tra chẵn dễ.
-Từ bảng 2 ta có thể thấy được cơ chế phát hiện vị trí sai như sau:
Ví dụ 1: giả sử phần tử thứ 7 là m1 sai, vì m1 tham gia cả vào 3 phép kiểm tra nên kết quả kiểm tra phải là 111. 1112 ~ 710 chỉ rõ rằng p tử thứ 7 là m1 bị sai.
Ví dụ 2: giả sử phần tử thứ 2 là K2 bị sai, do đó chỉ có lần kiểm tra thứ 2 có K2 tham gia là cho kết quả 1 còn các phép kiểm tra khác cho kết quả 0. Ba phép kiểm tra cho ta kết quả là 010. 0102 ~ 210 chỉ rõ rằng phần tử thứ 2 là K2 trong từ mã bị sai. Có thể dùng ma trận để biểu diễn quá trình giải mã: gọi F là ma trận hàng biểu diễn từ mã đúng. E là ma trận biểu diễn các sai trong từ mã. Ta có từ mã nhận được ở phía thu trong đó có sai là: F’=F+E
Phép kiểm tra được thực hiện:
R = F'.HT = F.HT + E.HT = E.HT ĐK đúng: F.HT = 0 Trong đó HT là ma trận chuyển vị của ma trận thứ H.
Vậy kết quả của phép kiểm tra trên ;là tích của ma trận sai E và HT Ta lấy ví dụ sai ở phần tử thứ 6 để minh họa:
Ma trận F có dạng: F = [1100110] Ma trận E có dạng: E = [0000010]
Vậy F'= F + E = [1100100]
Ma trận H có số hàng bằng số phép kiểm tra (số phần tử dư) và số cột bằng chiều dài từ mã n.
Trong các hàng của ma trận H số 1 nằm ở vị trí các phần tử có tham gia vào phép kiểm tra, các phần tử còn lại là 0.
Ví dụ ở phép kiểm tra 1 chỉ có các phần tử mà số thứ tự viết ở hệ 2 có số 1 ở cuối cùng là các phần tử 1, 3, 5, 7 ở hệ 10 tham gia. Nên hàng thứ 1 của ma trận H có dạng 1010101.
Phép kiểm tra thứ 2 chỉ có các phần tử mà số thứ tự viết ở hệ 2 có số 1 ở cột thứ 2 là các phần tử 2, 3, 6, 7 ở hệ 10 tgia. Nên hàng thứ 2 của ma trận H có dạng 0110011 Tương tự cho hàng thứ 3 giống như trên 0001111. Vì các hàng của H đều thoả mãn phép kiểm tra chẵn, nên trong phép nhân HT, ở hàng nào có phần tử sai (trong E) tgia vào phép kiểm tra, thì hàng đó mới xuất hiện số 1. Kết quả là ma trận cột R sẽ chỉ thứ tự của phần tử bị sai viết ở hệ 2.