Tải bản đầy đủ (.docx) (45 trang)

Báo cáo môn học mạng không dây và di động đề tài mã hoá và kiểm soát lỗi (coding and error control)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.95 MB, 45 trang )

TRƯƠNG ĐAI HOC ĐIÊN LƯC
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO MƠN HOC

MANG KHƠNG DÂY VÀ DI ĐỘNG
ĐỀ TÀI:

Mã hố và kiểm soát lỗi (Coding and error control)
Giảng viên hướng dẫn:

TS. LÊ ANH NGOC

Sinh viên thực hiện:
(Nhóm 4)
Chuyên ngành:

QUẢN TRỊ AN NINH MANG

Khóa:

2018-2023
Hà Nội, tháng 11 năm 2019

1


MỤC LỤC
1. PHÁT HIỆN LỖI.......................................................................................................3
1.1. Khái niệm về lỗi..................................................................................................3
1.2. Phát hiện lỗi(Error Detection)...........................................................................3


a, Kiểm tra chẵn lẻ (Parity check – Vertical Redundancy Check – VRC)...........5
b, Kiểm tra phần dư tuần hoàn – Cyclic Redundancy Check (CRC)..................5
c, Đa thức (Polynomials).......................................................................................8
d, Logic kĩ thuật số..............................................................................................10
2. MÃ KHỐI SỬA LỖI................................................................................................10
2.1. Nguyên tắc mã khối..........................................................................................13
2.2. Hamming Code.................................................................................................16
2.3. Mã vòng (Cyclic Codes)....................................................................................19
2.4. Mã BCH (mã Bose, Chaudhuri và Hocquenghem)........................................24
2.5. Mã Reed-Solomon.............................................................................................25
2.6. Xen kẽ khối (Block Interleaving).....................................................................25
3.MÃ XOẮN (CONVOLUTIONAL CODES)............................................................26
3.1. Giải mã (Decoding)...........................................................................................28
3.2. Mã Turbo...........................................................................................................31
4. TRUY VẤN LẶP LẠI TỰ ĐỘNG (ARQ)..............................................................34
4.1. Luồng dữ liệu (Data Flow)...............................................................................34
4.2. Kiểm sốt lỗi......................................................................................................38
KẾT LUẬN..................................................................................................................42
TÀI LIỆU THAM KHẢO............................................................................................43
NHẬT KÍ LÀM VIỆC NHÓM....................................................................................44
ĐÁNH GIÁ THÀNH VIÊN.........................................................................................45

2


1. PHÁT HIỆN LỖI
1.1. Khái niệm về lỗi
Trong các hệ thống truyền tín hiệu số, một lỗi sảy ra khi 1 bit bị thay đổi giữa
bên gửi và bên nhận. Đó là bên gửi gửi bit 1 nhưng bên nhận lại nhận được bit
0 và ngược lại.

Nhìn chung có 2 kiểu lỗi có thể sảy ra đó là lỗi đơn (single error) và lỗi xuất
hiện đột ngột. 1 lỗi đơn là 1 trạng thái lỗi biệt lập nó thay đổi 1 bit nhưng
không ảnh hưởng các bit bên cạnh. Một lỗi xuất hiện đột ngột có độ dài B (bit)
là 1 chuỗi B bit kề nhau trong đó bit đầu tiên bit cuối cùng và một số bit ở giữa
2 bit này là nhận được với lỗi. Một cách chính xác, IEEE Std 100 định nghĩa 1
lỗi xuất hiện đột ngột như là 1 nhóm các bit trong đó 2 bit lỗi liên tiếp luôn bị
ngăn cách bởi 1 số x cho trước các bít chính xác. Bít lỗi cuối cùng trong 1 lỗi
gián đoạn và bit lỗi đầu tiên trong lỗi gián đọan tiếp theo cũng được ngăn cách
x hoặc nhiều hơn các bít chính xác.
Lỗi đơn có thể sảy ra và được thể hiện như là sự thể hiện của nhiễu nhiệt khi tỷ
số SNR bị giảm đáng kể dẫn đến bên nhận bị nhầm lẫn khi nhận 1 bit
Lỗi gián xuất hiện đột ngột phổ biến hơn lỗi đơn và khó giải quyết hơn, Lỗi
này thường bị gây ra bởi tạp nhiễu xung lực hoặc sự giảm âm (fading) trong
môi trường mạng không dây (mobile wireless)
Những tác động của lỗi xuất hiện đột ngột sẽ cao hơn với tốc độ truyền cao
hơn.
1.2. Phát hiện lỗi(Error Detection)
Giả sử rằng dữ liệu được truyền theo các chuỗi bít liên tiếp và được gọi là các
frames. Khi đó các khả năng có thể sảy ra như sau:
- Pb : Khả năng 1 bit nhận được là bị lỗi và còn được gọi là tỷ lệ bit lỗi (bit
error rate – BER)
- P1: Khả năng 1 frame nhận được khơng có lỗi
- P2: Khả năng với 1 giải thuật phát hiện lỗi được sử dụng, 1 frame nhận được
còn 1 hoặc nhiều lỗi không được phát hiện
- P3: Khả năng với 1 giải thuật phát hiện lỗi được sử dụng, 1 frame nhận được
với 1 hoặc nhiều bit lỗi đã được phát hiện và khơng có các bit lỗi khơng được
phát hiện.
Khi khơng có 1 phương tiện nào được sử dụng để phát hiện lỗi như vậy P3
bằng 0. Giả sử rằng số lượng bit trong 1 frame là F khi đó:
P1=(1-Pb)F

P2=1-P1

3


