Khi đó thì tất cả các dãy nhận được v có thể tự sửa được tối đa e bit lỗi. - Nếu dmin >= 2e
Thì tất cả các dãy nhận được v sẽ có khả năng phát hiện tối đa e lỗi; nếu tổng số bit lỗi < e thì v có thể tự điều chỉnh được, nếu số bit lỗi = e thì chỉ phát hiện được lỗi và không thể điều chính được.
Trong bộ mã khối , gọi n là số bit trong một từ mã, k là số bit thông tin và m là bit kiểm tra chẵn lẻ, e là số lỗi. khi đó:
0 2 e m i n i C
Điều kiện cần để bộ mã có thể tự sửa lỗi là
Điều kiện đủ để bộ mã có thể tự sửa lỗi (theo Vasharmov-Gilbert- Sacks) 1 0 2 e m i n i C
Với: ! !*( )! i n n C i n i Ví dụ:
Mã 3 chiều (x, y, z) bắt đầu từ gốc 000. Cứ một tín hiệu t hay đổi thì mã bị đẩy đi theo 1 cạnh, chẳng hạn :
000 cách 010, 001 bởi 1 cạnh
011 cách 010, 111 và 001 bởi 1 cạnh.
Như vậy, nếu ta chọn w1 = 010, w2 = 001, w3 = 111 thì khoảng cách giữa chúng là 2 ; tức là d(w1,w2)=(w1,w3)=d(w2,w3)=2
Vậy nếu có lỗi phát sinh thì chỉ phát hiện chứ không sửa được. Như vậy ta có thể phân dạng các loại lỗi sau:
- Lỗi có thể tự điều chỉnh: Gọi wiWlà từ mã đúng được truyền tại nơi phát; v là từ mã nhận được tại nơi thu (truyền đúng thì wi = v).
Trường hợp v # w; có thể xác định và tự điều chỉnh lại lỗi khi và chỉ khi tồn tại duy nhất từ mã w*iW sao cho d(vj, w*i)=min d(vj, wi) => khi đó dựa theo nguyên tắc ngần vẫn đúng vj được gải mã về w*i
- Lỗi chỉ phát hiện không thể tự điều chỉnh: Trong trường hợp này tồn tại w* và w** sao cho d(vj,w*) = d(vj,w**) = min d(vj,wi) với mọi wi thuộc tại w* và w** sao cho d(vj,w*) = d(vj,w**) = min d(vj,wi) với mọi wi thuộc W
=> không thể giải mã chính xác.
- Lỗi không phát hiện được: Trong trường hợp này ta giải mã ra w*I
nhưng khác với wi đã truyền.
3.3.1 Mã hoá khối tuyến tính Linear Block Codes
Mã hoá khối tuyến tính là một lớp mã được dùng rất phổ biến trong việc chống nhiễu. Loại mã này được xây dựng dựa trên các kết quả của đại số tuyến tính. Ở đây chúng ta chỉ nghiên cứu về mã nhị phân vì dữ liệu ở dạng nhị phân.
Hình 3.3 Mã hoá, truyền dẫn và giải mã dữ liệu
Mã hoá thông điệp m thành từ mã v có thể được thực hiện bằng việc nhân m với ma trận sinh G. Xét một đơn vị dữ liệu gồm k bit, và r là số bit chẵn lẻ được thêm vào.[5]
Ma trận sinh G sẽ có dạng:
Với Ik là ma trận đơn vị dạng kxk và C ma trận nhị phân dạng k x r. Khi đó ta sẽ có phương trình : v = uG
Ở phía đầu cuối của bộ thu, syndrome s được tính toán để xác định khả năng sửa các lỗi. Ma trận chẵn lẻ H được tạo ra từ ma trận sinh G với :
Nếu gọi vector lỗi là e thì chúng ta có:
s ≠ 0 nghĩa là có lỗi, sau đó tuỳ thuộc vào khả năng của mã sửa lỗi, s được so sánh với hàng hay tổng của các hàng trong H.
Phía thu sau đó có thể giải mã các từ mã đã được sửa lỗi bằng việc giả phương trình v=uG . Một cách đặc biệt, cho mã hệ thống đó là k cột đầu tiên của ma trận sinh G chính là dạng của ma trận đơn vị v.
3.3.1.1 Cách mã hoá
Nếu:
là thông tin cần được mã hoá thì từ mã v tương ứng với u được xác định công thức uxG
hay
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 của bộ mã.
3.3.1.2 Cách giải mã
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), ta có phương trình sau liên hệ giữa u và v:
Suy ra:
Hệ phương trình này gọi là hệ phương trình giải mã Giải hệ phương trình trên thu được kết quả là:
Do đó dữ liệu thu được ở bên nhận
3.3.1.3 Các phát hiện lỗi
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:
Và ngược lại nếu:
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) có dạng Do đó ta có v là từ mã khi và chỉ khi s(v) = 0
Với tính chất này ta có 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 của một bộ mã ma trận sinh G(kxn) là ma trận H có kích thước (n – k)xn sao cho:
3.3.1.4 Cách sửa lỗi
Xét vector 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á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ì:
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.
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.
Với bộ ma trận kiểm tra của bộ mã trên như sau:
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, tìm từ mã đúng đã được phát đi. Để giải bài này chúng ta tính:
Trong đó hi (i = 1,2,3,…) là cột thứ i của H 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.
Xác định ma trận kiểm tra của mã Hamming với ma trận sinh G: Giả sử có ma trận sinh G như sau:
Với:
Quá trình kiểm tra như sau:
Nếu d = 0 không lỗi
Nếu d ≠ 0 có lỗi, và bit ri bị lỗi trong quá trình truyền Ví dụ r = 1100011
Suy ra không lỗi Với r = 1010011
Suy ra có lỗi bit thư 7 bị truyền lỗi Sửa lỗi 1010011 => 1010010
3.3.2 Kỹ thuật ghép xen Interleaving
Kỹ thuật ghép xen dữ liệu để nhận được sự phân tập không gian mà không thêm bất kỳ thông tin overhead nào. Kỹ thuật này dùng để giải quyết vấn đề lỗi cụm (bursty errors), các bit được phân tán nên không bị lỗi đồng thời khi xảy ra fading sâu hay cụm nhiễu (bursty noise)[12]
Nếu khối sửa lỗi hướng trước FEC chỉ sửa được lỗi từ 1 đến 3 bit thì kỹ thuật ghép xen lại sửa được lỗi với các chuỗi dài. Có hai kỹ thuật ghép xen dữ liệu:
- Khối xen dữ liệu Interleaver
- Khối xen chập Convolution Interleaver
Để minh hoạ kỹ thuật này ta xét đoạn dữ liệu được truyền đi không áp dụng kỹ thuật ghép xen và có kỹ thuật ghép xen.
Hình trên là đoạn dữ liệu không ghép xen, khi xảy ra lỗi dữ liệu bị phá huỷ hoàn toàn.
Hình 3.5 Hiệu quả của việc ghép xen dữ liệu
Hình trên mô tả có sử dụng xen dữ liệu, các block tín hiệu được tản đều, khi bị nhiễu phá huỷ, thì các block tín hiệu không bị phá huỷ hoàn toàn.
3.3.2.1 Khối xen dữ liệu
Hình 3.6 Đặc trưng khối xen từ bộ FEC tới kênh với D=3, N=7 Các số trong khối biểu trưng sự xắp xếp các bit vào bộ xen. Các bit được viết theo hàng và đọc ra theo cột. Một hàng đơn chứa hoàn toàn một từ mã FEC, từ mã trong ví dụ trên là 7.
Hình 3.7 Đặc trưng bộ giải xen từ kênh tới FEC với D=3, N=7
Các bit ở đây đến từ kênh, được viết vào trong bộ giải xen theo cột và đọc ra theo hàng. Hàng sắp xếp hợp thức các bit như định trước cho khối FEC.
Hình 3.8. Mô tả kết quả các giá trị xen dữ liệu
Hai hàng đầu tiên của bảng trình bày sự sắp xếp các bit này sẽ được gởi lên kênh mà không cần thực hiện xen ở bộ xen. Nếu có lỗi xảy ra trong kênh thì được chỉ ra ở hàng thứ 3 của bảng, hai hàng cuối của bảng chỉ các bit sẽ được gửi tới khối FEC trong bộ thu trên cùng kênh. Khi dùng kỹ thuật xen, các bit bị phá huỷ, thì FEC sẽ tự sửa lỗi.
3.3.2.2 Kỹ thuật xen chập Convolution Interleaving
Xét bộ xen chập với một từ mã có size N=7 và độ sâu D=3.
Các từ mã được viết vào trong bộ xen theo hàng và đọc ra theo côt. Sự khác nhau giữa cách thực hiện này và cách thực hiện của bộ khối xen là từ mã không luôn bắt đầu cùng cột trong xen chập như nó đã làm trong khối bộ xen. Hơn nữa, các hàng không có kết thúc. Độ sâu và độ dài của bộ xen quyết định có hoặc không từ mã tiếp theo sẽ được viết ở hàng kế tiếp hay hàng đầu tiếp theo sau từ mã đã được viết trước đó.
Hình 3.10 Mô tả bộ giải xen chập trong bộ thu khi bộ phát dùng xen chập Các giá trị đọc ra của bộ giải xen không rõ ràng như trong khối giải xen. Các bit ở đây được viết theo cột và đọc ra theo hàng với sự xử lý lỗi của FEC. Bộ giải xen chỉ đọc một từ mã đơn từ mỗi hàng và rồi xử lý tới hàng kế tiếp cho đến hàng cuối cùng được đọc.
Sau khi đọc số hàng cuối cùng, bộ giải xen quay trở lại hàng đầu và đọc tiếp từ mã ở vị trí kế tiếp chưa đọc.
3.3.3 Mã sửa lỗi kép - Double error correction codes
Một mã Double-Error-Correcting và Triple-Error-Detecting (DEC-TED) (16,8) được đề xuất bởi Gulliver và Bhargave [5] với ma trận nhị phân P.
Ma trận sinh G được tạo ra với dạng G=[I8 , P] và ma trận chẵn lẻ H có dạng H = [PT , I8]. Nếu 1 hay 2 bit lỗi xuất hiện, syndrome s sẽ hoặc là giống với 1 cột trong H hoặc là bằng phép cộng tuyệt đối của 2 cột trong h; chỉ số của các cột này chính là vị trí của bit lỗi.
Ví dụ:
Với ma trận sinh G được cho như sau :
8 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 [ : ] 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 G I P 8 0 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 0 0 [P :I ] = 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 T H
Khi đó nếu cho bản tin u = [0100 0010] thì từ mã v sẽ là: v = uG = [0100 0010 1001 1100]
giả sử rằng bít thứ 2 và thứ 3 bị đảo do noise trong kênh không dây. Do đó, thông tin nhận được sẽ là v’ = [0010 0010 1001 1100]. Bằng việc nhận v’ với ma trận chuyển vị của ma trận chẵn lẻ H, chúng ta sẽ tính được s:
s = v’HT = [1010 1111]
Hãy chú ý rằng syndrome đạt được bằng việc cộng tuyệt đối hàng thứ 2 và thứ 3 của ma trận HT . Do đó ở thiết bị đầu cuối bộ thu thì các bít thứ 2 và thứ 3 đã bị đảo, để sửa lỗi, từ nhận định trên ta sẽ có từ mã đúng là v = [0100 0010 1001 1100]. Bởi vì ma trận sinh G là một mã hệ thống, nên chúng ta sẽ có 8 bit đầu tiên là dạng của dữ liệu nhận đúng là u =[0100 0010]
3.4 Hiệu quả trong việc sử dụng năng lượng
Forward Error Correction (sửa lỗi hướng trước) là 1 cách của việc sửa lỗi các gói tin bằng cách thêm các bit thông tin vào quá trình truyền dẫn. Tiến hành thí nghiệm và kiểm tra sự khác nhau giữa các mã sửa lỗi trong radio ChipCon. Do sự hạn chế của việc tiêu thụ điện năng thấp và yếu tố về hình thức là nhỏ, nên các mã sửa lỗi được thiết kế đơn giản và có thể sửa lỗi đơn bít hoặc lỗi kép. Các thí nghiệm ECC của có hiệu quả khi tỷ lệ bít lỗi không cao và là các lỗi đơn bit. Khi các lỗi là chùm thì các mã của chúng tôi không hiệu quả trong việc giảm đi những mất mát trong gói tin. Tuy nhiên cũng như nhiều lược đồ khác thì nó khá là phức tạp và yêu cầu năng lượng xử lý cao và bộ nhớ lưu trữ tính toán lớn.
Để xác định các đặc tính lỗi của radio ChipCon, chúng ta thực hiện vài phép đo sơ bộ. 1 nút gửi 1000 lần 1 gói tin không được mã hoá, với các gói thu được nhập vào trong PC ở thiết bị đầu cuối là bộ thu. Các thí nghiệm đã được tiến hành bên ngoài trời. Hình dưới mô tả hầu hết các lỗi bit là đơn hoặc là lỗi kép. Các chùm lỗi cũng có nhưng hiếm gặp. Do đó, cũng có thể coi rằng lược đồ mã hoá mà sửa lỗi đơn và lỗi kép có thể giảm thiểu các lỗi.[12]
Phần tiếp theo là các tính toán để xác định tỷ lệ mất các gói tin, sự mất là rất nhỏ khoảng 0.4 % trong khoảng cách là 135 feet.
Hình 3.12 Tính toán tỷ lệ mất gói tin
3.4.1 Kiểm tra ngoài trời
Khi không sử dụng FEC thì ta thấy với 5000 gói tin ở khoảng cách 600 ft thì tỷ lệ mất gói tin ở môi trường ngoài trời là 0,26%[12]
3.4.2 Kiểm tra trong nhà
Khi thực hiện truyền dữ liệu ở 3 vị trí khác nhau trong nhà không sử dụng FEC thì tỷ lệ mất gói tin cũng khá lớn.[12]
Chương 4. ĐIỀU KHIỂN LỖI ỨNG DỤNG CHIPCON CC1010 4.1 Giới thiệu
Trong khi 1 mã sửa lỗi ECC có thể được chỉ định trong bất kỳ lớp nào trong network stack, thì thực tế ECC được sử dụng trong lớp MAC [4] như hình minh hoạ :
Hình 4.1 Interfacing ECC module with network stack
Bởi vì với vị trí này sẽ không làm thay đổi sự chuyển giao với lớp ứng dụng. Do đó, bất kỳ ứng dụng nào được viết mà không dùng ECC trong MAC cũng có thể thực hiện mà không cần điểu chỉnh mã nguồn.
Quá trình thực hiện mã sửa lỗi ECC tương tác với network stack qua giao