Lý thuyế t Thông tin
BÀI 11 MÃ KHỐI TUYẾN TÍNH 11.1 Giớ Giớ i thiệ thiệu 11.2 Các khái niệ niệm và nguyên lý hoạ ho ạt động động 11.3 Vấ Vấn đề phát hiệ hiện sai và sử sửa sai 11.4 Mộ Một số số giớ giớ i hạ hạn
11.1 Giớ i thiệu Mã khố khối tuyế tuyến tính là mộ một lớ lớ p mã đượ c dùng r ất phổ phổ biế biến trong việ việc chố chống nhiễ nhiễu. Loạ Loại mã này đượ c xây dự dựng dự dựa trên các k ết quả quả của đại đại số s ố tuy tuyếến tính. Ở đây chúng ta cũ cũng chỉ chỉ nghiên cứ cứu về về mã nhị nhị phân. Định ngh ĩ a Một mã kh ối có chiều dài n gồm 2k từ mã đượ c gọi là mã tuyến tính C (n, k ) nếu và chỉ nếu 2k từ mã hình thành một không gian vectơ con k chiều của không gian vectơ n chiều gồm tất cả các vectơ n thành phần trên trườ ng ng GF(2). Tr ườ ườ ng ng GF(2) (Galois Field (2)) là tr ườ ườ ng ng nhị nhị phân đồng đồng thờ thờ i phép cộ cộng là phép cộ cộng modul 2 (kí hiệ hiệu là ⊕), còn phép nhân là phép và (AND). Cụ C ụ thể thể 0⊕0=0 0⊕1=1 1⊕0=0 1⊕1=0 0.0=0 0.1=0 1.0=0 1.1=1 Mã tuyế tuyến tính C (n, k ) có mụ mục đích mã hoá nhữ những khố khối tin (hay thông báo) k bit thành nhữ những từ mã n bit. Hay nói cách khác trong n bit củ của từ từ mã có chứ chứa k bit thông tin. Các phầ phần tiế ti ế p theo sau sẽ sẽ trình bày cách biể biểu diễ di ễn mã, cách mã hoá các thông báo thành từ từ mã, cách giả giải mã từ từ từ mã thành thông báo, cách phát hiệ hiện sai và sử sửa sai. Qui ướ c Để đơ n giả giản sau này chúng ta sẽ s ẽ viế viết dấ dấu + thay cho dấ dấu ⊕ và dấ dấu + sẽ sẽ đượ c hiể hiểu theo ngữ ngữ cảnh.
11.2 Các khái niệm và nguyên lý hoạt động Cách biểu diễn mã – Ma trận sinh Mã tuyế tuyến tính C (n, k ) là mộ một không gian con k chiề chiều củ của mộ một không gian vectơ vectơ n thành g 0, g 1, ..., g k phầ phần. Do vậ vậy có thể thể tìm đượ c k từ mã độc độc lậ lậ p tuyế tuyến tính trong C chẳ chẳng hạ hạn ( g k –1 ) sao cho mỗ mỗi từ từ mã trong C là mộ một tổ tổ hợ p tuyế tuyến tính củ của k từ mã này: v = a0 g 0 + a1 g 1 + ... + ak –1 g k k –1 vớ i ai ∈ {0, 1} vớ vớ i mọ mọi i = 0, 1, ..., k –1. Đặt Đặt k từ mã độc độc lậ lậ p tuyế tuyến tính này thành nhữ những hàng chúng ta có đượ c mộ một ma tr ận cấ cấ p k × n như như sau Gk n
g 0 g 1
g 00 g 10
g 01 g 11
M
M
M
g k 1
L L
g 0( n 1) g 1(n 1)
M
g ( k 1)0 g ( k 1)1 L g ( k 1)(n 1)
g i0, g i1, …, g i(n –1)), vớ Vớ i g i = ( g vớ i i = 0, 1, …, k –1. Cách mã hoá Nế Nếu u = ( a0, a1, …, ak –1) là thông tin cầ cần đượ c mã hoá thì từ từ mã v tươ ng ng ứng vớ vớ i u đượ c ta bằ bằng cách lấ lấy u nhân vớ vớ i G.
Ngườ Ngườ i soạ soạn Hồ Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
58
Lý thuyế t Thông tin
v = u × G = (a0, a1, …, ak –1)
g 0 g 1
M g k 1
hay v = a0 g 0 + a1 g 1 + … + ak –1 g k –1
Vì các từ mã tươ ng ứng vớ i các thông báo đượ c sinh ra bở i G theo cách như trên nên G đượ c gọi là ma tr ận sinh (generating matrix) của bộ mã. Ví dụ 11.1
Cho ma tr ận sinh của một mã tuyến tính (7, 4) sau G4 7
g 0 g 1 g 2 g 3
1 1 0 1
1 0 1 0
0 1 0 1
1 1 0 0
0 1 0 0
0 0 1 0
0 0 1 1
Nếu u = (1101) là thông tin cần mã hoá thì từ mã tươ ng ứng sẽ là v = 1. g 0 + 1. g 1 + 0. g 2 + 1. g 3 = (1100101) Chú ý 1. Bất k ỳ k từ mã độc lậ p tuyến tính nào cũng có thể đượ c dùng để làm ma tr ận sinh cho bộ mã. Hay nói cách khác các ma tr ận sinh khác nhau có thể biểu diễn cùng một bộ mã tuyến tính (hay còn gọi là không gian mã) như nhau, hay ngượ c lại một bộ mã tuyến tính có thể có nhiều ma tr ận sinh khác nhau biểu diễn. 2. Tươ ng ứng vớ i mỗi ma tr ận sinh chúng ta có một phép mã hoá. Có ngh ĩ a là ứng vớ i hai ma tr ận sinh khác nhau chúng ta có hai phép mã hoá khác nhau. Vì vậy vớ i cùng một bộ mã tuyến tính việc chọn ma tr ận sinh nào là r ất quan tr ọng vì nó quyết định việc ánh xạ thông báo nào thành từ mã nào. Cách giải mã Ở đây chúng ta sẽ trình bày cách giải mã từ từ mã về thông tin ban đầu. Lấy ma tr ận sinh như ở trong Ví dụ 11.1. Chúng ta gọi thông báo là u = ( a0, a1, a2, a3) và từ mã tươ ng ứng là v = (b0, b1, b2, b3, b4, b5, b6). Chúng ta có hệ phươ ng trình sau liên hệ giữa u và v. v=u×G Suy ra b0 = a0 + a1 + a3 (1) b1 = a0 + a2 (2) b2 = a1 + a3 (3) b3 = a0 + a1 (4) b4 = a1 (5) b5 = a2 (6) b6 = a2 + a3 (7) Để giải các ai theo các b j chúng ta chỉ cần chọn bốn phươ ng trình đơ n giản nhất để giải. Chẳng hạn chúng ta chọn các phươ ng trình (4), (5), (6), (7) chúng ta sẽ giải đượ c a0 = b3 + b4 a1 = b4 a2 = b5 a3 = b5 + b6 Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
59
Lý thuyế t Thông tin
Hệ phươ ng trình trên đượ c gọi là hệ phươ ng trình giải mã. D ĩ nhiên ứng vớ i các ma tr ận sinh khác nhau cho dù biểu diễn cùng một bộ mã chúng ta sẽ có các hệ phươ ng trình giải mã khác nhau. Mã tuyến tính hệ thống, ma trận sinh hệ thống Một mã tuyến tính C (n, k ) đượ c g ọi là mã tuyến tính hệ thống n ếu m ỗi từ mã có một trong hai dạng sau Dạng 1 : T ừ mã bao gồm ph ần thông tin k bit đi tr ướ c và phần còn lại (g ồm n – k bit) đi sau (phần này còn đượ c gọi là phần dư thừ a hay phần kiểm tra). k bit thông tin n – k bit kiểm tra Dạng 2 : Ngượ c c ủa d ạng 1, từ mã bao gồm ph ần ki ểm tra đi tr ướ c và phần thông tin đi sau. n – k bit kiểm tra k bit thông tin Từ điều kiện về dạng từ mã của mã tuyến tính hệ thống, chúng ta cần xác định dạng của ma tr ận sinh tươ ng ứng. Đối vớ i mã tuyến tính hệ thống dạng 1, để đáp ứng điều kiện của nó ma tr ận sinh phải có dạng như sau:
Gk n
1 0 L 0 P 00 0 1 L 0 P 10 M
M
M
M
L
P 01 P 11
L
M
P 0( n k 1) P 1( n k 1)
M
0142 0 L4 1 P (k 1)0 P (k 1)1 L P (k 1)(n k 1) 4 43 144 4 4 4 4 4 244 4 4 4 4 4 3 k ( n k )
k k
trong đó k cột đầu của ma tr ận tạo thành một ma tr ận đơ n vị còn n – k cột sau tuỳ ý vớ i P ij = 0 hoặc 1. Vớ i dạng này chúng ta thấy khi thông báo u đượ c mã hoá thành từ mã v bằng công thức v = u × G thì k bit thông báo của u sẽ tr ở thành k bit đầu của từ mã v đáp ứng yêu cầu của mã tuyến tính hệ thống. Ma tr ận có dạng trên của mã tuyến tính hệ thống đượ c gọi là ma tr ận sinh hệ thống và có thể biểu diễn đơ n giản như sau: Gk n = [ I kk | P k( n – k) ] trong đó I kk là ma tr ận đơ n vị kích thướ c k × k . Tươ ng tự đối vớ i mã tuyến tính hệ thống có dạng 2 thì ma tr ận sinh hệ thống phải có dạng Gk n = [ P k( n – k) | I kk ] Qui ướ c Nếu không có phát biểu gì khác thì khi dùng mã tuyến tính hệ thống chúng ta sẽ dùng mã tuyến tính hệ thống dạng 1. ×
×
Ví dụ 11.2
Ma tr ận sinh hệ thống cho mã tuyến tính hệ thống tướ ng ứng vớ i mã tuyến tính trong Ví dụ 11.1 là Ght
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 1 1
1 1 1 0
0 1 1 1
Nếu u = (1101) là thông tin cần mã hoá thì từ mã tươ ng ứng sẽ là v = u × Ght = (1101000). Tươ ng tự nếu u = (0110) thì v = 0110100.
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
60
Lý thuyế t Thông tin
Mã tuyến tính hệ thống có lợ i điểm là giúp cho việc giải mã từ từ mã thành thông báo nhanh chóng bằng cách lấy k bit đầu hay k bit cuối của từ mã tuỳ theo mã thuộc dạng 1 hay 2 mà không phải giải hệ phươ ng trình như đối vớ i ma tr ận sinh bình thườ ng. Chẳng hạn đối vớ i mã trong Ví dụ 11.2 nếu chúng ta nhận đượ c từ mã v = (0101110) thì dễ dàng xác định đượ c thông báo tươ ng ứng là u = 0101. Chú ý, từ một ma tr ận sinh kích thướ c k × n chúng ta có thể dùng các phép biến đổi sơ cấ p trên hàng (nhân một hàng vớ i một hệ số khác 0, thay một hàng bằng cách cộng hàng đó vớ i một hàng khác) chúng ta có thể biến đổi thành một ma tr ận có k cột tạo thành một ma tr ận đơ n vị. Ví dụ 11.3
Cho ma tr ận sinh sau G4 7
g 0 g 1 g 2 g 3
1 1 0 1
1 0 0 0
1 0 0 1
0 1 1 0
0 1 1 1
1 1 0 0
0 0 1 1
0 0 0 1
0 1 0 0
Bằng cách thực hiện các phép biến đổi hàng như bên dướ i G '4 7
g 0 g 1 g 2 g 3 g 2 g 1 g 2 g 3
1 0 1 1
1 0 0 0
1 1 0 1
0 0 1 0
0 1 1 1
chúng ta có trong ma tr ận mớ i G’ có các cột 1, cột 4, cột 6 và cột 3 tạo thành một ma tr ận đơ n vị (các cột đượ c đánh số từ trái sang phải và bắt đầu bằng 1).
11.3 Vấn đề phát hiện sai và sử a sai Định lý 10.2 cho chúng ta thấy khả năng phát hiện sai và sửa sai của một bộ mã. Ở đây chúng ta chỉ trình bày cách phát hiện sai và sửa sai cho những bộ mã đã thoã điều kiện phát hiện sai và sửa sai như trong Định lý 10.2. Tức là khoảng cách Hamming d của bộ mã và số bit sai t đã thoã Định lý 10.2. Từ Định lý 10.2 chúng ta rút ra nguyên lý phát hiện sai r ất đơ n giản như sau: Kiểm tra xem tổ hợ p nhận có phải là từ mã hay không, nếu không thì tổ hợ p nhận là sai. Việc kiểm tra này có thể đượ c thực hiện bằng cách so trùng tổ hợ p nhận đượ c vớ i các từ mã. Như vậy việc kiểm tra này sẽ tốn một số bướ c bằng vớ i số lượ ng các từ mã. Tươ ng tự đối vớ i việc sửa sai chúng ta có nguyên lý sau: Kiểm tra xem tổ hợ p nhận có khoảng cách Hamming gần vớ i t ừ mã nào nhất, n ếu gần vớ i t ừ mã nào nhất thì từ mã đó chính là từ mã đúng đã đượ c phát đi. Nguyên lý này đượ c g ọi là nguyên lý khoảng cách Hamming tối thiểu. Việc kiểm tra này tốn một số bướ c bằng vớ i số lượ ng các từ mã. Tuy nhiên đối vớ i mã tuyến tính, dựa vào các tính chất của mã chúng ta sẽ có cách phát hiện sai và sửa sai hiệu quả hơ n. Các phần tiế p theo sẽ trình bày lần lượ t về vấn đề này, nhưng tr ướ c hết chúng ta sẽ trình bày một số kiến thức toán học cần thiết cho việc chứng minh một số k ết quả trong loại mã này. Không gian bù trự c giao Cho S là một không gian con k chiều của không gian n chiều V , S d là tập tất cả các vectơ trong V sao cho u S , v S d , thì u v = 0 (phép nhân ở đây là phép nhân vô hướ ng của hai vectơ ) thì S d là một không gian con của V và có số chiều là n – k . S d đượ c gọi là không gian bù trự c giao của S và ngượ c lại. Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
61
Lý thuyế t Thông tin
Dựa trên k ết quả này chúng ta suy ra r ằng vớ i ma tr ận G bất k ỳ kích thướ c k × n vớ i k hàng độc lậ p tuyến tính luôn tồn tại ma tr ận H kích thướ c (n – k ) × n vớ i (n – k ) hàng độc lậ p tuyến tính sao cho G × H T = 0, trong đó H T là ma tr ận chuyển vị của ma tr ận H . Hay nói cách khác các vectơ hàng của H đều tr ực giao vớ i các vectơ hàng của G. Cách phát hiện sai Ứ ng dụng k ết quả trên vào vấn đề phát hiện sai, chúng ta thấy r ằng Nếu v là một từ mã đượ c sinh ra từ ma trận sinh G có ma trận trự c giao tươ ng ứ ng là H thì do v là một tổ hợ p tuyến tính của các vectơ hàng của G nên T v H = 0 Và ngượ c lại nếu v H T = 0 thì v phải là một tổ hợ p tuyến tính của các vectơ hàng của G do đó v là một từ mã. Syndrome – vectơ sử a sai (corrector) T v H thườ ng đượ c gọi là syndrome hay vectơ sửa sai của v và kí hiệu là s(v). Vậy chúng ta có v là từ mã khi và chỉ khi s(v) = 0 Vớ i tính chất này chúng ta thấy H có thể đượ c sử dụng để kiểm tra một tổ hợ p có phải là từ mã không hay nói cách khác H có thể đượ c dùng để phát hiện sai. Vì lý do này mà ma tr ận H còn đượ c gọi là ma tr ận kiểm tra. Ma trận kiểm tra Ma trận kiểm tra của một bộ mã có ma tr ận sinh G k n là ma trận H có kích thướ c (n – k ) n sao cho T G H = 0 Ví dụ 11.4
Tìm ma tr ận kiểm tra tươ ng ứng vớ i ma tr ận sinh trong Ví dụ 11.1. G
1 1 0 1
1 0 1 0
0 1 0 1
1 1 0 0
0 1 0 0
0 0 1 0
0 0 1 1
Chúng ta thấy ma tr ận kiểm tra cần tìm phải có kích thướ c 3 × 7. Gọi h = ( a0, a1, a2, a3, a4, a5, a6) là một hàng bất k ỳ của H . Vì h tr ực giao vớ i mọi vectơ hàng của G nên chúng ta có hệ bốn phươ ng trình sau tươ ng ứng vớ i bốn hàng của G: a0 + a1 + a3 = 0 a0 + a2 + a3 + a4 = 0 a1 + a5 + a6 = 0 a0 + a2 + a6 = 0 Vấn đề là bây giờ chúng ta làm sao tìm đượ c 3 vectơ hàng độc lậ p tuyến tính là nghiệm của hệ phươ ng trình trên. Chú ý, hệ phươ ng trình trên có thể cho phép chúng ta giải bốn biến theo ba biến còn lại. Chẳng hạn chúng ta giải a3, a4, a5, a6 theo a0, a1, a2 như sau: a3 = a0 + a1 a4 = a1 + a2 a5 = a0 + a1 + a2 a6 = a0 + a2 Chú ý các phép cộng, +, ở đây chính là phép cộng, ⊕, trong GF(2) như đã qui ướ c và trong GF(2) phép tr ừ – hoàn toàn giống phép +.
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
62
Lý thuyế t Thông tin
Bây giờ chúng ta cho (a0, a1, a2) lần lượ t các giá tr ị (1, 0, 0), (0, 1, 0), (0, 0, 1) thì chúng ta sẽ xác định đượ c (a3, a4, a5, a6) lần lượ t như sau (1, 0, 1, 1), (1, 1, 1, 0), (0, 1, 1, 1). V ậy chúng ta có ma tr ận H như sau: 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1
H 3 7
Chú ý Các ma tr ận kiểm tra khác nhau của cùng một bộ mã đều có khả năng kiểm tra như nhau tức là đều có thể giúp chúng ta phát hiện một tổ hợ p có phải là từ mã hay không. Đối vớ i ma tr ận sinh hệ thống thì việc xác định ma tr ận kiểm tra dễ hơ n nhiều, dựa trên bổ đề sau: Bổ đề Nếu ma trận sinh hệ thống của một mã tuyến tính hệ thống có dạng G k n = [ I kk | P k (n – k) ] thì T H (n – k) n = [ P k( n – k) | I (n – k) (n – k) ] là một ma trận kiểm tra của mã. Tươ ng tự nếu ma trận sinh có dạng G k n = [ P k( n – k ) | I kk ] thì ma trận kiểm tra có dạng T H (n – k) n = [ I (n – k) (n – k ) | P k (n – k ) ] trong đó I (n – k) (n – k ) là ma trận đơ n vị kích thướ c (n – k) (n – k) , còn P k( n – k) T là ma trận chuyển vị của ma trận P k( n – k ). Chứ ng minh Xét ma tr ận sinh hệ thống có dạng 1
Gk n = [ I kk | P k( n – k )] =
1 0 L 0 P 00 0 1 L 0 P 10
×
M
M
M
P 01 P 11
M
L L
P 0( n k 1) P 1( n k 1)
M
M
0142 0 L4 1 P (k 1)0 P (k 1)1 L P (k 1)(n k 1) 4 43 144 4 4 4 4 4 244 4 4 4 4 4 3 k ( n k )
k k
Xét ma tr ận H sau
H (n – k)
T n = [ P k( n – k) | I (n – k) (n – k) ] =
×
P 00 P 01
P 10 P 11
M
M
L L
P ( k 1)0 P ( k 1)1
M
1 0 L 0 0 1 L 0 M
M
M
L P ( k 1)(n k 1) 0 0 L 1 4 43 4 144 4 4 4 4 4 4 244 4 4 4 4 4 4 3 142 ( n k ) ( n k ) ( n k ) k
P 0( n k 1) P 1( n k 1)
Ta chứng minh G × H T = 0 trong đó Để chứng minh điều này ta chứng minh g i × h j = 0 ∀ i = 0, …, k –1, j = 0, …, n – k –1 g i = ( g i0, …, g i(n –1)) là hàng i của G còn h j = (h j0, …, h j(n –1)) là hàng j của ma tr ận H .
Thật vậy ta có
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
63
Lý thuyế t Thông tin 1 g i × h j = g is h js s 0 n
1 g is h js s 0 k
n k
1 g is h js
h ji
g i ( k j )
P ij
P ij
0
s k
Chứng minh tươ ng tự cho dạng còn lại của G. Khả năng chống nhiễu tươ ng đươ ng Chúng ta đã biết r ằng khả năng phát hiện sai và sửa sai của một mã tuyến tính phụ thuộc vào khoảng cách Hamming của bộ mã. Vì vậy chúng ta định ngh ĩ a r ằng Hai mã tuyến tính C (n, k ) đượ c g ọi là có khả năng chống nhiễu tươ ng đươ ng nếu chúng có cùng khoảng cách Hamming. Từ đây chúng ta dẫn đến bổ đề sau Bổ đề Nếu hoán vị hai cột c ủa một ma trận sinh sẽ tạo ra một bộ mã m ớ i có khả năng chống nhiễu tươ ng đươ ng vớ i bộ mã cũ. Nói cách khác việc hoán vị hai cột của ma trận sinh không làm thay đổi khả năng chống nhiễu. Áp dụng điều này nên ngườ i ta thườ ng dùng phép hoán vị này cộng vớ i các phép biến đổi sơ cấ p trên hàng để tạo ra những ma tr ận sinh hiệu quả hơ n trong việc mã hoá và giải mã nhưng khả năng chống nhiễu vẫn không thay đổi. Cách tính khoảng cách Hamming của bộ mã Chúng ta đã biết khoảng cách Hamming của hai từ mã bằng tr ọng số của tổng hai từ mã đó. Mà do đối vớ i mã tuyến tính tổng hai từ mã là một từ mã nên từ đây chúng ta suy ra khoảng cách Hamming của hai từ mã bằng tr ọng số của một từ mã nào đó. Khái quát lên chúng ta có bổ đề sau: Bổ đề Khoảng cách Hamming c ủa một mã tuyến tính bằng trọng số nhỏ nhất khác 0 của bộ mã. Vì vậy để tính khoảng cách Hamming của một mã tuyến tính chúng ta sẽ tìm từ mã nào khác không mà có tr ọng số nhỏ nhất. Ngoài ra để tính khoảng cách Hamming của một mã tuyến tính chúng ta còn có một cách đượ c phát biểu thông qua bổ đề sau: Bổ đề Gọi H là ma trận kiểm tra của một mã tuyến tính, nếu một từ mã có trọng số d thì tồn tại d cột của H có tổng bằng 0. Hệ quả Nếu trong ma trận kiểm tra H của một mã tuyến tính số cột phụ thuộc tuyến tính nhỏ nhất là d thì khoảng cách Hamming của bộ mã đó bằng d . Ví dụ 11.5
Xét ma tr ận H trong Ví dụ 11.4 H 3 7
1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1
Chúng ta thấy số cột phụ thuộc tuyến tính của H là 3, cụ thể là các cột số 3, 4 và 6 (chỉ số đượ c tính bắt đầu từ 1). Vì vậy bộ mã tươ ng ứng có khoảng cách Hamming d = 3, do đó mã có thể phát hiện sai 2 bit và sửa sai đượ c 1 bit. Cách sử a sai
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
64
Lý thuyế t Thông tin
Tr ướ c hết chúng ta sẽ định ngh ĩ a khái niệm vectơ lỗi (error pattern vector) và khái niệm tậ p giải mã (decoding set) hay đôi lúc còn gọi là tậ p coset là những khái niệm làm nền tảng cho việc sửa sai. Vectơ lỗi Là vectơ biểu diễn các vị trí lỗi giữ a từ mã truyền và tổ hợ p nhận, mỗi vị trí lỗi đượ c biểu diễn bằng bit 1, còn các vị trí còn lại sẽ có giá trị 0. Nếu từ mã đượ c truyền đi là w, vectơ lỗi là e và vectơ nhận là v thì chúng ta có: v=w+e e=v+w Ví dụ nếu từ mã w = 1011011, vectơ lỗi là e = 0010100 có ngh ĩ a là sai ở vị trí số 3 và 5 (tính từ trái, bắt đầu bằng 1) thì vectơ nhận sẽ là v = w + e = 1001111. Ngượ c lại nếu từ mã w = 0110010 còn vec tơ nhận là v = 0010011 thì vectơ lỗi là e = w + v = 0100001 có ngh ĩ a là đã có sai xảy ra ở các vị trí số 2 và số 7. Chúng ta thấy tr ọng số của vectơ lỗi biểu diễn khoảng cách Hamming giữa từ mã phát và tổ hợ p nhận. Khái niệm trên gợ i ý cho chúng ta một điều như sau, nếu vectơ nhận là v thì chúng ta có thể tính đượ c vectơ lỗi tươ ng ứng vớ i mỗi từ mã bằng cách cộng v vớ i lần lượ t các từ mã và r ồi dựa vào nguyên lý khoảng cách Hamming tối thiểu chúng ta thấy r ằng vectơ lỗi nào có tr ọng số nhỏ nhất thì từ mã tươ ng ứng chính là từ mã đã đượ c phát đi. Chúng ta sẽ hình thức hoá điều này bằng khái niệm sau: Tập giải mã – Coset Cho S là một không gian con các từ mã của không gian V , coset của m ột phần tử z V đối vớ i S đượ c kí hiệu là z + S và đượ c định ngh ĩ a như sau z + S = { z + w : w S } Bổ đề Tập coset z + S có các tính chất sau. (1) z z + S . Lí do này vì từ mã 0...0 ∈ S nên z = z + 0...0 ∈ S . (2) Nếu z S thì z + S = S . Lí do này là vì tổng của hai từ mã là một từ mã. Hơ n nữa z + wi ≠ z + w j vớ i wi ≠ w j nên không có hai phần tử nào của z + S giống nhau. (3) Nếu v z + S thì v + S = z + S . Thật vậy vì v = z + wi vớ i một wi nào đó ∈ S . Vì vậy v + S = z + wi + S . Mà wi + S = S nên v + S = z + S . (4) Nếu v z + S thì v + S và z + S rờ i nhau. Thật vậy nếu v + S và z + S không r ời nhau. Suy ra tồn tại u ∈ v + S và u ∈ z + S . Mà u ∈ v + S suy ra u + S = v + S . Tươ ng tự u ∈ z + S suy ra u + S = z + S . Vì vậy v + S = z + S mà v ∈ v + S suy ra v ∈ z + S . Điều này mâu thuẫn. Vì vậy v + S và z + S phải r ời nhau. Chú ý mỗi coset có số phần tử đúng bằng số phần tử của tậ p S vì tất cả các phần tử z + w (w ∈ S ) là khác nhau. Vì vậy, vớ i bổ đề trên chúng ta suy ra số các coset của V bằng số phần tử của V chia cho số phần tử của S . Cụ thể vớ i V là một không gian 2n vectơ , còn S có 2k vectơ thì số tậ p coset sẽ là 2n – k. Vớ i các khái niệm trên chúng ta đưa ra sơ đồ giải mã theo nguyên lý khoảng cách Hamming tối thiểu như sau. (1) Vớ i mỗi vectơ nhận v chúng ta sẽ có một tập coset tươ ng ứ ng là v + S . (2) Trong tập này chọn phần tử có trọng số nhỏ nhất, chẳng hạn là z . Phần tử này thườ ng đượ c gọi là coset leader. (3) Thông báo từ mã đượ c truyền chính là w = v + z . Rõ ràng coset leader chính là vectơ lỗi mà bộ giải mã theo nguyên lý khoảng cách tối thiểu gán cho v. Chú ý r ằng tất cả các thành viên của tậ p coset v + S có cùng tậ p coset như v Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
65
Lý thuyế t Thông tin
(theo tính chất 3). Như vậy, tất cả các thành viên của một tậ p coset có cùng vectơ lỗi chính là coset leader của tậ p. Vì vậy nếu chúng ta nhận biết đượ c một vectơ nhận thuộc tậ p coset nào thì cộng nó vớ i coset leader của tậ p sẽ đượ c từ mã đúng đã đượ c phát đi tươ ng ứng. Đó là lí do tại sao tậ p coset còn đượ c gọi là tậ p giải mã. Vấn đề bây giờ là làm sao để xác định một cách nhanh nhất một vectơ nhận tươ ng ứng vớ i vectơ lỗi nào hay chính là vớ i coset leader nào. May mắn thay có một cách r ất dễ để thực hiện điều này, cái mà đượ c phát biểu thông qua bổ đề sau Bổ đề Các phần tử của một tập coset có cùng một syndrome như nhau. Các tập coset khác nhau có các syndrome khác nhau. Chứ ng minh Thật vậy chúng ta có vớ i wi ∈ S thì s(v + wi) = (v + wi) × H T = (v × H T ) + (wi × H T ) = (v × H T ) + 0 = ( v × H T ) = s(v) Vì vậy các phần tử của tậ p coset v + S có cùng syndrome như nhau và d ĩ nhiên có cùng syndrome của coset leader của tậ p. Mặt khác nếu u ∉ v + S . Giả sử s(u) = s(v), suy ra u × H T = v × H T Từ đây suy ra (u + v) × H T = 0 Suy ra u + v = wi vớ i wi là một từ mã nào đó. Điều này suy ra u = v + wi có ngh ĩ a là u ∈ v + S (mâu thuẫn). Điều này hoàn tất chứng minh của chúng ta. Vậy mỗi coset đượ c đặt tr ưng bằng một syndrome hay một vectơ sửa sai duy nhất. Các vectơ sửa sai này có kích thướ c là n – k . Vậy có một sự tươ ng ứng một – một giữa 2 n – k tậ p coset vớ i 2n – k vectơ có chiều dài là n – k . Ứ ng dụng điều này chúng ta thấy bên nhận sẽ chỉ cần giữ một bảng bao gồm 2 n – k dãy có chiều dài n – k , mỗi dãy tươ ng ứng vớ i một vectơ lỗi chính là coset leader của các tậ p coset. Vớ i mỗi vectơ nhận v, bộ giải mã sẽ tính s(v) = v × H T r ồi tìm trong bảng để xác định vectơ lỗi e tươ ng ứng vớ i s(v). Cuối cùng bộ giải mã sẽ thông báo từ mã đúng đượ c phát đi là w = v + e. Đặt e = (a1, a2, ..., an), và gọi các cột của H lần lượ t bằng h1, h2, ..., hn thì chúng ta có T
s(e) = e × H
n
= i
1
ai hi
ai hi ai 0
Có ngh ĩ a là s(e) bằng tổng những cột ở những vị trí tươ ng ứng vớ i những vị trí bằng 1 của e. Chẳng hạn nếu vị trí lỗi sai trong khi truyền là 3 thì syndrome của vectơ nhận tươ ng ứng sẽ bằng cột số 3 của ma tr ận kiểm tra H . Chi tiết hơ n chúng ta xem ví dụ sau đây. Ví dụ 11.6
Xét một mã tuyến tính C (7, 4) có ma tr ận sinh hệ thống như sau G4 7
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
0 1 1 1
1 0 1 1
1 1 0 1
Từ đây chúng ta có một ma tr ận kiểm tra của bộ mã trên như sau: H 3 7
0 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0 1 0 0 1
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
66
Lý thuyế t Thông tin
Bộ mã trên có khoảng cách Hamming d = 3. Vì vậy có thể phát hiện sai 2 bit và sửa sai đượ c 1 bit. Giả sử đườ ng truyền sai tối đa 1 bit. Và vectơ nhận là v = 1010110, hãy tìm từ mã đúng đã đượ c phát đi. Để giải bài này chúng ta tính 0 s(v) = v × H T = h1 + h3 + h5 + h6 = 1 1
trong đó hi là cột thứ i của H (tính từ trái và bắt đầu bằng 1). Chúng ta thấy s(v) ≡ h1 nên suy ra lỗi sai ở vị trí số 1, vì vậy từ mã đúng đã đượ c phát đi là w = v + e = 1010110 + 1000000 = 0010110 Từ ý tưở ng này gợ i ý cho chúng ta một loại mã cho phép phát hiện sai 1 bit nhanh nhất. Mã này có tên gọi là mã tuyến tính Hamming. Mã tuyến tính Hamming Mã tuyến tính Hamming là mã có ma tr ận H có tính chất giá trị của cột hi bằng i (i = 1, 2, ... Ví dụ ma tr ận sau biểu diễn mã tuyến tính Hamming C (7, 4). H 3 7
0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1
Bổ đề Các mã tuyến tính Hamming đều có khoảng cách Hamming d = 3. Vì vậy có thể phát hiện sai 2 bit và sử a sai 1 bit. Chứ ng minh Dễ thấy vớ i cách định ngh ĩ a của ma tr ận H , chúng ta thấy số cột phụ thuộc tuyến tính ít nhất của H là 3 (chẳng hạn 3 cột đầu). Vì vậy mã Hamming có d = 3. Mã tuyến tính Hamming cho phép chúng ta sửa sai một bit một cách đơ n giản như sau. (1) Tính syndrome s(v) của vectơ nhận (2) Đổi chuỗi nhị phân tươ ng ứng ra giá tr ị thậ p phân, k ết quả đổi sẽ là vị trí lỗi sai đã xảy ra. (3) Sửa sai ở vị trí lỗi sai tươ ng ứng. Chẳng hạn lấy mã tuyến tính Hamming C (7, 4) như trên nếu s(v) = 101 thì vị trí lỗi sai là 5 (vì 1012 đổi ra thậ p phân bằng 5). Một bài toán còn lại đặt ra ở đây đối vớ i mã tuyến tính Hamming là, xác định ma tr ận sinh G để thực hiện việc mã hoá và giải mã. Để làm điều này ngườ i ta thườ ng lấy k trong n vị trí để chứa các bit thông tin, các bit còn lại sẽ làm các bit kiểm tra. Chi tiết hơ n chúng ta xem ví dụ sau đây. Ví dụ 11.7
Xét mã tuyến tính Hamming C (7, 4) có các bit thông tin nằm ở các vị trí 3, 5, 6, 7. Hãy xác định ma tr ận sinh G của bộ mã. Gọi w = (a1, a2, a3, a4, a5, a6, a7) là một từ mã. Chúng ta có hệ phươ ng trình sau đượ c dẫn ra từ công thức w × H T = 0. a4 + a5 + a6 + a7 = 0 a2 + a3 + a6 + a7 = 0 a1 + a3 + a5 + a7 = 0 Từ đây chúng ta suy ra công thức tính các bit kiểm tra a1, a2, a4 theo các bit thông báo a3, a5, a6, a7 như sau Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
67
Lý thuyế t Thông tin a1 = a3 + a5 + a7 a2 = a3 + a6 + a7 a4 = a5 + a6 + a7
Công thức này cho phép chúng ta mã hoá đượ c thông báo u thành từ mã w. Chẳng hạn nếu u=
b1 b2 b3 b4
a1 a2 a3 a4 a5 a6 a7
1 0 1 0 thì w = 1 0 1 1 0 1 0
Biến đổi công thức trên thành dạng w = u × G để cho phép chúng ta tìm G đượ c dễ dàng: a1 = b1 + b2 + b4 a2 = b1 + b3 + b4 a3 = b1 a4 = b2 + b3 + b4 a5 = b2 a6 = b3 a7 = b4 Từ đây chúng ta suy ra đượ c ma tr ận sinh G như sau: 1 1 0 1
G4 7
1 0 1 1
1 0 0 0
0 1 1 1
0 1 0 0
0 0 1 0
0 0 0 1
11.4 Một số giớ i hạn Giớ i hạn trên Hamming về số lượ ng từ mã Định lý 11.1 Nếu bộ mã {w 1, …, w M } gồm các từ mã nhị phân chiều dài n có thể sử a sai các lỗi sai t bit, thì số lượ ng từ mã M phải thoã bất đẳng thứ c sau: 2n
M
t
n
( )
i
0 i
Chứ ng minh Đối vớ i mỗi từ mã wi định ngh ĩ a một tậ p Ai bao gồm tất cả các dãy v j có khoảng cách Hamming so vớ i wi nhỏ hơ n hay bằng t . Tổng số dãy trong Ai đượ c cho bằng n
t
n
1 n ( ) L ( ) 2 t
n
( )
i
0 i
Để có thể sửa sai đượ c các lỗi sai ≤ t bit thì các tậ p A1, A2, …, AM phải r ờ i nhau. Mà tổng số phần tử của tất cả các tậ p Ai phải nhỏ hơ n hoặc bằng tổng số dãy có chiều dài n. Vì vậy t
M i
n
( ) 2n
0 i
Từ đây suy ra điều phải chứng minh. Giớ i hạn dướ i về số lượ ng bit kiểm tra Định lý 11.2 Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
68
Lý thuyế t Thông tin
Nếu một mã tuyến tính C (n, k ) có thể sử a sai các lỗi sai t bit, thì số bit kiểm tra r = n – k phải thoã bất đẳng thứ c sau: 2
t
r
n
( )
i
0 i
Chứ ng minh Đối vớ i mỗi vectơ lỗi e chúng ta có một syndrome (hay vectơ sửa sai) tươ ng ứng. Vậy t
để sửa sai tất cả các lỗi sai ≤ t bit thì chúng ta có i
t
n
( ) vectơ lỗi vì vậy có
0 i
i
n
( ) vectơ sửa
0 i
sai. Mà tổng số vectơ sửa sai là bằng 2n – k = 2r . Thật vậy vì các vectơ thuộc cùng một tậ p coset thì có cùng một vectơ sửa sai. Do đó số lượ ng vectơ sửa sai bằng vớ i số lượ ng tậ p coset tức bằng 2n – k . Vì vậy chúng ta phải có 2
t
r
n
( )
i
0 i
Điều này hoàn tất chứng minh. Chú ý định lý này chỉ là điều kiện cần chứ không đủ. Chẳng hạn vớ i n = 10, t = 2 chúng ta suy ra từ định lý trên r ằng r ≥ 6 là cần thiết. Tuy nhiên, chúng ta có thể kiểm tra lại r ằng để sửa đượ c các lỗi sai ≤ 2 bit thì phải có ít nhất r = 7. Chú ý giớ i hạn dướ i về số lượ ng bit kiểm tra đối vớ i mã tuyến tính giống vớ i giớ i hạn trên về số lượ ng từ mã trong Định lý 11.1. Thật vậy đối vớ i mã tuyến tính C (n, k ) theo Định k
lý 11.1 chúng ta có M = 2
2n
≤
t
n
( )
i
r
. Từ đây suy ra 2 = 2
n – k
t
≥ i
n
( ).
0 i
0 i
Ngườ i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM
69