Trong đó F là số bit trên mỗi frame. Nói cách khác, xác suất mà một khung
hình xuất hiện khơng có lỗi bit sẽ giảm khi xác suất xảy ra lỗi bit đơn tăng.
Ngoài ra, xác suất mà một frame đến mà khơng có lỗi bit nào giảm khi tăng
chiều dài frame; frame càng dài, càng có nhiều bit thì càng có nhiều bit và xác
suất xảy ra lỗi trong số này càng cao.
Ví dụ 8.1: 1 đối tượng xác định cho các kết nối ISDN (mạng tích hợp đa dịch
vụ) là tỷ lệ bit lỗi trên kênh 64 kbps nên nhỏ hơn10-6 trong khoảng ít nhất 90%
của 1 phút được quan sát. Giả sử trung bình 1 frame có lỗi bit không bị phát
hiện xảy ra mỗi ngày trên kênh 64 kbps được sử dụng liên tục, giả định độ dài
1 frame là 1000 bits. Số lượng frames có thể được truyền trong 1 ngày lên tới
5.529 x 106 , mang lại tỷ lệ lỗi mong muốn là P2 = 1/(5.529 x 106) = 0.18 x 10-6
. Nhưng nếu giả sử Pb =10-6, thì P1 = (0.999999)1000 = 0.999 và do đó P2 = 103, quá lớn để đáp ứng yêu cầu.
Như vậy khả năng 1 frame nhận được khơng có bit lỗi giảm khi khả năng lỗi
đơn tăng. Hơn nũa khả năng 1 frame nhận được khơng có bit lỗi giảm khi tăng
độ dài của frame.
Có nhiều kỹ thuật được dùng để phát hiện lỗi. Tất các các kỹ thuật này tuân thủ
theo các nguyên tắc sau đây:
Cho 1 frame gồm các bit, một số bit để tạo thành 1 mã phát hiện lỗi được thêm
vào bởi transmitter. Mã phát hiện lỗi được tính tốn như là 1 hàm của các bit
khác đã được truyền. Thông thường, với 1 block gồm k bit dữ liệu, thuật toán
phát hiện lỗi sinh ra một mã phát hiện lỗi gồm n-k bit, trong đó (n-k)được gắn vào block này và tạo thành 1 frame gồm n bit và được truyền đi. Mã
phát hiện lỗi này còn được gọi là bits check. Bên nhận chia frame nhận được
thành k bit dữ liệu và n-k bit của mã phát hiện lỗi. Bên nhận thực hiện cùng 1
tính tốn phát hiện lỗi trên k bit dữ liệu nhận được và so sánh kết quả tính tốn

này với mã phát hiện lỗi đã nhận được. Một lỗi được phát hiện khi và chỉ khi
có sự khác nhau giữa 2 đoạn mã này.
Như vậy P3 là 1 khả năng 1 frame có lỗi và cơ chế phát hiện lỗi đã phát hiện
được các lỗi này. P2 được biết đến như là tỷ lệ lỗi còn sót lại và là khả năng các
lỗi khơng được phát hiện mặc dù đã sử dụng cơ chế phát hiện lỗi.

4


Hình 8.1. Cơ chế phát hiện lỗi.

a, Kiểm tra chẵn lẻ (parity check – Vertical Redundancy Check – VRC)
Phương pháp này gắn thêm 1 bit vào cuối block dữ liệu. Đơn giản nhất là
truyền kỹ tự đó là: 1 ký tự được xem như là 1 khối gồm 7 bit dữ liệu, 1 bit kiểm
tra chẵn lẻ được gắn vào khối này. Giá trị của bit chẵn lẻ này được lựa chọn sao
cho ký tự cần gửi có 1 số chẵn (even) hay có 1 số lẻ (odd) các bit 1
Ví dụ: Cần gửi chữ G (1110001) và sử dụng odd parity. Khi đó bit 1 được gắn
vào tạo thành 11110001. Bên nhận xem xét ký tự vừa nhận được, nếu số lượng
các bit 1 la lẻ (odd) thì giả thiết rằng không sảy ra lỗi. Nếu 1 hay 1 số lượng lẻ
các bit bị thay đổi trong quá trình truyền thì bên nhận xẽ phát hiện ra lỗi
Tuy nhiên nếu 2 hay 1 số lượng chẵn các bit bị thay đổi bởi lỗi khi truyền thì sẽ
sảy ra các lỗi không được phát hiện.
Thông thường bit chẵn được dùng trong truyền đồng bộ và bit lẻ được dùng
trong truyền không đồng bộ.
Việc sử dụng bit chẵn lẻ là không dễ ràng chẳng hạn như xung lực tạp nhiễu có
thể phá hủy 1 hay nhiều bit đặc biệt với tốc độ truyền dữ liệu cao.
b, Kiểm tra phần dư tuần hoàn – Cyclic Redundancy Check (CRC)
Đây là 1 phương pháp phổ biến và có hiệu quả nhất trong việc phát
hiện lỗi. Cơ chế hoạt dộng của phương pháp này như sau:


5


- Cho 1 block hay 1 message gồm k bit,bên gửi sinh ra 1 chuỗi gồm n-k bit
được gọi là chuỗi kiểm tra frame (Frame Check Sequence – FCS) như vạy sẽ
tạo ra 1 frame gồm n bit và sau đó được chia bởi 1 các số đã xác định trước.
Bên nhận sau đó cũng đem chia frame nhận được bởi các số này và nếu khơng
có dư thì cho rằng khơng có lỗi. Phương pháp này được chia thành các loại như
Modul 2, Đa thức và lô gic số học
+ Modul 2: Sử dụng phép cộng trong cơ số 2 hoặc phép trừ trong cơ số 2
(XOR), Ví du 8.2 :

