Các kĩ thuật phát hiện lỗi và sửa lỗi trong việc truyền tin.Cho anh em nào Thông tin là một khái niệm trừu tượng (khó có định nghĩa chính xác) thể hiện sự cảm nhận và hiểu biết của con người về thế giới xung quanh.Thông tin có thể được biến đổi,lưu trữ,truyền từ nơi này sang nơi khác.Người thu thập thông tin và truyền cho người khác gọi là nguồn.Người nhận thông tin là đích. subsubsection{Tin} Là dạng vật chất cụ thể biểu diễn,thể hiện thông tin.Có hai dạng là: tin rời rạc và tin liên tục.Tin liên tục thường là các thông tin nguyên thủy thu được từ thế giới xung quanh.Tin rời rạc thường là các thông tin thu được từ các thông tin nguyên thủy sau khi đã qua xử lí. subsubsection{Tín hiệu} Tín hiệu là phương tiện để truyền thông tin.Tín hiệu có thể tồn tại độc lập với thông tin.Trường hợp không có thông tin,tín hiệu chỉ là tín hiệu mang.Trường hợp có thông tin,tín hiệu trở thành biểu diễn vật lý của thông tin và được gọi là dữ liệu.
Trang 1CÁC KỸ THUẬT PHÁT HIỆN LỖI VÀ SỬA LỖI
Trang 2I CÁC KỸ THUẬT PHÁT HIỆN LỖI
1 Khái niệm lỗi trong truyền tin
Trong các hệ thống truyền tín hiệu số, một lỗi sảy ra khi một bit bị thay đổi giữa bên gửi và bên nhận Đó là bên gửi gửi đ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ó hai 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 Một lỗi đơn là một trạng thái lỗi biệt lập nó thay đổi một 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à một chuỗi B bit kề nhau trong đó bit đầu tiên, bit cuối cùng và một số bit ở giữa hai bit này là nhận được có lỗi Một cách chính xác, IEEE Std 100 định
Trang 3nghĩa một lỗi xuất hiện đột ngột như là một nhóm các bit trong đó hai bit lỗi liên tiếp luôn bị ngăn cách bởi một số x cho trước các bít chính xác Bít lỗi cuối cùng trong một lỗi xuất hiện đột ngột và bit lỗi đầu tiên trong xuất hiện đột ngột 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 một bit
Lỗi 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
Trang 4tá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
2 Pháp 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 một frame nhận được không có lỗi
- P2: Khả năng với một giải thuật phát hiện lỗi được sử dụng, một frame nhận được còn một hoặc nhiều lỗi không được phát hiện
Trang 5- P3: Khả năng với một giải thuật phát hiện lỗi được sử dụng, một frame nhận được với một 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ó một phương tiện nào được sử dụng để phát hiện lỗi thì P3 bằng 0 Giả sử rằng số lượng bit trong một frame là F khi đó:
P 1 =(1-P b ) F
P 2 =1-P 1
Như vậy khả năng một 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 một frame nhận được không có bit lỗi giảm khi tăng độ dài của frame
Trang 6Như vậy P3 là một khả năng một 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
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 một frame gồm các bit, một số bit để tạo thành một mã phát hiện lỗi được thêm vào bởi bên gửi (transmitter) Mã phát hiện lỗi được tính toán như là một hàm của các bit sẽ được được truyền Thông thường, với một khối 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)<k, và
Trang 7được gắn vào khối dữ liệu này và tạo thành một frame gồm n bit và được truyền đi Mã phát hiện lỗi còn được gọi là các bit kiểm tra
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 một tính toá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 toá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 hai đoạn mã này
3 Một số kỹ thuật phát hiện lỗi
a, Phương pháp phát hiện lỗi bằng kiểm tra chẵn lẻ (parity check – Vertical Redundancy Check – VRC)
Trang 8Phương pháp này gắn thêm một bit vào cuối khối dữ liệu Đơn giản nhất là truyền ký tự, đó là: một ký tự được xem như là một khối gồm 7 bit dữ liệu, một 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ó một số chẵn (even) hay có một 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 một hay một 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 hai hay một số lượng chẵn các bit bị thay đổi bởi lỗi khi truyền thì bên nhận
sẽ không được phát hiện được lỗi đã sảy ra
Trang 9Thông thường bit kiểm tra chẵn được dùng trong truyền đồng bộ
và bit kiểm tra lẻ được dùng trong truyền không đồng bộ Việc sử dụng bit kiểm tra 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 một hay nhiều bit, đặc biệt với tốc độ truyền
Trang 10Thay vì kiểm tra riêng lẻ từng ký tự như trong VRC, dữ liệu được gửi đi như là một khối gồm nhiều ký tự, ta gắn thêm vào một bit ở cuối mỗi hàng và một bit ở cuối mỗi cột sao cho thỏa mãn điều kiện tổng số các bit 1 là chẵn hay lẻ Thường một khối dữ liệu bao gồm 7 hoặc 8 ký tự phụ thuộc vào cách mã hóa ký tự là 7 hay 8 bit Nếu mỗi
ký tự được mã hóa bằng một mã dài 7 bit khi đó một khối dữ liệu sẽ gồm 7 ký tự và giả sử rằng số các bit 1 là lẻ Ví du:
Trang 11Bit/Value C O N T R O L Odd Parity
Trang 12Khi đó nếu hai hay một số chẵn bit của một ký tự bị thay đổi thì giá trị của bit chẵn lẻ trên cột kiểm tra không thay đổi nhưng giá tri của bit chẵn lẻ trên hàng kiểm tra sẽ thay đổi Kỹ thuật này cũng không phát hiện được hết tất cả các lỗi, chẳng hạn như hai hay một số chẵn các bit ở cùng vị trí của hai hay một số chẵn các ký tự bị thay đổi thì vẫn không phát hiện được lỗi
c, Phương pháp phát hiện lỗi bằng kiểm tra dư thừa vòng - Cyclic Redundancy Check (CRC)
Đây là một 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 động của phương pháp này như sau: Cho một khối dữ liệu hay một message gồm k bit, bên gửi sinh ra một chuỗi gồm n-k bit được gọi là chuỗi kiểm tra frame (Frame Check
Trang 13Sequence – FCS), như vậy sẽ tạo ra một frame gồm n bit và sau đó được gửi đi
Thông thường FCS được tính toán bằng cách chia n bit (bao gồm
k bit dữ liệu và n-k bit 0) cho một số P cho trước Bên nhận sau khi nhận được frame đó cũng đem chia frame nhận được bởi số P này, 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ư modulo 2, đa thức và lô gic số học
+ Phương pháp Modulo 2: Sử dụng phép cộng không nhớ trong
hệ đếm cơ số 2 hoặc phép trừ không nhỡ trong hệ đếm cơ số 2 (XOR), Ví du:
Trang 14Phép cộng trừ không nhớ trong hệ đếm cơ số 2:
Trang 15+ T= một frame gồm n bit để truyền
+ D= một khối dữ liệu hay một 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à một mẫu gồm n-k+1 bit là số chia được xác định trước
Ta mong muốn rằng T/P không có dư
Thuật toán được thực hiện như sau:
+ Ban đầu ta gắn 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 n-k bit của số dư vào cuối của T để tạo thành một khối dữ liệu và truyền đi
Trang 16+ Bên nhận sau khi nhận được khối dữ liệu 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ụ: Message D=1010001101(10 bits)
Mẫu P=110101(6bits)
FSC F=Được tính gồm 5 bits
Do vậy: n=15, k=10, n-k=5
Từ k bits ban đầu ta có được 15 bits: 101000110100000
Thực hiện phép chia 15 bits này cho mẫu P (110101)
Trang 181110 Phần dư là 01110, do đó ta có khối dữ liệu 15 bit:
101000110101110 và được truyền đi Bên nhận sau khi nhận được chuỗi bit thực hiện phép chia chuỗi bít này cho mẫu P nếu không có
dư thì khẳng định không có lỗi, nếu có dư thì cho rằng đã có lỗi do đó
có thể vứt bỏ khối dữ liệu vừa nhận được và yêu cầu gửi lại
Mẫu P được chọn sao cho dài hơn FSC 1 bit và mẫu P đượ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 nhất
và bit thấp nhất trong mẫu P phải được chọn bằng 1
+ Đa thức (Polynomials)
Trang 19Mộ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ị D, P, T như là các đa thức của một Nn số X nào đó với hệ số
2 Các hệ số tương ứng với các bit trong các chuỗi nhị phân, chẳng hạn với D=110011 ta có D(x)=X5+X4+X+1 và P=11001 ta có P(X)=X4+X3+1 Các công việc tính toán tương tự như trong modulo
2 Lấy lại ví dụ trên ta có:
Trang 21X + X + X +X
X3+ X2+X
Ta có đa thức dư bằng X3+X2+X tương đương với 01110
Trang 22CRC - 12 được sử dụng để truyền các ký tự 6 bit và sinh ra một FCS
có độ dài 12 bit
CRC -16 và CRC - CCITT thường được sử dụng để truyền các ký tự
8 bit tại Mỹ và Châu Âu và sinh ra một CRC có độ dài 16 bit
CRC - 32 được lựa chọn trong truyền điểm – điểm đồng bộ và được
sử dụng trong các chuNn của LAN (802)
Trang 23II CÁC KỸ THUẬT SỬA LỖI
1 Khái niệm về sửa lỗi trong truyền thông
Sửa lỗi là một kỹ thuật có ích được sử dụng trong các giao thức điều khiển liên kết dữ liệu và giao thức truyền tải Tuy nhiên việc sửa lỗi sử dụng mã phát hiện lỗi đòi hỏi phải truyền lại khối dữ liệu này Điều này là không thích đáng cho các ứng dụng không dây vì:
- Tỷ lệ bit lỗi trong các truyền không dây là tương đối cao, điều này đòi hỏi phải truyền lại nhiều khối dữ liệu
- Trong một vài trường hợp, đặc biệt là truyền vệ tinh độ trễ trong khi truyền là lớn hơn so với thời gian truyền một frame, làm cho hệ thống kém hiệu quả
Trang 24Một cách tiếp cận phổ biến để truyền lại là: truyền frame bị lỗi và các frame sau frame lỗi này Với một liên kết dữ liệu dài một lỗi trong một frame sẽ bắt buộc phải truyền lại nhiều frame do đó nếu phải truyền lại nhiều thì sẽ làm cho hệ thống hoạt động không hiệu quả
Do đó nên cung cấp cho bên nhận một cơ chế sửa lỗi để sửa các lỗi sinh ra trong quá trình truyền dữ liệu Cơ chế này có thể được mô
tả như sau: Với mỗi một khối dữ liệu gồm k bit bên gửi sẽ sinh ra một khối gồm n bit (n >k) được gọi là một từ mã (codeword) bằng cách sử dụng mã sửa lỗi tiến (forward error correction – FEC), khối này sau
đó được truyền đi
Trang 25Trong quá trình truyền tin, một vài bit lỗi có thể được đưa vào khối này Tại bên nhận, các tín hiệu đến được giải điều chế để sinh ra một chuỗi bit tương tự như chuỗi ban đầu nhưng có thể có lỗi Khối này sau đó được chuyển đến bộ phận giải mã sửa lỗi tiến với một trong bốn khả năng sau:
i, Nếu không có bit lỗi nào thì dữ liệu vào bộ phận giải mã sửa lỗi tiến sẽ tương tự như mã lệnh nguồn và bộ phận giải mã sẽ sinh ra khỗi dữ liệu ban đầu
ii, Với một vài loại lỗi, bộ phận giải mã có khả năng phát hiện và sửa những lỗi này
Trang 26iii, Với một vài loại lỗi, bộ phận giải mã có thể phát hiện nhưng không sửa được các lỗi này, do đó nó chỉ thông báo là có các lỗi không sửa được
iv, Với một vài loại lỗi ít khi sảy ra, bộ phận giải mã không phát hiện được lỗi do đó nó sẽ sinh ra k bit dữ liệu từ n bit và k bit này sẽ khác với k bit ban đầu
Để cho bộ phận giải mã có thể phát hiện và sửa lỗi, ta cần phải truyền dư bằng cách thêm vào các bit dữ liệu một số bit dư để bộ phận giải mã có thể suy ra khối dữ liệu ban đầu, các bit dư này được gọi là khối mã phát hiện lỗi Một vài giải thuật FEC biến đổi k bit thành n bit sao cho k bit ban đầu không suất hiện trong n bit
Trang 27Nguyên tắc cơ bản của mã phát hiện lỗi là dựa trên khoảng cách Hamming (Hamming Distance) như sau: Khoảng cách Hamming giữa 2 chuỗi n bit v1 và v2 là số lượng của các bit khác nhau trong v1
Trang 28Giả sử bên nhận nhận được 00100, đây là mã không hợp lệ nên bên nhận phát hiện ra lỗi, tuy nhiên ta không biết khối dữ liệu nào đã được gửi đi vì có thể 1,2, 3, 4 thậm chí cả 5 bit đều bị lỗi, song ta cũng có thể nhận thấy được là d(00000,00100) = 1, và d(00111,00100) = 2 … do đó ta có thể suy luận rằng khả năng các bits đã được gửi là 00000 và do đó sẽ sinh ra được khối dữ liệu ban đầu là 00
Một cách tổng quát ta có thể quy định rằng nếu một mã nhận được
bị sai thì mã đúng sẽ là mã có khoảng cách ngắn nhất so với nó và chỉ
có duy nhất một mã đúng có khoảng cách ngắn nhất so với nó
Với một khối mã (k,n) có 2k mã đúng trong tổng số 2n mã Tỷ lệ (n-k)/k được gọi tỷ lệ dư và k/n được gọi là tỷ lệ mã hóa
Trang 29Cho một mã bao gồm các mã lệnh w1, w2, …., ws (s=2 ) khoảng cách ngắn nhất giữa các từ mã được định nghĩa
Dmin= min[(wi,wj)] (i<>j)
Khi đó với một số nguyên dương cho trước t nếu một mã thỏa mãn dmin >= 2t+1 khi đó có thể sửa được tất cả các lỗi trong phạm vi
từ 0 đến t
Nếu dmin >=2t thì các lỗi <t-1 có thể được sửa và các lỗi gồm t bit
có thể được phát hiện nhưng về cơ bản là không được sửa, và ngược lại
2 Sửa lỗi sử dụng mã soắn
a, Mã hoá
Trang 30Để sinh ra mã cần truyền có độ dài n bit từ k bit dữ liệu ban đầu ta có thể sử dụng mã soắn (Colvolution code) như sau:
- Sinh ra các bit dư liên tục
- Việc kiểm tra lỗi và sửa lỗi được thực hiện liên tục
- Bộ mã bao gồm 3 thành phần (n,k,K):
+ Đầu vào xử lý k bit dữ liệu
+ Đầu ra sinh ra n bit cho mỗi một k bit dữ liệu
+ K là hệ số ràng buộc
- n bit đầu ra của (n,k,K) mã phụ thuộc vào:
+ k bit dữ liệu đầu vào hiện thời
+ Các khối K-1 trước của k bit đầu vào
Các trạng thái gồm: a, b, c, d
Trang 31- Nếu trạng thái là a và bit dữ liệu là 0 thì sinh ra 00 và quay trở lại a
- Nếu trạng thái là a và bit dữ liệu là 1 thì sinh ra 11 và chuyển sang trạng thái b
- Nếu trạng thái là b và bit dữ liệu là 0 thì sinh ra 10 và chuyển sang trạng thái c
- Nếu trạng thái là b và bit dữ liệu là 1 thì sinh ra 01 và chuyển sang trạng thái d
- Nếu trạng thái là c và bit dữ liệu là 0 thì sinh ra 11 và chuyển sang trạng thái a
- Nếu trạng thái là c và bit dữ liệu là 1 thì sinh ra 00 và chuyển sang trạng thái b
Trang 32- Nếu trạng thái là d và bit dữ liệu là 0 thì sinh ra 01 và chuyển sang trạng thái c
- Nếu trạng thái là d và bit dữ liệu là 1 thì sinh ra 10 và chuyển sang trạng thái d
Trang 34Ví dụ: Mã hoá khối dữ liệu 1011000 sử dụng bộ mã hoá (2,1,3) ở trên
ta thu được:
11100001011100
b, Giải mã Convolution code:
- Sử dụng sơ đồ mắt lưới (Trellis diagram)
- Sử dụng thuật toán Viterbi (một kiểu của dạng code soắn) để lựa chọn một đường đi xuyên qua các mắt lưới, đường đi này có sự chênh lệch ít nhất so với chuỗi các giá trị nhận được Khi một đường đi hợp
lệ đã được chọn bộ giải mã có thể khôi phục dữ liệu ban đầu từ dữ liệu nhận được
Trang 36Giải thuật Viterbi sử dụng sự chênh lệch = Khoảng cách Hamming:
- Đường đi hiệu quả = đường đi hợp lệ xuyên qua lưới có khoảng cách Hamming so với các bit nhận được cho đến thời điểm i là ngắn nhất
- Khoảng cách của đường đi = khoảng cách của một trạng thái cuối + khoảng cách của cạnh cuối
- Mỗi một trạng thái tại thời điểm i được gán nhãn bằng khoảng cách của đường đi hiệu quả của nó so với các bit nhận được
- Xác định trước kích thước của sổ là b
Giải mã Viterbi:
- Giải thuật thực hiện trong b+1 bước: