Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 46 Chương 3 MÃ HÓA CHỐNG NHIỄU Trong chương này chúng ta sẽ nghiên cứu vấn đề mã hóa và giải mã kênh truyền, tức là mã hóa các tin nguồn thành các từ mã trước khi truyền đi để chống nhiễu do kênh truyền, và sau đó giả mã các xâu nhận được để xác định chính xác từ mã nào đã được gửi đi. 3.1 CÁC KHÁI NIỆM CƠ BẢN 3.1.1. Các khái niệm về kênh truyền Trong các phần trước, chúng ta đã giới thiệu các loại mã dùng trong mã hóa, với mục tiêu phát hiện lỗi và sửa lỗi, tức là chúng ta chỉ quan tâm đến số các lỗi chúng ta có thể phát hiện và sửa chữa mà không quan tâm đến việc làm thế nào, hoặc nơi mà các lỗi đó xảy ra. Tuy nhiên, mỗi kênh truyền có thể có khả năng xảy ra lỗi với các xác suất khác nhau. Shannon đã đề xuất mô hình truyền tin có xem xét đến xác suất xảy ra lỗi trên kênh truyền gọi là mô hình xác suất. (Probabilistic Model). Trong các phần sau của giáo trình này, chúng ta sử dụng mô hình xác suất trong việc nghiên cứu các mã chống nhiễu. Về mặt vật lý, một kênh truyền là một môi trường truyền tin, có thể gửi và nhận tin, có thể có nhiễu gây lỗi cho việc truyền và nhận tin. Về mặt toán học, ta có một số định nghĩa hình thức cho kênh truyền theo mô hình xác suất như sau: Định nghĩa 3.1 Một kênh truyền bao gồm một bảng ký hiệu A = {a1, a2, … , aq } và một tập các xác suất kênh truyền (xác suất P(nhận được aj | khi đã gửi ai), có dạng : { P(a j received |ai was sent ) } (3.1) Các xác suất trên phải thỏa mãn điều kiện: ( | ) 1 1 q j P a j received ai was sent , ai A. (3.2) Thí dụ 3.1 Một kênh truyền với bảng ký hiệu nhị phân A = {0, 1}sẽ bao gồm tập 4 xác suất sau: p1 = P( nhận được ‘0’ | khi đã gửi ‘0’) p2 = P( nhận được ‘1’ | khi đã gửi ‘0’) p3 = P( nhận được ‘0’ | khi đã gửi ‘1’) p4 = P( nhận được ‘1’ | khi đã gửi ‘1’) các xác suất này thỏa mãn điều kiện (3.2): p1 + p2 = 1 và p3 + p4 = 1 Định nghĩa 3.2 Một kênh truyền gọi là kênh không nhớ nếu với mọi xâu x = x1 x … xn và c = c1c2 … cn đều thỏa mãn: P( x received |c was sent ) = n i P xi received ci was sent 1 ( | )Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 47 Chú ý rằng trong kênh không nhớ thì mọi lỗi là độc lập với nhau, tức là lỗi xảy ra khi gửinhận một bit (chẳng hạn gửi 0 nhận được 1) là độc lập với lỗi xảy ra ở bit khác. Đặc biệt, với bảng mã nhị phân A = {0 , 1}, nếu có một kênh truyền mà trong đó mọi xác suât lỗi là như nhau P(nhận 0 | khi gửi 1), hoặc P(nhận 1 | khi gửi 0) với cùng xác suất p < 1 2 , thì kênh truyền đó gọi là kênh truyền đối xứng. Các kênh đối xứng là một mô hình xác xuất được sử dụng nhiều trong lý thuyết mã hóa. Chú ý rằng nếu xác suất lỗi là p thì xác suất nhận đúng là 1 – p. Ta có định nghĩa sau: Định nghĩa 3.3 Một kênh truyền nhị phân đối xứng là một kênh trong đó tồn tại số p < 1 2 , sao cho: P( 1 received |0 was sent ) = P( 0received |1 was sent ) = p P( 1received |1 was sent ) = P( 0 received |0 was sent ) = 1 – p Số p như trên được gọi là ‘xác suất chéo’ của kênh truyền nhị phân đối xứng. Hình dưới đây mô tả một kênh nhị phân đối xứng, với xác suất chéo là p (với p < 1 2 ). Xác suất mắc lỗi cùng là p khi gửi đi ‘0’ nhận được 1, hay khi gửi đi ‘1’ nhận được ‘0’. Xác suất nhận đúng sẽ là 1 – p. Hình 3.1. Kênh đối xứng nhị phân. Thí dụ 3.2. Giả sử có một xâu bit được gửi đi trên kênh nhị phân đối xứng, xác suất nhận sai là 0.01. Vậy xác suất để nhận được xâu bit ‘10011000’ là bao nhiêu khi xâu bit gửi đi là ‘00000000’? Giải: Do xác suất nhận sai là 0.01 nên xác suất nhận đúng là 1 – 0.01 = 0.99. Để nhận được xâu bit 10011000 khi xâu bit 00000000 được gửi đi thì bit đầu tiên, bit thứ 4 và bit 5 nhận được sai, còn các bit còn lại nhận được đúng. Do việc gặp lỗi ở các bit là độc lập với nhau, theo quy tắc nhân xác suất, ta tính được xác suất để xảy ra trường hợp này là: (0.99)5(0.01)3 = 0.0000009509900499 ◄Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 48 3.1.2. Quy tắc giải mã người láng giềng gần nhất Bài toán giải mã: Giả sử một từ mã c trong bộ mã C được gửi đi, ta nhận được xâu bit x. Từ xâu x, ta cần khôi phục được từ mã c. Đó là công việc chủ yếu của quá trình giải mã. Nếu việc truyền tin không có lỗi, khi đó x sẽ giống c. Nhưng nếu việc truyền tin có lỗi, ví dụ đường truyền có tạp âm (có nhiễunoise), thì x sẽ không giống c. Vậy có thể sửa lỗi như thế nào, nói cách khác, có thể khôi phục được c như thế nào từ xâu nhận được x? Một cách giải quyết là tính khoảng cách Hamming giữa x và mỗi một trong các từ mã của C. Khi đó, để giải mã x, ta lấy từ mã có khoảng cách Hamming nhỏ nhất đối với x và coi đó là từ mã c đã gửi đi. Phương pháp giải mã này được gọi là Quy tắc giải mã người láng giềng gần nhất. Định nghĩa 3.4. Cho C là mã với độ dài n trên bảng chữ cái A. Quy tắc giải mã ‘người láng giềng gần nhất’ (nearest neighbor decoding) phát biểu như sau: x A, x được giải mã thành cx C, nếu cx là từ mã gần nhất với x. (theo khoảng cách Hamming) Tức là, nếu ký hiệu D(x) là giải mã của từ x, thì D(x) = cx , với cx thỏa điều kiện: d(x, cx) = min {d(x, c), c C} Thí dụ 3.3. Sử dụng phương pháp giải mã người láng giềng gần nhất để xác định từ mã nào được gửi đi từ mã C = {00000,01000, 10011} nếu xâu nhận được là 01100. Giải: Trước tiên, chúng ta tìm khoảng cách giữa 01100 với mỗi từ mã. Ta có: d(00000,01100) = 2, d(01000,01100) = 1, d(10011,01100) = 5. Vì từ mã gần nhất đối với 01100 là 01000, ta kết luận 01000 là từ mã đã được gửi đi. ◄ Chú ý: Với các xâu nhị phân cùng độ dài, khoảng cách Hamming có thể tính bằng công thức: d(x, y) = w( x + y) trong đó w(x) là trọng số của xâu bit x, là số ký hiệu khác 0 trong xâu bit x, phép cộng được hiểu là phép cộng hai xâu bit. Next T3 143 3.1.3. Quy tắc giải mã hợp lẽ cực đại Trong mô hình xác suất, các quy tắc giải mã cũng dựa trên một xác suất. Quy tắc giải mã hợp lẽ cực đại cho phép giải mã xâu nhận được bởi từ mã phù hợp nhất với từ mã đã được gửi. Giả sử một từ mã c trong mã C được gửi đi, nhận được xâu bit x, do kênh truyền có nhiễu, xâu bit x không trùng với từ mã nào của bộ mã C. Ta cần giải mã xâu x thành cx C, sao cho xác suất để nhận được x khi gửi cx là lớn nhất, so với xác suất để nhận được x khi gửi một từ mã bất kỳ c trong C. Tức là việc giải mã x thành cx là hợp lý nhất (hợp lẽ cực đại). Ta có định nghĩa sau:Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 49 Định nghĩa 3.5. Cho C là mã với độ dài n trên bảng chữ cái A. Quy tắc giải mã hợp lẽ cực đại (maximum liklihood decoding) như sau: x An, x được giải mã thành cx C, khi mà: P( x: received |cx was sent) = maxcC { P( x received |c was sent ) } Tức là, nếu ký hiệu D(x) là giải mã của từ x, thì D(x) = cx , với cx là từ mã có khả năng nhất sẽ biến thành x, so với các từ mã khác khi được gửi đi. Bây giờ chúng ta sẽ chỉ ra rằng Phương pháp giải mã người láng giềng gần nhất sẽ đem lại một từ mã giống nhiều nhất với từ mã được gửi đi và như vậy đó cũng là phép giải mã hợp lẽ cực đại. Định lý 3.1 Trong một kênh truyền nhị phân đối xứng với xác suất chéo p < 1 2 , phương pháp giải mã người làng giềng gần nhất là tương đương với phương pháp giải mã hợp lẽ cực đại. Chúng minh: Cho C là một bộ mã nhị phân, giả sử c là 1 từ mã bất kỳ trong C được gửi đi và ta nhận được xâu x sai khác i lỗi so với c, tức là d(c, x) = i. Do x có i bit nhận sai và n i bit nhận đúng, và xác suất nhận sai là p (xác suất nhận đúng là 1 – p) nên ta có: P( x received | c was sent ) = pi(1 – p)n – i Vì p < 1 2 , nên ta có 1 1 p p , do đó: pi (1 – p)n – i = pi + 1 (1 – p)n – i – 1 . p 1 p > pi + 1(1 – p)n – i – 1 vậy: pi (1 – p)n – i > pi + 1(1 – p)n – (i + 1) Với i = 0, 1, 2, …n1 ta có: p0(1 – p)n > p(1 – p) n – 1 > … > pn(1 – p)0 Từ công thức trên ta thấy khi i càng nhỏ thì xác suất (1) càng lớn. Phuong pháp giải mã người láng giềng gần nhất chọn một từ mã cx gần với x nhất tức là d(cx , x) = i là nhỏ nhất nên xác suất (1) là lớn nhất. Tức là, quy tắc giải mã ‘người láng giềng gần nhất’ cho phép giải mã x thành từ mã cx với một xác suất lớn nhất , phù hợp với quy tắc giải mã hợp lẽ cực đại. 3.2 PHÁT HIỆN LỖI VÀ SỬA LỖI Phát hiện lỗi và sửa lỗi là công việc chủ yếu của quá trình giải mã. Trước hết chúng ta trình bày nguyên lý chung để phát hiện lỗi và sửa lỗi trong truyền tin. 3.2.1. Nguyên lý phát hiện lỗi và sửa lỗi Giả sử một đầu kênh truyền gửi đi một từ mã c C, và bên kia nhận được một xâu x. Nguyên lý phát hiện lỗi và sửa lỗi được hiểu như sau: Nguyên lý phát hiện lỗi: Kiểm tra xem xâu nhận được có phải là một từ mã trong C hay không, nếu không phải từ mã thì xâu nhận được là sai, có lỗi. Nguyên lý sửa lỗi: Khi phát hiện xâu x nhận được là sai, tìm một từ mã cx có khoảng cách Hamming gần nhất với x (theo quy tắc giải mã người láng giềng gần nhất) để thay cho xâu x bị lỗi, tức là đã sửa được lỗi, và coi cx là từ mã c đã được gửi đi. (cx là giải mã của xâu x)Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 50 Như vậy nguyên lý phát hiện lỗi và sửa lỗi đều dựa trên khoảng cách Hamming. Thí dụ dưới đây cho thấy khoảng cách Hamming cực tiểu d(C) có liên quan đến việc phát hiện lỗi và sửa lỗi. Thí dụ 3.4 Giả sử HQ và X có tấm bản đồ mạng lưới như hình vẽ bên. Vì lý do bí mật, chỉ có HQ biết các chỉ dẫn mỗi bước đi cho X để X có thể đến được HQ. HQ cần gửi cho X các thông điệp N, S, E, W để theo đó X có thể đi được đến HQ (dãy thông điệp cần chuyển là: NNWNNWWSSWWNNNNWWN). Rõ ràng là độ tin cậy (chính xác) của việc truyềnnhận thông tin là quan trọng hơn tốc độ. Chúng ta có thể mã hóa các thông điệp bằng mã nhị phân: 00 = N C1 = 01 = W 10 = E 11 = S Ta có khoảng cách Hamming cực tiểu của bộ mã d(C1) = 1. Nếu một từ mã gửi đi mà bị mắc 1 hoặc 2 lỗi thì nó lại biến thành từ mã khác, do đó mã này không thể phát hiện cũng như không thể sửa được 1 lỗi nào. Bây giờ ta thêm một bit kiểm tra chẵn lẻ vào các từ của mã C1 (theo nguyên tắc: bit thêm vào là 0 hay 1 sao cho tổng các bit ‘1’ trong mọi từ mã luôn chẵn. Ta nhận được mã C2 như sau: 000 C2 = 011 101 110 Dễ thấy d(C2) = 2, mã này có thể phát hiện 1 lỗi, nhưng không thể sửa được lỗi nào. Thật vậy, giả sử từ mã c = 000 được gửi đi, nếu chỉ có 1 lỗi xảy ra, sẽ nhận được xâu bit có đúng một bit ‘1’, là xâu 001 ; 010 hoặc 100, đều không phải là từ mã hợp lệ trong bộ mã C2, do đó sẽ phát hiện được xâu x là lỗi. Tương tự như vậy với các từ mã khác được gửi, nếu xâu nhận được có 1 lỗi sẽ làm thay đổi số bit ‘1’ từ chẵn thành lẻ, do đó lỗi bị phát hiện. Tuy nhiên có thể thấy nếu xâu nhận được mắc 2 lỗi thì không thể phát hiện được, bởi vì khi đó tổng số bit ‘1’ vẫn là một số chẵn. Mặt khác, khi 1 từ mã gửi đi mà bị mắc 2 lỗi thì xâu nhận được lại là 1 từ mã khác trong bộ mã C2, do đó không thể phát hiện là đã mắc lỗi. Bây giờ ta tạo mã mới từ C2 bằng cách lặp lại 2 bit đầu của các từ mã vào cuối mỗi từ mã, ta nhận được mã C3 như sau: 00000 C3 = 01101 10110 11011 Dễ thấy d(C3) = 3, mã này không những phát hiện được các xâu chứa 2 lỗi mà còn sửa được các xâu chứa 1 lỗi. Chẳng hạn, khi HQ muốn gửi cho X thông điệp ‘N’, thông điệp này đã được mã bằng mã C3, tức là HQ gửi đi từ mã c = 00000 nhưng do bit thứ hai bị lỗi, X nhận được xâu 01000. X sẽ biết ngay từ mã đã bị lỗi, và phần lỗi là ở bên trái bit kiểm tra chẵn lẻ (do tổng các bit 1 trong ba bit đầu phải là số chẵn), vì vậy có thể sửa được lỗi này bằng cách lấy 2 bit cuốiBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 51 thay cho 2 bít đầu. Từ đó x có thể được giải mã D(01000) = 00000, từ đó tìm được hướng đi ‘N’. Ta có định nghĩa về sự phát hiện lỗi và sửa lỗi dựa trên khoảng cách Hamming như sau. Định nghĩa 3.6. Cho C là mã với độ dài n trên bảng chữ cái A, khi đó: 1. Mã C gọi là phát hiện được s lỗi, nếu c C và mọi xâu x ≠ c ta có: nếu d(x , c) s thì x C. 2. Mã C gọi là sửa được t lỗi, nếu c C và mọi xâu x ≠ c ta có: nếu d(x , c) t thì x là từ mã gần nhất với c. Ta có thể giải thích rõ hơn cho định nghĩa trên như sau: 1. Mã C gọi là phát hiện được s lỗi nếu với mọi từ mã c gửi đi, mà có s bit bị thay đổi ở xâu nhận được x, thì xâu này không phải là một từ mã trong C, vì vậy phát hiện được từ mã gửi đi đã bị lỗi. 2. Mã C gọi là sửa được t lỗi nếu khi gửi đi từ mã c, mà có t bit bị thay đổi ở xâu nhận được x, thì sẽ thay thế được xâu này với một từ mã gần nó nhất có d(x, c) ≤ t (theo quy tắc giải mã người láng giềng gần nhất) Ta có định lý sau về khả năng phát hiện lỗi và sửa lỗi của một mã, việc chứng minh định lý dành cho sinh viên như một bài tập. Định lý 3.2 Cho C là mã với độ dài n trên bảng chữ cái A, khi đó: 1. Mã C phát hiện được k lỗi trong mọi từ mã nếu khoảng cách Hamming d(C) k + 1 2. Mã C sửa được k lỗi trong mọi từ mã nếu khoảng cách Hamming d(C) 2k + 1 Như vậy, khả năng phát hiện và sửa lỗi của một mã phụ thuộc vào khoảng cách Hamming cực tiểu d(C) của bộ mã đó, và d(C) càng lớn thì khả năng phát hiện lỗi và sửa lỗi của mã càng cao. Hệ quả 3.1 Nếu mã C có khoảng cách Hamming cực tiểu là d(C) = d, thì C có thể phát hiện được tối đa k = d – 1 lỗi, và có thể sửa được tối đa k = 2 d 1 lỗi. ( x là số nguyên lớn nhất không vượt quá x, chẳng hạn 3.14= 3; 5.0= 5 ; 3.14= 4). Sự chứng minh của hệ quả này suy trực tiếp từ Định lý 3.2. Hệ quả này thuận lợi cho việc tính toán khả năng phát hiện lỗi và sửa lỗi của một mã. Chẳng hạn, với 1 số khoảng cách Hamming của mã C, ta có thể phát hiện và sửa số lỗi như sau: d(C) Số lỗi tối đa có thể phát hiện Số lỗi tối đa có thể sửa được 1 2 3 4 5 6 … 0 1 2 3 4 5 … 0 0 1 1 2 2 …Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 52 Thí dụ 3.5 Giả sử C là bộ mã gồm các từ mã:{c1 = 00000000, c2 = 11111000, c3 = 01010111, c4 = 10101111}. 1. C có thể phát hiện và sửa bao nhiêu lỗi trong một từ mã bị nhận sai? 2. Khi gửi đi từ mã c = 00000000, nếu nhận được một trong các xâu: o x1 = 11011000, o x2 = 11111000, o x3 = 10101000, Trường hợp nào thì xâu nhận được bị coi là bị lỗi, tại sao? 3. Nếu gửi đi từ mã c4 = 10101111, nhận được xâu x = 10100011. Có thể phát hiện lỗi và sửa lỗi không? Giải : 1. Tính khoảng cách Hamming cực tiểu giữa các từ mã, ta có d(C) = 5. Vậy mã có thể phát hiện tối đa 5 – 1 = 4 lỗi trong một từ mã. Số lỗi tối đa có thể sửa được là 2 5 1 = 2 Xâu x1 nhận được từ C, với 4 lỗi (ở bit 1, bit 2, bit 4 và bit 5), mã C phát hiện được x1 có lỗi và yêu cầu gửi lại. Với xâu x2, mắc 5 lỗi, do đó không phát hiện được lỗi, người nhận cho rằng đã gửi đi từ mã c2. Với xâu nhận được x3, chỉ mắc 3 lỗi nên phát hiện được đây là từ mã bị lỗi, và yêu cầu gửi lại. 2. Do số lỗi là 2, nên có thể sửa được, dùng phương pháp giải mã người láng giềng gần nhất, có thể giải mã được D(x) = c4, chính là từ mã gửi đi. Ta sẽ trình bày một số mã phát hiện lỗi đơn giản. Để dễ theo dõi, chúng ta chỉ xem xét các tin nguồn và các mã đều là các xâu nhị phân. 3.2.2 Các mã phát hiện lỗi Mã chẵn lẻ (Parity code) Giả sử thông điệp nguồn là các xâu gồm k bit. Mã chẵn lẻ thêm vào thông điệp nguồn một bit thứ k + 1, gọi là bit kiểm tra chẵn lẻ (parity check bit) theo cách sau: o Nếu thông điệp là xâu có chứa một số chẵn các bit ‘1’ ta thêm ‘0’ vào cuối xâu. o Nếu thông điệp là xâu có chứa một số lẻ các bit ‘1’ ta thêm ‘1’ vào cuối xâu. Tổng quát, ta mã hóa thông điệp x = x1 x2.... xk thành x1 x2.... xk xk+1, trong đó: xk+1 = (x1 +x2 + ....+ xk ) mod 2 Mã mới nhận được là một mã (k+1, M, k), trong đó k là độ dài tin nguồn, M là số tin nguồn, k+1 là độ dài từ mã của mã chẵn lẻ. Nhận xét: Việc thêm bit kiểm tra chẵn lẻ để đảm bảo số các bit 1 trong mỗi từ mã (xâu mở rộng) phải là một số chẵn (khi đó ta nói từ mã này là hợp lệ). Như vậy, khi bit kiểm tra chẵn lẻ được thêm vào một xâu các bit, nếu có một lỗi duy nhất trong việc truyền tin đi từ một từ mã thì tổng số các bit 1 trong từ mã đó sẽ là một số lẻ. Do đó, có thể phát hiện được lỗi này. Tuy nhiên, nếu có hai lỗi xảy ra thì những lỗi này không thể phátBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 53 hiện được vì rằng tổng số các bit 1 trong xâu mở rộng sẽ vẫn còn là một số chẵn. Nói chung, một số lẻ bất kỳ các lỗi có thể được phát hiện, trong khi một số chẵn các lỗi không thể được phát hiện. Máy thu kiểm tra bit chẵn lẻ của thông điệp thu được và nếu nó phát hiện ra một sự bất đồng, nó sẽ yêu cầu máy phát truyền tin lại thông điệp. Thí dụ 3.6: Giả sử rằng, bit kiểm tra chẵn lẻ được thêm vào một thông điệp trước khi nó được truyền đi. Có thể kết luận gì nếu ta nhận được các xâu bit 1100001 và 1011111 từ những thông điệp được gửi đi. Giải: Vì xâu nhận được là 1100001 chứa một số lẻ bit 1, nó không thể là từ mã hợp lệ (và do đó phải chứa một số lẻ các lỗi) . Đối với xâu nhận được là 1011111: xâu này chứa một số chẵn bit 1, đó là từ mã hợp lệ. Do đó hoặc việc truyền tin hoặc không mắc lỗi, hoặc có một số chẵn các lỗi. Nói chung mã chẵn lẻ chỉ có thể khẳng định chắc chắn việc truyền tin bị mắc lỗi khi số bit ‘1’ nhận được là lẻ. Ma trận sinh của mã chẵn lẻ Với mã chẵn lẻ, có một ma trận G để sinh ra các từ mã này từ các thông điệp nguồn. Chẳng hạn, với các thông điệp 4 bit x = x1 x2 x3 x4 để mã hóa thành một mã chẵn lẻ (mã phát hiện lỗi), ta thêm bít thứ 5 cho mỗi thông điệp, theo công thức: x5 = (x1 + x2 + x3 + x4) mod 2 Như vậy, ta có công thức mã hóa: E(x) = x.G , với G là ma trận cấp 4 5, có dạng: G = 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 G là ma trận sinh của các mã chẵn lẻ có độ dài 5, với bit cuối cùng là bit kiểm tra chẵn lẻ. Có thể viết G dưới dạng chuẩn: G = ( I4 | A ) , với A là ma trận cột 1 1 1 1 . Để cho gọn, có thể viết A = (1 1 1 1)T và hiểu là cột toàn số 1. Chẳng hạn, với các thông điệp X = {0001 ; 0011, 0111, 1111}, mã hóa nhờ ma trận G trên: E(0001) = (0001).G = (00011) E(0011) = (0011).G = (00110) E(0111) = (0111).G = (01111) E(1111) = (1111).G = (11110) Ta nhận được mã chẵn lẻ sau: 00011 C = 00110 01111 11110 Để mã hóa các thông điệp độ dài k bit thành mã chẵn lẻ, ta có ma trận sinh G là ma trận: G = ( Ik | A ) , trong đó A là ma trận cột gồm k phần tử toàn số 1.Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 54 Mã sánh hợp Một cách đơn giản khác để phát hiện lỗi là lặp lại mỗi bit trong thông điệp 2 lần, khi đó chúng ta có thể phát hiện các lỗi trong một từ mã theo cách sau: Vì các từ mã của các xâu bit này chứa các cặp bit sánh hợp (giống nhau), như vậy, ta có thể phát hiện các lỗi làm thay đổi không quá một bit ở mỗi cặp bit sánh hợp này. Thí dụ 3.7 1. Mã hóa xâu bit 010001 bằng cách lặp lại mỗi bit 2 lần. Giải: Việc lặp lại mỗi bit 2 lần đem lại từ mã 001100000011. 2. Ta có thể phát hiện lỗi ở bit thứ 2, thứ 6 và thứ 7 của các từ mã có 8 bit như khi nhận được 01001001 do từ mã 00001111 được gửi đi. Mặt khác, ta không thể phát hiện lỗi khi bit 5 và bit 6 cùng thay đổi (chẳng hạn không thể phát hiện các lỗi khi nhận được 00000011, do từ mã 00001111 được gửi đi). Ma trận sinh của mã sánh hợp Với mã sánh hợp, có thể xây dựng ma trận G để sinh ra các từ mã này từ các thông điệp nguồn. Chẳng hạn, với các thông điệp 4 bit x = x1 x2 x3 x4 để mã hóa thành một mã sánh hợp, ta lặp lại mỗi bit thêm một lần nữa, do đó ma trận sinh G của mã sánh hợp có dạng: G = 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 Chẳng hạn, để mã hóa xâu x = (1001), ta có: E(x) = (1001).G = (11000011) Kết luận: Ở trên, chúng ta đã xem xét các mã có thể được dùng để phát hiện sai. Khi các lỗi được phát hiện, tất cả những gì chúng ta có thể làm để có được từ mã chính xác là đề nghị truyền phát lại và hy vọng sẽ không có lỗi nào xuất hiện trong lần thực hiện này. Tuy nhiên, không phải khi nào cũng có thể yêu cầu phát lại, đó là trường hợp các kênh 1 chiều (one way channel): 1 đầu chỉ phát và 1 đầu chỉ nhận. Khi đó, ta phải sử dụng những mã mạnh hơn, không chỉ phát hiện sai mà còn sửa được sai. Mục sau, chúng ta sẽ xem xét tới các mã này, gọi là mã sửa lỗi. 3.2.3 Các mã sửa lỗi Chúng ta đã thấy rằng, khi sự dư thừa được có trong các từ mã, như khi bit kiểm tra chẵn lẻ được thêm vào một xâu các bit, chúng ta có thể phát hiện được những lỗi truyền tin. Chúng ta thậm chí có thể làm tốt hơn nếu đưa vào nhiều dư thừa hơn. Chúng ta không chỉ có thể phát hiện sai mà còn có thể sửa sai. Chính xác hơn, nếu số lỗi xảy ra trong một từ mã được truyền là đủ nhỏ, chúng ta có thể xác định được chính xác từ mã nào đã được truyền đi. Mã lặp lại (repetition codes) Chúng ta mã hóa một thông điệp nhị phân x = x1 x2 … xi … xk bằng cách lặp lại xâu bít cần truyền m lần, tức là: E(x) = x11 x21 … xi1 … xk1 x12 x22 … xi2 … xk2 ...... x1m x2m … xim … xkmBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 55 Trong đó, xij là bit thứ i của thông điệp được lặp lại lần thứ j trong từ mã ( i = 1, 2, … , k ; j = 1, 2, …, m). Dùng quy tắc lấy đa số đơn giản, bằng cách so sánh các bit có cùng chỉ số i vớ i nhau (1 ≤ i ≤ k), nếu số lương ̣ các bit xij bằng 0 lớ n hơn số lương ̣ các xij bằng 1 thì ta có thể kết luâṇ xi bằng 0 khi giải mã; trái lại kết luận xi = 1. Trong trườ ng hơp̣ hai số lương n ̣ ày bằng nhau thì ta chưa thể kết luân v ̣ ề xi, tuy nhiên có thể lấy số lần lặp lại m là một số lẻ để tránh tình huống này. Mã được tạo ra theo phương pháp tao m ̣ ã như trên gọi là mã lăp l ̣ ai (Repetition codes). ̣ Mã lăp l ̣ aị có nhươc đi ̣ ểm là đô ̣dài của từ mã trong mã lăp l ̣ ai s ̣ ẽ rất lớ n nếu k và m lớ n. Thí dụ 3.8. Giả sử ta có các thông điệp {000, 001, 100, 101} (có thể là một mã nào đó, cần được mã hóa thành mã lặp lại) Ta mã hóa các thông điệp x = x1 x2 x3 bằng phương pháp lăp 3 l ̣ ần: E(x) = x1 x2 x3 x4 x5 x6 x7 x8 x9, ở đây x1 = x4 = x7, x2 = x5 = x8, x3 = x6 = x9 đươc̣ mã C với 4 từ mã hơp l ̣ ê ̣sau: C = {000000000, 001001001, 100100100, 101101101} Để giải mã một xâu bit nhận được, mà xâu này có thể chứa các lỗi, ta dùng quy tắc lấy đa số đơn giản. Chẳng hạn, để xác định x1, ta xem xét x1, x4, x7. Nếu 2 trong các bit này là 1, ta kết luận x1 = 1. Trái lại, 2 trong 3 bit này là 0, ta kết luận x1 = 0. Nói chung chúng ta xem xét 3 bit tương ứng với mỗi bit ở thông điệp gốc. Ví dụ, với mã lặp lại 3 lần được dùng nếu ta nhận được xâu x = 101001001. Sử dụng quy tắc lấy đa số đơn giản trên, để xác định x1, ta xem xét x1, x4, x7 trong xâu x, do có 2 bit ‘0’ và 1 bit ‘1’ nên ta quyết định x1 = 0. Với các bit thứ hai và thứ ba, ta giữ nguyên do các vị trí đều không bị lỗi. D(x) = 001001001 là từ mã thứ hai trong C, từ đó suy ra thông điệp gốc cần gửi đi là 001. Nhận xét 1. Việc mã hóa bằng các mã lặp lại có nhược điểm là độ dài từ mã sẽ rất lớn nếu k và m lớn, và như vậy sẽ làm giảm tốc độ tuyền tin. Tuy nhiên, việc này lại làm tăng độ tin cậy, do các mã lặp lại có khả năng phát hiện lỗi và sửa lỗi rất tốt. Trong nhiều trường hợp sự tin cậy cần hơn tốc độ. 2. Việc sử dụng các mã chống nhiễu (mã phát hiện lỗi và mã sửa lỗi) làm tăng khoảng cách Hamming cực tiểu của các mã, từ đó làm tăng khả năng phát hiện lỗi và sửa lỗi. Ma trận sinh của các mã lặp lại: Chẳng hạn, với các thông điệp 4 bit x = x1 x2 x3 x4 để mã hóa thành một mã lặp lại 3 lần, ta lặp lại xâu x 3 lần, nhận được từ mã: E(x) = x1 x2 x3 x4 x5x6 x7 x8 x9 x10 x11 x12 Trong đó: x1 = x5 = x9 ; x2 = x6 = x10 ; x3 = x7 = x11 ; x4 = x8 = x12 . Do mỗi xâu x (coi là 1 ma trận hàng) nhân với ma trận đơn vị thì bằng chính xâu đó, do đó để lặp lại xâu x ba lần, ta nhân nó với ma trận G như sauBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 56 G = 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 Có thể ký hiệu : G = ( I4 | I4 | I4 ) Để mã hóa thông điệp 4 bit x thành 1 từ mã lặp lại 3 lần, ta có E(x) = x.G. Chẳng hạn, để mã hóa thông điệp x = 1101 thành từ mã lặp lại 3 lần, ta có: E(x) = (1101).G = 110111011101 3.3 PHÁT HIỆN LỖI VÀ SỬA LỖI CHO CÁC MÃ TUYẾN TÍNH 3.3.1 Giải mã cho các mã tuyến tính bằng tập giải mã coset Vấn đề giải mã và vector lỗi Giả sử từ mã c = c1 c2 … cn được gửi đi trên một kênh có nhiễu, xâu nhận được là x = x1 x2 … xn. Xâu e = e1 e2 … en được gọi là vector lỗi (error vector) nếu e = x – c () Nếu xác định được vector lỗi e, thì từ xâu x ta sẽ xác định được từ mã nào đã được gửi đi, vì từ () ta có: c = x – e. Bộ giải mã cần phải quyết định rằng với xâu nhận được x thì từ mã nào đã được gửi đi, hoặc là xác định được vector lỗi e đã xuất hiện trong quá trình truyền tin, từ mã là giải mã của x ký hiệu là cx Có nhiều cách để xác định cx , chẳng hạn phương pháp giải mã người láng giềng gần nhất. Một phương pháp hiệu quả hơn cho các mã tuyến tính là phương pháp dùng các tập giải mã (coset). Tập giải mã coset Định nghĩa 3.7 Cho mã tuyến tính Cn, k trên trường GF(q) và một vector tùy ý a Fqn , khi đó tập giải mã của C (coset of C) được ký hiệu và xác định như sau: a + C = { a + c | c C } Từ định nghĩa trên, ta thấy mã C có thể có nhiều coset, mỗi vector a Fqn đều xác định một tập coset của C, tuy nhiên một số tập có thể trùng nhau. Xét bổ đề sau: Bổ đề 3.1 Giả sử a + C là một coset của C, và giả sử b a + C, khi đó ta có: b + C = a + C Chứng minh: Vì b a + C , nên b = a + x, với x là từ mã nào đó của bộ mã C. Bây giờ giả sử b + y a + C, khi đó: b + y = (a + x) + y = a + (x + y) a + C. Vì vậy b + C a + C. (i) Mặt khác, nếu a + z a + C, thì a + z = (b – x) + z = b + (z – x) b + C. Vậy a + C b + C (ii) Từ (i) và (ii) suy ra b + C = a + CBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 57 Định lý 3.3 Cho mã tuyến tính Cn, k trên trường GF(q), khi đó: (i) Mọi vector tùy ý a Fqn thuộc về một coset nào đó của C, (ii) Mọi coset của C đều chứa đúng qk vector, (iii) Hai coset bất kỳ của C hoặc trùng nhau hoặc rời nhau. Việc chứng minh định lý này được trình bày trong tài liệu tham khảo 1. Thí dụ 3.9 Cho C là mã nhị phân tuyến tính 4, 2 có ma trận sinh: G = 0 1 0 1 1 0 1 1 Dễ thấy C = {0000, 1011, 0101, 1110}, ở đây q = 2, k = 2, n = 4, theo định lý trên, mọi coset của C đều có đúng qk = 22 = 4 vector. Mặt khác, F24 có tất cả 24 = 16 vector nhị phân độ dài 4, các vector này phải xắp xếp trong các coset khác nhau của C. Vì vậy, ta chọn 4 vector có trọng số nhỏ nhất trong F24 để tạo nên 4 coset của C Coset 1: 0000 + C = {0000, 1011, 0101, 1110} (bằng chính C, do 0000 C) Coset 2: 1000 + C = {1000, 0011, 1101, 0110} Coset 3: 0100 + C = {0100, 1111, 0001, 1010} Coset 4: 0010 + C = {0010, 1001, 0111, 1100} Chú ý rằng nếu chọn a = 0001 thì coset 0001 + C = {0100, 1111, 0001, 1010} = coset 0100 + C, bởi vì 0001 0100 + C (coset 3). Do đó để tìm tất cả các coset của mã C4, 2 ta chỉ cần chọn 4 vector có trọng số nhỏ nhất với vị trí bit ‘1’ tăng theo thứ tự từ trái qua phải. Vector có trọng số nhỏ nhất trong mỗi coset của mã tuyến Cn, k gọi là coset leader của coset đó. Nếu một coset có nhiều vector có cùng trọng số nhỏ nhất, ta có thể chọn ngẫu nhiên một vector như vạy làm coset leader. Chẳng hạn trong thí dụ trên, các coset leader của các coset lần lượt là : 0000, 1000, 0100. 0010. Với coset 0100 + C (coset 3), ta cũng có thể chọn vector 0001 làm coset leader thay cho 0100. Bảng chuẩn của mã tuyến tính Định nghĩa 3.8 Bảng coset chuẩn của mã tuyến tính Cn, k là một bảng gồm qn – k hàng và qk cột chứa tất cả các vector của n Fq , trong đó hàng đầu tiên chứa tất cả các từ mã của C với từ mã O (từ mã gồm các ký hiệu ‘0’)ở bên trái nhất, các hàng khác chứa các coset ai + C, với các coset leader ai ở bên trái nhất Một bảng coset chuẩn của mã tuyến tính C có thể được xây dựng theo các bước sau: Bước 1. Lập hàng 1: Liệt kê các từ mã của C, với từ mã O ở bên trái nhất. Bước 2. Chọn bất kỳ vector a1 Fqn có trọng số nhỏ nhất và không thuộc hàng 1 của bảng, tính coset a1 + C và viết vào hàng 2 của bảng, a1 viết dưới từ mã O và a1 + x dưới từ mã x, x C.Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 58 Bước 3. Chọn vector a2 không thuộc hàng 1 và hàng 2, a2 có trọng số nhỏ nhất trong các vector còn lại của n Fq , tính a2 + C và liệt kê vào hàng 3 tương tự như bưới 2. Bước i. Tiếp tục chọn các vector ai không thuộc các hàng đã tính ở trên, để tính coset thứ i…cho đến khi tính đủ qn – k coset của C và liệt kê vào qn – k hàng của bảng theo cách trên, các dòng này phải khác nhau và sẽ chứa tất cả các vector của Fqn . Thí dụ 3.10 Cho mã nhị phân tuyến tính C = {0000, 1011, 0101, 1110} trong thí dụ 3.9, bảng chuẩn của C là: Codewords of C 0000 1011 0101 1110 1000 0011 1101 0110 0100 1111 0001 1010 0010 1001 0111 1100 coset leader Qua thí dụ trên ta thấy, mỗi phần tử trong bảng là tổng của một từ mã ở dòng đầu tiên của cột chứa phần tử đó cộng với coset leader tương ứng ở bên trái nhất của hàng chứa phần tử đó. Chẳng hạn với phần tử 1111, rõ ràng ta có 1111 = 1011 + 0100. Giải mã bằng bảng coset chuẩn Bây giờ chúng ta sẽ mô tả việc giải mã dùng bảng coset chuẩn được thực hiện như thế nào. Giả sử gửi đi một từ mã c C và nhận được xâu x Fqn , khi đó vị trí của x sẽ được xác định trong bảng, vì bảng chứa tất cả các vector của Fqn . Theo cách xây dựng bảng, ta có x = c + e, với c là từ mã ở dòng đầu tiên của cột chứa x, còn e là coset leader của hàng chứa x. Như vậy, mỗi khi nhận được một xâu x, từ vị trí của xâu nhận được ta xác định được từ mã gửi đi c ờ dòng đầu của cột chứa x, còn vector lỗi chính là coset leader của hàng chứa x. Chẳng hạn, gửi đi một từ của mã C trong thí dụ trên, nhận được xâu x = 1111, ta sẽ xác định được từ mã gửi đi là c = 1011, còn vector lỗi là e = 0100. Như vây: giải mã của một xâu nhận được x Fqn là từ mã nằm ở dòng đầu tiên của cột chứa x trong bảng coset chuẩn. Từ mã là giải mã của x ký hiệu là cx. Thí dụ 3.11 (về một bảng coset chuẩn khi tính gặp 2 hàng giống nhau) Cho mã nhị tuyến tính C có ma trận sinh là : G = 1 1 0 1 1 0 1 0 , xác định bảng chuẩn của mã C. Giải: Từ ma trận sinh, ta có C = {0000, 1101, 1010, 1111}. Ta lập bảng coset chuẩn theo các bước trong định nghĩa 3.8. Lần lượt chọn các ceset leader a0 = 0000, a1 = 1000, a2 = 0100, a3 = 0010 để tính các hàng. Chú ý rằng khi tính đến hàng thứ tư là 0010 + C, thì ta được kết quả trùng với hàng thứ 2, bỏ đi một trong hai hàng này Chảng hạn bỏ đi hàng thứ tư, như vậy bảng mới có 3 hàng khác nhau, ta phải tính thêm hàng mới với coset leader 0001, ta được coset {0001, 1100, 1011, 0110}. Kết quả tính toán minh họa trong hình sau:Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 59 Codewords of C 0000 1101 1010 0111 1000 0101 0010 1111 0100 1001 1110 0011 0010 1111 1000 0101 0001 1100 1011 0110 coset leader Qua thí dụ trên ta thấy, trong quá trình lập bảng chuẩn, có thể có hai hàng (hai coset) giống nhau, khi đó phải tính thêm các coset mới ứng với các coset leadr mới sao cho có đủ qn – k hàng khác nhau (trong thí dụ này qn – k = 24 – 2 = 4 hàng) Khi đó phải bỏ đi 1 trong 2 hàng giống nhau, chỉ giữ lại 4 hàng khác nhau (do số hàng của bảng tối đa là qn – k = 24 – 2 = 4 hàng), kết quả được bảng coset chuẩn như sau: Codewords of C 0000 1101 1010 0111 1000 0101 0010 1111 0100 1001 1110 0011 0001 1100 1011 0110 coset leader Nhận xét: Nói chung việc giải mã bằng bảng coset chuẩn rất dễ ràng nhưng khá hạn chế: 1. Việc giải mã như trên trong thực tế rất chậm với những mã lớn, và khá tốn kém cho chi phí lưu trữ các bảng chuẩn. Chẳng hạn, với mã C6, 3, bảng chuẩn là một bảng gồm 263 = 8 hàng và 23 = 8 cột, mã C7, 4 có dãy chuẩn gồm 8 hàng và 16 cột. 2. Việc giải mã và sửa lỗi chỉ thực hiện được khi xâu nhận được chỉ chứa các lỗi xảy ra ở vị trí các bit ‘1’ của các coset leader, tức là có vector lỗi là các coset leader. Ta xem xét thí dụ sau: Thí dụ 3.11. Với mã C trong thí dụ trên, khi gửi đi từ mã 0101 (mã hóa từ thông điệp 01): (a) Nếu xâu nhận được là x = 0001 (lỗi xảy ra ở bit thứ 2 của từ mã, vector lỗi là coset leader 0100) thì có thể sửa được lỗi này, giải mã của x là cx = 0101, từ đó thông điệp gốc là 01. (b) Nếu xâu nhận được y = 0100 (lỗi xảy ra ở bit thứ 4 của từ mã, vector lỗi e = 0001, không phải là một coset leader) thì sẽ giải mã được cy = 0000, từ đó thông điệp gốc là 00: sai Trường hợp này không sửa được lỗi.Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 60 Dưới đây ta sẽ nghiên cứu một phương pháp phát hiện lỗi và sửa lỗi tốt hơn, khắc phục được các nhược điểm trên của phương pháp giải mã bằng bảng coset chuẩn. Đó là phương pháp phát hiện lỗi và sửa lỗi bằng cách dùng các ma trận kiểm tra của mã tuyến tính. 3.3.2 Phát hiện lỗi bằng ma trận kiểm tra. Liên hệ giữa ma trận sinh và ma trận kiểm tra. Để tiện theo dõi, chúng ta nhắc lại một số kết quả trong chương 2: Cho Cn, k là mã nhị phân tuyến tính, khi đó: (a) Mã đối ngẫu của C là: C = { v {0, 1}n v.c = 0, c C}, (b) Gọi G là ma trận sinh của C , G có cấp k n, (c) Gọi H là ma trận sinh của mã đối ngầu C , H có cấp (nk) n (d) Ma trận H gọi là ma trận kiểm tra của mã C, (tương tự, ma trận G là ma trận kiểm tra của mã C). Người ta cũng gọi H là ma trận kiểm tra liên kết với ma trận G. Ta có một số kết quả về sự liên hệ giữa ma trận sinh G và ma trận kiểm tra H của một mã tuyến tính C như sau: Đinh lý 3.4 Nếu C là mã tuyến tính trên trường GF(q) có ma trận sinh G, một ma trận H là ma trận kiểm tra của mã C khi và chỉ khi H có các hàng độc lập tuyến tính và thỏa điều kiện: G.HT = O (3.3) trong đó: HT là ma trận chuyển vị của H, O là ma trận không (gồm toàn số không) Chứng minh: Trước hết ta chú ý về cấp của các ma trận, với mã Cn, k thì G = (gij)k n , H = (hij)(nk) n do đó HT = (hji) n (nk) . Phép nhân G.HT cho kết quả là ma trận cấp k (nk). Do mỗi cột của HT là một từ mã trong mã đối ngẫu C , nên trực giao với mọi hàng của G, vì vậy kết quả mọi hàng của G nhân với mọi cột của HT đều bằng không. Từ đó suy ra điều phải chứng minh. Thí dụ 3.12 Cho mã tuyến tính nhị phân C = {000,001,100,101}. Kiểm tra công thức (3.3): C là mã tuyến tính C3, 2 nên có ma trận sinh tạo bởi hai từ mã độc lập tuyến tính: G = 1 0 0 0 0 1 Ta tìm được mã đối ngẫu C = { 000, 010 } nên ma trận kiểm tra của mã C là H = 0 1 0, Ta có: G. HT = 1 0 0 0 0 1 . 0 1 0 = 0 0 , vậy G và H thỏa mãn định lý 3.4. Nhận xét: Áp dụng định lý 3.4, ta có thể tìm ma kiểm tra H khi biết ma trận sinh G. Với ma trận sinh G đã cho, ma trận kiểm tra H cần tìm là ma trận thỏa mãn phương trình ma trận G.HT = O.Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 61 Thí dụ 3.13 Tìm ma trận kiểm tra H liên kết với ma trận G sau: G = 1 0 0 0 0 1 Giải: Ở đây G có cấp k n = 2 3, nên ma trận kiểm tra H sẽ có cấp (nk) n = 1 3. Ma trận kiểm tra H sẽ có cấp 1 3. Ma trận H có cấp 1 3 , đặt H = (x1, x2, x3), ta sẽ xác định các phần tử x1, x2, x3 từ phương trình ma trận: G. HT = O, x1, x2, x3 là nghiệm của hệ phương trình 1 0 1 0 0 1 . 1 2 3 x x x = 0 0 Hệ trên tương đương với hệ: 1.. 0. 0. 0 0. 0. 1. 0 1 2 3 1 2 3 x x x x x x Giải ra ta được: x1= 0 và x3 = 0 ; x2 tùy ý, để có nghiệm khác không ta chọn x2 = 1. (cần chọn nk nghiệm độc lập tuyến tính, ở thí dụ này nk =1 nên chọn k để có 1 nghiệm khác không). Vậy HT = 0 1 0 T. Từ đó ma trận kiểm tra H liên kết với ma trận G là: H = 0 1 0 Việc áp dụng định lý 3.4 cho phép tính các ma trận kiểm tra H từ ma trận G cho trước mà không cần tìm mã đối ngẫu của mã C. Tuy nhiên việc tính toán còn khá phúc tạp, nhất là khi k và n lớn. Định lý dưới đây cho phép tính ma trận kiểm tra rất dễ dàng từ các ma trận sinh dạng chuẩn. Định lý 3.5 Nếu mã tuyến tính Cn , k trên trường GF(q) có ma trận sinh dạng chuẩn G = ( Ik | A ) thì ma trận kiểm tra dạng chuẩn của mã C được xác định bởi: H = (– AT | Ink ) (3.4) với AT là ma trận chuyển vị của ma trận A trong ma trận sinh dạng chuẩn G. Để chứng minh định lý này chỉ cần chỉ ra rằng với ma trận H xác định như trên thì H có các hàng độc lập tuyến tính và có G. HT = O. Theo định lý 3.4 thì H là ma trận kiểm tra của mã C. Sinh viên có thể chứng minh định lý này này xem như là bài tập. Chú ý rằng với các mã nhị phân tuyến tính thì công thức (3.4) có dạng: H = ( AT | Ink ) (3.4)’ Thí dụ 3.14 Cho mã C4, 2 trên trường F3, có ma trận sinh G = 0 1 1 2 1 0 1 1 , dễ thấy ma trận sinh G ở dạng chuẩn. Vậy theo định lý 3.5, ta có ma trận kiểm tra của mã C là : H = ( – AT | I2 ), với ma trận AT = 1 2 1 1 , ta có – AT = 1 2 1 1 = 2 1 2 2 .Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 62 Vậy ma trận kiểm tra của mã C là H = 2 1 0 1 2 2 1 0 , ma trận kiểm tra H ở dạng chuẩn. Thí dụ 3.15 Cho mã tuyến tính C7, 4, 3 có ma trận sinh ở dạng chuẩn G = 0 0 0 1 0 11 0 0 1 0 11 0 0 1 0 0 11 1 1 0 0 0 1 0 1 , tìm ma trận kiểm tra của mã C. Giải: theo công thức (3.4)’định lý 3.5, do C là mã nhị phân tuyến tính ta có ma trận kiểm tra của mã C ở dạng chuẩn là : H = ( AT | I3 ) do A = 0 1 1 1 1 0 1 1 1 1 0 1 ta có AT = 1 1 0 1 0 1 1 1 1 1 1 0 Vậy H = 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 là ma trận kiểm tra của mã C, đã ở dạng chuẩn. Nhận xét: 1. Từ định lý 3.5, nếu biết ma trận sinh G ở dạng chuẩn của mã tuyến tính nhị phân Cn, k, thì có thể tìm được ma trận kiểm tra H ở dạng chuẩn. 2. Ngược lại, nếu biết ma trận kiểm tra H ở dạng chuẩn thì có thể tìm được ma trận sinh liên kết G ở dạng chuẩn. Cụ thể, nếu H = ( B | Ik ) thì G = ( Ink | – BT ). Tức là, với mã C, nếu biết một trong hai ma trận G và H ở dạng chuẩn thì có thể tìm được ma trận kia. Điều này chứng tỏ 2 ma trận G và H có liên quan chặt chẽ với nhau. Thí dụ 3.16 Cho mã C7, 4 có ma trận sinh như sau: G = 0 1 1 0 0 0 1 1 1 0 0 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 . Hãy tìm ma trận kiểm tra của mã C7, 4. Bước 1: Trước hết đưa ma trận G về ma trận tương đương ở dạng chuẩn nhờ các phép biến đổi tương đương chỉ theo hàng: G’ = 0 0 0 1 0 11 0 0 1 0 11 0 0 1 0 0 11 1 1 0 0 0 1 0 1Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 63 Bước 2 : Do G’ là ma trận sinh của mã C, đã ở dạng chuẩn, G’ = ( I4 | A ), trong đó ma trận A là : A = 0 11 11 0 11 1 1 0 1 Theo định lý 3.4, ma trận kiểm tra của mã C có dạng H = ( AT | I3 ), ta có: H = 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 Phát hiện lỗi bằng ma trận kiểm tra. Định lý 3.6 Cho H là ma trận kiểm tra của mã nhị phân tuyến tính Cn, k. Một xâu bit x độ dài n là một từ mã của C khi và chỉ khi: x.HT = O (3.5) trong đó: HT là ma trận chuyển vị của H, O là ma trận không (gồm toàn số không) Chứng minh: Điều kiện cần: Giả sử x = (x1 x2 … xn ) là một từ mã trong C. Do đó x phải trực giao với mọi hàng của ma trận H, hay trực giao với mọi cột của ma trận HT. Từ đó ta có x.HT = O. Điều kiện đủ: Giả sử x thỏa mãn x.HT = O, điều này chứng tỏ x trực giao với tất cả các cột của ma trận HT, hay x trực giao với các hàng của H, theo kết quả của đại số tuyến tính, x thuộc không gian con trực giao với không gian con sinh bởi H. Do H là ma trận sinh của mã đối ngẫu C nên suy ra x C, tức là x là một từ mã trong C. Nhận xét: 1. Từ định lý 3.6, ta có phương pháp phát hiện lỗi như sau: Giả sử một từ mã c C được gửi đi, ta nhận được xâu x, để xác định xâu x có phải là từ mã hợp lệ hay không, ta kiểm tra điều kiện (3.5): x.HT = O. Nếu điều kiện trên thỏa mãn (vế phải là một ma trận không) ta kết luận x là một từ mã hợp lệ của C. Nếu vế phải ≠ O, thì xâu nhận được không phải là một từ mã trong C. 2. Dễ thấy rằng điều kiện x.HT = O là tương đương với điều kiện: H.xT = O, (3.6) (trong đó xT là ma trận cột chuyển vị của xâu x) Việc thực hiện tính toán với điều kiện (3.6) là dễ dàng hơn (3.5), nên ta thường kiểm tra điều kiện này , thay cho việc kiểm tra điều kiện (3.5) Định nghĩa 3.9 Cho mã tuyến tính Cn, k có ma trận kiểm tra H, với mọi xâu bit x có độ dài n, biểu thức H.xT gọi là Syndrome của x, (hay vector hội chứng của x), ký hiệu là S(x)Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 64 Như vậy, để kiểm tra x có phải là 1 từ mã trong C hay không, ta kiểm tra điều kiện S(x) = O. Nhận xét: 1. Dễ thấy rằng với hai xâu bit x và y cùng độ dài thì: S(x + y) = S(x) + S(y) 2. Với mọi ma trận kiểm tra H, với O là xâu toàn bit ‘0’ thì S(O) = O. Thí dụ 3.17 Giả sử một mã nhị phân tuyến tính C7, 4 có ma trận kiểm tra là H = 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 1. Giả sử nhận được xâu x = 0001110. Hỏi x có phải là một từ mã thuộc C hay không? Giải: Tính S(x) = H.xT. Giải: ta tìm Syndrome của x: S(x) = 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 . 0 0 0 1 1 1 0 = 1 0 1 S(x) ≠ O, vậy x không phải là một từ mã. 2. Giả sử nhận được xâu x = 0001011. Hỏi x có phải là một từ mã thuộc C hay không? Giải: Tính S(x) = H.xT S(x) = 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 . 0 0 0 1 0 1 1 = 0 0 0 S(x) = O, vậy x là một từ mã. 3.3.3 Sửa lỗi bằng ma trận kiểm tra. Ma trận kiểm tra không những được dùng để phát hiện lỗi mà nó còn được dùng để sửa lỗi. Giả sử từ mã c = (c1 c2 … cn) là từ mã gửi đi, xâu nhận được là x = (x1 x2 … xn), gọi e là vector lỗi, với e = ( e1 e2 … en ), trong đó: ci , xi và ei {0, 1} Rõ ràng là nếu x = c thì xâu nhận được không có lỗi, khi đó có thể viết x = c + e, với e = O (xâu toàn bit ‘0’).Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 65 Trái lại, nếu x có lỗi ở bit thứ j, thì x và c sẽ khác nhau ở bit thứ j, thì có thể viết: x = c + e với e có bit thứ j bằng ‘1’, các bit khác bằng ‘0’. Thật vậy: giả sử gửi đi từ mã c = 1110001 ta nhận được x = 1110000, có lỗi xảy ra ở bit thứ 7. Ta có thể viết : 1110000 = 1110001 + 00000001; hay là x = c + e với e = 0000001 Bây giờ ta giả sử khi từ mã c được gửi đi ta nhận được xâu x, với chỉ có duy nhất 1 lỗi xảy ra, ta sẽ chứng minh rằng khi đó ta có thể sửa được lỗi này, và tìm được chính xác từ mã đã gửi đi. Bổ đề 3.2 Nếu mã tuyến tính Cn, k có ma trận kiểm tra H không có cột bằng O và không có 2 cột nào giống nhau, thì có thể sửa được một lỗi xảy ra khi gửi đi một từ mã bất kỳ. Chứng minh: Giả sử khi từ mã c được gửi đi ta nhận được xâu x, với chỉ có duy nhất 1 lỗi xảy ra. Giả sử lỗi xảy ra ở bit thứ j, có thể viết: x = c + e, với vector lỗi e chỉ có duy nhất một bit khác không ở vị trí thứ j, e = (00 …010…0) , với bit thứ j bằng ‘1’ Ta tính Syndrome của x: S(x)= S(c)+ S(e), do c là từ mã nên S(c) = O, ta có : S(x) = S(e) = H.eT = H. 0 0 …1..0 T = hj Trong đó hj là cột thứ j của ma trận H. Do H không có hai cột giống nhau, nên vị trí j là duy nhất. Như vậy việc tính S(x) sẽ xác định được vị trí bit bị sai, ứng với cột thứ j của ma trận H, từ đó có thể sửa được lỗi này. (đpcm) Từ đó, nếu chúng ta nhận được x và giả sử không có quá một lỗi xuất hiện, ta có thể tìm được từ mã được gửi đi là c bằng cách tính Syndrome của x, S(x) = Hxt. Nếu S(x) = O, ta biết x là từ mã được gửi . Nếu S(x) ≠ O, nó sẽ bằng cột thứ j nào đó của H (nếu H không có 2 cột nào giống nhau), từ đó ta biết rằng bit thứ j đã bị thay đổi, và ta có thể thay đổi giá trị bit này để sửa lỗi và nhận được chính xác từ mã đã gửi đi. Thí dụ 3.15 Cho mã tuyến tính C7, 4 có ma trận sinh là Dùng ma trận kiểm tra để xác định từ mã nào trong mã C được gửi đi, nếu ta nhận được xâu x = 0011111. Giả sử x mắc nhiều nhất một lỗi xảy ra trên đường truyền. Giải: Do G có dạng chuẩn, G = ( I4 | A ), với ma trậnBài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 66 Theo định lý 3.4, từ G, ta có ma trận kiểm tra H = ( AT | I3 ), vậy: H = 1 1 1 0 0 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 Tính Syndrome của x: S(x) = H.xT = 1 1 1 0 0 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 . 0 0 1 1 1 1 1 = 0 1 0 Syndrome của x khác O, vậy x không phải là một từ mã (x có lỗi). Do S(x) trùng với cột thứ 6 của ma trận kiểm tra H, nên ta có j = 6 là vị trí của bit bị lỗi trong xâu x. Từ đó có thể sửa được lỗi này và xác định chính xác từ mã đã gửi đi là c = 0011101. Đó là từ mã thứ tư của bộ mã C. 3.4 MÃ HAMMING 3.4.1 Mã Hamming nhị phân cấp r Mã Hamming là một loại mã tuyến tính do R. W. Hamming đề xuất được sử dụng khá phổ biến trong các hệ thống truyền tin sử dụng kỹ thuật FEC (Forward Error Corection). Mã này có khả năng sửa sai các từ mã bị sai chỉ 1 lỗi khi truyền tin. Mã Hamming có thể được định nghĩa trên mọi trường GF(q). Để đơn giản, trong phần này, chúng ta chỉ xét các mã mã Hamming nhị phân cấp r. Do đặc điểm mã hóa và giải mã khá đơn giản, nên mã Hamming được sử dụng khá rộng rãi trong thực tế Định nghĩa 3.10 Mã Hamming nhị phân cấp r, ký hiệu là Ham(r, 2), là một mã tuyến tính có ma trận kiểm tra H cấp r (2r–1), (r là số nguyên dương) có các cột là các xâu nhị phân có giá trị lần lượt là 1, 2, ... 2r–1. Nhận xét: 1. Ma trận kiểm tra H của mã Hamming không có cột gồm toàn bit ‘0’và không có 2 cột giống nhau.Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 67 2. Mã Ham(r, 2) là một mã tuyến tính nhị phân Cn, k, với các liên hệ giữa r, n và k: o n = 2r – 1; o k = 2r – 1 – r ; o r = n – k . o Ma trận sinh của mã Ham(r, 2) là ma trận G cấp k n Như vậy mã Hamming có chức năng mã hóa các thông điệp gồm k bit thành các từ mã độ dài n, với n = 2r – 1. Cấp của mã Hamming là r, với r là số bit thêm vào để chống nhiễu, còn gọi là các bit kiểm tra. Thí dụ 3.16 1. Với r = 2, ta có ma trận H = 1 0 1 0 1 1 là ma trận của mã Hamming cấp 2, Ham(2, 2) 2. Cho mã nhị phân tuyến tính C có ma trận kiểm tra sau: H = 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 C là một mã Hamming cấp 3, Ham(3, 2) Với r = 3, n = 23 – 1 = 7, k = n – r = 4, vậy C là mã tuyến tính C7, 4. Bổ đề 3.3 Các mã Hamming nhị phân cấp r, Ham(r, 2), đều có khoảng cách cực tiểu bằng 3, vì vậy có thể phát hiện sai hai bit và sửa sai 1 bit. Chứng minh: Ta biết rằng khoảng cách Hamming cực tiểu của mã nhị phân tuyến tính bằng trọng số cực tiểu của một từ mã khác O, tức là: d(C) = min{wt() | ≠ O, C}. Để chứng minh bổ đề , ta sẽ chỉ ra rằng mã Ham(r, 2) có từ mã khác O có trọng số cực tiểu là 3. Giả sử có từ mã x có trọng số nhỏ nhất là bằng 1. Khi đó x có dạng: x = 000 ... 010 . . .00 (bit ‘1’ ở vị trí thứ j) Gọi hàng thứ i của ma trận H là hi, có dạng: hi = hi1 hi2 ... hij ... hin , i = 1, 2, ..., r. Vì x là từ mã trong C nên x phải trực giao với mọi vector hàng của ma trận kiểm tra H, tức là: x. hi = 0 , i = 1, 2, ..., r hij = 0 , i = 1, 2, ..., r Tức là cột thứ j của ma trận H chứa toàn bit ‘0’, trái với định nghĩa mã Ham( r, 2 ). Vậy không có từ mã có trọng số 1. Bây giờ giả sử có từ mã y có trọng số nhỏ nhất là bằng 2. Khi đó y có dạng: y = 0 0 0 ... 010 . . .010 . . . 00 (bit ‘1’ ở vị trí thứ j và s )Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 68 do y là từ mã trong C nên x phải trực giao với mọi vector hàng của ma trận kiểm tra H, tức là: y. hi = 0 , i = 1, 2, ..., r hij + his = 0 , i = 1, 2, ..., r hij = his , i = 1, 2, ..., r Tức là cột thứ j và cột thứ s của ma trận H là giống nhau, trái với định nghĩa mã Ham(r, 2). Vậy không có từ mã có trọng số 2. Bây giờ ta chỉ ra rằng trong mã Ham( r, 2 ) có từ mã trọng số 3, là trọng số cực tiểu của các từ mã trong mã này. Ba cột đầu của H có dạng: 0 0... 0 0 1 0 0... 0 1 0 0 0... 0 1 1 Với xâu x = 1 1 1 0 ... 00 (chỉ 3 bit đầu là ‘1’, các bit còn lại là ‘0’), ta luôn có S(x) = 0. Vậy x là một từ mã trong Ham( r, 2), với wt(x) = 3, đây là từ mã có trọng số nhỏ nhất, vậy d(C) = 3. Nhận xét: Từ các kết quả trên, suy ra mã Ham( r, 2) là một mã tuyến tính C2r – 1 , 2r – 1 – r , 3 3.4.2 Ma trận sinh của mã Hamming Mã Ham(r, 2) có ma trận kiểm tra là H cấp r (2r–1). Ta sử dụng các phép biến đổi tương đương chỉ theo hàng để đưa ma trận kiểm tra về dạng chuẩn: H = ( B | Ir ) Từ ma trận kiểm tra H ở dạng chuẩn, dễ dàng xác định được ma trận sinh dạng chuẩn của mã Ham(r, 2) như sau: G = ( In – r | BT ) Thí dụ 3.17 1. Tìm ma trận sinh của mã Ham( 3, 2) 2. Mã hóa thông điệp u = 1011 bẳng mã Ham(3, 2) Giải 1: Tìm ma trận sinh của mã Ham(3, 2). Mã Ham(3, 2) có ma trận kiểm tra là: H = 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 Ta đưa ma trận kiểm tra H về dạng chuẩn nhờ các phép biến đổi tương đương theo hàng:Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 69 H = 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 0 Từ đó có ma trận sinh G của mã Hamming nhị phân cấp 3 là: G = 0 0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1 1 Giải 2: Do mã Ham(3, 2) có ma trận sinh G, xâu bit u được mã hóa thành từ mã nhờ công thức: w = u.G. Vậy: w = (1 0 1 1) . 0 0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1 1 = (1 0 1 1 0 1 0) Chú ý: 1. Một mã Ham(r, 2) có thể có nhiều ma trận sinh khác nhau (các ma trận sinh này đều tương đương), cho nên việc mã hóa cùng 1 thông điệp u với các ma trân sinh khác nhau có thể cho các từ mã khác nhau, tuy nhiên các từ mã này đều thuộc bộ mã đã cho. 2. Việc mã hóa và giải mã phải dùng cùng một ma trận sinh. 3.4.3 Phát hiện lỗi và sửa lỗi bằng mã Hamming. Giả sử khi gửi đi một từ mã của bộ mã Hamming nhị phân cấp r, ta nhận được xâu x. Nếu xâu x chỉ bị sai tối đa 1 lỗi thì ta có thể phát hiện lỗi và sửa lỗi theo các bước sau: Bước 1: Tính Syndrome của x: S(x) = H.xT Bước 2: Nếu có S(x) = O, tức là nhận được cột gồm r bit ‘0’. Kết luận x chính là từ mã được gửi. Bước 3: Nếu có S(x) ≠ O, tức là nhận được 1 cột xâu nhị phân tương ứng với 1 cột thứ j của ma trận kiểm tra H, từ đó suy ra bit thứ j của xâu x bị nhận sai và có thể sửa lỗi bằng cách cộng 1 vào bit đó. Chú ý rằng, ma trận kiểm tra H có các cột lần lượt là các xâu bit nhị phân có giá trị là 1, 2, ..., n, nên giá trị các xâu bit chính là vị trí của cột đó. Vì vậy, ở bước 3, nếu giá trị xâu bit S(x) là j sẽ cho vị trí j của bit bị nhận sai. Thí dụ 3.18. Cho C là mã Ham(3, 2), với ma trận kiểm tra H = 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 , khi gửi đi một từ mã của C, nếu xảy ra một trong các trường hợp: 1. Nhận được xâu x = 1011010 2. Nhận được xâu y = 1011011 3. Nhận được xâu z = 1101011 Giả sử các xâu nhận được chỉ sai tối đa 1 lỗi. Tìm từ mã được gửi đi ứng với mỗi trường hợp?Bài giảng “Cơ sở mã hóa thông tin” | nvdinhvnua.edu.vn 70 Giải: 1. Khi nhận được xâu x = 1011010, tính S(x) = H.xT: S(x) = 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 . 1 0 1 1 0 1 0 = 0 0 0 Vậy xâu x nhận được không có lỗi, 1011010 là từ mã được gửi. 2. Khi nhận được xâu y = 1011011, tính S(y) = H.yT: S(y) = 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 . 1 0 1 1 0 1 1 = 1 1 1 Xâu bit của S(y) là ‘1 1 1’ có giá trị là 7. Vậy xâu y bị sai ở bit thứ 7, là bit cuối cùng, sửa sai bit này, từ đó ta có từ mã được gửi là: 1011010. 3. Khi nhận được xâu z = 1101011, tính S(z) = H.zT bằng cách tương tự, ta có xâu bit của S(z) là ‘110’, có giá trị là 6, vậy bit sai là bit thứ 6, sau khi sửa lỗi, ta có từ mã gửi đi là 1101001. 3.4.4 Giới thiệu mã Hamming qphân cấp r Trên đây ta đã xét các mã Hamming nhị phân. Trường hợp tổng quát, trên trường GF(q), ta có mã Hamming qphân cấp r (qary Hamming code) được định nghĩa như sau: Định nghĩa 3.11 Mã Hamming qphân cấp r, ký hiệu Ham(r, q) là một mã tuyến tính có ma trận kiểm tra H có r hàng,
Chương MÃ HÓA CHỐNG NHIỄU Trong chương nghiên cứu vấn đề mã hóa giải mã kênh truyền, tức mã hóa tin nguồn thành từ mã trước truyền để chống nhiễu kênh truyền, sau giả mã xâu nhận để xác định xác từ mã gửi 3.1 CÁC KHÁI NIỆM CƠ BẢN 3.1.1 Các khái niệm kênh truyền Trong phần trước, giới thiệu loại mã dùng mã hóa, với mục tiêu phát lỗi sửa lỗi, tức quan tâm đến số lỗi phát sửa chữa mà không quan tâm đến việc làm nào, nơi mà lỗi xảy Tuy nhiên, kênh truyền có khả xảy lỗi với xác suất khác Shannon đề xuất mơ hình truyền tin có xem xét đến xác suất xảy lỗi kênh truyền gọi mơ hình xác suất (Probabilistic Model) Trong phần sau giáo trình này, sử dụng mơ hình xác suất việc nghiên cứu mã chống nhiễu Về mặt vật lý, kênh truyền mơi trường truyền tin, gửi nhận tin, có nhiễu gây lỗi cho việc truyền nhận tin Về mặt tốn học, ta có số định nghĩa hình thức cho kênh truyền theo mơ hình xác suất sau: Định nghĩa 3.1 Một kênh truyền bao gồm bảng ký hiệu A = {a1, a2, … , aq } tập xác suất kênh truyền (xác suất P(nhận aj | gửi ai), có dạng : { P(a j received | a i was sent ) } (3.1) Các xác suất phải thỏa mãn điều kiện: q P(a j 1 j received | was sent) , A (3.2) Thí dụ 3.1 Một kênh truyền với bảng ký hiệu nhị phân A = {0, 1}sẽ bao gồm tập xác suất sau: p1 = P( nhận ‘0’ | gửi ‘0’) p2 = P( nhận ‘1’ | gửi ‘0’) p3 = P( nhận ‘0’ | gửi ‘1’) p4 = P( nhận ‘1’ | gửi ‘1’) xác suất thỏa mãn điều kiện (3.2): p1 + p2 = p3 + p4 = Định nghĩa 3.2 Một kênh truyền gọi kênh không nhớ với xâu x = x1 x … xn c = c1c2 … cn thỏa mãn: n P( x received | c was sent ) = P( x i received | ci was sent ) i 1 Bài giảng “Cơ sở mã hóa thông tin” | nvdinh@vnua.edu.vn 46 Chú ý kênh khơng nhớ lỗi độc lập với nhau, tức lỗi xảy gửi/nhận bit (chẳng hạn gửi nhận 1) độc lập với lỗi xảy bit khác Đặc biệt, với bảng mã nhị phân A = {0 , 1}, có kênh truyền mà xác suât lỗi P(nhận | gửi 1), P(nhận | gửi 0) với xác suất p < , kênh truyền gọi kênh truyền đối xứng Các kênh đối xứng mơ hình xác xuất sử dụng nhiều lý thuyết mã hóa Chú ý xác suất lỗi p xác suất nhận – p Ta có định nghĩa sau: Định nghĩa 3.3 Một kênh truyền nhị phân đối xứng kênh tồn số p < , cho: P( '1' received | ' 0' was sent ) = P( ' 0' received | '1' was sent ) = p P( '1' received | '1' was sent ) = P( ' 0' received | ' 0' was sent ) = – p Số p gọi ‘xác suất chéo’ kênh truyền nhị phân đối xứng ) Xác suất mắc lỗi p gửi ‘0’ nhận 1, hay gửi ‘1’ nhận ‘0’ Xác suất nhận – p Hình mô tả kênh nhị phân đối xứng, với xác suất chéo p (với p < Hình 3.1 Kênh đối xứng nhị phân Thí dụ 3.2 Giả sử có xâu bit gửi kênh nhị phân đối xứng, xác suất nhận sai 0.01 Vậy xác suất để nhận xâu bit ‘10011000’ xâu bit gửi ‘00000000’? Giải: Do xác suất nhận sai 0.01 nên xác suất nhận – 0.01 = 0.99 Để nhận xâu bit 10011000 xâu bit 00000000 gửi bit đầu tiên, bit thứ bit nhận sai, bit lại nhận Do việc gặp lỗi bit độc lập với nhau, theo quy tắc nhân xác suất, ta tính xác suất để xảy trường hợp là: (0.99)5(0.01)3 = 0.0000009509900499 Bài giảng “Cơ sở mã hóa thông tin” | nvdinh@vnua.edu.vn ◄ 47 3.1.2 Quy tắc giải mã người láng giềng gần Bài toán giải mã: Giả sử từ mã c mã C gửi đi, ta nhận xâu bit x Từ xâu x, ta cần khôi phục từ mã c Đó cơng việc chủ yếu q trình giải mã Nếu việc truyền tin khơng có lỗi, x giống c Nhưng việc truyền tin có lỗi, ví dụ đường truyền có tạp âm (có nhiễu-noise), x khơng giống c Vậy sửa lỗi nào, nói cách khác, khơi phục c từ xâu nhận x? Một cách giải tính khoảng cách Hamming x từ mã C Khi đó, để giải mã x, ta lấy từ mã có khoảng cách Hamming nhỏ x coi từ mã c gửi Phương pháp giải mã gọi Quy tắc giải mã người láng giềng gần Định nghĩa 3.4 Cho C mã với độ dài n bảng chữ A Quy tắc giải mã ‘người láng giềng gần nhất’ (nearest neighbor decoding) phát biểu sau: x A, x giải mã thành cx C, cx từ mã gần với x (theo khoảng cách Hamming) Tức là, ký hiệu D(x) giải mã từ x, D(x) = cx , với cx thỏa điều kiện: d(x, cx) = {d(x, c), c C} Thí dụ 3.3 Sử dụng phương pháp giải mã người láng giềng gần để xác định từ mã gửi từ mã C = {00000,01000, 10011} xâu nhận 01100 Giải: Trước tiên, tìm khoảng cách 01100 với từ mã Ta có: d(00000,01100) = 2, d(01000,01100) = 1, d(10011,01100) = Vì từ mã gần 01100 01000, ta kết luận 01000 từ mã gửi ◄ Chú ý: Với xâu nhị phân độ dài, khoảng cách Hamming tính cơng thức: d(x, y) = w( x + y) w(x) trọng số xâu bit x, số ký hiệu khác xâu bit x, phép cộng hiểu phép cộng hai xâu bit Next T3 14/3 3.1.3 Quy tắc giải mã hợp lẽ cực đại Trong mơ hình xác suất, quy tắc giải mã dựa xác suất Quy tắc giải mã hợp lẽ cực đại cho phép giải mã xâu nhận từ mã phù hợp với từ mã gửi Giả sử từ mã c mã C gửi đi, nhận xâu bit x, kênh truyền có nhiễu, xâu bit x khơng trùng với từ mã mã C Ta cần giải mã xâu x thành cx C, cho xác suất để nhận x gửi cx lớn nhất, so với xác suất để nhận x gửi từ mã c C Tức việc giải mã x thành cx hợp lý (hợp lẽ cực đại) Ta có định nghĩa sau: Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 48 Định nghĩa 3.5 Cho C mã với độ dài n bảng chữ A Quy tắc giải mã hợp lẽ cực đại (maximum liklihood decoding) sau: x An, x giải mã thành cx C, mà: P( x : received | cx was sent ) = maxcC { P( x received | c was sent ) } Tức là, ký hiệu D(x) giải mã từ x, D(x) = cx , với cx từ mã có khả biến thành x, so với từ mã khác gửi Bây Phương pháp giải mã người láng giềng gần đem lại từ mã giống nhiều với từ mã gửi phép giải mã hợp lẽ cực đại Định lý 3.1 , phương pháp giải mã người làng giềng gần tương đương với phương pháp giải mã hợp lẽ cực đại Trong kênh truyền nhị phân đối xứng với xác suất chéo p < Chúng minh: Cho C mã nhị phân, giả sử c từ mã C gửi ta nhận xâu x sai khác i lỗi so với c, tức d(c, x) = i Do x có i bit nhận sai n- i bit nhận đúng, xác suất nhận sai p (xác suất nhận – p) nên ta có: P( x received | c was sent ) = pi(1 – p)n – i 1 p , đó: Vì p < , nên ta có p 1 p pi (1 – p)n – i = pi + (1 – p)n – i – > pi + 1(1 – p)n – i – p vậy: pi (1 – p)n – i > pi + 1(1 – p)n – (i + 1) Với i = 0, 1, 2, …n-1 ta có: p0(1 – p)n > p(1 – p) n – > … > pn(1 – p)0 Từ công thức ta thấy i nhỏ xác suất (1) lớn Phuong pháp giải mã người láng giềng gần chọn từ mã cx gần với x tức d(cx , x) = i nhỏ nên xác suất (1) lớn Tức là, quy tắc giải mã ‘người láng giềng gần nhất’ cho phép giải mã x thành từ mã cx với xác suất lớn , phù hợp với quy tắc giải mã hợp lẽ cực đại 3.2 PHÁT HIỆN LỖI VÀ SỬA LỖI Phát lỗi sửa lỗi cơng việc chủ yếu q trình giải mã Trước hết trình bày nguyên lý chung để phát lỗi sửa lỗi truyền tin 3.2.1 Nguyên lý phát lỗi sửa lỗi Giả sử đầu kênh truyền gửi từ mã c C, bên nhận xâu x Nguyên lý phát lỗi sửa lỗi hiểu sau: Nguyên lý phát lỗi: Kiểm tra xem xâu nhận có phải từ mã C hay khơng, khơng phải từ mã xâu nhận sai, có lỗi Nguyên lý sửa lỗi: Khi phát xâu x nhận sai, tìm từ mã cx có khoảng cách Hamming gần với x (theo quy tắc giải mã người láng giềng gần nhất) để thay cho xâu x bị lỗi, tức sửa lỗi, coi cx từ mã c gửi (cx giải mã xâu x) Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 49 Như ngun lý phát lỗi sửa lỗi dựa khoảng cách Hamming Thí dụ cho thấy khoảng cách Hamming cực tiểu d(C) có liên quan đến việc phát lỗi sửa lỗi Thí dụ 3.4 Giả sử HQ X có đồ mạng lưới hình vẽ bên Vì lý bí mật, có HQ biết dẫn bước cho X để X đến HQ HQ cần gửi cho X thông điệp N, S, E, W để theo X đến HQ (dãy thông điệp cần chuyển là: NNWNNWWSSWWNNNNWWN) Rõ ràng độ tin cậy (chính xác) việc truyền/nhận thơng tin quan trọng tốc độ Chúng ta mã hóa thơng điệp mã nhị phân: 00 = N C1 = 01 = W 10 = E 11 = S Ta có khoảng cách Hamming cực tiểu mã d(C1) = Nếu từ mã gửi mà bị mắc lỗi lại biến thành từ mã khác, mã phát sửa lỗi Bây ta thêm bit kiểm tra chẵn lẻ vào từ mã C1 (theo nguyên tắc: bit thêm vào hay cho tổng bit ‘1’ từ mã chẵn Ta nhận mã C2 sau: 000 C2 = 011 101 110 Dễ thấy d(C2) = 2, mã phát lỗi, khơng thể sửa lỗi Thật vậy, giả sử từ mã c = 000 gửi đi, có lỗi xảy ra, nhận xâu bit có bit ‘1’, xâu 001 ; 010 100, từ mã hợp lệ mã C2, phát xâu x lỗi Tương tự với từ mã khác gửi, xâu nhận có lỗi làm thay đổi số bit ‘1’ từ chẵn thành lẻ, lỗi bị phát Tuy nhiên thấy xâu nhận mắc lỗi khơng thể phát được, tổng số bit ‘1’ số chẵn Mặt khác, từ mã gửi mà bị mắc lỗi xâu nhận lại từ mã khác mã C2, khơng thể phát mắc lỗi Bây ta tạo mã từ C2 cách lặp lại bit đầu từ mã vào cuối từ mã, ta nhận mã C3 sau: C3 = 00000 01101 10110 11011 Dễ thấy d(C3) = 3, mã phát xâu chứa lỗi mà sửa xâu chứa lỗi Chẳng hạn, HQ muốn gửi cho X thông điệp ‘N’, thông điệp mã mã C3, tức HQ gửi từ mã c = 00000 bit thứ hai bị lỗi, X nhận xâu 01000 X biết từ mã bị lỗi, phần lỗi bên trái bit kiểm tra chẵn lẻ (do tổng bit ba bit đầu phải số chẵn), sửa lỗi cách lấy bit cuối Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 50 thay cho bít đầu Từ x giải mã D(01000) = 00000, từ tìm hướng ‘N’ Ta có định nghĩa phát lỗi sửa lỗi dựa khoảng cách Hamming sau Định nghĩa 3.6 Cho C mã với độ dài n bảng chữ A, đó: Mã C gọi phát s lỗi, c C xâu x ≠ c ta có: d(x , c) s x C Mã C gọi sửa t lỗi, c C xâu x ≠ c ta có: d(x , c) t x từ mã gần với c Ta giải thích rõ cho định nghĩa sau: Mã C gọi phát s lỗi với từ mã c gửi đi, mà có s bit bị thay đổi xâu nhận x, xâu khơng phải từ mã C, phát từ mã gửi bị lỗi Mã C gọi sửa t lỗi gửi từ mã c, mà có t bit bị thay đổi xâu nhận x, thay xâu với từ mã gần có d(x, c) ≤ t (theo quy tắc giải mã người láng giềng gần nhất) Ta có định lý sau khả phát lỗi sửa lỗi mã, việc chứng minh định lý dành cho sinh viên tập Định lý 3.2 Cho C mã với độ dài n bảng chữ A, đó: Mã C phát k lỗi từ mã khoảng cách Hamming d(C) k + Mã C sửa k lỗi từ mã khoảng cách Hamming d(C) 2k + Như vậy, khả phát sửa lỗi mã phụ thuộc vào khoảng cách Hamming cực tiểu d(C) mã đó, d(C) lớn khả phát lỗi sửa lỗi mã cao Hệ 3.1 Nếu mã C có khoảng cách Hamming cực tiểu d(C) = d, C phát tối d 1 đa k = d – lỗi, sửa tối đa k = lỗi ( x số nguyên lớn không vượt x, chẳng hạn 3.14 = 3; 5.0 = ; 3.14 = - 4) Sự chứng minh hệ suy trực tiếp từ Định lý 3.2 Hệ thuận lợi cho việc tính tốn khả phát lỗi sửa lỗi mã Chẳng hạn, với số khoảng cách Hamming mã C, ta phát sửa số lỗi sau: d(C) Số lỗi tối đa phát Số lỗi tối đa sửa … … 0 1 2 … Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 51 Thí dụ 3.5 Giả sử C mã gồm từ mã:{c1 = 00000000, c2 = 11111000, c3 = 01010111, c4 = 10101111} C phát sửa lỗi từ mã bị nhận sai? Khi gửi từ mã c = 00000000, nhận xâu: o x1 = 11011000, o x2 = 11111000, o x3 = 10101000, Trường hợp xâu nhận bị coi bị lỗi, sao? Nếu gửi từ mã c4 = 10101111, nhận xâu x = 10100011 Có thể phát lỗi sửa lỗi không? Giải : Tính khoảng cách Hamming cực tiểu từ mã, ta có d(C) = Vậy mã phát 1 tối đa – = lỗi từ mã Số lỗi tối đa sửa =2 Xâu x1 nhận từ C, với lỗi (ở bit 1, bit 2, bit bit 5), mã C phát x1 có lỗi yêu cầu gửi lại Với xâu x2, mắc lỗi, khơng phát lỗi, người nhận cho gửi từ mã c2 Với xâu nhận x3, mắc lỗi nên phát từ mã bị lỗi, yêu cầu gửi lại Do số lỗi 2, nên sửa được, dùng phương pháp giải mã người láng giềng gần nhất, giải mã D(x) = c4, từ mã gửi Ta trình bày số mã phát lỗi đơn giản Để dễ theo dõi, xem xét tin nguồn mã xâu nhị phân 3.2.2 Các mã phát lỗi Mã chẵn lẻ (Parity code) Giả sử thông điệp nguồn xâu gồm k bit Mã chẵn lẻ thêm vào thông điệp nguồn bit thứ k + 1, gọi bit kiểm tra chẵn lẻ (parity check bit) theo cách sau: o Nếu thơng điệp xâu có chứa số chẵn bit ‘1’ ta thêm ‘0’ vào cuối xâu o Nếu thơng điệp xâu có chứa số lẻ bit ‘1’ ta thêm ‘1’ vào cuối xâu Tổng qt, ta mã hóa thơng điệp x = x1 x2 xk thành x1 x2 xk xk+1, đó: xk+1 = (x1 +x2 + + xk ) mod Mã nhận mã (k+1, M, k), k độ dài tin nguồn, M số tin nguồn, k+1 độ dài từ mã mã chẵn lẻ Nhận xét: Việc thêm bit kiểm tra chẵn lẻ để đảm bảo số bit từ mã (xâu mở rộng) phải số chẵn (khi ta nói từ mã hợp lệ) Như vậy, bit kiểm tra chẵn lẻ thêm vào xâu bit, có lỗi việc truyền tin từ từ mã tổng số bit từ mã số lẻ Do đó, phát lỗi Tuy nhiên, có hai lỗi xảy lỗi khơng thể phát Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 52 tổng số bit xâu mở rộng số chẵn Nói chung, số lẻ lỗi phát hiện, số chẵn lỗi phát Máy thu kiểm tra bit chẵn lẻ thông điệp thu phát bất đồng, yêu cầu máy phát truyền tin lại thơng điệp Thí dụ 3.6: Giả sử rằng, bit kiểm tra chẵn lẻ thêm vào thông điệp trước truyền Có thể kết luận ta nhận xâu bit 1100001 1011111 từ thơng điệp gửi Giải: Vì xâu nhận 1100001 chứa số lẻ bit 1, khơng thể từ mã hợp lệ (và phải chứa số lẻ lỗi) Đối với xâu nhận 1011111: xâu chứa số chẵn bit 1, từ mã hợp lệ Do việc truyền tin khơng mắc lỗi, có số chẵn lỗi Nói chung mã chẵn lẻ khẳng định chắn việc truyền tin bị mắc lỗi số bit ‘1’ nhận lẻ Ma trận sinh mã chẵn lẻ Với mã chẵn lẻ, có ma trận G để sinh từ mã từ thông điệp nguồn Chẳng hạn, với thông điệp bit x = x1 x2 x3 x4 để mã hóa thành mã chẵn lẻ (mã phát lỗi), ta thêm bít thứ cho thông điệp, theo công thức: x5 = (x1 + x2 + x3 + x4) mod Như vậy, ta có cơng thức mã hóa: E(x) = x.G , với G ma trận cấp 5, có dạng: G = 0 0 0 1 0 1 G ma trận sinh mã chẵn lẻ có độ dài 5, với bit cuối bit kiểm tra chẵn lẻ Có thể viết G dạng chuẩn: G = ( I4 | A ) , 1 với A ma trận cột Để cho gọn, viết A = (1 1 1)T hiểu cột toàn số 1 1 Chẳng hạn, với thông điệp X = {0001 ; 0011, 0111, 1111}, mã hóa nhờ ma trận G trên: E(0001) = (0001).G = (00011) E(0011) = (0011).G = (00110) 00011 Ta nhận mã chẵn lẻ sau: C= 00110 E(0111) = (0111).G = (01111) 01111 E(1111) = (1111).G = (11110) 11110 Để mã hóa thông điệp độ dài k bit thành mã chẵn lẻ, ta có ma trận sinh G ma trận: G = ( Ik | A ) , A ma trận cột gồm k phần tử toàn số Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 53 Mã sánh hợp Một cách đơn giản khác để phát lỗi lặp lại bit thơng điệp lần, phát lỗi từ mã theo cách sau: Vì từ mã xâu bit chứa cặp bit sánh hợp (giống nhau), vậy, ta phát lỗi làm thay đổi không bit cặp bit sánh hợp Thí dụ 3.7 Mã hóa xâu bit 010001 cách lặp lại bit lần Giải: Việc lặp lại bit lần đem lại từ mã 001100000011 Ta phát lỗi bit thứ 2, thứ thứ từ mã có bit nhận 01001001 từ mã 00001111 gửi Mặt khác, ta phát lỗi bit bit thay đổi (chẳng hạn phát lỗi nhận 00000011, từ mã 00001111 gửi đi) Ma trận sinh mã sánh hợp Với mã sánh hợp, xây dựng ma trận G để sinh từ mã từ thông điệp nguồn Chẳng hạn, với thông điệp bit x = x1 x2 x3 x4 để mã hóa thành mã sánh hợp, ta lặp lại bit thêm lần nữa, ma trận sinh G mã sánh hợp có dạng: G = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Chẳng hạn, để mã hóa xâu x = (1001), ta có: E(x) = (1001).G = (11000011) Kết luận: Ở trên, xem xét mã dùng để phát sai Khi lỗi phát hiện, tất làm để có từ mã xác đề nghị truyền phát lại hy vọng khơng có lỗi xuất lần thực Tuy nhiên, yêu cầu phát lại, trường hợp kênh chiều (one way channel): đầu phát đầu nhận Khi đó, ta phải sử dụng mã mạnh hơn, không phát sai mà sửa sai Mục sau, xem xét tới mã này, gọi mã sửa lỗi 3.2.3 Các mã sửa lỗi Chúng ta thấy rằng, dư thừa có từ mã, bit kiểm tra chẵn lẻ thêm vào xâu bit, phát lỗi truyền tin Chúng ta chí làm tốt đưa vào nhiều dư thừa Chúng ta khơng phát sai mà cịn sửa sai Chính xác hơn, số lỗi xảy từ mã truyền đủ nhỏ, xác định xác từ mã truyền Mã lặp lại (repetition codes) Chúng ta mã hóa thơng điệp nhị phân x = x1 x2 … xi … xk cách lặp lại xâu bit́ cầ n truyề n m lầ n, tức là: E(x) = x11 x21 … xi1 … xk1 x12 x22 … xi2 … xk2 x1m x2m … xim … xkm Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 54 Trong đó, xij bit thứ i thông điệp lặp lại lần thứ j từ mã ( i = 1, 2, … , k ; j = 1, 2, …, m) Dùng quy tắc lấy đa số đơn giản, cách so sánh các bit có số i với (1 ≤ i ≤ k), nế u số lươ ̣ng bit xij bằ ng lớn số lươ ̣ng xij bằ ng thì ta có thể kế t luâ ̣n xi bằ ng giải mã; trái lại kết luận xi = Trong trường hơ ̣p hai số lươ ̣ng này bằ ng thì ta chưa thể kế t luâ ̣n về xi, nhiên lấy số lần lặp lại m số lẻ để tránh tình Mã tạo theo phương pháp ta ̣o mã gọi mã lă ̣p la ̣i (Repetition codes) Mã lă ̣p la ̣i có nhươ ̣c điể m là đô ̣ dài của từ mã mã lă ̣p la ̣i sẽ rấ t lớn nế u k m lớn Thí dụ 3.8 Giả sử ta có thơng điệp {000, 001, 100, 101} (có thể mã đó, cần mã hóa thành mã lặp lại) Ta mã hóa thơng điệp x = x1 x2 x3 bằ ng phương pháp lă ̣p lầ n: E(x) = x1 x2 x3 x4 x5 x6 x7 x8 x9, ở x1 = x4 = x7, x2 = x5 = x8, x3 = x6 = x9 đươ ̣c mã C với từ mã hơ ̣p lê ̣ sau: C = {000000000, 001001001, 100100100, 101101101} Để giải mã xâu bit nhận được, mà xâu chứa lỗi, ta dùng quy tắc lấy đa số đơn giản Chẳng hạn, để xác định x1, ta xem xét x1, x4, x7 Nếu bit 1, ta kết luận x1 = Trái lại, bit 0, ta kết luận x1 = Nói chung xem xét bit tương ứng với bit thơng điệp gốc Ví dụ, với mã lặp lại lần dùng ta nhận xâu x = 101001001 Sử dụng quy tắc lấy đa số đơn giản trên, để xác định x1, ta xem xét x1, x4, x7 xâu x, có bit ‘0’ bit ‘1’ nên ta định x1 = Với bit thứ hai thứ ba, ta giữ nguyên vị trí khơng bị lỗi D(x) = 001001001 từ mã thứ hai C, từ suy thơng điệp gốc cần gửi 001 Nhận xét Việc mã hóa mã lặp lại có nhược điểm độ dài từ mã lớn k m lớn, làm giảm tốc độ tuyền tin Tuy nhiên, việc lại làm tăng độ tin cậy, mã lặp lại có khả phát lỗi sửa lỗi tốt Trong nhiều trường hợp tin cậy cần tốc độ Việc sử dụng mã chống nhiễu (mã phát lỗi mã sửa lỗi) làm tăng khoảng cách Hamming cực tiểu mã, từ làm tăng khả phát lỗi sửa lỗi Ma trận sinh mã lặp lại: Chẳng hạn, với thông điệp bit x = x1 x2 x3 x4 để mã hóa thành mã lặp lại lần, ta lặp lại xâu x lần, nhận từ mã: E(x) = x1 x2 x3 x4 x5x6 x7 x8 x9 x10 x11 x12 Trong đó: x1 = x5 = x9 ; x2 = x6 = x10 ; x3 = x7 = x11 ; x4 = x8 = x12 Do xâu x (coi ma trận hàng) nhân với ma trận đơn vị xâu đó, để lặp lại xâu x ba lần, ta nhân với ma trận G sau Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 55 Codewords of C 0000 1101 1010 0111 1000 0101 0010 1111 0100 1001 1110 0011 0010 1111 1000 0101 0001 1100 1011 0110 coset leader Qua thí dụ ta thấy, trình lập bảng chuẩn, có hai hàng (hai coset) giống nhau, phải tính thêm coset ứng với coset leadr cho có đủ qn – k hàng khác (trong thí dụ qn – k = 24 – = hàng) Khi phải bỏ hàng giống nhau, giữ lại hàng khác (do số hàng bảng tối đa qn – k = 24 – = hàng), kết bảng coset chuẩn sau: Codewords of C 0000 1101 1010 0111 1000 0101 0010 1111 0100 1001 1110 0011 0001 1100 1011 0110 coset leader Nhận xét: Nói chung việc giải mã bảng coset chuẩn dễ ràng hạn chế: Việc giải mã thực tế chậm với mã lớn, tốn cho chi phí lưu trữ bảng chuẩn Chẳng hạn, với mã C[6, 3], bảng chuẩn bảng gồm 26-3 = hàng 23 = cột, mã C[7, 4] có dãy chuẩn gồm hàng 16 cột Việc giải mã sửa lỗi thực xâu nhận chứa lỗi xảy vị trí bit ‘1’ coset leader, tức có vector lỗi coset leader Ta xem xét thí dụ sau: Thí dụ 3.11 Với mã C thí dụ trên, gửi từ mã 0101 (mã hóa từ thơng điệp 01): (a) Nếu xâu nhận x = 0001 (lỗi xảy bit thứ từ mã, vector lỗi coset leader 0100) sửa lỗi này, giải mã x cx = 0101, từ thơng điệp gốc 01 (b) Nếu xâu nhận y = 0100 (lỗi xảy bit thứ từ mã, vector lỗi e = 0001, khơng phải coset leader) giải mã cy = 0000, từ thơng điệp gốc 00: sai! Trường hợp không sửa lỗi Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 59 Dưới ta nghiên cứu phương pháp phát lỗi sửa lỗi tốt hơn, khắc phục nhược điểm phương pháp giải mã bảng coset chuẩn Đó phương pháp phát lỗi sửa lỗi cách dùng ma trận kiểm tra mã tuyến tính 3.3.2 Phát lỗi ma trận kiểm tra Liên hệ ma trận sinh ma trận kiểm tra Để tiện theo dõi, nhắc lại số kết chương 2: Cho C[n, k] mã nhị phân tuyến tính, đó: (a) Mã đối ngẫu C là: C = { v {0, 1}n v.c = 0, c C}, (b) Gọi G ma trận sinh C , G có cấp k n, (c) Gọi H ma trận sinh mã đối ngầu C , H có cấp (n-k) n (d) Ma trận H gọi ma trận kiểm tra mã C, (tương tự, ma trận G ma trận kiểm tra mã C) Người ta gọi H ma trận kiểm tra liên kết với ma trận G Ta có số kết liên hệ ma trận sinh G ma trận kiểm tra H mã tuyến tính C sau: Đinh lý 3.4 Nếu C mã tuyến tính trường GF(q) có ma trận sinh G, ma trận H ma trận kiểm tra mã C H có hàng độc lập tuyến tính thỏa điều kiện: G.HT = O (3.3) đó: HT ma trận chuyển vị H, O ma trận khơng (gồm tồn số khơng) Chứng minh: Trước hết ta ý cấp ma trận, với mã C[n, k] G = (gij)k n , H = (hij)(n-k) n HT = (hji) n (n-k) Phép nhân G.HT cho kết ma trận cấp k (n-k) Do cột HT từ mã mã đối ngẫu C , nên trực giao với hàng G, kết hàng G nhân với cột HT khơng Từ suy điều phải chứng minh Thí dụ 3.12 Cho mã tuyến tính nhị phân C = {000,001,100,101} Kiểm tra công thức (3.3): C mã tuyến tính C[3, 2] nên có ma trận sinh tạo hai từ mã độc lập tuyến tính: 0 1 G= 1 0 Ta tìm mã đối ngẫu C = { 000, 010 } nên ma trận kiểm tra mã C H = [0 0], 0 0 0 Ta có: G HT = 1 = , G H thỏa mãn định lý 3.4 1 0 0 0 Nhận xét: Áp dụng định lý 3.4, ta tìm ma kiểm tra H biết ma trận sinh G Với ma trận sinh G cho, ma trận kiểm tra H cần tìm ma trận thỏa mãn phương trình ma trận G.HT = O Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 60 Thí dụ 3.13 Tìm ma trận kiểm tra H liên kết với ma trận G sau: 0 1 G= 1 0 Giải: Ở G có cấp k n = 3, nên ma trận kiểm tra H có cấp (n-k) n = Ma trận kiểm tra H có cấp Ma trận H có cấp , đặt H = (x1, x2, x3), ta xác định phần tử x1, x2, x3 từ phương trình ma trận: G HT = O, x1 0 1 1 1 x2 = x3 x1, x2, x3 nghiệm hệ phương trình 0 0 0.x1 0.x 1.x Hệ tương đương với hệ: 1 x1 0.x 0.x Giải ta được: x1= x3 = ; x2 tùy ý, để có nghiệm khác khơng ta chọn x2 = (cần chọn n-k nghiệm độc lập tuyến tính, thí dụ n-k =1 nên chọn k để có nghiệm khác không) Vậy HT = [ ]T Từ ma trận kiểm tra H liên kết với ma trận G là: H=[010] Việc áp dụng định lý 3.4 cho phép tính ma trận kiểm tra H từ ma trận G cho trước mà không cần tìm mã đối ngẫu mã C Tuy nhiên việc tính tốn cịn phúc tạp, k n lớn Định lý cho phép tính ma trận kiểm tra dễ dàng từ ma trận sinh dạng chuẩn Định lý 3.5 Nếu mã tuyến tính C[n , k] trường GF(q) có ma trận sinh dạng chuẩn G = ( Ik | A ) ma trận kiểm tra dạng chuẩn mã C xác định bởi: H = (– AT | In-k ) (3.4) với AT ma trận chuyển vị ma trận A ma trận sinh dạng chuẩn G Để chứng minh định lý cần với ma trận H xác định H có hàng độc lập tuyến tính có G HT = O Theo định lý 3.4 H ma trận kiểm tra mã C Sinh viên chứng minh định lý này xem tập Chú ý với mã nhị phân tuyến tính cơng thức (3.4) có dạng: H = ( AT | In-k ) (3.4)’ Thí dụ 3.14 1 1 Cho mã C[4, 2] trường F3, có ma trận sinh G = , dễ thấy ma trận sinh G dạng 0 1 chuẩn Vậy theo định lý 3.5, ta có ma trận kiểm tra mã C : 1 1 H = ( – AT | I2 ), với ma trận AT = , ta có – AT = 1 1 = Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 2 2 61 2 Vậy ma trận kiểm tra mã C H = 2 0 , ma trận kiểm tra H dạng chuẩn 1 0 1 Thí dụ 3.15 Cho mã tuyến tính C[7, 4, 3] có ma trận sinh dạng chuẩn G = 0 0 1 1 , tìm ma 0 1 0 0 1 1 trận kiểm tra mã C Giải: theo công thức (3.4)’định lý 3.5, C mã nhị phân tuyến tính ta có ma trận kiểm tra mã C dạng chuẩn : H = ( AT | I3 ) 1 1 A = 1 ta có AT = 1 0 1 1 1 0 0 1 1 1 1 1 0 Vậy H = 0 1 1 0 ma trận kiểm tra mã C, dạng chuẩn 1 1 0 1 Nhận xét: Từ định lý 3.5, biết ma trận sinh G dạng chuẩn mã tuyến tính nhị phân C[n, k], tìm ma trận kiểm tra H dạng chuẩn Ngược lại, biết ma trận kiểm tra H dạng chuẩn tìm ma trận sinh liên kết G dạng chuẩn Cụ thể, H = ( B | Ik ) G = ( In-k | – BT ) Tức là, với mã C, biết hai ma trận G H dạng chuẩn tìm ma trận Điều chứng tỏ ma trận G H có liên quan chặt chẽ với Thí dụ 3.16 Cho mã C[7, 4] có ma trận sinh sau: 1 1 1 1 0 1 Hãy tìm ma trận kiểm tra mã C[7, 4] G= 1 0 0 1 0 1 Bước 1: Trước hết đưa ma trận G ma trận tương đương dạng chuẩn nhờ phép biến đổi tương đương theo hàng: 1 0 1 0 0 1 1 G’ = 0 1 0 0 1 1 Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 62 Bước : Do G’ ma trận sinh mã C, dạng chuẩn, G’ = ( I4 | A ), ma trận A : 1 1 1 1 A= 1 0 0 1 Theo định lý 3.4, ma trận kiểm tra mã C có dạng H = ( AT | I3 ), ta có: 1 1 0 H = 0 1 1 1 1 0 1 Phát lỗi ma trận kiểm tra Định lý 3.6 Cho H ma trận kiểm tra mã nhị phân tuyến tính C[n, k] Một xâu bit x độ dài n từ mã C khi: x.HT = O (3.5) đó: HT ma trận chuyển vị H, O ma trận khơng (gồm tồn số khơng) Chứng minh: - Điều kiện cần: Giả sử x = (x1 x2 … xn ) từ mã C Do x phải trực giao với hàng ma trận H, hay trực giao với cột ma trận HT Từ ta có x.HT = O - Điều kiện đủ: Giả sử x thỏa mãn x.HT = O, điều chứng tỏ x trực giao với tất cột ma trận HT, hay x trực giao với hàng H, theo kết đại số tuyến tính, x thuộc khơng gian trực giao với không gian sinh H Do H ma trận sinh mã đối ngẫu C nên suy x C, tức x từ mã C Nhận xét: Từ định lý 3.6, ta có phương pháp phát lỗi sau: - Giả sử từ mã c C gửi đi, ta nhận xâu x, để xác định xâu x có phải từ mã hợp lệ hay không, ta kiểm tra điều kiện (3.5): x.HT = O Nếu điều kiện thỏa mãn (vế phải ma trận không) ta kết luận x từ mã hợp lệ C Nếu vế phải ≠ O, xâu nhận khơng phải từ mã C Dễ thấy điều kiện x.HT = O tương đương với điều kiện: H.xT = O, (3.6) (trong xT ma trận cột chuyển vị xâu x) Việc thực tính tốn với điều kiện (3.6) dễ dàng (3.5), nên ta thường kiểm tra điều kiện , thay cho việc kiểm tra điều kiện (3.5) Định nghĩa 3.9 Cho mã tuyến tính C[n, k] có ma trận kiểm tra H, với xâu bit x có độ dài n, biểu thức H.xT gọi Syndrome x, (hay vector hội chứng x), ký hiệu S(x) Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 63 Như vậy, để kiểm tra x có phải từ mã C hay không, ta kiểm tra điều kiện S(x) = O Nhận xét: Dễ thấy với hai xâu bit x y độ dài thì: S(x + y) = S(x) + S(y) Với ma trận kiểm tra H, với O xâu toàn bit ‘0’ S(O) = O Thí dụ 3.17 1 1 0 Giả sử mã nhị phân tuyến tính C[7, 4] có ma trận kiểm tra H = 0 1 1 1 1 0 Giả sử nhận xâu x = 0001110 Hỏi x có phải từ mã thuộc C hay khơng? Giải: Tính S(x) = H.xT Giải: ta tìm Syndrome x: 0 0 1 1 0 0 1 S(x) = 1 1 1 = 0 1 1 0 1 1 1 0 S(x) ≠ O, x từ mã Giả sử nhận xâu x = 0001011 Hỏi x có phải từ mã thuộc C hay khơng? Giải: Tính S(x) = H.xT 0 0 1 1 0 0 0 S(x) = 1 1 1 = 0 1 1 0 0 0 1 1 S(x) = O, x từ mã 3.3.3 Sửa lỗi ma trận kiểm tra Ma trận kiểm tra khơng dùng để phát lỗi mà dùng để sửa lỗi Giả sử từ mã c = (c1 c2 … cn) từ mã gửi đi, xâu nhận x = (x1 x2 … xn), gọi e vector lỗi, với e = ( e1 e2 … en ), đó: ci , xi ei {0, 1} Rõ ràng x = c xâu nhận khơng có lỗi, viết x = c + e, với e = O (xâu toàn bit ‘0’) Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 64 Trái lại, x có lỗi bit thứ j, x c khác bit thứ j, viết: x = c + e với e có bit thứ j ‘1’, bit khác ‘0’ Thật vậy: giả sử gửi từ mã c = 1110001 ta nhận x = 1110000, có lỗi xảy bit thứ Ta viết : 1110000 = 1110001 + 00000001; x = c + e với e = 0000001 Bây ta giả sử từ mã c gửi ta nhận xâu x, với có lỗi xảy ra, ta chứng minh ta sửa lỗi này, tìm xác từ mã gửi Bổ đề 3.2 Nếu mã tuyến tính C[n, k] có ma trận kiểm tra H khơng có cột O khơng có cột giống nhau, sửa lỗi xảy gửi từ mã Chứng minh: Giả sử từ mã c gửi ta nhận xâu x, với có lỗi xảy Giả sử lỗi xảy bit thứ j, viết: x = c + e, với vector lỗi e có bit khác khơng vị trí thứ j, e = (00 …010…0) , với bit thứ j ‘1’ Ta tính Syndrome x: S(x)= S(c)+ S(e), c từ mã nên S(c) = O, ta có : S(x) = S(e) = H.eT = H [ 0 …1 ]T = hj Trong hj cột thứ j ma trận H Do H khơng có hai cột giống nhau, nên vị trí j Như việc tính S(x) xác định vị trí bit bị sai, ứng với cột thứ j ma trận H, từ sửa lỗi (đpcm) Từ đó, nhận x giả sử khơng có q lỗi xuất hiện, ta tìm từ mã gửi c cách tính Syndrome x, S(x) = Hxt Nếu S(x) = O, ta biết x từ mã gửi Nếu S(x) ≠ O, cột thứ j H (nếu H khơng có cột giống nhau), từ ta biết bit thứ j bị thay đổi, ta thay đổi giá trị bit để sửa lỗi nhận xác từ mã gửi Thí dụ 3.15 Cho mã tuyến tính C[7, 4] có ma trận sinh Dùng ma trận kiểm tra để xác định từ mã mã C gửi đi, ta nhận xâu x = 0011111 Giả sử x mắc nhiều lỗi xảy đường truyền Giải: Do G có dạng chuẩn, G = ( I4 | A ), với ma trận Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 65 Theo định lý 3.4, từ G, ta có ma trận kiểm tra H = ( AT | I3 ), vậy: 1 1 0 H = 1 1 1 1 0 Tính Syndrome x: 0 0 1 1 0 1 0 T S(x) = H.x = 1 1 1 = 1 1 1 0 1 0 1 1 Syndrome x khác O, x từ mã (x có lỗi) Do S(x) trùng với cột thứ ma trận kiểm tra H, nên ta có j = vị trí bit bị lỗi xâu x Từ sửa lỗi xác định xác từ mã gửi c = 0011101 Đó từ mã thứ tư mã C 3.4 MÃ HAMMING 3.4.1 Mã Hamming nhị phân cấp r Mã Hamming loại mã tuyến tính R W Hamming đề xuất sử dụng phổ biến hệ thống truyền tin sử dụng kỹ thuật FEC (Forward Error Corection) Mã có khả sửa sai từ mã bị sai lỗi truyền tin Mã Hamming định nghĩa trường GF(q) Để đơn giản, phần này, xét mã mã Hamming nhị phân cấp r Do đặc điểm mã hóa giải mã đơn giản, nên mã Hamming sử dụng rộng rãi thực tế Định nghĩa 3.10 Mã Hamming nhị phân cấp r, ký hiệu Ham(r, 2), mã tuyến tính có ma trận kiểm tra H cấp r (2r–1), (r số nguyên dương) có cột xâu nhị phân có giá trị 1, 2, 2r–1 Nhận xét: Ma trận kiểm tra H mã Hamming khơng có cột gồm tồn bit ‘0’và khơng có cột giống Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 66 Mã Ham(r, 2) mã tuyến tính nhị phân C[n, k], với liên hệ r, n k: o n = 2r – 1; o k = 2r – – r ; o r=n–k o Ma trận sinh mã Ham(r, 2) ma trận G cấp k n Như mã Hamming có chức mã hóa thông điệp gồm k bit thành từ mã độ dài n, với n = 2r – Cấp mã Hamming r, với r số bit thêm vào để chống nhiễu, gọi bit kiểm tra Thí dụ 3.16 0 1 Với r = 2, ta có ma trận H = 1 1 ma trận mã Hamming cấp 2, Ham(2, 2) 1 Cho mã nhị phân tuyến tính C có ma trận kiểm tra sau: 0 0 1 1 H = 0 1 0 1 1 1 C mã Hamming cấp 3, Ham(3, 2) Với r = 3, n = 23 – = 7, k = n – r = 4, C mã tuyến tính C[7, 4] Bổ đề 3.3 Các mã Hamming nhị phân cấp r, Ham(r, 2), có khoảng cách cực tiểu 3, phát sai hai bit sửa sai bit Chứng minh: Ta biết khoảng cách Hamming cực tiểu mã nhị phân tuyến tính trọng số cực tiểu từ mã khác O, tức là: d(C) = min{wt() | ≠ O, C} Để chứng minh bổ đề , ta mã Ham(r, 2) có từ mã khác O có trọng số cực tiểu Giả sử có từ mã x có trọng số nhỏ Khi x có dạng: x = 000 010 00 (bit ‘1’ vị trí thứ j) Gọi hàng thứ i ma trận H hi, có dạng: hi = hi1 hi2 hij hin , i = 1, 2, , r Vì x từ mã C nên x phải trực giao với vector hàng ma trận kiểm tra H, tức là: x hi = , i = 1, 2, , r hij = , i = 1, 2, , r Tức cột thứ j ma trận H chứa toàn bit ‘0’, trái với định nghĩa mã Ham( r, ) Vậy khơng có từ mã có trọng số Bây giả sử có từ mã y có trọng số nhỏ Khi y có dạng: y = 0 010 010 00 (bit ‘1’ vị trí thứ j s ) Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 67 y từ mã C nên x phải trực giao với vector hàng ma trận kiểm tra H, tức là: y hi = , i = 1, 2, , r hij + his = , i = 1, 2, , r hij = his , i = 1, 2, , r Tức cột thứ j cột thứ s ma trận H giống nhau, trái với định nghĩa mã Ham(r, 2) Vậy khơng có từ mã có trọng số Bây ta mã Ham( r, ) có từ mã trọng số 3, trọng số cực tiểu từ mã mã Ba cột đầu H có dạng: 0 0 0 0 1 Với xâu x = 1 00 (chỉ bit đầu ‘1’, bit cịn lại ‘0’), ta ln có S(x) = Vậy x từ mã Ham( r, 2), với wt(x) = 3, từ mã có trọng số nhỏ nhất, d(C) = Nhận xét: Từ kết trên, suy mã Ham( r, 2) mã tuyến tính C[2r – , 2r – – r , 3] 3.4.2 Ma trận sinh mã Hamming Mã Ham(r, 2) có ma trận kiểm tra H cấp r (2r–1) Ta sử dụng phép biến đổi tương đương theo hàng để đưa ma trận kiểm tra dạng chuẩn: H = ( B | Ir ) Từ ma trận kiểm tra H dạng chuẩn, dễ dàng xác định ma trận sinh dạng chuẩn mã Ham(r, 2) sau: G = ( In – r | BT ) Thí dụ 3.17 Tìm ma trận sinh mã Ham( 3, 2) Mã hóa thơng điệp u = 1011 bẳng mã Ham(3, 2) Giải 1: Tìm ma trận sinh mã Ham(3, 2) Mã Ham(3, 2) có ma trận kiểm tra là: 0 0 1 1 H = 0 1 0 1 1 1 Ta đưa ma trận kiểm tra H dạng chuẩn nhờ phép biến đổi tương đương theo hàng: Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 68 0 1 1 0 H = 1 1 1 1 0 Từ có ma trận sinh G mã Hamming nhị phân cấp là: 1 G = 0 0 0 0 0 1 0 1 1 0 0 1 1 Giải 2: Do mã Ham(3, 2) có ma trận sinh G, xâu bit u mã hóa thành từ mã nhờ công thức: w = u.G Vậy: 1 w = (1 1) 0 0 0 0 0 1 0 1 = (1 1 0) 1 0 0 1 1 Chú ý: Một mã Ham(r, 2) có nhiều ma trận sinh khác (các ma trận sinh tương đương), việc mã hóa thơng điệp u với ma trân sinh khác cho từ mã khác nhau, nhiên từ mã thuộc mã cho Việc mã hóa giải mã phải dùng ma trận sinh 3.4.3 Phát lỗi sửa lỗi mã Hamming Giả sử gửi từ mã mã Hamming nhị phân cấp r, ta nhận xâu x Nếu xâu x bị sai tối đa lỗi ta phát lỗi sửa lỗi theo bước sau: Bước 1: Tính Syndrome x: S(x) = H.xT Bước 2: Nếu có S(x) = O, tức nhận cột gồm r bit ‘0’ Kết luận x từ mã gửi Bước 3: Nếu có S(x) ≠ O, tức nhận cột xâu nhị phân tương ứng với cột thứ j ma trận kiểm tra H, từ suy bit thứ j xâu x bị nhận sai sửa lỗi cách cộng vào bit Chú ý rằng, ma trận kiểm tra H có cột xâu bit nhị phân có giá trị 1, 2, , n, nên giá trị xâu bit vị trí cột Vì vậy, bước 3, giá trị xâu bit S(x) j cho vị trí j bit bị nhận sai Thí dụ 3.18 0 0 1 1 Cho C mã Ham(3, 2), với ma trận kiểm tra H = 0 1 0 1 , gửi từ mã C, 1 1 xảy trường hợp: Nhận xâu x = 1011010 Nhận xâu y = 1011011 Nhận xâu z = 1101011 Giả sử xâu nhận sai tối đa lỗi Tìm từ mã gửi ứng với trường hợp? Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 69 Giải: Khi nhận xâu x = 1011010, tính S(x) = H.xT: 1 0 0 0 1 1 S(x) = 0 1 0 1 = 1 1 1 0 1 0 0 0 0 Vậy xâu x nhận khơng có lỗi, 1011010 từ mã gửi Khi nhận xâu y = 1011011, tính S(y) = H.yT: 1 0 0 0 1 1 S(y) = 0 1 0 1 = 1 1 1 0 1 1 1 1 1 Xâu bit S(y) ‘1 1’ có giá trị Vậy xâu y bị sai bit thứ 7, bit cuối cùng, sửa sai bit này, từ ta có từ mã gửi là: 1011010 Khi nhận xâu z = 1101011, tính S(z) = H.zT cách tương tự, ta có xâu bit S(z) ‘110’, có giá trị 6, bit sai bit thứ 6, sau sửa lỗi, ta có từ mã gửi 1101001 3.4.4 Giới thiệu mã Hamming q-phân cấp r Trên ta xét mã Hamming nhị phân Trường hợp tổng quát, trường GF(q), ta có mã Hamming q-phân cấp r (q-ary Hamming code) định nghĩa sau: Định nghĩa 3.11 Mã Hamming q-phân cấp r, ký hiệu Ham(r, q) mã tuyến tính có ma trận kiểm tra H có r hàng, có (qr-1)/(q-1) cột, khơng có cột O, khơng có cột giống giá trị khác không cột Mã Hamming q- phân cấp r mã tuyến tính C[(qr-1)/(q-1) , (qr- 1)/(q – 1) – r , 3], Thí dụ 3.19 0 1 1 Mã Ham(2, 3) có ma trận kiểm tra là: H = 1 2 Mã Ham(3, 3) có ma trận kiểm tra 0 0 1 1 1 1 H = 0 1 0 1 2 2 1 2 2 Bài giảng “Cơ sở mã hóa thông tin” | nvdinh@vnua.edu.vn 70 BÀ I TẬP CHƯƠNG Giả sử, với mã lặp lại lần dùng, ta nhận xâu x = 100110011100111 Có thể kết luận gì với thông điệp gửi đi? Giả sử có xâu bit gửi kênh đối xứng nhị phân, xác suất nhận sai 0.001 Vậy xác suất để nhận xâu bit 100110001 xâu bit gửi là: a/ 101110011 b/ 110111011 c/ 110111010 Cho mã C = {0000000,0101000, 1000111} a/ Sử dụng quy tắc giải mã người láng giềng gần để xác định từ mã gửi nhận xâu x = 0101001 b/ Giả sử các xâu bit của C gửi kênh đối xứng nhị phân, xác suất nhận sai 0.01 Vậy xác suất để nhận xâu bit x xâu bit gửi cx đươ ̣c xác đinh ̣ bằ ng phương pháp trên? Có thể phát sửa lỗi các mã sau: a/ C = {11101,10011} b/ C = {111001,100011,00011} c/ C = {11101101,10001111,10011011, 11011011} Giả sử C mã {000000001,111110100,010101111, 100001111} C phát sửa lỗi ? Tìm ma trâ ̣n kiể m tra H của mô ̣t mã ta thêm mô ̣t bit kiể m tra chẵn lẻ vào mô ̣t mô ̣t thông điê ̣p nhị phân có đô ̣ dài bằ ng Tìm ma trâ ̣n kiể m tra H của mô ̣t mã lă ̣p la ̣i lầ n đố i với mô ̣t thông điê ̣p nhị phân có đô ̣ dài bằ ng 1 1 Cho mã nhị phân tuyến tính C có ma trận sinh G = 0 1 a/ Mã C mã hố thơng điệp thành từ mã C Tìm tất từ mã C? b/ Bảng coset chuẩn mã C gồm hàng, cột Xây dựng bảng coset chuẩn mã C c/ Gửi từ mã C, nhận xâu x = 111, dùng bảng coset chuẩn xác định từ mã gửi Cũng hỏi nhận xâu y = 001, xác định vector lỗi (nếu có) trường hợp 1 0 Cho mã nhị phân tuyến tính C có ma trận sinh G = 0 1 a/ Mã C mã hố thơng điệp thành từ mã C Tìm tất từ mã C? b/ Bảng coset chuẩn mã C gồm hàng, cột Xây dựng bảng coset chuẩn mã C Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 71 c/ Gửi từ mã C, nhận xâu x = 0111, dùng bảng coset chuẩn xác định từ mã gửi Cũng hỏi nhận xâu y = 1110, xác định vector lỗi (nếu có) trường hợp 1 1 0 10 Cho mã nhị phân tuyến tính C có ma trận sinh G = 0 1 a/ Mã C mã hố thơng điệp thành từ mã C Tìm tất từ mã C? b/ Bảng coset chuẩn mã C gồm hàng, cột Tìm hàng bảng coset chuẩn mã C c/ Gửi từ mã C, nhận xâu x = 11111, dùng bảng coset chuẩn xác định từ mã gửi Cũng hỏi nhận xâu y = 01111, xác định vector lỗi (nếu có) trường hợp 11 Giả sử rằ ng mã C có ma trâ ̣n kiể m tra: a/ Tim ̀ ma trâ ̣n sinh G của mã C b/ Những từ mã mã C tạo ma trâ ̣n ma trâ ̣n sinh này? c/ Mã C với ma trận kiểm tra H có phải mã Hamming khơng? 12 Tìm 16 từ mã mã Hamming nhi phân cấp ̣ 13 Tìm ma trận kiểm tra mã Ham(2, 2) Từ ma trận kiểm tra, viết ma trận sinh mã liệt kê tất từ mã 14 Cho ma trận sinh mã tuyến tính C[7, 4] trường F2: 1 0 0 1 1 0 0 G= 0 1 0 1 1 0 a/ Tìm tất từ mã sinh G b/ Khi gửi từ mã C, ta nhận xâu x = 1011011 Giả sử xâu nhận sai không bit, tìm từ mã gửi 1 0 1 1 15 Cho mã tuyến tính C[7, 3] có ma trận sinh: G = 0 1 1 0 1 1 a/ Tìm tất từ mã mã C ĐA: C = {0000000; 0010111; 0101011; 0111100; 1001101; 1011010; 1100110; 1110001} 1 b/ Tìm ma trận kiểm tra mã C ĐA: Ma trận kiểm tra H = 1 0 1 1 0 0 1 0 1 0 0 1 0 1 c/ Mã C có phải mã Ham(r, 2) hay không? Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 72 d/ Gủi từ mã C, nhận xâu x = 1110000 Giả sử xâu nhận sai không bit, tìm từ mã gửi e/ Cũng hỏi câu d, với xâu nhận y = 1011010 0 1 1 16 Trên trường F3, cho C mã Ham(2, 3) có ma trận kiểm tra là: H = 1 2 a/ Hãy tìm ma trận sinh mã C nói b/ Viết tất từ mã mã C TÀI LIỆU THAM KHẢO [1] Raymond Hill, (1993) "A First Course in Coding Theory", Clarendon Press, Oxrord, USA ISBN : 0-19-853803-0 [2] Yehuda Lindell, “Introduction to Coding Theory”, Lecture Notes, Department of Computer Science Bar-Ilan University , Israel (2010) [3] Tom Richardson, Rudiger Urbanke “Modern Coding Theory” Cambridge University Press (2008) [4] Đặng Văn Chuyết, Nguyễn Tuấn Anh.(1998)“Giáo trình Cơ sở lý thuyết truyền tin” NXB Giáo dục Bài giảng “Cơ sở mã hóa thơng tin” | nvdinh@vnua.edu.vn 73