Khi đó:
T= 1 frame gồm n bit để truyền
D= 1 block hay 1 message gồm k bit, đây là k bit đầy tiên của T
F= FCS gồm n-k bit và là các bit cuối cùng của T
P là 1 mẫu gồm n-k+1 bit là số chia được xác định trước
Cho rằng T/P khơng có dư. Phải rõ ràng rằng:
T = 2n- kD + F
Thuật tóan được thực hiện như sau:
- Ban đầu ta gắn k bit 0 vào cuối D để được n bit
- Thực hiện phép chia lấy phần dư của n bit này cho mẫu P để tạo ra n-k bit
của FCS
- Gắn k bit của số dư vào cuối của T để tạo thành 1 block và truyền
- Bên nhận sau khi nhận được block gồm n bit, thực hiện việc chia n bit này
cho mẫu P, nếu kết quả chia khơng có dư thì khẳng định việc truyền là khơng bị
lỗi
Ví dụ 8.3:
1. Chuyển D=1010001101(10 bits)
Mẫu P=110101(6bits)

FSC R=Được tính gồm 5 bits
Do vậy: n=15, k=10, n-k=5
2.Từ k bits ban đầu ta có được 15 bits: 101000110100000
6


3.Thực hiện phép chia 15 bits này cho mẫu P (110101)

4. Phần dư được thêm vào 25D để T = 101000110101110, được truyền đi.
5. Nếu khơng có lỗi, người nhận sẽ nhận được T nguyên vẹn. Frame nhận
được chia cho P:

Vì khơng có dư, nên ta cho rằng khơng có lỗi.
Mẫu P được chọn sao cho dài hơn FSC 1 bit và mẫu bit được chọn phụ thuộc
vào các loại lỗi có thể sảy ra, thơng thường các bit cao và bit thấp phải được
chọn bằng 1.
Một phương pháp ngắn gọn để phát hiện một hoặc nhiều lỗi. Một lỗi dẫn đến
sự đảo ngược của một bit. Tương đương với việc lấy XOR của bit và 1
(modulo 2 thêm 1 vào bit): 0 + 1 = 1; 1 + 1 = 0. Do đó, các lỗi trong frame n bit
có thể được biểu thị bằng trường n bit cùng với 1s ở mỗi vị trí lỗi. Kết quả của
frame Tr, có thể được biểu thị là
7


Tr = T  E
Trong đó:
T = frame đã truyền
E = mẫu lỗi với 1s ở các điểm xảy ra lỗi
Tr = frame nhận
Nếu có 1 lỗi (E  0), người nhận không phát hiện ra lỗi khi và chỉ khi Tr chia

hết cho P, tương đương E chia hết cho P. Theo trực giác, điều này dường như
không xảy ra. Theo trực giác, điều này dường như không xảy ra.
c, Đa thức (Polynomials)
Một cách khác để diễn tả quá trình của CRC là diễn tả tất cả các giá
trị như là các đa thức của 1 biến giả X nào đó với hệ số 2. Các hệ số
tương ứng với các bits trong số nhị phân. Các công việc tính tốn tương
tự như trong modulo 2. Cơ chế CRC có thể được mơ tả:
Xn-k D(X) = Q(X) + R(X)
P(X)

P(X)

T(X) = Xn-k D(X) + R(X)
So sánh các phương trình này với phương trình (8.1) và (8.2).
Ví dụ 8.4: Tiếp tục với ví dụ (8.3) , cho D = 1010001101, ta có D(X) =
D(X)=X9+X7+X3+X2+1, với P=110101 ta có P(X)=X5+X4+X2+1. Kết thúc với
R = 01110, tương ứng với R = R(X) = X 3 + X2 + X. Hình 8.2 cho thấy phép
chia đa thức tương ứng với phép chia nhị phân trong ví dụ trước.
Một lỗi E (X) chỉ khơng thể phát hiện được nếu chia hết cho P (X). Có thể hiển
thị [PETE61, RAMA88] rằng tất cả các lỗi sau khơng chia hết cho P (X) được
chọn và do đó có thể phát hiện được:
 Tất cả các lỗi bit đơn, nếu P (X) có nhiều hơn một điều kiện khác.
 Tất cả các lỗi bit đôi, khi P (X) có một số hạng với ít nhất ba điều kiện.
 Bất kì lỗi bit đơn, khi P(X) chứa 1 số hạng (X+1).
 Bất kỳ chùm lỗi đột phát nào có độ dài của chùm nhỏ hơn hoặc bằng n-k;
nghĩa là nhỏ hơn hoặc bằng chiều dài của FCS.
Ngoài ra, nếu tất cả các mẫu lỗi được coi là như nhau, thì đối với lỗi bit chum
có độ dài r + 1, xác suất xảy ra lỗi không bị phát hiện [E (X) chia hết cho P
(X)] là 1/2r-1 và đối với cụm dài hơn, là 1/2r, trong đó r là chiều dài của FCS.
8



Hình 8.2. Phép chia đa thức cho ví dụ 8.4.

Có 4 cách lựa chọn P(x) thường được sử dụng rộng rãi, đó là:
CRC – 12 = X12 + X11 + X3 + X2 + X +1
CRC – 16 = X16 +X15 + X2 +1
CRC –CCITT = X16 + X12 + X2 + 1
CRC 32 = X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4
+ X2 + X +1
CRC – 12 được sử dụng để truyền các ký tự 6 bits và sinh ra 1 FCS có độ dài
12 bits. CRC – 16 và CRC CciTT thường được sử dụng để truyền các ký tự 8
bits tại Mỹ và Châu Âu và sinh ra 1 CRC có độ dài 16. CRC – 32 được lựa
chọn trong truyền điểm – điểm đồng bộ và được sử dụng trong các chuẩn của
LAN.

