แฮมมิง(7,4)
| รหัสแฮมมิง(7,4) | |
|---|---|
| ตั้งชื่อตาม | ริชาร์ด ดับเบิลยู. แฮมมิง |
| การจำแนกประเภท | |
| พิมพ์ | รหัสบล็อกเชิงเส้น |
| ความยาวบล็อก | 7 |
| ความยาวของข้อความ | 4 |
| ประเมิน | 4/7 ~ 0.571 |
| ระยะทาง | 3 |
| ขนาดตัวอักษร | 2 |
| สัญกรณ์ | [7,4,3] -รหัส |
| คุณสมบัติ | |
| รหัสที่สมบูรณ์แบบ | |

ในทฤษฎีการเข้ารหัส Hamming (7,4)เป็นรหัสแก้ไขข้อผิดพลาดเชิงเส้นที่เข้ารหัสข้อมูล สี่ บิต เป็นเจ็ดบิตโดยการเพิ่ม บิตพาริตี สามบิต เป็นสมาชิกของตระกูล รหัส Hamming ที่ใหญ่กว่า แต่คำว่ารหัส Hammingมักหมายถึงรหัสเฉพาะนี้ที่Richard W. Hammingนำเสนอในปี 1950 ในขณะนั้น Hamming ทำงานที่Bell Telephone Laboratories และรู้สึกไม่พอใจกับเครื่องอ่าน บัตรเจาะรูที่มีข้อผิดพลาดได้ง่ายซึ่งเป็นเหตุผลที่เขาเริ่มทำงานเกี่ยวกับรหัสแก้ไขข้อผิดพลาด[ 1 ]
รหัสแฮมมิงจะเพิ่มบิตตรวจสอบเพิ่มเติมสามบิตให้กับทุกๆ สี่บิตข้อมูลของข้อความอัลกอริทึม ของแฮมมิง (7,4) สามารถแก้ไขข้อผิดพลาดบิตเดียวใดๆ หรือตรวจจับข้อผิดพลาดบิตเดียวและสองบิตทั้งหมดได้ กล่าวอีกนัยหนึ่งระยะทางแฮมมิง ขั้นต่ำ ระหว่างคำรหัสที่ถูกต้องสองคำใดๆ คือ 3 และคำที่ได้รับสามารถถอดรหัสได้อย่างถูกต้องหากมีระยะห่างไม่เกินหนึ่งจากคำรหัสที่ผู้ส่งส่งมา ซึ่งหมายความว่าสำหรับ สถานการณ์ สื่อการส่งที่ ไม่มี ข้อผิดพลาดแบบระเบิดรหัสของแฮมมิง (7,4) จะมีประสิทธิภาพ (เนื่องจากสื่อจะต้องมีสัญญาณรบกวนอย่างมากจึงจะทำให้สองในเจ็ดบิตถูกพลิก)
ในข้อมูลควอนตัม Hamming (7,4) ถูกใช้เป็นฐานสำหรับรหัส Steane ซึ่งเป็น รหัส CSSประเภทหนึ่งที่ใช้สำหรับการแก้ไขข้อผิดพลาดควอนตัม
เป้าหมาย
เป้าหมายของรหัสแฮมมิงคือการสร้างชุดบิตพาริตีที่ซ้อนทับกัน เพื่อให้สามารถตรวจจับและแก้ไขข้อผิดพลาดเพียงบิตเดียวในบิตข้อมูลหรือบิตพาริตีได้ แม้ว่าจะสามารถสร้างการซ้อนทับได้หลายชุด แต่โดยทั่วไปแล้ววิธีการนี้ได้ถูกนำเสนอไว้ในรหัสแฮมมิงแล้ว
นิดหน่อย # 1 2 3 4 5 6 7 บิตที่ส่ง ใช่ เลขที่ ใช่ เลขที่ ใช่ เลขที่ ใช่ เลขที่ ใช่ ใช่ เลขที่ เลขที่ ใช่ ใช่ เลขที่ เลขที่ เลขที่ ใช่ ใช่ ใช่ ใช่
ตารางนี้อธิบายว่าบิตพาริตีใดครอบคลุมบิตที่ส่งในคำที่เข้ารหัส ตัวอย่างเช่นp2ให้พาริตีคู่สำหรับบิตที่ 2, 3, 6 และ 7 นอกจากนี้ยังแสดงรายละเอียดว่าบิตที่ส่งใดถูกครอบคลุมโดยบิตพาริตีใดโดยการอ่านคอลัมน์ ตัวอย่างเช่นโดย p1 และแต่ไม่ใช่นี้จะมีความคล้ายคลึงอย่างมากกับเมทริกซ์ตรวจสอบพาริตี ( H )ในส่วนถัดไป
นอกจากนี้ หากลบคอลัมน์ความเท่าเทียมกันในตารางข้างต้นออก
ใช่ ใช่ เลขที่ ใช่ ใช่ เลขที่ ใช่ ใช่ เลขที่ ใช่ ใช่ ใช่
จากนั้น จะเห็นความคล้ายคลึงกับแถวที่ 1, 2 และ 4 ของเมทริกซ์ตัวสร้างรหัส ( G ) ด้านล่างอย่างชัดเจน
ดังนั้น ด้วยการเลือกความครอบคลุมของบิตพาริตีอย่างถูกต้อง ข้อผิดพลาดทั้งหมดที่มีระยะห่างแฮมมิงเท่ากับ 1 จะถูกตรวจจับและแก้ไขได้ ซึ่งเป็นจุดประสงค์ของการใช้รหัสแฮมมิง
เมทริกซ์แฮมมิง
รหัสแฮมมิงสามารถคำนวณได้ในรูปพีชคณิตเชิงเส้น โดยใช้ เมทริกซ์เนื่องจากรหัสแฮมมิงเป็นรหัสเชิงเส้นสำหรับวัตถุประสงค์ของรหัสแฮมมิงสามารถกำหนดเมทริกซ์แฮมมิงได้สองเมทริกซ์ ได้แก่ เมทริกซ์ตัวสร้างรหัสGและเมทริกซ์ตรวจสอบความเท่าเทียมกัน H :

