Điều khiển lỗi
Các hệ thống số tạo lỗi
Các ứng dụng yêu cầu mức độ tin cậy nhất định
Các ứng dụng dữ liệu yêu cầu truyền không lỗi
Các ứng dụng Voice & video có thể chấp nhận một số lỗi
Điều khiển lỗi sử dụng khi hệ thống truyền dẫn
không đáp ứng được yêu cầu của ứng dụng
Điều khiển lỗi đảm bảo một dòng dữ liệu được
truyền với một mức chính xác nhất định ngay cả khi
có lỗi
Hai giải pháp cơ bản:
Phát hiện lỗi và truyền lại (ARQ)
Sửa lỗi tiến (FEC)
1
Kiểm tra Chẵn/Lẻ đơn bit
Bổ sung thêm parity check chung vào k bit thông tin
Info Bits:
Check Bit:
bk+1= b1+ b2+ b3+ …+ bk modulo 2
Codeword:
(b1, b2, b3, …, bk,, bk+1)
Tất cả các từ mã có số bit 1 chẵn
Máy thu kiểm tra xem số bit 1 có chẵn không
b1, b2, b3, …, bk
Tất cả các mẫu lỗi chuyển số bit 1 thành lẻ không phát hiện
được
Tất cả các mẫu chẵn không phát hiện được
Parity bit sử dụng ở mã ASCII
2
Ví dụ về Parity Code đơn
Information (7 bits): (0, 1, 0, 1, 1, 0, 0)
Parity Bit: b8 = 0 + 1 +0 + 1 +1 + 0 = 1
Codeword (8 bits): (0, 1, 0, 1, 1, 0, 0, 1)
Nếu lỗi đơn xảy ra ở bit 3 : (0, 1, 1, 1, 1, 0, 0, 1)
Số bit 1 = 5, LE
Lỗi phát hiện được
Nếu lỗi ở bit 3 và 5: (0, 1, 1, 1, 0, 0, 0, 1)
Số bit 1 =4, CHẴN
Lỗi không phát hiện được
3
Bít kiểm tra & Phát hiện lỗi
Bit thông tin thu được
Bit thông tin
Tính toán lại
các bit kiểm tra
k bits
Kênh
Tính toán bit
kiểm tra
Các bit
kiểm
tra
phát đi
n – k bits
Bit kiểm tra
thu được
Compare
Thông tin
chấp nhận
được nếu các
bit kiểm tra
phù hợp
4
Mã kiểm tra chẵn/lẻ nào tốt?
Độ
dư thừa: mã kiểm tra chẵn lẻ đơn bổ
sung 1 bit dư thừa vào k bit thông tin:
overhead = 1/(k + 1)
Vùng phủ lỗi: tất cả các mẫu lỗi với số lỗi lẻ
có thể phát hiện được
Liệu có thể phát hiện được nhiều lỗi hơn nếu
chúng ta bổ sung thêm nhiều bit kiểm tra?
Trả lời: Có, với các mã phù hợp
5
Kiểm tra chẵn/lẻ 2 chiều
Cải tiến khả năng phát hiện lỗi so với parity 1 bit
Sử dụng nhiều bit chẵn lẻ hơn cải thiện vùng phủ
Sắp xếp thông tin theo cột
Bổ sung bit chẵn lẻ đơn cho mỗi cột
Bổ sung một cột “parity” cuối cùng
Sử dụng ở các hệ thống điều khiển lỗi thời kỳ đầu
1 0 0 1 0 0
0 1 0 0 0 1
Last column consists
1 0 0 1 0 0 of check bits for each
1 1 0 1 1 0 row
1 0 0 1 1 1
Bottom row consists of
check bit for each column
6
Khả năng phát hiện lỗi
1 0 0 1 0 0
1 0 0 1 0 0
0 0 0 0 0 1
0 0 0 0 0 1
1 0 0 1 0 0
One error
1 0 0 1 0 0
1 1 0 1 1 0
1 0 0 1 1 0
1 0 0 1 1 1
1 0 0 1 1 1
1 0 0 1 0 0
1 0 0 1 0 0
0 0 0 1 0 1
0 0 0 1 0 1
1 0 0 1 0 0 Three
errors
1 0 0 1 1 0
1 0 0 1 0 0
1 0 0 1 1 1
1 0 0 1 1 1
1 0 0 0 1 0
Two errors
Luôn phát
hiện được các
mẫu có 1, 2,
hoặc 3 lỗi;
Không phải
phát tất cả các
mẫu có số lỗi > 4
đều có thể phát
hiện được
Số bit kiểm tra
nhiều, không
hiệu quả
Four errors
(undetectable)
7
Mũi tên chỉ ra các bit kiểm tra không thỏa mãn
Các mã phát hiện lỗi khác
Nhiều ứng dụng yêu cầu tỉ lệ lỗi bit thấp
VD: các bộ codec yêu cầu BER <= 10-3 để giải mã
Cần các mã có thể phát hiện được nhiều mẫu lỗi hơn
Các mã kiểm tra parity đơn không phát hiện đủ các
lỗi
Mã kiểm tra sử dụng 2-D parity yêu cầu quá nhiều bít
kiểm tra
Thực tế các mã phát hiện lỗi sau đây được sử dụng:
CRC Polynomial Codes
Hamming
Internet Check Sums
8
Mã đa thức (CRC)
Là
mã được sử dụng phổ biến nhất trong phát
hiện và sửa lỗi
Thực hiện dễ dàng bằng shift-register
Sử dụng biểu diễn đa thức thay cho vector cho
từ mã
Thực hiện số học đa thức thay cho check sum
Còn gọi là mã cyclic redundancy check (CRC)
Mã đa thức cũng là cơ sở cho các phương pháp
sửa lỗi tính năng cao
9
Số học đa thức nhị phân
Phép cộng:
(x7 + x6 + 1) + (x6 + x5) = x7 + x6 + x6 + x5 + 1
= x7 +(1+1)x6 + x5 + 1
= x7 +x5 + 1 do 1+1=0 mod2
Phép nhân:
(x + 1) (x2 + x + 1) = x(x2 + x + 1) + 1(x2 + x + 1)
= x3 + x2 + x) + (x2 + x + 1)
= x3 + 1
10
Chia đa thức nhị phân
Chia thập phân
34
35 ) 1222
105
Số chia
17 2
140
32
Thương số dividend = quotient x divisor +remainder
Số bị chia
1222 = 34 x 35 + 32
Sô dư
Chia đa thức
divisor
x3 + x2 + x
= q(x) quotient
x3 + x + 1 ) x6 + x5
x6 +
x4 + x3
x5 + x4 + x3
x5 +
Note: Bậc của r(x) nhỏ hơn bậc
của đa thức chia
dividend
x3 + x2
x4 +
x4 +
x2
x2 + x
x
11
= r(x) remainder
Nguyên lý mã đa thức
Biểu diễn bằng đa thức: các dấu thông tin, codeword,
error vector với các hệ số nhị phân
K bit thông tin được biểu diễn bởi đa thức bậc k-1
(ik-1 , ik-2 ,…, i2 , i1 , i0) i(x)= ik-1xk-1 + ik-2xk-2 + … + i2x2 + i1x + i0
Mã hóa: sử dụng i(x) để tạo ra từ mã b(x) có chứa các
bit thông tin và các bit kiểm tra theo một qui luật nhất
định
Mã đa thức được xác định bởi đa thức sinh g(x) có dạng
g(x) = xn-k + gn-k-1xn-k-1 + … + g2x2 + g1x + 1
với gk là các số nhị phận, (n-k) là số bít kiểm tra
Kiểm tra: dựa trên từ mã thu được, kiểm tra lại qui luật
xem có thỏa mãn không phát hiện lỗi
12
Nguyên lý mã đa thức
Nguyên lý
k-bit message
Bên phát tạo ra chuỗi n bit FCS (Frame Check
Sequence) sao cho frame gởi đi (k+n bit) chia hết cho 1
số xác định trước
Bên thu chia frame nhận được cho cùng số đó. Nếu
phần dư bằng 0 thì có khả năng không có lỗi
Số học modulo 2
Exlusive-or
13
Các đa thức sinh chuẩn
CRC-8:
ATM
= x 8 + x2 + x + 1
CRC-16:
Bisync
= x16 + x15 + x2 + 1
= (x + 1)(x15 + x + 1)
CCITT-16:
HDLC, XMODEM, V.41
= x16 + x12 + x5 + 1
CCITT-32:
IEEE 802, DoD, V.42
= x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
14
Số chia P (G(x))
Dài hơn 1 bit so với FCS mong muốn
Được chọn tùy thuộc vào loại lỗi
mong muốn phát hiện
Yêu cầu tối thiểu: msb và lsb phải là 1
Xác định FCS
M(x): message dữ liệu cần truyền k bit
G(x): Đa thức sinh bậc n {có (n+1 ) bit}
T(x): frame được truyền (n+k) bit (gồm k bit thông tin và n bit FCS)
Xác định FCS:
Nhân M(x) với 2n (Dữ liệu dịch trái n bit) ta được M’(x)
Chia M’(x) cho đa thức sinh ta được số dư là FCS
Ví dụ 1
Dữ liệu cần truyền: 1001001 (k = 7 bits) → đa thức biễu diễn:
M(x) = X6 + X3 + 1
Cho số chia 1001: đa thức sinh P(x) =X3 + 1 (n = 3 bits)
Dữ liệu dịch trái n bits:
2n . M(x) = X9 + X6 + X3
Chia dư 1. FCS = 001
Dữ liệu được truyền: 1001001001
Ví dụ 2:
Generator polynomial: g(x)= x3 + x + 1
Information: (1,1,0,0) i(x) = x3 + x2
Encoding: x3i(x) = x6 + x5
x3 + x2 + x
x3 + x + 1 ) x6 + x5
x6 +
1110
1011 ) 1100000
1011
x 4 + x3
1110
1011
x5 + x4 + x3
x5 +
x 3 + x2
x4 +
x4 +
x2
x2 + x
x
Transmitted codeword:
b(x) = x6 + x5 + x
b = (1,1,0,0,0,1,0)
1010
1011
010
17
Khả năng phát hiện lỗi
Tr = T + E
T: frame được truyền
Tr: frame nhận được
E: error pattern
Error không bị phát hiện nếu và chỉ nếu Tr chia hết cho P
(i.e. iff E chia hết cho P)
Các lỗi được phát hiện
Tất cả các lỗi bit đơn
Tất cả các lỗi kép nếu P có ít nhất 3 toán hạng
Một số lẻ lỗi bất kỳ nếu P chứa 1 thừa số (X+1)
Bất kỳ lỗi chùm nào mà chiều dài của chùm nhỏ
hơn chiều dài FCS
Hầu hết các lỗi chùm lớn hơn
18
Cách sửa lỗi thông thường yêu cầu truyền lại khối dữ
liệu
Không thích hợp cho các ứng dụng trao đổi dữ liệu
không dây
Xác suất lỗi cao, truyền lại nhiều
Thời gian trễ truyền lớn hơn nhiều thời gian truyền dữ
liệu
Khối dữ liệu được truyền lại bị lỗi và nhiều khối dữ liệu
khác tiếp theo
Cần thiết sửa lỗi dựa vào các dữ liệu nhận
được
19
Phát
hiện các lỗi có số lỗi lẻ
Giả thiết tất cả đa thức từ mã có số bit 1 chẵn, thì
tất cả các lỗi có số lỗi lẻ đều phát hiện được
Tức là, b(x) tính tại x = 1 bằng không do b(x) có
số bit 1 chẵn
Có nghĩa là x + 1 phải là một hệ số của mọi b(x)
Chọn g(x) = (x + 1) p(x) trong đó p(x) là nguyên
thủy
20
21
Mã Hamming
Là loại mã sửa sai
Có thể sửa tất cả các mẫu lỗi đơn
Gọi m là số bít của chuỗi dữ liệu và n là số bít của mã Hamming, tổng số bít phát đi là m+n
Với n = 1 ta xác định được 1 trong 2 kết quả : chuỗi dữ liệu sai hoặc đúng nhưng không biết vị
trí lỗi.
Với n = 2, 1 trong 4 trường hợp xảy ra: 2 phép kiểm tra đều cho kết quả đúng, 2 phép kiểm tra
đều cho kết quả sai, phép kiểm tra thứ nhất sai, phép kiểm tra thứ hai đúng và ngược lại. 4
trường hợp này cho phép kết luận được 1 bít sai ở 1 trong 3 vị trí.
Redundancy
22
mã Hamming
- Với n=3, có 8 khả năng xảy ra và ta có thể kết
luận được 1 bít sai ở 1 trong 7 vị trí.
- Với số n bất kỳ, có 2n khả năng xảy ra và ta có
thể kết luận được 1 bít sai ở 1 trong 2n -1 vị trí.
Vậy để có thể phát hiện 1 lỗi tại 1 vị trí cụ thể thì
số n nhỏ nhất được chọn phải thỏa:
2n - 1 m + n hay 2n m + n + 1
Các bít của mã Hamming chèn vào vị trí 2n
và dùng cho kiểm tra chẵn lẻ. Các bít khác là bít
thông tin (dữ liệu).
23
Nguyên tắc lập mã Hamming
Thuật toán cho việc sử dụng bit chẵn lẻ trong 'mã
Hamming' thông thường cũng tương đối đơn giản:
Tất cả các bit ở vị trí là các số mũ của 2 (powers of two)
được dùng làm bit chẵn lẻ. (các vị trí như 1, 2, 4, 8, 16, 32,
64 v.v. hay nói cách khác 20, 21, 22, 23, 24, 25, 26 v.v.)
Tất cả các vị trí bit khác được dùng cho dữ liệu sẽ được
mã hóa. (các vị trí 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17,
etc.)
Mỗi bit chẵn lẻ tính giá trị chẵn lẻ cho một số bit trong từ
mã (code word). Vị trí của bit chẵn lẻ quyết định chuỗi các
bit mà nó luân phiên kiểm tra và bỏ qua (skips):
Bỏ qua (n-1) bit, kiểm tra n bit, bỏ qua n bit, kiểm tra n
bit.v.v…
24
Nguyên tắc lập mã Hamming
Vị trí 1 (n=1): bỏ qua 0 bit(n-1), kiểm 1 bit(n), bỏ qua 1 bit(n), kiểm 1
bit(n), bỏ qua 1 bit(n), v.v.
Vị trí 2(n=2): bỏ qua 1 bit(n-1), kiểm 2 bit(n), bỏ qua 2 bit(n), kiểm 2
bit(n), bỏ qua 2 bit(n), v.v.
Vị trí 4(n=4): bỏ qua 3 bit(n-1), kiểm 4 bit(n), bỏ qua 4 bit(n), kiểm 4
bit(n), bỏ qua 4 bit(n), v.v.
Vị trí 8(n=8): bỏ qua 7 bit(n-1), kiểm 8 bit(n), bỏ qua 8 bit(n), kiểm 8
bit(n), bỏ qua 8 bit(n), v.v.
Vị trí 16(n=16): bỏ qua 15 bit(n-1), kiểm 16 bit(n), bỏ qua 16 bit(n),
kiểm 16 bit(n), bỏ qua 16 bit(n), v.v.
Vị trí 32(n=32): bỏ qua 31 bit(n-1), kiểm 32 bit(n), bỏ qua 32 bit(n),
kiểm 32 bit(n), bỏ qua 32 bit(n), v.v.
và tiếp tục như trên.
Nói cách khác, bit chẵn lẻ tại vị trí 2k kiểm các bit ở các bit ở
vị trí t có giá trị logic của phép toán AND giữa k và t là khác 0
25