การเข้ารหัสข่าวสารแบบตรวจสอบและแก้ที่ผิดด้วย MCS51
การเข้ารหัสข่าวสารเป็นอีกวิธีการหนึ่งที่จะทำให้การส่งข้อมูลเข้าไปยังช่องสัญญาณได้อย่างมีประสิทธิภาพ เนื่องจากหากส่งข้อมูลไปในช่องสัญญาณโดยไม่มีการเข้ารหัส เมื่อเกิดสัญญาณลบกวนในช่องสัญญาณก็จะทำให้ข้อมูลที่รับได้เกิดความผิดพลาดขึ้น แต่ถ้าหากผู้ส่งมีการเข้ารหัสสัญญาณข้อมูลก่อนส่งแล้ว เมื่อเกิดสัญญาณลบกวนขึ้นในช่องสัญญาณ ภาครับก็ยังสามารถตรวจสอบและแก้ไขข้อมูลที่ส่งมาให้ถูกต้องเหมือนข้อมูลต้นฉบับได้ แต่ทั้งนี้วิธีการตรวจสอบแก้ไขข้อผิดพลาดจะได้มากหรือน้อยก็ขึ้นอยู่กับหลักการที่นำมาใช้
การทดลองครั้งนี้ผมจะนำไมโครคอนโทรเลอร์ตระกูล MCS51
มาทดลองการส่งและรับข้อมูลโดยให้วงจรสามารถแก้ไขที่ผิดพลาดได้ 1 จุด หมายความว่าการส่งข้อมูล 8 บิต หากมีข้อมูลบิตใดบิตหนึ่งผิดพลาดไป ภาครับจะยังสามารถแก้ไขที่ผิดได้ให้ข้อมูลกลับมาถูกต้อง โดยจะขอนำหลักการที่มีใช้อยู่ในปัจจุบัน จะเริ่มจากหลักการง่ายๆ ก่อนที่จะใช้หลักการที่ซับซ้อนต่อไป
เริ่มจาก สมมุติว่าเราต้องการจะส่งข้อมูล 10011010 เข้าไปในช่องสัญญาณที่เป็นคลื่นวิทยุ (ใช้วงจรสื่อสารไร้สายเพื่อการพัฒนา) และสมมุติว่าเกิดสัญญาณลบกวนขึ้นเนื่องจากมีฟ้าผ่าในช่วงสั่นๆทำให้ข้อมูลที่รับได้จากเดิม 10011010 กลายเป็น 11011010 แทน ทำให้ภาครับรับสัญญาณ ที่เป็น MSB ผิดพลาดไป หากไม่มีการแก้ไขก็จะทำให้ภาครับตีความหมายข่าวสารผิดไปค่อนข่างมาก จากตัวอย่างที่ยกมาให้ดูเราจะทำการเพิ่มเติมขั้นตอนการเข้ารหัสก่อนที่จะส่งข้อมูลออกไป และจะเพิ่มขั้นตอนวิธีการเมื่อภาครับรับสัญญาณได้ก่อนที่จะนำข้อมูลไปใช้
วิธีการ คือ เราจะทำการเพิ่มบิตของข้อมูลที่เป็นรหัสเพื่อใช้ในการตรวจสอบเข้าไป สามารถหาปริมาณบิตที่ต้องการเพิ่มได้จากการคำนวณดังนี้ สมมุติว่าต้องการให้แก้ที่ผิดได้ 1 ที่ ในข้อมูล 8 บิต จะได้ว่า 2 สัญลักษณ์ โดย (จำนวนบิตทั้งหมด + 1) x 2บิตข้อมูล ≤ 2จำนวนบิตทั้งหมดจะได้ว่า 2 ≤ 212 แสดงว่า เราจะต้องใช้จำนวนบิตทั้งหมดที่ต้องส่งเป็น 12 บิต เพื่อให้สามารถตรวจสอบและแก้ไขข้อมูลจำนวน 8 บิตได้ เมื่อได้จำนวนบิตทั้งหมดแล้วเราจะนำมาเพิ่มบิตข้อมูลเข้าไปครับ วิธีการเพิ่มดูได้จากตาราง
|
* |
1 |
* |
2 |
3 |
4 |
* |
5 |
6 |
7 |
8 |
ตำแหน่งข้อมูลแต่ละบิต |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
ตำแหน่งข้อมูล LSB – MSB |
* คือ ตำแหน่งที่ใส่บิตตรวจสอบ
จากนั้นนำข้อมูลที่จะส่งมาจัดลงตามตำแหน่งจะได้ดังนี้
จากข้อมูล 10011010
* |
* |
1 |
* |
0 |
0 |
1 |
* |
1 |
0 |
1 |
0 |
ตำแหน่งข้อมูลแต่ละบิต |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
ตำแหน่งข้อมูล LSB – MSB |
เมื่อนำข้อมูลมาใส่แล้วก็ต้องเพิ่มบิตตรวจสอบที่เหลือลงไปพิจารณาจากตำแหน่งของบิตที่เป็น LOGIC 1 ในที่นี้คือตำแหน่งที่ 3,7,9,11 จากนั้นค่าของแต่ละตำแหน่งมา XOR กัน
ตารางค่าประจำตำแหน่ง
หลัก |
ค่าข้อมูล |
1 |
1000 |
2 |
0100 |
3 |
1100 |
4 |
0010 |
5 |
1010 |
6 |
0110 |
7 |
1110 |
8 |
0001 |
9 |
1001 |
10 |
0101 |
11 |
1101 |
12 |
0011 |
13 |
1011 |
14 |
0111 |
15 |
1111 |
นำค่าของหลักที่เป็น LOGIC 1 มาตั้งแล้วทำการ XOR ได้ดังนี้
1100 |
3 |
1110 |
7 |
1001 |
9 |
1101 |
11 |
0110 |
ผลที่ได้ |
นำค่าที่ได้มาใส่ในช่องที่ว่างไว้ * โดยเรียงลำดับกันไปจะได้
0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | ตำแหน่งข้อมูลแต่ละบิต |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ตำแหน่งข้อมูล LSB – MSB |
ข้อมูล 001100101010 จะเป็นข้อมูลที่เราจะส่งไปในช่องสัญญาณ
เมื่อข้อมูลเดินทางมาถึงภาครับ จากข้อมูล 10011010 นำมาเข้ารหัสได้ข้อมูลเป็น 011100101010 เพิ่มจากเดิม 8 บิตเป็น 12 บิต เมื่อข้อมูล 011100101010 เดินทางมาถึงภาครับและช่องสัญญาณมีสัญญาณลบกวนทำให้ข้อมูลผิดพลาดไป 1 บิต กลายเป็นข้อมูล 111100101010บิตแรกมีการผิดพลาดไป หากไม่มีการแก้ไขจะทำให้ภาครับตีความหมายผิดไปจากเดิมมาก แต่หากภาครับมีการตรวจสอบแก้ไขแล้ว จะสามารถแก้ไขข้อมูลกลับมาได้โดยมีวิธีการดังนี้
วิธีการคือ นำข้อมูลที่ได้มาตรวจสอบดังนี้
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | แทนค่าตำแหน่งข้อมูลแต่ละบิต |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ตำแหน่งข้อมูล LSB – MSB |
นำค่าของตำแหน่ง LOGIC ทีเป็น 1 มา XOR กัน ได้ดังนี้ ตำแหน่งที่ 1,2,3,4,7,9,11
1000 |
1 |
0100 |
2 |
1100 |
3 |
0010 |
4 |
1110 |
7 |
1001 |
9 |
1101 |
11 |
1000 |
รวม |
ถ้าผลที่ได้ของการ XOR ที่ภาครับไม่เป็น 0000 แสดงว่ามีที่ผิด จากตัวอย่างได้ผลเป็น 1000 แสดงว่าหลักที่ 1 ของข้อมูลผิดพลาด วงจรก็จะทำการกลับบิตที่ผิดตำแหน่งที่ 1 กลายเป็น 011100101010 เหมือนข้อมูลที่ภาคส่งส่งมาและทำการแยกข้อมูลออกจากรหัส โดยการดึงตำแหน่งที่ต้องการออกมา คือ
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
แทนค่าตำแหน่งข้อมูลแต่ละบิต |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
ตำแหน่งข้อมูล LSB – MSB |
ได้ 10011010 ออกมาเหมือนเดิม จากตัวอย่างนี้ทดลองใส่ข้อมูลผิดพลาดเข้าไปที่ตำแหน่งใดก็ได้ วงจรก็จะยังสามารถระบุที่ผิดและทำการแก้ไขให้โดยการกลับบิตที่เป็นผลลัพธ์เท่านั้น
จากตัวอย่างที่ยกมาจะเห็นได้ว่าเมื่อเราเพิ่มบิตตรวจสอบเข้าไปกับข้อมูล เราก็จะสามารถระบุตำแหน่งที่ข้อมูลผิด และแก้ไขได้ เมื่อทราบวิธีการตรวจสอบและแก้ไขแล้วทีนี้ผมก็จะนำเสนอวงจรที่สร้างด้วย MCS51 ให้สามารถส่งข้อมูลแบบมีการเข้ารหัสข่าวสาร เพื่อให้สามารถแก้ไขที่ผิดได้ ส่งผลให้ข้อมูลที่เราทำการส่งออกไปไม่ว่าจะเป็นสัญญาณควบคุมระบบอะไรสักอย่างก็ตามที่ในช่องสัญญาณมีการรบกวนค่อนข่างสูง ข้อมูลที่ภาครับรับได้ก็จะยังสามารถรับได้อย่างถูกต้อง ถึงแม้ว่าวิธีการนี้จะสามารถแก้ไขได้เพียง 1 จุดเท่านั้น และต้องแรกกับปริมาณข้อมูลที่เพิ่มขึ้น 4 บิต ก็ตาม แต่ก็ยังถือว่าคุ่มค้ากับข้อมูลที่ถูกต้องที่ภาครับสามารถรับได้ครับ
บทความโดย กิติภูมิ