Get Adobe Flash player

การเข้ารหัสข่าวสารแบบตรวจสอบและแก้ที่ผิดด้วย MCU

การเข้ารหัสข่าวสารแบบตรวจสอบและแก้ที่ผิดด้วย ไมโครคอนโทรลเลอร์

       การเข้ารหัสข่าวสารเป็นอีกวิธีการหนึ่งที่จะทำให้การส่งข้อมูลเข้าไปยังช่องสัญญาณได้อย่างมีประสิทธิภาพ เนื่องจากหากส่งข้อมูลไปในช่องสัญญาณโดยไม่มีการเข้ารหัส เมื่อเกิดสัญญาณลบกวนในช่องสัญญาณก็จะทำให้ข้อมูลที่รับได้เกิดความผิดพลาดขึ้น แต่ถ้าหากผู้ส่งมีการเข้ารหัสสัญญาณข้อมูลก่อนส่งแล้ว เมื่อเกิดสัญญาณลบกวนขึ้นในช่องสัญญาณ ภาครับก็ยังสามารถตรวจสอบและแก้ไขข้อมูลที่ส่งมาให้ถูกต้องเหมือนข้อมูลต้นฉบับได้ แต่ทั้งนี้วิธีการตรวจสอบแก้ไขข้อผิดพลาดจะได้มากหรือน้อยก็ขึ้นอยู่กับหลักการที่นำมาใช้

       การทดลองครั้งนี้ผมจะนำไมโครคอนโทรเลอร์ มาทดลองการส่งและรับข้อมูลโดยให้วงจรสามารถแก้ไขที่ผิดพลาดได้ 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 ออกมาเหมือนเดิม จากตัวอย่างนี้ทดลองใส่ข้อมูลผิดพลาดเข้าไปที่ตำแหน่งใดก็ได้ วงจรก็จะยังสามารถระบุที่ผิดและทำการแก้ไขให้โดยการกลับบิตที่เป็นผลลัพธ์เท่านั้น 

          จากตัวอย่าง ที่ยกมาจะเห็นได้ว่าเมื่อเราเพิ่มบิตตรวจสอบเข้าไปกับข้อมูล เราก็จะสามารถระบุตำแหน่งที่ข้อมูลผิด และแก้ไขได้ เมื่อทราบวิธีการตรวจสอบและแก้ไขแล้วทีนี้ผมก็จะนำเสนอวงจรที่สร้างด้วย micro controller ให้สามารถส่งข้อมูลแบบมีการเข้ารหัสข่าวสาร เพื่อให้สามารถแก้ไขที่ผิดได้ ส่งผลให้ข้อมูลที่เราทำการส่งออกไปไม่ว่าจะเป็นสัญญาณควบคุมระบบอะไรสักอย่างก็ตามที่ในช่องสัญญาณมีการรบกวนค่อนข่างสูง ข้อมูลที่ภาครับรับได้ก็จะยังสามารถรับได้อย่างถูกต้อง ถึงแม้ว่าวิธีการนี้จะสามารถแก้ไขได้เพียง 1 จุดเท่านั้น และต้องแรกกับปริมาณข้อมูลที่เพิ่มขึ้น 4 บิต ก็ตาม แต่ก็ยังถือว่าคุ่มค้ากับข้อมูลที่ถูกต้องที่ภาครับสามารถรับได้ครับ

บทความโดย กิติภูมิ