9


d, Logic kĩ thuật số
Cơ chế CRC có thể được biểu diễn như một mạch phân chia bao
gồm các cổng XOR và một thanh ghi dịch. Thanh ghi dịch là một chuỗi
các thiết bị lưu trữ 1-bit. Mỗi thiết bị có một đầu ra, cho biết giá trị hiện
được lưu trữ và một dòng đầu vào. Tại thời điểm riêng biệt, được gọi là
clock times, giá trị trong thiết bị lưu trữ được thay thế bằng giá trị được
chỉ định bởi đầu vào của nó. Tồn bộ thanh ghi được đồng bộ xung nhịp
clock, gây ra sự dịch chuyển 1-bit dọc theo toàn bộ thanh ghi.
Mạch được thực hiện như sau:
1. Thanh ghi chứa n - k bit, bằng với độ dài của FCS.
2. Có tới n - k cổng XOR.

3. Sự hiện diện hay vắng mặt của cổng tương ứng với sự hiện diện hay vắng
mặt của một số hạng trong chia đa thức, P (X), ngoại trừ 1 và Xn-k.
Hình 8.4 chỉ ra mơ hình chung sự hồn tất thanh dịch của CRC cho đa thức
n k

P(X) =
1.

A X
i 0

i

i

, với A0 = An-k = 1 và tất cả Ai khác như nhau mỗi 0 hoặc

2. MÃ KHỐI SỬA LỖI
Phát hiện lỗi là một kỹ thuật dễ sử dụng, được tìm thấy trong các giao thức
kiểm sốt liên kết dữ liệu (HDLC), các giao thức vận chuyển, như TCP. Tuy
nhiên, việc sửa lỗi sử dụng mã phát hiện lỗi, yêu cầu khối dữ liệu đó được
truyền lại, sử dụng quy luật ARQ được giải thích trong Phần 8.4. Đối với các
ứng dụng không dây, phương pháp này không đầy đủ vì hai lý do:
Tỷ lệ lỗi bit trên một liên kết khơng dây có thể khá cao, điều này sẽ dẫn
đến truyền lại số lượng lớn.
- Trong một số trường hợp, đặc biệt là các liên kết vệ tinh, độ trễ lan truyền
rất dài so với thời gian truyền của một frame đơn. Kết quả là hệ thống kém hiệu
quả. Như trong Phần 8.4, cách phổ biến để truyền lại là truyền lại frame bị lỗi
cộng với tất cả các frame tiếp theo. Với một liên kết dữ liệu dài, lỗi trong một
frame đòi hỏi phải truyền lại nhiều frame.


10


(a)Thanh ghi dịch đầy đủ

(b) Ví dụ với đầu vào của 1010001101
Hình 8.3. Mạch với các thanh ghi dịch để thực hiện đa thức X5 + X4 + X2 + 1

Hình 8.4. Mơ hình CRC chung thực hiện số chia
1 + A1X + A2X2 + ... + An-1Xn-k - 1 + Xn-k
11


Hình 8.5. Cơ chế sửa lỗi tiếp chuyển

Thay vào đó, cho phép người nhận sửa lỗi trong quá trình truyền đến
trên cơ sở các bit . Hình 8.5 cho thấy cách thức này được thực hiện. Ở
cuối đường truyền, mỗi khối dữ liệu k-bit được ánh xạ theo một khối nbit (n> k) được gọi là codeword, sử dụng bộ mã hóa FEC (sửa lỗi
chuyển tiếp). code word sau đó được truyền đi; trong trường hợp truyền
không dây, bộ điều biến tạo ra tín hiệu tương tự để truyền. Trong q
trình truyền, tín hiệu bị nhiễu có thể tạo ra lỗi bit trong tín hiệu. Khi
nhận, tín hiệu đến được giải mã tạo ra một chuỗi bit tương tự như từ mã
gốc nhưng có thể có lỗi. Khối này được chuyển qua bộ giải mã FEC, với
một trong 4 kết quả có thể xảy ra:
1. Nếu khơng có lỗi bit, đầu vào của bộ giải mã FEC giống hệt với
codeword gốc và bộ giải mã tạo ra khối dữ liệu gốc làm đầu ra.
2. Với 1 số lỗi nhất định, bộ giải mã có thể phát hiện và sửa các lỗi
đó. Vì vậy, mặc dù khối dữ liệu đến khác với codeword được truyền, bộ
giải mã FEC có thể ánh xạ khối này vào khối dữ liệu gốc.

3. Đối với lỗi nhất định, bộ giải mã có thể phát hiện nhưng không
sửa lỗi. Trong trường hợp này, bộ giải mã chỉ báo lỗi không thể sửa.
4. Đối với 1 số lỗi hiếm gặp, bộ giải mã sẽ không phát hiện bất kỳ
lỗi nào xảy ra và ánh xạ khối dữ liệu n-bit vào khối k-bit khác với khối
k-bit gốc.
12


2.1. Nguyên tắc mã khối
Khoảng cách Hamming d (v1, v2) giữa hai chuỗi nhị phân n-bit, v1 và
v2 là số bit với v1 và v2 khác nhau. Ví dụ:
v1 = 011011, v2 = 110001 thì d (v1, v2) = 3
Giả sử muốn truyền các khối dữ liệu có độ dài k bit. Thay vì truyền
mỗi khối dưới dạng k bit, chúng ta ánh xạ từng chuỗi k-bit thành một nbit codeword duy nhất.
Ví dụ 8.6. Với k = 2 và n = 5
Khối dữ liệu