ดังที่กล่าวไว้ข้างต้น แถวที่ 1, 2 และ 4 ของGน่าจะคุ้นเคยกันดี เนื่องจากเป็นการจับคู่บิตข้อมูลกับบิตพาริตี:
- หน้าครอบคลุมd , d , d
- หน้าครอบคลุมd , d , d
- หน้าครอบคลุมd , d , d
แถวที่เหลือ (3, 5, 6, 7) จะแมปข้อมูลไปยังตำแหน่งในรูปแบบที่เข้ารหัส และมีเพียง 1 ในแถวนั้น ดังนั้นจึงเป็นสำเนาที่เหมือนกันทุกประการ อันที่จริง แถวทั้งสี่นี้เป็นอิสระเชิงเส้นและประกอบกันเป็นเมทริกซ์เอกลักษณ์ (โดยตั้งใจ ไม่ใช่ความบังเอิญ)
นอกจากนี้ ดังที่กล่าวไว้ข้างต้น คุณควรคุ้นเคยกับแถวทั้งสามของเมทริกซ์ Hแถวเหล่านี้ใช้ในการคำนวณเวกเตอร์ซินโดรมที่ฝั่งผู้รับ และหากเวกเตอร์ซินโดรมเป็นเวกเตอร์ว่าง (ศูนย์ทั้งหมด) แสดงว่าคำที่ได้รับนั้นไม่มีข้อผิดพลาด หากไม่ใช่ศูนย์ ค่าที่ได้จะระบุว่าบิตใดถูกพลิก
บิตข้อมูลทั้งสี่บิต—ที่ประกอบกันเป็นเวกเตอร์p —จะถูกคูณด้วยG ก่อน (เช่น) และนำกลับมาหารด้วย 2 เพื่อให้ได้ค่าที่เข้ารหัสซึ่งจะถูกส่ง บิตข้อมูลดั้งเดิม 4 บิตจะถูกแปลงเป็น 7 บิต (จึงเป็นที่มาของชื่อ "Hamming(7,4)") โดยเพิ่มบิตพาริตีอีก 3 บิตเพื่อให้แน่ใจว่าพาริตีเป็นเลขคู่โดยใช้การครอบคลุมบิตข้อมูลข้างต้น ตารางแรกด้านบนแสดงการแมประหว่างบิตข้อมูลและบิตพาริตีแต่ละบิตไปยังตำแหน่งบิตสุดท้าย (1 ถึง 7) แต่สามารถแสดงในแผนภาพเวนน์ได้เช่นกันแผนภาพแรกในบทความนี้แสดงวงกลมสามวง (หนึ่งวงสำหรับแต่ละบิตพาริตี) และล้อมรอบบิตข้อมูลที่แต่ละบิตพาริตีครอบคลุม แผนภาพที่สอง (แสดงทางด้านขวา) เหมือนกัน แต่แทนที่จะแสดงเป็นตัวเลข จะมีการทำเครื่องหมายตำแหน่งบิตไว้
สำหรับส่วนที่เหลือของหัวข้อนี้ บิตทั้ง 4 บิตต่อไปนี้ (แสดงเป็นเวกเตอร์คอลัมน์ ) จะถูกใช้เป็นตัวอย่างประกอบ:
การเข้ารหัสช่องสัญญาณ

