Các mã Reed-Solomon là loại mã hữu dụng điển hình cho sửa lỗi chùm, chúng hoạt động hiệu quả trên các kênh truyền có nhớ. Ngoài ra, chúng được sử dụng trên các kênh truyền mà khối symbol đầu vào lớn. Một điểm khá thú vị của mã RS là có nhiều hơn hai thông tin có thể thêm vào trong mã RS độ dài n không làm giảm khoảng cách tối thiểu của nó. Các mã RS mở rộng có độ dài + 2 và cùng số symbol kiểm tra với mã gốc (độ dài n). là xác suất symbol lỗi khi giải mã RS, là xác suất symbol bị lỗi trên kênh truyền thì:
≈ ∑ (1 − ) (2.41)
Trong đó là số symbol bị lỗi của mã và mỗi symbol được tạo ra từ bít.
Xác suất lỗi bít có thể lớn hơn xác suất lỗi symbol tuỳ theo kiểu điều chế cụ thể. Với điều chế MFSK với = 2 , mối quan hệ giữa và được tính như sau:
= (2.42) 2.3.2. Mã hoá Reed-Solomon
Mã RS được biểu diễn với công thức:
( , ) = (2 − 1, 2 − 1 − 2 ) (2.43)
Trong đó − = 2 là số các symbol kiểm tra và là số symbol lỗi có thể sửa được. Đa thức sinh của mã RS có dạng như sau:
( ) = + + + ⋯ + + (2.44)
Bậc của đa thức sinh là số symbol kiểm tra. Mã RS là tập con của các mã Bose, Chaudhuri, và Hocquenghem (BCH). Đa thức được thu gọn về dạng nghiệm
, , … , và đa thức sinh được viết lại như sau:
( ) = ( − )( − )( − ) … ( − ) (2.45)
Với mã RS(7,3):
( ) = ( − )( − )( − )( − )
= ( − ( + ) + )( − ( + ) + )
= ( − + )( − + ) (2.46)
Trong trường nhị phân +1 = -1, ( ) được biểu diễn lại như sau:
Bởi vì các mã RS là các mã vòng bất nhị phân, chúng ta thực hiện quá trình mã hoá tương tự các mã vòng khác. Có hai cách để mã hoá các mã RS là mã hoá bất đối xứng và mã hoá đối xứng. Bởi vì khả năng sửa lỗi của các mã bất đối xứng thấp, chúng ta tập trung vào mã hoá đối xứng. Mạch mã hoá của các mã ( , ) cho trường hợp mã hoá đối xứng như Hình 2-2.
Hình 2-2: Sơ đồ mã hóa RS
Trong đó 0, 1, … , tương ứng với các hệ số của đa thức sinh ( ( )). Chúng ta giả thiết rằng các symbol dữ liệu là ( ), và dữ liệu đầu ra ( ) được tính toán dựa vào ( )và ( ):
( ) = ( ) + ( ) (2.48)
( ) = ( ) ( ) (2.49)
Trong đó ( ) là symbol kiểm tra.
Như trên Hình 2-2, quá trình mã hoá cho các mã RS được thực hiện như sau. Đầu tiên, công tắc 1 được bật lên, và công tắc 2 ở vị trí số 1 trong suốt k chu kì đầu. Sau k chu kì, dữ liệu được chứa trong các thanh ghi (các khối trễ) là ( ). Trong
X g0 Cổng 2 Trễ Trễ Trễ Trễ Cổng 1 Dữ liệu vào g1 g 2 g2t-1 X X X X0 X1 X2 X2t-1 Đầu ra 2 1
( − ) chu kì còn lại, công tắc 1 bị ngắt, và công tắc 2 được chuyển lên vị trí số 2. Sau ( − ) chu kì, chúng ta thu được đa thức từ mã ( ).
2.3.3. Giải mã Reed-Solomon
Kết quả của bản tin mã hoá trong dạng đối xứng sử dụng RS(7,3) là đa thức từ mã:
( ) = + + + + + + (2.50)
Giả sử trong quá trình truyền dẫn từ mã này bị lỗi vì vậy hai symbol nhận được bị mất, 7 symbol từ mã ( ) được mô tả dưới dạng đa thức như sau:
( ) = ∑ (2.51)
( ) = 0 + 0. + 0. + + + 0. + 0.
= (000) + (000) + (000) + (001) + (111) + (000) + (000)
Mặt khác, một symbol kiểm tra bị mất với một bít lỗi và một symbol dữ liệu bị mất với 3 bít lỗi. Đa thức từ mã bị lỗi nhận được, ( ) được biểu diễn bằng tổng của đa thức từ mã truyền đi và đa thức lỗi:
( ) = ( ) + ( ) (2.52)
Theo công thức trên, cộng ( ) với ( ) ta nhận được ( ) như sau:
( ) = (100) + (001) + (011) + (100) + (101) + (110) + (111)
= + + + + + + (2.53)
Trong ví dụ trên, bốn thông số chưa biết đó là hai vị trí lỗi và hai giá trị lỗi. Điểm khác biệt quan trọng giữa giải mã bất nhị phân của ( ) là giải phương trình trên, còn trong giải mã nhị phân thì bộ giải mã chỉ cần tìm các vị trí lỗi. Đối với giải mã nhị phân, lỗi xảy ra tại 1 bít nào đó và giá trị của nó từ bị đảo từ 1 thành 0 hay
ngược lại. Nhưng đối với các symbol bất nhị phân không những cần biết về vị trí lỗi mà còn phải xác định các giá trị symbol phải sửa tại các vị trí đó.
2.3.3.1. Tính toán tập hợp
Một tập hợp (symdrome) là kết quả kiểm tra chẵn lẻ được thực hiện trên để xác định có phải là phần tử hợp lệ trong tập từ mã hay không. Nếu phần thực của là một phần tử, tập hợp có giá trị 0. Bất kì giá trị khác 0 nào của biểu thị rằng có lỗi xảy ra. Tương tự với trường hợp nhị phân, với mã RS(7,3) có bốn symbol trong mọi véc tơ tập hợp, giá trị của chúng được tính toán từ đa thức nhận ( ). Công thức mã hoá RS như sau:
( ) = ( ) ( ) (2.54)
Từ công thức trên ta có nhận xét mọi đa thức từ mã hợp lệ là phép nhân của đa thức sinh ( ). Do đó, nghiệm của ( ) phải là nghiệm của ( ). Vì ( ) =
( ) + ( ) nên ( ) xem xét các nghiệm của ( ) trở về 0 chỉ khi ( ) là từ mã hợp lệ. Lỗi sẽ là kết quả của một hay nhiều tính toán mà dẫn tới kết quả khác 0. Tính toán tập hợp symbol được mô tả theo công thức:
= ( )| = ( ) = 1, … , − (2.55)
Trong đó ( ) chứa hai symbol lỗi như công thức (r(X)). Nếu ( ) là từ mã hợp lệ, nó sẽ tạo ra tập hợp symbol bằng 0. Với ví dụ trên, bốn tập symbol như sau:
= ( ) = + + + + + + (2.56) = + + + + + + = = ( ) = + + + + + + = + + + + + = (2.57) = ( ) = + + + + + + = + + + + + +
= (2.58)
= ( ) = + + + + + +
= + + + + + + = 0 (2.59)
Trường hợp trên có 1 lỗi xảy ra ( ≠ 0).
2.3.3.2. Định vị lỗi
Giả sử có v lỗi trong từ mã tại vị trí , , … , . Đa thức lỗi ( ) sẽ được viết lại như sau:
( ) = + + ⋯ + (2.60)
Trong đó 1, 2, …, v là lỗi thứ 1, 2, …, v và j là vị trí lỗi xảy ra. Để sửa từ mã bị sai, mỗi giá trị lỗi và vị trí phải được xác định trong đó l = 1, 2, …, v. Giả thiết
= . Chúng ta thu được − = 2 các symbol tập hợp bởi việc thay thế vào đa thức nhận được với = 1, 2, … 2 :
= ( ) = + + ⋯ + (2.61)
= ( ) = + + ⋯ + (2.62)
⋮
= ( ) = + + ⋯ + (2.63)
Có 2 giá trị chưa biết ( giá trị lỗi và vị trí). Công thức trên không thể giải được theo cách thông thường vì nó không tuyến tính. Bất kì kỹ thuật nào giải hệ phương trình trên được gọi là thuật toán giải mã Reed-Solomon.
Tính toán véc tơ tập hợp khác không để tìm ra lỗi. Một đa thức sinh định vị lỗi
( ) = (1 + )(1 + ) … (1 + )
= 1 + + + ⋯ + (2.64)
Nghiệm của ( )là , , … ,1/ . Nghịch đảo của các nghiệm của ( ) là số
các vị trí bị lỗi của đa thức ( ). Chúng ta tạo ra một ma trận từ các tập hợp trong đó tập hợp được sử dụng để dự đoán tập hợp kế tiếp.
… … … … ⋮ ⋯ … … … ⋮ = − − ⋮ − (2.65)
Chúng ta sử dụng mô hình hồi quy dựa trên công thức trên sử dùng ma trận hướng lớn nhất có định thức khác không. Với trường hợp RS(7,3) sửa hai symbol, ma trận có kích thước 2 x 2 và mô hình được viết lại như sau:
= (2.66)
=
0 (2.67)
Để giải các hệ số và và đa thức ( ), chúng ta lấy nghịch đảo của ma trận. Nghịch đảo của một ma trận [ ]theo công thức sau:
[ ] = [ ]
[ ] (2.68)
Do đó,
= − = +
= (2.70)
= =
= = = (2.71)
Kiểm tra mức độ an toàn
Nếu phép nghịch đảo thực hiện đúng, nhân ma trận ban đầu với ma trận nghịch đảo sẽ được ma trận đơn vị.
= + +
+ + =
1 0
0 1 (2.72)
Từ công thức (2.67), các vị trí lỗi được tìm ra dựa vào việc giải các hệ số của đa thức định vị lỗi ( ).
=
0 = = (2.73)
( )được biểu diễn như sau:
( ) = + +
= + + (2.74)
Nghiệm của ( ) là các tương quan của các vị trí lỗi. Các vị trí lỗi được tìm thấy khi các nghiệm được giải. Bất kì phần tử X nào làm cho ( ) = 0 là nghiệm và cho phép ta xác định vị trí của lỗi.
( ) = + + ≠ 0 (2.75)
( ) = + + = ≠ 0 (2.76)
( ) = + + = 0 => ỗ (2.78)
( ) = + + = 0 => ỗ (2.79)
( ) = + + = ≠ 0 (2.80)
( ) = + + = ≠ 0 (2.81)
Lỗi tìm thấy ở vị trí và do đó = và = .
Giá trị của lỗi
Lỗi được kí hiệu trong đó j là vị trí lỗi và l là lỗi thứ l. Mỗi giá trị lỗi gắn với một vị trí cụ thể nên ta kí hiệu thu gọn là . Bước tiếp theo là xác định các giá trị lỗi và tại các vị trí = và = . Ta có:
. Ta có:
= ( ) = + (2.82)
= ( ) = + (2.83)
Chúng ta có thể đưa công thức trên về dạng ma trận:
= (2.84)
= (2.85)
Để giải ra và , tính ma trận nghịch đảo của :
=
−
=
= = (2.86)
Giải phương trình (2.85) được các giá trị lỗi như sau:
= = +
+ =
+
+ = (2.87)
Sửa đa thức thu được với ước lượng đa thức lỗi
Ta có:
̂( ) = +
= + (2.88)
Thuật toán tập trung sửa đa thức thu sử dụng ước lượng từ mã phát và gửi bản tin giải mã sau cùng. ( ) = ( ) + ̂( ) = ( ) + ( ) + ̂( ) (2.89) ( ) = (100) + (001) + (011) + (100) + (101) + (110) + (111) (2.90) ̂( ) = (000) + (000) + (000) + (001) + (111) + (110) + (000) (2.91) ( ) = (100) + (001) + (011) + (101) + (010) + (110) + (111) = + + + + + + (2.92)
Bởi vì các symbol bản tin được thay thế với 3 bít nên bản tin mã hoá sẽ là:
2.4. Kết luận chương
Chương này giới thiệu về mã sửa lỗi từ các mã đơn giản CRC chỉ phát hiện được lỗi mà không sửa được, đến mã Hamming có thể sửa được 1 lỗi cho đến mã Reed Solomon có khả năng phát hiện và sửa được nhiều hơn 1 lỗi. Để cụ thể hóa việc ứng dụng mã sửa lỗi vào mạng cảm biến không dây, chương kế tiếp sẽ mô hình hóa mạng cảm biến không dây và đưa mã sửa lỗi vào mô hình mạng. Ngoài việc sửa lỗi, chương ba đưa ra mô hình tối ưu năng lượng của mạng khi sử dụng mã sửa lỗi.
CHƯƠNG 3: MÔ HÌNH HOÁ MẠNG CẢM BIẾN KHÔNG DÂY SỬ DỤNG MÃ SỬA LỖI
Trong phạm vi của luận văn này, tôi thực hiện phần mô phỏng truyền ảnh sử dụng mã hoá Reed-Solomon đa chặng trong mạng cảm biến không dây.
Mục đích của việc sử dụng mã sửa sai trong mạng cảm biến là chúng ta có thể phục hồi được ảnh tại phía thu khi lỗi xảy ra trên kênh truyền không dây. Mã RS là một loại mã có nhiều ưu điểm hơn hẳn so với CRC và Hamming chính vì vậy phần mô phỏng tôi quyết định sử dụng mã hoá Reed-Solomon cho bài toán truyền dẫn ảnh.
Như đã đề cập trong chương 1, vấn đề truyền tin tin cậy là một trong những thách thức lớn của mạng cảm biến không. Việc kết hợp truyền tin tin cậy với cân bằng năng lượng trong mạng giúp mạng WSN cải thiện được thời gian sống và tăng số lượng ảnh truyền nhận được tại phía thu. Tôi xin đề xuất mô hình mã hoá Reed- Solomon đa chặng để giải quyết bài toán trên. Các kết quả về việc sử dụng mã Reed-Solomon đa chặng đã được chỉ ra ở [2] và trong luận văn này tôi sẽ cải thiện hơn về chất lượng ảnh kết hợp với việc cân bằng năng lượng sử dụng truyền đồng thời ảnh từ nhiều nút nguồn. Chi tiết mô hình được trình bày phía dưới.
3.1. Mô hình hoá mô phỏng 3.1.1. Mã RS 3.1.1. Mã RS
Các mã RS là các mã vòng bất nhị phân bởi vì các symbol của chúng được cấu thành bởi các chuỗi m bít, trong đó m là một số dương bất kì có giá trị lớn hơn 2. Với các chuỗi m bít, chúng ta có thể xác định các mã RS(n,k) thoả mãn:
0 < < < 2 + 2 (3.1)
Trong đó k là số các symbol dữ liệu, và n là số symbol sau khi mã hoá. Chúng ta có thể mô tả các mã RS(n,k) thông thường là:
( , ) = (2 − 1,2 − 1 − 2 ) (3.2)
Trong đó t là số các symbol lỗi mà các mã RS có thể sửa, và n-k=2t là số các symbol lỗi mà chúng có thể xác định. Do đó, các mã RS có thể đạt được khả năng mã hoá lớn nhất với một khoảng cách tối thiểu trong trường hợp bộ mã hoá có cùng kích thước với các khối vào ra cho bất kì loại mã tuyến tính nào.
3.1.2. Mã hoá các mã RS
Bởi vì các mã RS là các mã vòng bất nhị phân, chúng ta thực hiện quá trình mã hoá tương tự các mã vòng khác.Có hai cách để mã hoá các mã RS là mã hoá bất đối xứng và mã hoá đối xứng [17]. Bởi vì khả năng sửa lỗi của các mã bất đối xứng thấp [17], chúng ta tập trung vào mã hoá đối xứng. Mạch mã hoá của các mã RS(n,k) cho trường hợp mã hoá đối xứng như Hình 2-2.
Hình 3-1: Mô hình truyền thống truyền ảnh trong mạng cảm biến không dây
Trong đó 0, 1, … , tương ứng với các hệ số của đa thức sinh ( ( )). Chúng ta giả thiết rằng các symbol dữ liệu là ( ), và dữ liệu đầu ra ( ) được tính toán dựa vào ( )và ( ): ( ) = ( ) + ( ) (3.3) Mã hóa RS Giải mã RS Điều chế Giải điều chế Nút nguồn Nút đích Kênh vô tuy ến
( ) = ( ) ( ) (3.4)
Trong đó ( ) là symbol kiểm tra.
Như trên Hình 2-2, quá trình mã hoá cho các mã RS được thực hiện như sau. Đầu tiên, công tắc 1 được bật lên, và côngtắc 2 ở vị trí số 1 trong suốt k chu kì đầu. Sau k chu kì, dữ liệu được chứa trong các thanh ghi (các khối delay) là ( ). Trong
( − ) chu kì còn lại, công tắc 1 bị ngắt, và công tắc 2 được chuyển lên vị trí số 2. Sau ( − ) chu kì, chúng ta thu được đa thức từ mã ( ). Các bước chi tiết về quá trình mã hoá RS tham khảo [18].
3.1.3. Mô hình đề xuất
Hình 3-1 mô tả mô hình truyền thống để thực hiện mã RS cho mạng cảm biến không dây. Trên Hình 3-1, nút nguồn trước tiên thực hiện mã hoá RS. Dữ liệu sau đó được điều chế trước khi truyền tới kênh vô tuyến. Tại nút đích, dữ liệu được giải điều chế và giải mã RS được thực hiện để tái tạo dữ liệu ban đầu.
Theo mô hình này, chúng ta nhận ra rằng các nút nguồn phải thực hiện nhiệm vụ mã hoá RS mặc dù chúng bị giới hạn về năng lượng. Nhiệm vụ này làm cho các nút nguồn dễ bị chết hơn các nút khác. Để giải quyết vấn đề này, tôi đề xuất một mô hình để thực hiện nhiệm vụ mã hoá RS trên mạng cảm biến không dây. mô tả trường hợp tốt nhất của mô hình đề xuất cho mã RS(7,3) trên mạng cảm biến không dây. Để thiết kế mô hình, trước hết chúng ta xây dựng mạch mã hoá cho mã RS(7,3).
Chúng ta giả thiết rằng ( ) của các mã ( , ) có các nghiệm , , … , . Bởi vì − = 2 là 4, chúng ta có thể mô tả ( ) như sau:
( ) = ( − )( − )( − )( − )
= − + − + (3.5)
Bởi vì phép trừ cho các kết quả như là cộng module 2, ( ) có thể được biểu diễn như sau
( ) = + + + + (3.6)
Tương tự, đa thức sinh của mã RS(15,7) là:
( ) = ( + ) + ( + 1) + + ( + )
+( + ) + + ( + ) + (3.7)
Và đa thức sinh của mã RS(31,21) là:
( ) = ( + + ) + ( + + + ) + ( + + ) + ( + ) Nút đích Si ⊗ ⊗ Trễ 1 Trễ 2 Trễ 3 Trễ 4 Cổng 1 ⊕ ⊕ ⊗ ⊗ ⊕ ⊕ X0 X1 X2 X3 1 Cổng 2 R1 R2 R3 R4 Hi Dữ liệu vào 2 Đầu ra Nút nguồn
+( + + + ) + ( + + )
+( + ) + ( + + ) +
+( + + + + ) + (3.8)
Để giản ước các công thức sử dụng trong mục này, chúng ta sẽ sử dụng RS(7,3) để giải thích mô hình đề xuất. Dựa vào công thức (3.5), chúng ta thiết kế mạch mã hoá cho mã RS(7,3) được mô tả trên Hình 3-2. Ở [7] và [8], các tác giả đã chỉ ra rằng tỷ lệ bít lỗi và tỷ lệ mất gói hầu như bằng không khi khoảng cách giữa bộ phát và bộ thu nhỏ hơn ngưỡng ( = 10 ). Do đó, các nút được chọn để thực hiện các bước mã hoá RS thoả mãn điều kiện sau:
max ( , , , ) ≤ (3.9)
trong đó là khoảng cách giữa các nút, được chỉ ra trênHình 3-2.
Quá trình mã hoá RS bao gồm hai bước:
1) Bước 1
Trong k chu kì đầu, công tắc 1 được bật và công tắc 2 ở vị trí số 1. Các nút , , vả được sử dụng để tính toán ( ) như sau. Trong chu kì đầu tiên, symbol vào đầu tiên được đưa tới các nút , , và và được lưu trữ tại cluster head . Trong chu kì thứ hai, symbol vào thứ hai được đưa tới nút và lưu trữ tại cluster head. Tại thời điểm đó, nút được dùng để nhân symbol đầu tiên với hệ số . Dữ liệu sau đó được gửi tới nút và nút này thực hiện hai toán hạng (nhân symbol vào đầu tiên với hệ số α và cộng với dữ liệu đầu ra của nút . Tại nút , chúng ta cũng thực hiện hai toán hạng (nhân symbol vào đầu tiên với hệ số và cộng với dữ liệu đầu ra của nút ). Cuối cùng, dữ liệu được nhân với hệ số và được cộng với dữ liệu đầu ra của nút và được cộng với symbol vào thứ hai tại nút , sau đó