Từ mã

00

00000

01

00111

10

11001


11

11110

Giả sử một khối từ mã trả về mẫu bit là 00100. Đây không phải từ mã hợp
lệ nên cần tìm lỗi. Khơng thể chắc chắn khối dữ liệu nào đã được gửi vì 1,2,3,4
hoặc cả 5 bit được truyền có thể đã bị hỏng do nhiễu. Tuy nhiên, chỉ cần một
bit duy nhất thay đổiđể chuyển 00000 thành 00100, ba bit thay đổi để chuyển
11110 thành 00100 và phải mất bốn bit thay đổi để chuyển 11001 thành 00100.
Do đó, có thể suy ra rằng từ mã có khả năng nhất đã được gửi là 00000 khối dữ
liệu mong muốn là 00. Xét về khoảng cách Hamming:
d(00000, 00100) = 1; d(00111, 00100) = 2; d(11001, 00100) = 4; d(11111,
00100) = 3

nếu nhận được một từ mã khơng hợp lệ, thì chọn từ mã hợp lệ gần. Điều này
chỉ hoạt động nếu có một từ mã duy nhất hợp lệ ở mức tối thiểu từ mỗi từ mã
không hợp lệ. Với những từ mã không hợp lệ, ta có bảng dưới đây:
Từ mã

Khoảng cách

Từ mã

Từ mã

13

Khoảng cách


Từ mã


không hợp lệ nhỏ nhất

hợp lệ

không hợp lệ nhỏ nhất

hợp lệ

Ví dụ trên minh họa các thuộc tính cần yếu của mã sửa lỗi khối. Một
mã khối (n, k) mã hóa k bit dữ liệu thành n bit codeword. Do đó, mã
khối tương đương với hàm mẫu vc = ƒ (vd), trong đó vd là vectơ của k
bit dữ liệu và vc là vectơ của n bit codeword.
Với mã khối (n, k), có 2k codeword hợp lệ trong tổng số 2n
codeword khả thi. Tỷ lệ bit dư thừa trên bit dữ liệu, (n-k)/k, được gọi là
sự dư thừa của mã, và tỷ lệ bit dữ liệu trên tổng số bit, k/n, là tốc độ mã
hoá. Tốc độ mã hoá là thước đo của băng thông bổ sung cần thiết để
mang dữ liệu ở cùng tốc độ dữ liệu như không có mã. Ví dụ, một tốc độ
mã là 1/2 u cầu gấp đôi băng thông của một hệ thống chưa được giải
mã để duy trì cùng tốc độ dữ liệu. Chẳng hạn ta có tỷ lệ mã là 2/5 và do
đó u cầu băng thơng gấp 2,5 lần băng thơng cho một hệ thống chưa
được giải mã. Ví dụ, nếu tốc độ dữ liệu đầu vào cho bộ mã hóa là 1
Mbps, thì đầu ra từ bộ mã hóa phải là tốc độ 2,5 Mbps để theo kịp.
Đối với một mã bao gồm các codeword w1, w2, …, ws, trong đó s = 2k. ,
Khoảng cách dmin tối thiểu được xác định là:

dmin =


min
ij

[d(wi, wj)]

Đối với một số nguyên dương t đã cho, nếu một mã thỏa mãn dmin 
2t + 1, thì mã có thể sửa tất cả các lỗi bit lên đến và bao gồm cả lỗi của
bit t. Nếu dmin  2t, thì tất cả các lỗi t - 1 bit có thể được sửa và lỗi của
bit t có thể được phát hiện nhưng khơng được sửa. Ngược lại, bất kỳ mã
nào mà các lỗi sai số  t được sửa nếu thỏa mãn dmin  2t + 1 và bất kỳ
mã nào có tất cả các lỗi  t - 1 được sửa và tất cả các lỗi về độ trễ đều
được phát hiện nếu thỏa mãn dmin  2t .
14


Một cách khác để tìm mối quan hệ giữa dmin và t là số lỗi tối đa có
thể sửa được đảm bảo cho mỗi codeword thỏa mãn:
dmin - 1
2
t =[
]

trong đó [x] là phần ngun của x (ví dụ: [6.3] = 6). Nếu ta chỉ quan tâm đến
việc phát hiện lỗi và khơng sửa lỗi, thì số lỗi t, có thể được phát hiện thỏa mãn:
t = dmin -1
Cho rằng nếu xảy ra lỗi dmin, điều này có thể thay đổi một codeword
hợp lệ thành một từ khác. Bất kỳ số lượng lỗi nào ít hơn dmin khơng thể
cho ra kết quả là một codeword hợp lệ.
Việc thiết kế một mã khối liên quan đến một số vấn đề.
1. Đối với giá trị của n và k, ta mong muốn giá trị lớn nhất có thể của dmin.

2. Mã phải tương đối dễ mã hóa và giải mã, địi hỏi bộ nhớ và thời gian xử
lý tối thiểu.
3. Số lượng bit bổ sung, (n - k), phải nhỏ, để giảm lượng băng thông.
4. Số lượng bit bổ sung, (n - k),phải lớn, để giảm bớt tỷ lệ lỗi.
Thực tế, hai vấn đề cuối xung đột và phải đánh đổi.

15


Hình 8.6. Cách mã hóa để cải thiện hiệu năng hệ thống.

Trong hình 8.6, đường cong bên phải mơ tả hệ thống điều chế tín
hiệu chưa được giải mã; khu vực bóng mờ đại diện cho khu vực có thể
đạt được cải thiện tiềm năng. Trong khu vực này, BER (tỷ lệ lỗi bit) nhỏ
hơn đạt được cho Eb/N0 nhất định và ngược lại, đối với BER đã cho,
Eb/N0 nhỏ hơn được yêu cầu. Đường cong khác là kết quả của một nửa
tỷ lệ mã (số lượng dữ liệu như nhau và bit kiểm tra). Lưu ý, ở tỷ lệ lỗi
10-5, sử dụng mã hóa cho phép 1 mức giảm Eb/N0 là 2.77 dB. Mức giảm
này được gọi là mức tăng mã hóa, được định nghĩa như 1 mức giảm,
tính bằng đơn vị dB, trong Eb/N0 cần thiết để đạt được BER chỉ định của
hệ thống mã hóa sửa lỗi so với hệ thống chưa được giải mã sử dụng
cùng một bộ điều chế tín hiệu.
Điều quan trọng rằng BER cho tỉ lệ thứ hai 1/2 đường cong là tỷ lệ
lỗi không được sửa chữa và giá trị Eb là cơ năng trên mỗi bit dữ liệu.Vì
tốc độ là 1/2, có hai bit trên kênh cho mỗi bit dữ liệu và cơ năng trên
mỗi bit được mã hóa bằng một nửa số mũ trên mỗi bit dữ liệu hoặc giảm
3 dB.
Nếu ta nhìn vào số mũ trên mỗi bit được mã hóa cho hệ thống, thì sẽ thấy rằng
tỷ lệ lỗi bit là khoảng 2.4 x 10-2, or 0.024.
16



Cuối cùng, lưu ý dưới một ngưỡng nhất định củaEb/N0, sơ đồ mã
hóa thực sự làm giảm hiệu suất. Trong Hình 8.6, ngưỡng cũ xảy ra ở
khoảng 5,4 dB. Dưới ngưỡng, các bit kiểm tra bổ sung tăng chi phí hệ
thống, làm giảm số mũ trên mỗi bit dữ liệu gây ra tăng lỗi. Trên ngưỡng,
khả năng sửa lỗi của mã nhiều hơn bù cho việc giảm Eb, dẫn đến tăng
mã hóa. Sau đây ta chuyển sang xem xét một số mã sửa lỗi khối cụ thể.
2.2. Hamming Code
Mã Hamming là một họ của (n, k) khối mã sửa lỗi gồm các tham số
sau:
Độ dài khối: n = 2m - 1
Số lượng bit dữ liệu: k = 2m - m -1
Số lượng bit kiểm tra: n - k = m
Khoảng cách tối thiểu: dmin = 3
trong đó m  3. Mã Hamming rất đơn giản và dễ phân tích nhưng hiếm khi
được sử dụng. Ta bắt đầu với các mã này bởi vì chúng minh họa một số nguyên
tắc cơ bản của mã khối.
Mã Hamming được thiết kế để sửa lỗi bit đơn. Để bắt đầu, ta hãy
xác định đoạn mã phải dài bao nhiêu. Cơ chế của mã Hamming có cấu
trúc giống logic phát hiện lỗi được mơ tả trong hình 8.1; nghĩa là, q
trình mã hóa bảo tồn k bit dữ liệu và thêm (n - k) các bit kiểm tra. Để
giải mã, logic so sánh nhận đầu vào hai giá trị (n - k)-bits, một từ
codeword và một từ sự tính tốn được thực hiện trên các bit dữ liệu So
sánh từng bit được thực hiện bằng cách lấy XOR đầu vào. Kết quả được
gọi là syndrome word. Do đó, mỗi bit của syndrome là 0 hoặc 1 tùy
theo việc có hay khơng đối xứng ở vị trí bit cho hai đầu vào.
Syndrome word rộng (n - k) bit và có phạm vi từ 0 đến 2(n - k) - 1.
Giá trị 0 chỉ ra khơng có lỗi nào được phát hiện, giá tri 2(n - k) - 1 để chỉ
ra, nếu có một lỗi, bit nào lỗi. Hiện tại, bởi một lỗi có thể xảy ra trên k

bit dữ liệu bất kì hoặc (n - k) bit kiểm tra, ta phải có:
2(n - k) - 1  k + (n - k) = n

Phương trình trên đưa ra số lượng bit cần thiết để sửa một lỗi bit đơn
trong một từ có chứa k bit dữ liệu. Bảng 8.1 liệt kê số lượng bit kiểm tra
được yêu cầu cho các độ dài dữ liệu khác nhau.
17


Trong đó:
Data bits: số lượng bit dữ liệu
Check Bits: số lượng bit kiểm tra
%Increase: % tăng
Single/Double -Error Detection: Phá hiện lỗi đơn/ đôi.
Để thuận tiện, ta tạo ra một syndrome với các đặc điểm sau:


Nếu syndrome đều 0s, khơng có lỗi nào được phát hiện.



Nếu syndrome chứa một và chỉ một bit, thì đã xảy ra lỗi ở một
trong các bit kiểm tra. Nhưng sửa lỗi là không cần thiết.



Nếu syndrome chứa nhiều hơn một bit được đặt thành 1, thì giá trị
của syndrome cho biết vị trí của bit dữ liệu bị lỗi. Bit dữ liệu này
được đảo ngược để sửa.


