Bit error และแนวทาง Error control
Bit error เกิดจาก: สัญญาณรบกวน · thermal noise · ฮาร์ดแวร์เสีย · ปรากฏการณ์ธรรมชาติ (ฟ้าผ่า) · หรือแม้แต่ EMP
ARQ Automatic Repeat reQuest
ตรวจพบ error แล้วขอส่งซ้ำ
FEC Forward Error Correction
เพิ่ม redundancy ให้ผู้รับแก้ไขเองได้
Redundancy = การเพิ่มบิตพิเศษเพื่อช่วยผู้รับตรวจสอบความถูกต้องของข้อมูล โดยบิตพิเศษเหล่านี้จะถูกทิ้งหลังตรวจสอบเสร็จ
Block coding
ข้อมูล k บิต + redundancy r บิต = codeword n บิต
n = k + r
ผลลัพธ์การตรวจสอบของผู้รับเรียกว่า "syndrome" — ถ้า syndrome = 0 แปลว่าไม่มี error
Parity check และ Two-dimensional parity
- Parity check: เพิ่ม parity bit ให้จำนวนบิต 1 รวมเป็นเลขคู่ (even parity) หรือคี่ (odd parity)
- ตรวจจับ single-bit error ได้ทุกกรณี แต่ตรวจจับ burst error ไม่ได้ถ้าจำนวนบิตที่ผิดเป็นเลขคู่
Two-dimensional parity check:
ตรวจสอบทั้งแถวและคอลัมน์ ทำให้หาตำแหน่งบิตที่ผิดได้ (ถ้ามี error เดียว) และแก้ไขได้ทันที ไม่ใช่แค่ตรวจจับ
Checksum
- แบ่งข้อความเป็นหน่วย m-bit
- บวกกันด้วย one's-complement arithmetic สร้างค่า checksum ส่งไปพร้อมข้อมูล
- ผู้รับบวกทุกส่วนรวม checksum — ถ้าได้ all-1s (complement = all-0s) แปลว่าไม่มี error
ใช้ใน: IPv4 header checksum, TCP/UDP checksum
CRC (Cyclic Redundancy Check)
- ทรงพลังที่สุดในบรรดาวิธี redundancy checking
- ใช้การหารเลขฐานสอง (modulo-2 division, เหมือน XOR) ด้วย divisor ที่ตกลงกันไว้ล่วงหน้า
- CRC (remainder) ต้องมีขนาดน้อยกว่า divisor อยู่ 1 บิตเสมอ
- ต่อท้าย dataword แล้วหารด้วย divisor ต้องลงตัวพอดี
- ใช้กันแพร่หลายในเทคโนโลยีลิงก์เพราะตรวจจับ burst error ได้ดี
จำนวนบิต CRC = จำนวนบิต divisor − 1
Hamming code
- แก้ไข single-bit error ได้ โดยระบุตำแหน่งบิตที่ผิด
- วาง redundant bit ไว้ที่ตำแหน่ง 2k (1, 2, 4, 8, ...) ของ codeword
- แต่ละ redundant bit ตรวจสอบ parity ของกลุ่มบิตที่กำหนดไว้
ตำแหน่งบิตผิด = (r8 r4 r2 r1)₂ → แปลงเป็นเลขฐานสิบ
Interleaving
แก้ปัญหา burst error ที่ทำให้ codeword เดิมเสียทั้งก้อน โดยสลับ (shuffle) บิตจากหลาย codeword ทำให้ burst error กลายเป็น single-bit error กระจายในแต่ละ codeword ซึ่งแก้ด้วย Hamming code ได้
เทคนิค: ให้ burst error โดนแค่ 1 บิตต่อ 1 หน่วย