สมมติว่าเราต้องการส่งข้อมูลนี้ ( 1011) ผ่านช่องทางการสื่อสารที่มีสัญญาณรบกวน โดยเฉพาะอย่างยิ่งช่องสัญญาณสมมาตรแบบไบนารีซึ่งหมายความว่าความเสียหายจากข้อผิดพลาดไม่ได้เอื้อประโยชน์ต่อศูนย์หรือหนึ่ง (มีความสมมาตรในการทำให้เกิดข้อผิดพลาด) นอกจากนี้ เวกเตอร์ต้นทางทั้งหมดถือว่ามีความน่าจะเป็นเท่ากัน เราใช้ผลคูณของGและpโดยที่ค่าต่างๆ หารด้วย 2 เพื่อกำหนดคำรหัสที่ส่งx :
หมายความว่า0110011จะถูกส่งผ่านแทนที่จะส่ง1011ผ่าน
การคูณเมทริกซ์เกิดขึ้นแบบมอด 2หรือกล่าวอีกนัยหนึ่งคือ แต่ละแถวของผลลัพธ์คือบิตที่มีค่าน้อยที่สุดของจำนวนบิตที่ถูกตั้งค่าซึ่งได้มาจากการนำแถวและคอลัมน์มาทำการAND แบบบิตต่อบิต
ในแผนภาพด้านข้าง บิตทั้งเจ็ดของคำที่เข้ารหัสจะถูกแทรกเข้าไปในตำแหน่งที่เกี่ยวข้อง จากการตรวจสอบจะเห็นได้ชัดว่าค่าความเท่าเทียมกันของวงกลมสีแดง สีเขียว และสีน้ำเงินเป็นเลขคู่:
- วงกลมสีแดงมีเลข 1 สองตัว
- วงกลมสีเขียวมีเลข 1 สองตัว
- วงกลมสีน้ำเงินมีเลข 1 อยู่สี่ตัว
สิ่งที่จะแสดงให้เห็นในไม่ช้าก็คือ หากในระหว่างการส่งข้อมูล บิตใดบิตหนึ่งถูกพลิกกลับ ค่าพาริตีของวงกลมสองวงหรือทั้งสามวงจะผิดพลาด และสามารถระบุบิตที่ผิดพลาดได้ (แม้จะเป็นบิตพาริตีเพียงบิตเดียว) โดยการทราบว่าค่าพาริตีของวงกลมทั้งสามวงนั้นควรเป็นเลขคู่
การตรวจสอบความเท่าเทียมกัน
หากไม่มีข้อผิดพลาดเกิดขึ้นระหว่างการส่งข้อมูล รหัสคำที่ได้รับrจะเหมือนกับรหัสคำที่ส่งx ทุกประการ :
ตัวรับสัญญาณจะคูณHและrเพื่อให้ได้เวกเตอร์ซินโดรมzซึ่งบ่งชี้ว่าเกิดข้อผิดพลาดหรือไม่ และถ้าเกิด ข้อผิดพลาดนั้นเกิดขึ้นกับบิตรหัสคำใด การดำเนินการคูณนี้ (อีกครั้ง หารด้วยโมดูล 2):
เนื่องจากซินโดรมzเป็นเวกเตอร์ศูนย์ผู้รับจึงสามารถสรุปได้ว่าไม่มีข้อผิดพลาดเกิดขึ้น ข้อสรุปนี้อิงจากการสังเกตว่า เมื่อเวกเตอร์ข้อมูลถูกคูณด้วยG จะเกิด การเปลี่ยนฐานไปเป็นปริภูมิย่อยของเวกเตอร์ซึ่งเป็นเคอร์เนลของHตราบใดที่ไม่มีอะไรเกิดขึ้นระหว่างการส่งrจะยังคงอยู่ในเคอร์เนลของHและการคูณจะให้ผลลัพธ์เป็นเวกเตอร์ศูนย์
การแก้ไขข้อผิดพลาด
สมมติว่าเราสามารถเขียนได้ว่า
มอดูโล 2 โดยที่e คือเวกเตอร์หน่วยนั่นคือ เวกเตอร์ศูนย์ที่มีเลข 1 อยู่ในนั้นนับจาก 1
ดังนั้น นิพจน์ข้างต้นจึงแสดงถึงข้อผิดพลาดบิตเดียวในตำแหน่ง นั้น
ทีนี้ ถ้าเราคูณเวกเตอร์นี้ด้วยH :
เนื่องจากxคือข้อมูลที่ส่งมา จึงไม่มีข้อผิดพลาด และด้วยเหตุนี้ ผลคูณของHและxจึงเป็นศูนย์ ดังนั้น
ทีนี้ ผลคูณของHกับ เวกเตอร์ ฐานมาตรฐานจะเลือกคอลัมน์ของH นั้นออกมา ซึ่งเรารู้ว่าข้อผิดพลาดเกิดขึ้นในตำแหน่งที่คอลัมน์ของ H นี้ ปรากฏอยู่
ตัวอย่างเช่น สมมติว่าเราได้ใส่ข้อผิดพลาดบิตเข้าไปในบิตที่ 5

แผนภาพทางด้านขวาแสดงข้อผิดพลาดของบิต (แสดงด้วยข้อความสีน้ำเงิน) และพาริตีที่ไม่ถูกต้องที่เกิดขึ้น (แสดงด้วยข้อความสีแดง) ในวงกลมสีแดงและสีเขียว สามารถตรวจจับข้อผิดพลาดของบิตได้โดยการคำนวณพาริตีของวงกลมสีแดง สีเขียว และสีน้ำเงิน หากตรวจพบพาริตีที่ไม่ถูกต้อง บิตข้อมูลที่ทับซ้อนเฉพาะวงกลมพาริตีที่ไม่ถูกต้องเท่านั้นจะเป็นบิตที่มีข้อผิดพลาด ในตัวอย่างข้างต้น วงกลมสีแดงและสีเขียวมีพาริตีที่ไม่ถูกต้อง ดังนั้นบิตที่ตรงกับส่วนที่วงกลมสีแดงและสีเขียวตัดกันแต่ไม่ตัดกับวงกลมสีน้ำเงินจะแสดงถึงบิตที่มีข้อผิดพลาด
ตอนนี้,
ซึ่งตรงกับคอลัมน์ที่ห้าของHยิ่งไปกว่านั้น อัลกอริทึมทั่วไปที่ใช้ ( ดูHamming code#General algorithm ) ถูกสร้างขึ้นโดยเจตนาเพื่อให้ซินโดรม 101 ตรงกับค่าไบนารี 5 ซึ่งบ่งชี้ว่าบิตที่ห้าเสียหาย ดังนั้นจึงตรวจพบข้อผิดพลาดในบิตที่ 5 และสามารถแก้ไขได้ (เพียงแค่พลิกหรือกลับค่า):
ค่าที่ได้รับซึ่งได้รับการแก้ไขแล้วนี้ ตรงกับค่าที่ส่งมาxจากด้านบนแล้ว
การถอดรหัส
เมื่อตรวจสอบแล้วว่าเวกเตอร์ที่ได้รับนั้นปราศจากข้อผิดพลาด หรือแก้ไขข้อผิดพลาดแล้ว (โดยสมมติว่ามีข้อผิดพลาดได้เพียงศูนย์หรือหนึ่งบิตเท่านั้น) ข้อมูลที่ได้รับจะต้องถูกถอดรหัสกลับไปเป็นข้อมูลสี่บิตดั้งเดิม
ขั้นแรก กำหนดเมทริกซ์Rดังนี้:
ดังนั้นค่าที่ได้รับp จะเท่ากับRrโดยใช้ตัวอย่างที่ยกมาข้างต้น
ข้อผิดพลาดบิตหลายรายการ

ไม่ใช่เรื่องยากที่จะแสดงให้เห็นว่าสามารถแก้ไขข้อผิดพลาดแบบบิตเดียวได้โดยใช้แผนการนี้ หรืออีกทางหนึ่ง สามารถใช้รหัสแฮมมิงในการตรวจจับข้อผิดพลาดแบบบิตเดียวและสองบิตได้ โดยเพียงแค่สังเกตว่าผลคูณของHไม่เป็นศูนย์เมื่อใดก็ตามที่เกิดข้อผิดพลาด ในแผนภาพด้านข้าง บิตที่ 4 และ 5 ถูกสลับกัน ทำให้เกิดวงกลมเพียงวงเดียว (สีเขียว) ที่มีค่าพาริตีไม่ถูกต้อง แต่ไม่สามารถแก้ไขข้อผิดพลาดได้
อย่างไรก็ตาม รหัสแฮมมิง (7,4) และรหัสแฮมมิงที่คล้ายกันไม่สามารถแยกแยะระหว่างข้อผิดพลาดบิตเดียวและข้อผิดพลาดสองบิตได้ กล่าวคือ ข้อผิดพลาดสองบิตจะปรากฏเหมือนกับข้อผิดพลาดบิตเดียว หากทำการแก้ไขข้อผิดพลาดกับข้อผิดพลาดสองบิต ผลลัพธ์จะไม่ถูกต้อง
ในทำนองเดียวกัน รหัสแฮมมิงไม่สามารถตรวจจับหรือกู้คืนจากข้อผิดพลาดสามบิตใดๆ ได้ ลองพิจารณาแผนภาพ: หากบิตในวงกลมสีเขียว (ระบายสีแดง) เป็น 1 การตรวจสอบความเท่าเทียมกันจะส่งคืนเวกเตอร์ว่าง ซึ่งบ่งชี้ว่าไม่มีข้อผิดพลาดในคำรหัส
รหัสลับทั้งหมด
เนื่องจากแหล่งข้อมูลมีเพียง 4 บิต ดังนั้นจึงมีคำที่ส่งได้เพียง 16 คำเท่านั้น ซึ่งรวมถึงค่าแปดบิตหากมีการใช้บิตพาริตีเพิ่มเติม ( ดูรหัส Hamming(7,4) ที่มีบิตพาริตีเพิ่มเติม ) (บิตข้อมูลแสดงด้วยสีน้ำเงิน บิตพาริตีแสดงด้วยสีแดง และบิตพาริตีเพิ่มเติมแสดงด้วยสีเขียว)
แลตทิซ E
รหัส Hamming(7,4) มีความสัมพันธ์อย่างใกล้ชิดกับแลตทิซE และในความเป็นจริง สามารถใช้สร้างแลตทิซ E ∗ (การสร้าง E ที่คล้ายกัน จะใช้รหัสคู่ [7,3,4] ) โดยเฉพาะอย่างยิ่ง การนำเซตของเวกเตอร์ทั้งหมดxในZ 7ที่xสอดคล้อง (โมดูล 2) กับคำรหัสของ Hamming(7,4) และปรับขนาดใหม่ด้วย 1/ √ 2จะได้แลตทิซ E ∗
นี่เป็นกรณีเฉพาะของความสัมพันธ์ทั่วไประหว่างแลตทิซและรหัส ตัวอย่างเช่น รหัสแฮมมิงแบบขยาย (8,4) ซึ่งเกิดขึ้นจากการเพิ่มบิตพาริตี ก็มีความสัมพันธ์กับแลตทิซ E 8 [ 2 ]
ลิงก์ภายนอก
- ปัญหาการเขียนโปรแกรมเกี่ยวกับรหัสแฮมมิง (7,4)