Để đạt được các đặc điểm này, các bit dữ liệu và kiểm tra được sắp
xếp thành một khối n bit như sau. Đếm từ vị trí ít quan trọng nhất (ngoài
cùng bên phải), các bit kiểm tra Hamming được chèn tại các vị trí bằng
mũ của 2 [tức là, các vị trí 1,2,4, ..., 2 (n - k)]. Các bit cịn lại là bit dữ liệu.
Để tính tốn các bit kiểm tra, mỗi vị trí dữ liệu có giá trị 1 được biểu thị
bằng giá trị nhị phân bằng vị trí của nó; do đó, nếu bit thứ 9 là 1, giá trị
tương ứng là 1001. Tất cả các vị trí sau đó được XOR với nhau để tạo ra
các bit của mã Hamming.Tại đầu ra, tất cả các giá trị vị trí bit trong đó
có 1 được XOR. Trong trường hợp này, XOR cả bit dữ liệu và bit kiểm
tra. Vì các bit kiểm tra xảy ra tại các vị trí bit có cơng suất bằng 2, nên
chúng ta có thể XOR tất cả các vị trí bit dữ liệu có giá trị là 1, cộng với
mã Hamming được hình thành bởi các bit kiểm tra. Nếu kết quả của
XOR bằng 0, khơng có lỗi nào được phát hiện. Nếu kết quả là khác
khơng, thì kết quả là syndrome và giá trị của nó bằng với vị trí bit bị lỗi.
18


Ví dụ 8.7 Mã Hamming (8.4) được trình bày trong Bảng 8.2. Khối
dữ liệu 8 bit là 00111001. Bốn trong số các bit dữ liệu có giá trị 1 (được
tơ đậm) và các vị trí bit của chúng được XOR để tạo mã Hamming
0111, là bốn chữ số kiểm tra. Tồn bộ khối được truyền đi là
001101001111. Giả sử khơng có tại bit dữ liệu 3, trong vị trí bit 6, chấp
nhận lỗi và thay đổi từ 0101. Sau đó,Khối đã nhận là 001101001111.
Mã hamming nhận được vẫn là 0111. Thực hiện XOR mã Hamming và
tất cả các vị trí bit cho bit dữ liệu khác 0, kết quả là 0110. Kết quả khác
không phát hiện lỗi và chỉ ra rằng lỗi nằm ở vị trí bit 6.

(a)Khối đã truyền

(b)Kiểm tra tính tốn bit trước khi truyền


(c) Khối nhận được

19


(d) Kiểm tra tính tốn bit sau khi nhận

Mã vừa được mô tả bên trên được gọi là mã sửa lỗi đơn (SEC). Một
biến thể là mã sửa lỗi đơn, mã phát hiện lỗi kép (SEC-DED). Bảng 8.1
cho thấy, các mã này yêu cầu một bit bổ sung với mã SEC. Bit bổ sung
là một bit chẵn lẻ trên toàn bộ khối mã.
2.3. Mã vòng (Cyclic Codes)
Hầu hết các mã khối sửa lỗi đang được sử dụng đều được gọi là mã
tuần hoàn. Đối với các mã như vậy, nếu chuỗi n-bit c = (c0, c1, ... , cn-1)
là một từ mã hợp lệ, và (cn-1, c0, c1, …, cn-2) được hình thành bằng cách
dịch chuyển theo chu kỳ sang phải cũng là một từ mã hợp lệ. Lớp mã
này có thể mã hóa và giải mã dễ dàng bằng các thanh ghi dịch chuyển
phản hồi tuyến tính (LSFRs). Ví dụ về mã vòng bao gồm Bose Chaudhuri - Hocquenhem (BCH) và mã ReedSolomon.
Việc hoàn thành LFSR của bộ mã hóa sửa lỗi theo chu kỳ giống như
mã phát hiện lỗi CRC, được mơ tả trong Hình 8.4. Điểm khác biệt chính
là mã CRC lấy đầu vào có độ dài tùy ý và tạo mã kiểm tra CRC có độ
dài cố định, trong khi đó mã sửa lỗi theo chu kỳ lấy đầu vào có độ dài cố
định (k bit) và tạo mã kiểm tra cũng có độ dài cố định ( n - k bits).
Hình 8.7 cho thấy việc triển khai LFSR của bộ giải mã cho mã khối
tuần hồn. So sánh điều này với logic bộ mã hóa trong Hình 8.4. Lưu ý
rằng đối với bộ mã hóa, k bit dữ liệu được coi là đầu vào để tạo mã (n k) của các bit kiểm tra trong thanh ghi dịch. Đối với bộ giải mã, đầu vào
là luồng bit nhận được của n bit, bao gồm k bit dữ liệu, theo sau bởi (n k) bit kiểm tra. Nếu khơng có lỗi: sau k bước đầu tiên, thanh ghi dịch
chứa mẫu bit kiểm tra được truyền đi. Sau (n - k) bước cịn lại, nó gồm
một mã hội chứng.

Để giải mã mơt mã tuần hồn, quy trình sau được sử dụng:

20


1. Xử lý các bit nhận được để tính mã hội chứng theo cách chính xác
giống như bộ mã hóa xử lý các bit dữ liệu để tạo thành mã kiểm tra.
2. Nếu các bit của hội chứng đều bằng 0, khơng có lỗi được phát
hiện.
3. Nếu hội chứng khác 0,thực hiện quy trình bổ sung trên hội chứng
để sửa lỗi.
Để hiểu được tầm quan trọng của hội chứng, ta hãy kiểm tra mã khối sử dụng
đa thức. Như trong trường hợp của CRC, một mã tuần hoàn cụ thể có thể là 1 +
A1X + A2X 2 + ... + An-1Xn-k - 1 + Xn-k

Hình 8.7. Trình tạo khối hội chứng cho phép chia

biểu diễn bởi một ước số đa thức, được gọi là đa thức sinh (generator
polynomial. Đối với mã (n, k), đa thức sinh có dạng:
n k  1

P(X) = 1 +


i 1

AiXi + Xn-k

trong đó mỗi hệ số Ai là 0 hoặc 1, tương ứng với một vị trí bit trong ước số. Ví
dụ, với P = 11001, ta có P(X) = X4 + X3 + 1. Tương tự, tập hợp các bit dữ liệu

được biểu diễn bằng đa thức D(X) và mã kiểm tra bằng đa thức C(X). Mã
kiểm tra được xác định theo cách sau:

Tức là, khối dữ liệu D(X) được dịch sang trái bởi (n - k) bit và chia
cho P (X). Tạo ra Q(X) và C(X) có độ dài (n - k). Khối đã truyền được
hình thành bằng cách ghép D(X) với C(X):
(8.3)
Nếu khơng có lỗi khi nhận, T(X) sẽ chia hết cho P (X). Dễ dàng chứng minh
được:
21


(8.4)
Nếu một hoặc nhiều lỗi bit xảy ra, khi khối Z(X) nhận được sẽ có
dạng:
Z(X) = T(X) + E(X)
Trong đó E(X) là một đa thức n bit lỗi n có giá trị 1 ở mỗi vị trí bit lỗi trong Z
(X). Nếu chuyển Z (X) qua LFSR của Hình 8.7, ta đang thực hiện phép chia
Z(X ) / P(X), tạo ra hội chứng (n - k) bit S (X):
(8.5)
Trong đó B (X) là thương số và S(X) là phần dư. Do đó, S(X) là một hàm của Z
(X). Nhưng làm thế nào điều này giúp thực hiện sửa lỗi? Để thấy điều này, hãy
mở rộng Công thức (8.5):

(8.6)

Ta thấy E(X) / P(X) tạo ra phần dư giống Z(X) / P(X). Do đó, bất kể mẫu bit
ban đầu (giá trị truyền của T (X)), giá trị hội chứng S(X) cũng chỉ phụ thuộc
vào các bit lỗi. Nếu có thể khơi phục các bit lỗi, E (X), từ S (X), thì ta có thể
sửa các lỗi trong Z (X) bằng cách thêm:

Z(X) + E(X) = T(X) + E(X) + E(X) = T(X)
Do S (X) chỉ phụ thuộc vào E (X), chúng ta có thể dễ dàng xác định bậc của mã
khối tuần hoàn. Mẫu syndrome bao gồm n - k bit nên có thể gánh vác 2n- k giá
trị. Do đó, có thể sửa tổng cộng 2n- k - 1 lỗi khác nhau. Để có thể sửa tất cả các
lỗi bit đơn có thể có với mã (n, k), phải có n 
(2n-k - 1), và để sửa cả lỗi bit đơn và kép thì
22

(n 

n( n  1)
)
2
(2n-k - 1)


Cách để lấy E (X) từ S (X) tuỳ thuộc vào mã cụ thể liên quan.Đơn
giản nhất là lập bảng gồm tất cả các giá trị của E (X) tương ứng với
S(X).
Ví dụ 8.8. Một mã vịng C(7, 4) với đa thức sinh P(X) = X3 + X2 + 1
Ta có 7 = 23 - 1, nên Vì mã này có khả năng sửa tất cả các lỗi bit đơn. Bảng
8.3a liệt kê đầy đủ từ mã, lưu ý dmin là 3 xác nhận đây là một mã sửa lỗi bit đơn.
Với khối dữ liệu 1010, ta có D(X) = X3 + X và Xn-kD(X) =
X6 + X4. Thực hiện phép chia như phương trình (8.4):

Rồi sử dụng (8.3), có T(X) = X6 + X4 + 1 ~ từ mã là 1010001. Để sửa lỗi,
Ta cần xây dựng 1 bảng hội chứng như bảng 8.3b. Ví dụ, với mẫu lỗi 1000000,
E(X) = X6, sử dụng phương trình (8.6), tính được:

Vì thế, S = 110, các mục còn lại trong bảng 8.3b được tính tương tự. Giả sử

khối đã nhận là 1101101, hoặc Z(X) = X6 + X5 + X3 + X2 + 1. Dùng phương
trình (8.5).

Như vậy, S = 101. => E= 0001000
T = 1101101 | 0001000 = 1100101
23


Từ bảng 8.3a, khối dữ liệu nhận được là 1100.
Table 8.3. Trình bày 1 mã vịng C(7,4)
(b) Hội chứng cho lỗi bit đơn

(a) Từ mã hợp lệ

24


Bảng 8.4. Thông số mã BCH

2.4. Mã BCH (mã Bose, Chaudhuri và Hocquenghem)
Mã BCH là một trong những mã khối vòng mạnh nhất và được sử
dụng rộng rãi trong ứng dụng không dây. Với bất kỳ cặp số dương m và
t, có mã BCH nhị phân (n, k) với các thông số sau:
Độ dài khối : n = 2m - 1
Số lượng bit kiểm tra: n - k  mt
Khoảng tối thiểu: dmin  2t + 1
Mã này có thể sửa tất cả các tổ hợp của t hoặc ít lỗi. Đa thức sinh có
thể được xây dựng từ (X 2m-1 + 1). Mã BCH cung cấp sự linh động trong
việc lựa chọn các thông số (chiều dài khối, tỷ lệ mã). Trong bảng 8.4 độ
dài mã lên tới 28 - 1, bảng 8.5 liệt kê một số sinh đa thức BCH.

Bảng 8.5. Một số sinh đa thức BCH

Một số kỹ thuật đã được thiết kế để giải mã BCH địi hỏi ít bộ nhớ
hơn so với tra cứu bảng. Điển hình là đề xuất của Berlekamp [BERL80]
25


×