อ่าน 40 นาที
การแก้ไขข้อผิดพลาดของ Reed–Solomon
ใน ทฤษฎีสารสนเทศ และ ทฤษฎีการเข้ารหัส รหัส Reed–Solomon เป็นกลุ่มของ รหัสแก้ไขข้อผิดพลาด ที่ Irving S. Reed และ Gustave Solomon นำเสนอ ในปี พ.ศ.
การแก้ไขข้อผิดพลาดของ Reed–Solomon
| รหัสรีด-โซโลมอน | |
|---|---|
| ตั้งชื่อตาม | เออร์วิง เอส. รีดและกุสตาฟ โซโลมอน |
| การจำแนกประเภท | |
| ลำดับชั้น | รหัสบล็อกเชิงเส้นรหัสพหุนาม รหัสรีด-โซโลมอน |
| ความยาวบล็อก | n |
| ความยาวของข้อความ | เค |
| ระยะทาง | n − k + 1 |
| ขนาดตัวอักษร | q = p m ≥ n ( pเป็นจำนวนเฉพาะ) บ่อยครั้งที่n = q − 1 |
| สัญกรณ์ | [ n , k , n − k + 1] q -code |
| อัลกอริทึม | |
| Berlekamp–Massey Euclidean et al. | |
| คุณสมบัติ | |
| รหัสแยกระยะสูงสุด | |
ในทฤษฎีสารสนเทศและทฤษฎีการเข้ารหัสรหัสReed–Solomonเป็นกลุ่มของรหัสแก้ไขข้อผิดพลาดที่Irving S. ReedและGustave Solomon นำเสนอ ในปี พ.ศ. 2503 [ 1 ] รหัส เหล่านี้มีการใช้งานมากมาย รวมถึงเทคโนโลยีสำหรับผู้บริโภค เช่นMiniDiscs , CDs , DVDs , Blu-ray discs, รหัส QR , Data Matrix , เทคโนโลยี การส่งข้อมูลเช่นDSLและWiMAX , ระบบ กระจายเสียงเช่น การสื่อสารผ่านดาวเทียมDVBและATSCและระบบจัดเก็บข้อมูล เช่นRAID 6
รหัสรีด-โซโลมอนทำงานกับบล็อกข้อมูลที่ถือว่าเป็นชุดของ องค์ประกอบ ฟิลด์จำกัดที่เรียกว่าสัญลักษณ์ รหัสรีด-โซโลมอนRS( n , k )สามารถตรวจจับและแก้ไขข้อผิดพลาดของสัญลักษณ์ได้หลายตัว โดยการเพิ่ม สัญลักษณ์ตรวจสอบ t = n − k ตัว ลงในข้อมูล รหัสรีด-โซโลมอนสามารถตรวจจับ (แต่ไม่แก้ไข) การรวมกันของสัญลักษณ์ที่ผิดพลาดได้ มากถึง t ตัวหรือค้นหาและแก้ไขสัญลักษณ์ที่ผิดพลาดได้มากถึง⌊t /2⌋ ตัวในตำแหน่งที่ไม่ทราบ ในฐานะที่เป็นรหัสลบมันสามารถแก้ไขการลบได้มากถึงtครั้งในตำแหน่งที่ทราบและจัดเตรียมไว้ให้กับอัลกอริทึม หรือสามารถตรวจจับและแก้ไขข้อผิดพลาดและการลบแบบผสมผสานกันได้ รหัสรีด-โซโลมอนยังเหมาะสำหรับใช้เป็นรหัสแก้ไขข้อผิดพลาดบิตแบบหลายชุดเนื่องจากลำดับของ ข้อผิดพลาดบิตต่อเนื่อง b + 1ตัวสามารถส่งผลกระทบต่อสัญลักษณ์ขนาดb ได้มากที่สุดสองตัว การเลือกค่าtขึ้นอยู่กับผู้ออกแบบรหัสและสามารถเลือกได้ภายในขอบเขตที่กว้าง
ในบทความนี้มีวิธีการเข้ารหัส Reed-Solomon สองแบบที่แตกต่างกัน คือแบบมุมมองดั้งเดิมและแบบมุมมอง BCH ส่วนประวัติความเป็นมาจะอธิบายถึงที่มาของวิธีการนี้
ประวัติศาสตร์
รหัส Reed–Solomon ได้รับการพัฒนาในปี 1960 โดยIrving S. ReedและGustave Solomonซึ่งในขณะนั้นเป็นเจ้าหน้าที่ของMIT Lincoln Laboratoryบทความสำคัญของพวกเขามีชื่อว่า "Polynomial Codes over Certain Finite Fields" [ 1 ]รูปแบบการเข้ารหัสเดิมที่อธิบายไว้ในบทความของ Reed และ Solomon ใช้พหุนามตัวแปรตามข้อความที่จะเข้ารหัส โดยที่ตัวเข้ารหัสและตัวถอดรหัสทราบเพียงชุดค่าคงที่ (จุดประเมิน) ที่จะเข้ารหัสเท่านั้น ตัวถอดรหัสเชิงทฤษฎีเดิมสร้างพหุนามที่เป็นไปได้โดยอิงจากเซตย่อยของค่าk (ความยาวข้อความที่ยังไม่ได้เข้ารหัส) จาก ค่า n (ความยาวข้อความที่เข้ารหัส) ของข้อความที่ได้รับ โดยเลือกพหุนามที่ได้รับความนิยมมากที่สุดเป็นพหุนามที่ถูกต้อง ซึ่งไม่สามารถนำไปใช้ได้จริงยกเว้นในกรณีที่ง่ายที่สุด ในขั้นต้น ปัญหานี้ได้รับการแก้ไขโดยการเปลี่ยนรูปแบบเดิมไปเป็น รูปแบบที่เข้ากันได้ กับรหัส BCHโดยใช้พหุนามคงที่ที่ทั้งตัวเข้ารหัสและตัวถอดรหัสทราบ แต่ต่อมาได้มีการพัฒนาตัวถอดรหัสที่ใช้งานได้จริงโดยใช้รูปแบบเดิม แม้ว่าในตอนแรกจะทำงานช้ากว่ารูปแบบ BCH ก็ตาม ผลที่ตามมาคือ รหัสรีด-โซโลมอนมีสองประเภทหลัก ได้แก่ รหัสที่ใช้รูปแบบการเข้ารหัสเดิม และรหัสที่ใช้รูปแบบการเข้ารหัส BCH
นอกจากนี้ ในปี 1960 ตัวถอดรหัสพหุนามคงที่ที่ใช้งานได้จริงสำหรับรหัส BCHซึ่งพัฒนาโดยDaniel Gorensteinและ Neal Zierler ได้รับการอธิบายใน รายงานของ MIT Lincoln Laboratoryโดย Zierler ในเดือนมกราคม 1960 และต่อมาในบทความในเดือนมิถุนายน 1961 [ 2 ]ตัวถอดรหัส Gorenstein–Zierler และงานที่เกี่ยวข้องกับรหัส BCH ได้รับการอธิบายไว้ในหนังสือ "Error-Correcting Codes" โดยW. Wesley Peterson (1961) [ 3 ]ภายในปี 1963 (หรืออาจจะก่อนหน้านั้น) JJ Stone (และคนอื่นๆ) ตระหนักว่ารหัส Reed–Solomon สามารถใช้รูปแบบ BCH ของการใช้พหุนามตัวสร้างคงที่ ทำให้รหัสดังกล่าวเป็นรหัส BCH ประเภทพิเศษ[ 4 ]แต่รหัส Reed–Solomon ที่อิงตามรูปแบบการเข้ารหัสเดิมไม่ใช่รหัส BCH ประเภทหนึ่ง และขึ้นอยู่กับชุดของจุดประเมินผล รหัสเหล่านั้นอาจไม่ใช่รหัสแบบ วนรอบด้วย ซ้ำ
ในปี 1969 เอลวิน เบอร์เลแคมป์และเจมส์ แมสซีย์ได้พัฒนาตัวถอดรหัสแบบ BCH ที่ได้รับการปรับปรุงและตั้งแต่นั้นมาก็เป็นที่รู้จักกันในชื่ออัลกอริทึมการถอดรหัสเบอร์เลแคมป์-แมสซีย์
ในปี พ.ศ. 2518 Yasuo Sugiyama ได้พัฒนาตัวถอดรหัสแบบ BCH ที่ได้รับการปรับปรุงอีกตัวหนึ่งโดยอิงจากอัลกอริทึม Euclidean ที่ขยายเพิ่มเติม[ 5 ]

ในปี 1977 รหัสรีด-โซโลมอนถูกนำมาใช้ในโครงการวอยเอเจอร์ในรูปแบบของรหัสแก้ไขข้อผิดพลาดแบบต่อกันการใช้งานเชิงพาณิชย์ครั้งแรกในผลิตภัณฑ์สำหรับผู้บริโภคที่ผลิตจำนวนมากปรากฏขึ้นในปี 1982 กับแผ่นซีดี ซึ่ง ใช้รหัสรีด-โซโลมอนสอง รหัส แบบสลับกัน ปัจจุบัน รหัสรีด-โซโลมอนถูกนำไปใช้อย่างแพร่หลายในอุปกรณ์ จัดเก็บข้อมูลดิจิทัลและ มาตรฐาน การสื่อสารดิจิทัลแม้ว่าจะค่อยๆ ถูกแทนที่ด้วยรหัสโบส-เชาดูรี-ฮอคเควนเก็ม (BCH)ก็ตาม ตัวอย่างเช่น รหัสรีด-โซโลมอนถูกใช้ใน มาตรฐาน การออกอากาศวิดีโอดิจิทัล (DVB) DVB-Sร่วมกับรหัสภายในแบบคอนโวลูชัน แต่รหัส BCH ถูกใช้ร่วมกับLDPC ในมาตรฐาน DVB-S2ซึ่ง เป็นรุ่นต่อมา
ในปี 1986 ได้มีการพัฒนา ตัวถอดรหัสรูปแบบใหม่ที่เรียกว่า อัลกอริทึม Berlekamp–Welch ขึ้นมา
ในปี 1996 Madhu Sudan และคนอื่นๆ ได้พัฒนาตัวถอดรหัสแบบต่างๆ ที่ดัดแปลงมาจากแบบแผนดั้งเดิม เรียกว่า ตัวถอดรหัสแบบรายการ หรือ ตัวถอดรหัสแบบอ่อน และงานวิจัยเกี่ยวกับตัวถอดรหัสประเภทนี้ยังคงดำเนินต่อไป (ดูอัลกอริทึมการถอดรหัสแบบรายการของ Guruswami–Sudan )
ในปี พ.ศ. 2545 Shuhong Gao ได้พัฒนาตัวถอดรหัสแบบแผนดั้งเดิมอีกตัวหนึ่งโดยอิงจาก อัลกอริทึมยู คลิดแบบขยาย[ 6 ]
ประมาณปี 2015 ได้มีการพัฒนาระบบถอดรหัสแบบซินโดรมตามแบบแผนดั้งเดิม (ผู้เขียนไม่ทราบชื่อ) [ 7 ]
แอปพลิเคชัน
การจัดเก็บข้อมูล
การเข้ารหัสแบบรีด-โซโลมอนถูกนำมาใช้กันอย่างแพร่หลายใน ระบบ จัดเก็บข้อมูลขนาดใหญ่เพื่อแก้ไขข้อผิดพลาดแบบเบิร์สต์ที่เกิดจากข้อบกพร่องของสื่อบันทึกข้อมูล
การเข้ารหัส Reed–Solomon เป็นส่วนประกอบสำคัญของแผ่นซีดีนับเป็นการใช้การเข้ารหัสแก้ไขข้อผิดพลาดที่แข็งแกร่งเป็นครั้งแรกในผลิตภัณฑ์สำหรับผู้บริโภคที่ผลิตในปริมาณมาก และDATกับDVD ก็ใช้รูปแบบที่คล้ายกัน ในแผ่นซีดี การเข้ารหัส Reed–Solomon สองชั้นที่คั่นด้วย ตัวสลับข้อมูลแบบคอนโวลู ชัน 28 ทางทำให้ได้รูปแบบที่เรียกว่า การเข้ารหัส Reed–Solomon แบบสลับไขว้ ( CIRC ) องค์ประกอบแรกของตัวถอดรหัส CIRC คือรหัส Reed–Solomon ภายในที่ค่อนข้างอ่อน (32,28) ซึ่งย่อมาจากรหัส (255,251) ที่มีสัญลักษณ์ 8 บิต รหัสนี้สามารถแก้ไขข้อผิดพลาดได้สูงสุด 2 ไบต์ต่อบล็อก 32 ไบต์ ที่สำคัญกว่านั้นคือ มันจะทำเครื่องหมายบล็อกที่ไม่สามารถแก้ไขได้ เช่น บล็อกที่มีข้อผิดพลาดมากกว่า 2 ไบต์ ว่าเป็นการลบ บล็อกขนาด 28 ไบต์ที่ถอดรหัสแล้ว พร้อมด้วยตัวบ่งชี้การลบ จะถูกกระจายโดยตัวแยกการเรียงข้อมูลไปยังบล็อกต่างๆ ของรหัสภายนอก (28,24) ด้วยกระบวนการแยกการเรียงข้อมูล บล็อกขนาด 28 ไบต์ที่ถูกลบจากรหัสภายในจะกลายเป็นไบต์ที่ถูกลบเพียงไบต์เดียวในแต่ละบล็อกของรหัสภายนอกจำนวน 28 บล็อก รหัสภายนอกสามารถแก้ไขปัญหานี้ได้อย่างง่ายดาย เนื่องจากสามารถจัดการกับการลบได้ถึง 4 ครั้งต่อบล็อก
ผลลัพธ์คือ CIRC ที่สามารถแก้ไขข้อผิดพลาดแบบระเบิดได้อย่างสมบูรณ์แบบถึง 4000 บิต หรือประมาณ 2.5 มม. บนพื้นผิวแผ่นดิสก์ รหัสนี้มีความแข็งแกร่งมากจนข้อผิดพลาดในการเล่นซีดีส่วนใหญ่เกือบจะเกิดจากข้อผิดพลาดในการติดตามที่ทำให้เลเซอร์กระโดดข้ามแทร็ก ไม่ใช่จากข้อผิดพลาดแบบระเบิดที่ไม่สามารถแก้ไขได้[ 8 ]
ดีวีดีใช้รูปแบบที่คล้ายกัน แต่มีบล็อกที่ใหญ่กว่ามาก คือ รหัสภายใน (208,192) และรหัสภายนอก (182,172)
การแก้ไขข้อผิดพลาดแบบ Reed–Solomon ยังใช้ใน ไฟล์ parchiveซึ่งมักถูกโพสต์พร้อมกับไฟล์มัลติมีเดียบนUSENETบริการจัดเก็บข้อมูลออนไลน์แบบกระจายWuala (ซึ่งยุติการให้บริการในปี 2015) ก็ใช้ Reed–Solomon ในการแบ่งไฟล์เช่นกัน
บาร์โค้ด
บาร์โค้ดสองมิติเกือบทั้งหมด เช่นPDF-417 , MaxiCode , Datamatrix , QR Code , Aztec CodeและHan Xin Codeใช้การแก้ไขข้อผิดพลาดแบบ Reed–Solomon เพื่อให้สามารถอ่านได้อย่างถูกต้องแม้ว่าส่วนใดส่วนหนึ่งของบาร์โค้ดจะเสียหาย เมื่อเครื่องสแกนบาร์โค้ดไม่สามารถจดจำสัญลักษณ์บาร์โค้ดได้ มันจะถือว่าส่วนนั้นถูกลบไป
การเข้ารหัสแบบ Reed–Solomon พบได้น้อยในบาร์โค้ดแบบหนึ่งมิติ แต่ถูกนำมาใช้ในระบบสัญลักษณ์ PostBar
การส่งข้อมูล
รหัสรีด-โซโลมอนรูปแบบพิเศษ โดยเฉพาะCauchy -RS และVandermonde -RS สามารถนำมาใช้เพื่อเอาชนะข้อจำกัดด้านความน่าเชื่อถือของการส่งข้อมูลผ่านช่องทางการลบ ข้อมูล ได้ กระบวนการเข้ารหัสจะใช้รหัส RS( N , K ) ซึ่งส่งผลให้เกิด คำรหัส Nคำที่มีความยาวNสัญลักษณ์ โดยแต่ละคำจะเก็บ ข้อมูล Kสัญลักษณ์ จากนั้นจึงส่งข้อมูลเหล่านั้นผ่านช่องทางการลบข้อมูล
การรับรหัสคำ Kชุดใดๆ ก็ตาม ที่ปลายอีกด้านหนึ่งนั้นเพียงพอที่จะสร้าง รหัสคำNทั้งหมดขึ้นมาใหม่ได้ โดยทั่วไปแล้ว อัตราการเข้ารหัสจะถูกตั้งไว้ที่ 1/2 เว้นแต่ว่าความน่าจะเป็นของการลบข้อมูลในช่องสัญญาณนั้นสามารถจำลองได้อย่างเหมาะสมและพบว่ามีค่าน้อยกว่านั้น สรุปได้ว่าNมักจะเป็น2Kซึ่งหมายความว่าอย่างน้อยครึ่งหนึ่งของรหัสคำทั้งหมดที่ส่งไปจะต้องได้รับการรับกลับมาเพื่อที่จะสร้างรหัสคำทั้งหมดที่ส่งไปขึ้นมาใหม่ได้
รหัสรีด-โซโลมอนยังถูกใช้ใน ระบบ xDSLและข้อกำหนดโปรโตคอลการสื่อสารในอวกาศของCCSDSในรูปแบบหนึ่งของการแก้ไขข้อผิดพลาดล่วงหน้าด้วย
การส่งสัญญาณอวกาศ

หนึ่งในแอปพลิเค ชัน ที่สำคัญของการเข้ารหัส Reed–Solomon คือการเข้ารหัสภาพดิจิทัลที่ส่งกลับมาจากโครงการ Voyager
ยานวอยเอเจอร์ได้นำเสนอการเข้ารหัสแบบรีด-โซโลมอนที่เชื่อมต่อกับการเข้ารหัสแบบคอนโวลู ชัน ซึ่งเป็นวิธีการที่แพร่หลายอย่างมากในอวกาศห้วงลึกและการสื่อสารผ่านดาวเทียม (เช่น การออกอากาศดิจิทัลโดยตรง)
ตัวถอดรหัส Viterbiมักเกิดข้อผิดพลาดเป็นช่วงสั้นๆ การแก้ไขข้อผิดพลาดเหล่านี้เป็นวิธีที่ดีที่สุดโดยใช้รหัส Reed–Solomon แบบสั้นหรือแบบง่าย
การเข้ารหัสแบบคอนโวลูชันที่ถอดรหัสด้วย Reed–Solomon/Viterbi เวอร์ชันสมัยใหม่ถูกนำมาใช้และยังคงใช้ใน ภารกิจ Mars Pathfinder , Galileo , Mars Exploration RoverและCassiniซึ่งมีประสิทธิภาพใกล้เคียงกับขีดจำกัดสูงสุด คือ ความจุของ Shannon โดยมีค่า ความคลาดเคลื่อน ไม่เกิน 1–1.5 dB
รหัสที่ต่อกันเหล่านี้กำลังถูกแทนที่ด้วยรหัสเทอร์โบ ที่มีประสิทธิภาพมากขึ้นแล้ว :
| ปี | รหัส | ภารกิจ |
|---|---|---|
| ปี 1958–ปัจจุบัน | ไม่ได้เข้ารหัส | นักสำรวจ นักเดินเรือ และอีกมากมาย |
| พ.ศ. 2511–2521 | รหัสคอนโวลูชัน (CC) (25, 1/2) | ไพโอเนียร์, วีนัส |
| พ.ศ. 2512–2518 | รหัส Reed–Muller (32, 6) | นักเดินเรือ, ไวกิ้ง |
| ปี 1977–ปัจจุบัน | รหัสไบนารีโกเลย์ | วอยเอเจอร์ |
| ปี 1977–ปัจจุบัน | RS(255, 223) + CC(7, 1/2) | ยานวอยเอเจอร์ ยานกาลิเลโอ และอีกหลายลำ |
| พ.ศ. 2532–2546 | RS(255, 223) + CC(7, 1/3) | วอยเอเจอร์ |
| พ.ศ. 2532–2546 | RS(255, 223) + CC(14, 1/4) | กาลิเลโอ |
| ปี 1996–ปัจจุบัน | RS + CC (15, 1/6) | ยานแคสสินี ยานมาร์ส แพธไฟน์เดอร์ และยานอื่นๆ |
| ปี 2004–ปัจจุบัน | รหัสเทอร์โบ[ nb 1 ] | เมสเซนเจอร์, สเตอริโอ, MRO, MSL และอื่นๆ |
| ก่อตั้งเมื่อปี 2552 | รหัส LDPC | กลุ่มดาว M2020 ยานมาเวน |
โครงสร้าง (การเข้ารหัส)
รหัสรีด-โซโลมอนแท้จริงแล้วเป็นกลุ่มของรหัส โดยแต่ละรหัสมีลักษณะเฉพาะด้วยพารามิเตอร์สามตัว ได้แก่ขนาดตัวอักษรq ความยาวบล็อก n และความยาวข้อความkโดยที่เซตของสัญลักษณ์ตัวอักษรถูกตีความว่าเป็นฟิลด์จำกัดที่มีอันดับและดังนั้นต้องเป็นกำลังของจำนวนเฉพาะในการกำหนดพารามิเตอร์ที่มีประโยชน์ที่สุดของรหัสรีด-โซโลมอน ความยาวบล็อกมักจะเป็นค่าคงที่คูณกับความยาวข้อความ นั่นคืออัตราเป็นค่าคงที่ และนอกจากนี้ ความยาวบล็อกจะเท่ากับขนาดตัวอักษรหรือน้อยกว่าหนึ่ง นั่นคือ หรือ
มุมมองดั้งเดิมของรีดและโซโลมอน: รหัสคำคือลำดับของค่าต่างๆ
มีขั้นตอนการเข้ารหัสที่แตกต่างกันสำหรับรหัส Reed–Solomon และด้วยเหตุนี้จึงมีวิธีการอธิบายชุดของคำรหัสทั้งหมดที่แตกต่างกัน ในมุมมองดั้งเดิมของ Reed และ Solomon คำรหัสทุกคำของรหัส Reed–Solomon คือลำดับของค่าฟังก์ชันของพหุนามที่มีดีกรีน้อยกว่า[ 1 ] เพื่อให้ได้คำรหัสของรหัส Reed–Solomon สัญลักษณ์ข้อความ (แต่ละสัญลักษณ์ภายในตัวอักษรขนาด q) จะถูกพิจารณาว่าเป็นสัมประสิทธิ์ของพหุนามที่มีดีกรีน้อยกว่าบนฟิลด์จำกัดที่มีองค์ประกอบ ในทางกลับกัน พหุนามจะถูกประเมินที่ชุดของจุดที่แตกต่างกันในลำดับใดก็ได้ของฟิลด์ และลำดับของค่าจะ เป็น คำรหัสที่สอดคล้องกัน ตัวเลือกทั่วไปสำหรับชุดของจุดประเมิน ได้แก่, , หรือ สำหรับ, , ... โดยที่เป็นองค์ประกอบดั้งเดิมของ
ในทางทฤษฎี เซตของรหัสคำของรหัสรีด-โซโลมอนถูกกำหนดดังนี้: เนื่องจากพหุนามสอง ตัว ที่แตกต่างกันซึ่งมีดีกรีน้อยกว่าจะตรงกันอย่างมากที่สุดที่จุด นั่นหมายความว่ารหัสคำสองคำใดๆ ของรหัสรีด-โซโลมอนจะไม่ตรงกันอย่างน้อยที่ตำแหน่ง ยิ่งไปกว่านั้น มีพหุนามสองตัวที่ตรงกันที่จุด แต่ไม่เท่ากัน ดังนั้นระยะทางของรหัสรีด-โซโลมอนจึงเท่ากับ พอดีดังนั้น ระยะทางสัมพัทธ์คือโดยที่คืออัตรา การแลกเปลี่ยนระหว่างระยะทางสัมพัทธ์และอัตรานี้ถือว่าเหมาะสมที่สุดในเชิงอะซิมโทติก เนื่องจากตามขอบเขตของซิงเกิลตันรหัสทุกตัวจึงเป็นไปตาม เงื่อนไข เนื่องจากเป็นรหัสที่บรรลุการแลกเปลี่ยนที่เหมาะสมที่สุดนี้ รหัสรีด-โซโลมอนจึงอยู่ในกลุ่มของ รหัสที่แยก ได้ ด้วยระยะทางสูงสุด
ในขณะที่จำนวนพหุนามที่แตกต่างกันที่มีดีกรีน้อยกว่าkและจำนวนข้อความที่แตกต่างกันนั้นเท่ากันและดังนั้นข้อความทุกข้อความสามารถแมปไปยังพหุนามดังกล่าวได้อย่างไม่ซ้ำกัน แต่ก็มีวิธีการเข้ารหัสที่แตกต่างกัน การสร้างดั้งเดิมของ Reed & Solomon ตีความข้อความxเป็นสัมประสิทธิ์ของพหุนามpในขณะที่การสร้างในภายหลังตีความข้อความเป็นค่าของพหุนามที่จุดk แรก และได้พหุนามpโดยการประมาณค่าเหล่านี้ด้วยพหุนามที่มีดีกรีน้อยกว่าk ขั้น ตอนการเข้ารหัสแบบหลังนี้ แม้จะมีประสิทธิภาพน้อยกว่าเล็กน้อย แต่ก็มีข้อดีคือทำให้เกิดรหัสที่เป็นระบบนั่นคือ ข้อความดั้งเดิมจะถูกบรรจุเป็นลำดับย่อยของคำรหัส เสมอ [ 1 ]
วิธีการเข้ารหัสแบบง่าย: ข้อความในรูปแบบลำดับของสัมประสิทธิ์
ในการสร้างดั้งเดิมของ Reed และ Solomon ข้อความจะถูกแมปไปยังพหุนามที่มี รหัสคำของได้รับจากการประเมินที่จุดต่าง ๆ ของฟิลด์ [ 1 ]ดังนั้นฟังก์ชันการเข้ารหัสแบบคลาสสิกสำหรับรหัส Reed–Solomon จึงถูกกำหนดดังนี้:
ฟังก์ชันนี้เป็นการแมปเชิงเส้น กล่าวคือ เป็นไปตามเงื่อนไขสำหรับเมทริกซ์ n ต่อไปนี้ ที่มีองค์ประกอบจาก
เมทริกซ์นี้คือเมทริกซ์แวนเดอร์มอนด์เหนือ กล่าวอีกนัยหนึ่ง รหัสรีด-โซโลมอนเป็นรหัสเชิงเส้นและในขั้นตอนการเข้ารหัสแบบคลาสสิกเมทริกซ์กำเนิด ของมัน คือ
ขั้นตอนการเข้ารหัสอย่างเป็นระบบ: ข้อความในรูปแบบลำดับค่าเริ่มต้น
มีวิธีการเข้ารหัสทางเลือกอื่นที่สร้างรหัส Reed–Solomon ที่เป็นระบบ วิธีหนึ่งใช้ การประมาณค่าแบบ Lagrangeเพื่อคำนวณพหุนามโดยที่ จากนั้นจึงประเมินค่าที่จุดอื่นๆ
ฟังก์ชันนี้เป็นการแมปเชิงเส้น ในการสร้างเมทริกซ์การเข้ารหัสเชิงระบบ G ที่สอดคล้องกัน ให้คูณเมทริกซ์ A ด้วยเมทริกซ์ผกผันของเมทริกซ์ย่อยสี่เหลี่ยมจัตุรัสด้านซ้ายของ A
สำหรับเมทริกซ์ ต่อไปนี้ ที่มีองค์ประกอบจาก.
การแปลงฟูริเยร์แบบไม่ต่อเนื่องและการแปลงผกผัน
การแปลงฟูริเยร์แบบไม่ต่อเนื่องนั้นโดยพื้นฐานแล้วเหมือนกับขั้นตอนการเข้ารหัส กล่าวคือ มันใช้พหุนามตัวสร้างเพื่อแปลงชุดจุดประเมินผลไปเป็นค่าข้อความดังที่แสดงไว้ข้างต้น:
สามารถใช้การแปลงฟูริเยร์ผกผันเพื่อแปลงชุด ค่าข้อความ n < q ที่ปราศจากข้อผิดพลาด กลับไปเป็นพหุนามการเข้ารหัสที่ มีสัมประสิทธิ์ kตัว โดยมีข้อจำกัดว่าเพื่อให้วิธีการนี้ได้ผล ชุดจุดประเมินที่ใช้ในการเข้ารหัสข้อความจะต้องเป็นชุดของกำลังของα ที่เพิ่มขึ้นเรื่อย ๆ
อย่างไรก็ตาม การแทรกสอดแบบลากรางจ์ (Lagrange interpolation) ทำการแปลงแบบเดียวกันโดยไม่มีข้อจำกัดเกี่ยวกับชุดจุดประเมินหรือข้อกำหนดของชุดค่าข้อความที่ปราศจากข้อผิดพลาด และใช้สำหรับการเข้ารหัสอย่างเป็นระบบ และในขั้นตอนหนึ่งของตัวถอดรหัสเกา (Gao decoder )
มุมมองของ BCH: รหัสคำเป็นลำดับของสัมประสิทธิ์
โปรดทราบว่ารหัส BCHและการใช้งานมุมมอง BCH ส่วนใหญ่จะเรียงลำดับพจน์ที่มีค่ามากที่สุดก่อน ในมุมมองนี้ ข้อความจะถูกตีความว่าเป็นสัมประสิทธิ์ของพหุนาม:
พหุนามตัวสร้าง (Generator polynomial) ถูกนิยามว่าเป็นพหุนามที่มีรากเป็นกำลังเรียงลำดับของพหุนามพื้นฐานของฟิลด์กาโลอิส (Galois field primitive) สำหรับ "รหัสความหมายแคบ" (narrow sense code) นั้น
การเข้ารหัสจะคำนวณพหุนามรหัสคำซึ่งเป็นผลคูณที่แน่นอนของ
ขั้นตอนการเข้ารหัสแบบง่าย
ผู้ส่งคำนวณพหุนามที่เกี่ยวข้อง ซึ่งมี ดีกรีโดยที่และส่งพหุนามนั้นพหุ นามนี้สร้างขึ้นโดยการคูณพหุนามข้อความซึ่งมีดีกรีกับพหุนามตัวสร้างที่มีดีกรีซึ่งทั้งผู้ส่งและผู้รับทราบ
ฟังก์ชันนี้เป็นการแมปเชิงเส้น กล่าวคือ เป็นไปตามเงื่อนไขสำหรับเมทริกซ์ n ต่อไปนี้ ที่มีองค์ประกอบจาก
สำหรับเมทริกซ์ ต่อไปนี้ ที่มีองค์ประกอบจาก.
ขั้นตอนการเข้ารหัสอย่างเป็นระบบ
ขั้นตอนการเข้ารหัสสำหรับมุมมอง BCH ของรหัส Reed–Solomon สามารถปรับเปลี่ยนเพื่อให้ได้ขั้นตอนการเข้ารหัสที่เป็นระบบซึ่งแต่ละคำรหัสจะมีข้อความอยู่เป็นคำนำหน้า และเพียงแค่เพิ่มสัญลักษณ์แก้ไขข้อผิดพลาดเป็นส่วนต่อท้าย ในที่นี้ แทนที่จะส่งตัวเข้ารหัสจะสร้างพหุนามที่ส่งโดยที่สัมประสิทธิ์ของเอกนามที่ใหญ่ที่สุดเท่ากับสัมประสิทธิ์ที่สอดคล้องกันของ และสัมประสิทธิ์ลำดับต่ำกว่าของจะถูกเลือกในลักษณะที่หารลงตัวด้วยจากนั้นสัมประสิทธิ์ของจะเป็นลำดับย่อยของสัมประสิทธิ์ของเพื่อให้ได้รหัสที่เป็นระบบโดยรวม เราสร้างพหุนามข้อความโดยตีความข้อความว่าเป็นลำดับของสัมประสิทธิ์ของมัน
ตามหลักการแล้ว การสร้างจะทำโดยการคูณด้วยเพื่อให้มีที่ว่างสำหรับสัญลักษณ์ตรวจสอบ จากนั้นหารผลลัพธ์นั้นด้วยเพื่อหาเศษเหลือ และชดเชยเศษเหลือนั้นโดยการลบออกสัญลักษณ์ตรวจสอบจะถูกสร้างขึ้นโดยการคำนวณเศษเหลือ:
ส่วนที่เหลือมีดีกรีสูงสุดเพียง ในขณะที่สัมประสิทธิ์ของในพหุนามเป็นศูนย์ ดังนั้น นิยามของรหัสคำต่อไปนี้จึงมีคุณสมบัติที่ว่าสัมประสิทธิ์ตัวแรกเหมือนกับสัมประสิทธิ์ของ:
ดังนั้น จึงหารลงตัวพอดีด้วย: [ 11 ]
ฟังก์ชันนี้เป็นการแมปเชิงเส้น ในการสร้างเมทริกซ์การเข้ารหัสเชิงระบบ G ที่สอดคล้องกัน ให้คูณเมทริกซ์ A ด้วยเมทริกซ์ผกผันของเมทริกซ์ย่อยสี่เหลี่ยมจัตุรัสด้านซ้ายของ A (หรือกำหนดให้เมทริกซ์ย่อยสี่เหลี่ยมจัตุรัสด้านซ้ายของ G เท่ากับเมทริกซ์เอกลักษณ์ แล้วเข้ารหัสแต่ละแถว)
สำหรับเมทริกซ์ ต่อไปนี้ ที่มีองค์ประกอบจาก.
คุณสมบัติ
รหัส Reed–Solomon เป็นรหัส [ n , k , n − k + 1] กล่าวคือ เป็นรหัสบล็อกเชิงเส้นที่มีความยาวn (เหนือF ) ที่มีมิติkและระยะห่างแฮมมิ งต่ำสุด รหัส Reed–Solomon เป็นรหัสที่ดีที่สุดในแง่ที่ว่าระยะห่างต่ำสุดมีค่าสูงสุดที่เป็นไปได้สำหรับรหัสเชิงเส้นขนาด ( n , k ) ซึ่งเรียกว่าขอบเขตซิงเกิลตันรหัสดังกล่าวเรียกอีกอย่างว่ารหัสแยกได้ด้วยระยะห่างสูงสุด (MDS )
ความสามารถในการแก้ไขข้อผิดพลาดของรหัสรีด-โซโลมอนนั้นถูกกำหนดโดยระยะห่างขั้นต่ำ หรือเทียบเท่ากับค่า ซึ่งเป็นมาตรวัดความซ้ำซ้อนในบล็อก หากไม่ทราบตำแหน่งของสัญลักษณ์ที่ผิดพลาดล่วงหน้า รหัสรีด-โซโลมอนสามารถแก้ไขสัญลักษณ์ที่ผิดพลาดได้สูงสุด ตัว นั่นคือ สามารถแก้ไขข้อผิดพลาดได้ครึ่งหนึ่งของจำนวนสัญลักษณ์ที่ซ้ำซ้อนที่เพิ่มเข้ามาในบล็อก บางครั้งตำแหน่งของข้อผิดพลาดเป็นที่ทราบล่วงหน้า (เช่น "ข้อมูลเสริม" ในอัตราส่วนสัญญาณต่อสัญญาณรบกวนของตัวถอดรหัส ) ซึ่งเรียกว่าการลบ (erasures ) รหัสรีด-โซโลมอน (เช่นเดียวกับรหัส MDS ใดๆ ) สามารถแก้ไขการลบได้เป็นสองเท่าของข้อผิดพลาด และสามารถแก้ไขข้อผิดพลาดและการลบได้ทุกรูปแบบตราบใดที่ความสัมพันธ์2 E + S ≤ n − kเป็นจริง โดยที่คือจำนวนข้อผิดพลาด และคือจำนวนการลบในบล็อก

ขอบเขตข้อผิดพลาดทางทฤษฎีสามารถอธิบายได้โดยใช้สูตรต่อไปนี้สำหรับ ช่องสัญญาณ AWGNสำหรับFSK : [ 12 ] และสำหรับรูปแบบการมอดูเลชั่นอื่นๆ: โดยที่, , , คืออัตราข้อผิดพลาดของสัญลักษณ์ในกรณี AWGN ที่ไม่ได้เข้ารหัส และคือลำดับการมอดูเลชั่น
สำหรับการใช้งานจริงของรหัสรีด-โซโลมอน มักใช้ฟิลด์จำกัดที่มีสมาชิกจำนวนหนึ่ง ในกรณีนี้ แต่ละสัญลักษณ์สามารถแทนด้วยค่า n บิต ผู้ส่งจะส่งจุดข้อมูลเป็นบล็อกที่เข้ารหัส และจำนวนสัญลักษณ์ในบล็อกที่เข้ารหัสคือดังนั้น รหัสรีด-โซโลมอนที่ทำงานกับสัญลักษณ์ 8 บิตจะมี สัญลักษณ์ต่อบล็อก (ค่านี้เป็นที่นิยมมากเนื่องจากระบบคอมพิวเตอร์ แบบไบต์เป็นที่แพร่หลาย) จำนวนโดยที่ คือจำนวน สัญลักษณ์ ข้อมูลในบล็อกเป็นพารามิเตอร์การออกแบบ รหัสที่ใช้กันทั่วไปจะเข้ารหัสสัญลักษณ์ข้อมูล 8 บิตบวกสัญลักษณ์พาริตี 8 บิต 32 ตัวในบล็อก n สัญลักษณ์ ซึ่งเรียกว่ารหัส และสามารถแก้ไขข้อผิดพลาดของสัญลักษณ์ได้สูงสุด 16 ตัวต่อบล็อก
คุณสมบัติของรหัสรีด-โซโลมอนที่กล่าวถึงข้างต้น ทำให้รหัสนี้เหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่เกิดข้อผิดพลาดเป็นช่วงๆเนื่องจากรหัสนี้ไม่สนใจว่าจะมีบิตผิดพลาดกี่บิตในสัญลักษณ์ หากบิตหลายบิตในสัญลักษณ์เสียหาย จะนับเป็นข้อผิดพลาดเพียงข้อเดียว ในทางกลับกัน หากกระแสข้อมูลไม่ได้มีลักษณะเป็นข้อผิดพลาดเป็นช่วงๆ หรือขาดหาย แต่เป็นข้อผิดพลาดแบบสุ่มทีละบิต รหัสรีด-โซโลมอนมักจะเป็นตัวเลือกที่ไม่ดีนักเมื่อเทียบกับรหัสไบนารี
รหัสรีด-โซโลมอน เช่นเดียวกับรหัสคอนโวลูชันเป็นรหัสโปร่งใส หมายความว่า หากสัญลักษณ์ในช่องสัญญาณถูกกลับด้านที่ใดที่หนึ่งในสายส่ง ตัวถอดรหัสก็จะยังคงทำงานได้ ผลลัพธ์ที่ได้จะเป็นการกลับด้านของข้อมูลดั้งเดิม อย่างไรก็ตาม รหัสรีด-โซโลมอนจะสูญเสียความโปร่งใสเมื่อรหัสถูกย่อ ( ดู 'หมายเหตุ' ในตอนท้ายของส่วนนี้ ) บิตที่ "หายไป" ในรหัสที่ย่อแล้วจะต้องถูกเติมด้วยศูนย์หรือหนึ่ง ขึ้นอยู่กับว่าข้อมูลนั้นถูกกลับด้านหรือไม่ (กล่าวอีกนัยหนึ่ง หากสัญลักษณ์ถูกกลับด้าน การเติมศูนย์จะต้องถูกกลับด้านเป็นการเติมหนึ่ง) ด้วยเหตุนี้ จึงจำเป็นอย่างยิ่งที่จะต้องระบุความหมายของข้อมูล (เช่น ข้อมูลจริงหรือข้อมูลที่ถูกกลับด้าน) ก่อนที่จะถอดรหัสรีด-โซโลมอน
รหัส Reed–Solomon จะเป็นแบบวัฏจักรหรือไม่นั้นขึ้นอยู่กับรายละเอียดปลีกย่อยของการสร้าง ในมุมมองดั้งเดิมของ Reed และ Solomon ซึ่งรหัสคำเป็นค่าของพหุนาม เราสามารถเลือกลำดับของจุดประเมินค่าในลักษณะที่ทำให้รหัสเป็นแบบวัฏจักรได้ โดยเฉพาะอย่างยิ่ง ถ้าเป็นรากปฐมภูมิของฟิลด์แล้วตามคำนิยามแล้ว สมาชิกที่ไม่เป็นศูนย์ทั้งหมดของจะอยู่ในรูปแบบสำหรับโดยที่พหุนามแต่ละตัวเหนือจะให้รหัสคำเนื่องจากฟังก์ชันก็เป็นพหุนามที่มีดีกรีเดียวกัน ฟังก์ชันนี้จึงให้รหัสคำเนื่องจากเป็นจริง รหัสคำนี้จึงเป็นการเลื่อนซ้ายแบบวัฏจักรของรหัสคำดั้งเดิมที่ได้มาจากดังนั้นการเลือกลำดับของกำลังรากปฐมภูมิเป็นจุดประเมินค่าทำให้รหัส Reed–Solomon ในมุมมองดั้งเดิมเป็นแบบวัฏจักร รหัส Reed–Solomon ในมุมมอง BCH เป็นแบบวัฏจักรเสมอเพราะรหัส BCH เป็นแบบวัฏจักร
หมายเหตุ
นักออกแบบไม่จำเป็นต้องใช้ขนาด "ตามธรรมชาติ" ของบล็อกรหัส Reed–Solomon เทคนิคที่เรียกว่า "การย่อ" สามารถสร้างรหัสที่เล็กลงได้ตามต้องการจากรหัสที่ใหญ่กว่า ตัวอย่างเช่น รหัส (255,223) ที่ใช้กันอย่างแพร่หลายสามารถแปลงเป็นรหัส (160,128) ได้โดยการเติมส่วนที่ไม่ได้ใช้ของบล็อกต้นฉบับด้วยเลขศูนย์ไบนารี 95 ตัวและไม่ส่งเลขศูนย์เหล่านั้น ที่ตัวถอดรหัส ส่วนเดียวกันของบล็อกจะถูกโหลดด้วยเลขศูนย์ไบนารีในพื้นที่
รหัส QR เวอร์ชัน 3 (29×29) ใช้บล็อกแบบสลับกัน ข้อความมีข้อมูล 26 ไบต์และเข้ารหัสโดยใช้บล็อกรหัส Reed-Solomon สองบล็อก แต่ละบล็อกเป็นรหัส Reed Solomon (255,233) ที่ย่อเป็นรหัส (35,13)
ทฤษฎีบท Delsarte–Goethals–Seidel [ 13 ]แสดงให้เห็นตัวอย่างของการประยุกต์ใช้รหัส Reed–Solomon ที่สั้นลง ควบคู่ไปกับการย่อให้สั้นลง เทคนิคที่เรียกว่าการเจาะช่วยให้สามารถละเว้นสัญลักษณ์พาริตีที่เข้ารหัสบางส่วนได้
ตัวถอดรหัส BCH view
ตัวถอดรหัสที่อธิบายไว้ในส่วนนี้ใช้มุมมอง BCH ของรหัสคำเป็นลำดับของสัมประสิทธิ์ โดยใช้พหุนามตัวสร้างคงที่ซึ่งทั้งตัวเข้ารหัสและตัวถอดรหัสทราบ
ตัวถอดรหัสปีเตอร์สัน–โกเรนสไตน์–เซียร์เลอร์
Daniel Gorenstein และ Neal Zierler ได้พัฒนาตัวถอดรหัสที่อธิบายไว้ในรายงานของ MIT Lincoln Laboratory โดย Zierler ในเดือนมกราคม พ.ศ. 2503 และต่อมาในบทความในเดือนมิถุนายน พ.ศ. 2504 [ 14 ] [ 15 ]ตัวถอดรหัส Gorenstein–Zierler และงานที่เกี่ยวข้องกับรหัส BCH ได้รับการอธิบายไว้ในหนังสือError Correcting CodesโดยW. Wesley Peterson (พ.ศ. 2504) [ 3 ]
สูตร
ข้อความที่ส่งนั้นถือเป็นสัมประสิทธิ์ของพหุนาม
จากผลของกระบวนการเข้ารหัส Reed–Solomon ทำให้s ( x ) หารลงตัวด้วยพหุนามตัวสร้าง โดยที่αเป็นองค์ประกอบดั้งเดิม
เนื่องจากs ( x ) เป็นผลคูณของตัวสร้างg ( x) ดังนั้น s( x ) จึง "สืบทอด" รากทั้งหมดของตัวสร้าง g(x) ได้: ด้วยเหตุนี้
พหุนามที่ส่งมานั้นถูกเปลี่ยนแปลงระหว่างทางด้วยพหุนามผิดพลาด ทำให้ได้พหุนามที่ได้รับ
สัมประสิทธิ์e iจะเป็นศูนย์หากไม่มีข้อผิดพลาดที่กำลังx นั้น และจะมีค่าไม่เป็นศูนย์หากมีข้อผิดพลาด หากมี ข้อผิดพลาด νข้อผิดพลาดที่กำลังi k ที่แตกต่างกัน ของxแล้ว
เป้าหมายของตัวถอดรหัสคือการหาจำนวนข้อผิดพลาด ( ν ) ตำแหน่งของข้อผิดพลาด ( ik ) และค่าข้อผิดพลาด ณ ตำแหน่งเหล่านั้น ( eik ) จากนั้นจึงคำนวณe ( x ) และลบออกจาก r ( x )เพื่อ ให้ได้ข้อความที่ส่งมาแต่เดิมs ( x )
การถอดรหัสกลุ่มอาการ
ตัวถอดรหัสเริ่มต้นด้วยการประเมินพหุนามที่ได้รับ ณ จุดต่างๆเราเรียกผลลัพธ์ของการประเมินนั้นว่า "ซินโดรม" S jซึ่งกำหนดไว้ดังนี้ โปรด ทราบว่าเนื่องจากมีรากที่ดังที่แสดงในส่วนก่อนหน้า
ข้อดีของการพิจารณาซินโดรมคือ พหุนามของข้อความจะหายไป กล่าวคือ ซินโดรมจะเกี่ยวข้องกับข้อผิดพลาดเท่านั้น และไม่ได้รับผลกระทบจากเนื้อหาจริงของข้อความที่กำลังส่ง หากซินโดรมทั้งหมดเป็นศูนย์ อัลกอริทึมจะหยุดทำงานและรายงานว่าข้อความไม่เสียหายระหว่างการส่ง
ตัวระบุตำแหน่งข้อผิดพลาดและค่าข้อผิดพลาด
เพื่อความสะดวก ให้กำหนดตัวระบุตำแหน่งข้อผิดพลาดX kและค่าข้อผิดพลาดY kดังนี้
จากนั้นสามารถเขียนกลุ่มอาการต่างๆ โดยใช้ตัวระบุตำแหน่งข้อผิดพลาดและค่าข้อผิดพลาดเหล่านี้ได้ดังนี้
คำจำกัดความของค่ากลุ่มอาการนี้เทียบเท่ากับคำจำกัดความก่อนหน้านี้เนื่องจาก
กลุ่มอาการดังกล่าวให้ระบบสมการn − k ≥ 2 νสมการใน 2 ν ตัวแปร ที่ไม่ทราบค่า แต่ระบบสมการนั้นเป็นแบบไม่เชิงเส้นในX kและไม่มีคำตอบที่ชัดเจน อย่างไรก็ตาม หาก ทราบค่า X k (ดูด้านล่าง) สมการกลุ่มอาการจะให้ระบบสมการเชิงเส้น ซึ่งสามารถแก้หาค่าความคลาดเคลื่อน Y k ได้อย่างง่ายดาย
ดังนั้น ปัญหาจึงอยู่ที่การหาค่าX kเพราะถ้าเป็นเช่นนั้น เมทริกซ์ด้านซ้ายสุดก็จะทราบแล้ว และทั้งสองข้างของสมการก็สามารถคูณด้วยเมทริกซ์ผกผันได้ ทำให้ได้ค่า Y k
ในรูปแบบของอัลกอริธึมนี้ที่ทราบตำแหน่งของข้อผิดพลาดอยู่แล้ว (เมื่อใช้เป็นรหัสแก้ไขข้อ ผิดพลาด ) นี่คือจุดสิ้นสุด ตำแหน่งของข้อผิดพลาด ( Xk ) เป็นที่ทราบอยู่แล้วด้วยวิธีอื่น (ตัวอย่างเช่น ในการส่งสัญญาณ FM ส่วนที่บิตสตรีมไม่ชัดเจนหรือถูกรบกวนสามารถกำหนดได้โดยใช้การวิเคราะห์ความถี่ ) ในสถานการณ์นี้สามารถแก้ไขข้อผิดพลาดได้ มากถึง
ส่วนที่เหลือของอัลกอริธึมทำหน้าที่ระบุตำแหน่งของข้อผิดพลาด และจะต้องใช้ค่าซินโดรมสูงสุดถึงแทนที่จะใช้เพียงค่าที่ใช้มาจนถึงปัจจุบัน นี่คือเหตุผลที่ต้องเพิ่มสัญลักษณ์แก้ไขข้อผิดพลาดเป็นสองเท่าของจำนวนสัญลักษณ์ที่สามารถแก้ไขได้โดยไม่ทราบตำแหน่งของข้อผิดพลาดเหล่านั้น
พหุนามระบุตำแหน่งข้อผิดพลาด
มีความสัมพันธ์เวียนเกิด เชิงเส้น ที่ก่อให้เกิดระบบสมการเชิงเส้น การแก้สมการเหล่านั้นจะ ระบุ ตำแหน่งข้อผิดพลาดX k เหล่านั้น
กำหนดพหุนามระบุตำแหน่งข้อผิดพลาดΛ( x )ดังนี้
ค่าศูนย์ของΛ( x )คือส่วนกลับซึ่งเป็นผลมาจากการสร้างสัญลักษณ์ผลคูณข้างต้น เนื่องจากถ้าแล้วพจน์ที่คูณกันตัวใดตัวหนึ่งจะเป็นศูนย์ทำให้พหุนามทั้งหมดมีค่าเป็นศูนย์:
ให้เป็นจำนวนเต็มใดๆ ที่คูณทั้งสองข้างด้วยแล้วผลลัพธ์ก็ยังคงเป็นศูนย์:
เมื่อรวมค่าkตั้งแต่ 1 ถึงνแล้ว ผลลัพธ์ก็ยังคงเป็นศูนย์:
รวมแต่ละพจน์เข้ากับผลรวมของมันเอง:
ดึงค่าคงที่ที่ไม่ได้รับผลกระทบจากการรวมผลออกมา:
ผลรวมเหล่านี้เทียบเท่ากับค่าซินโดรม ซึ่งเรารู้และสามารถแทนค่าได้ ดังนั้นจึงลดรูปเหลือดังนี้
ลบออกจากทั้งสองข้างจะได้
โปรดจำไว้ว่าjถูกเลือกให้เป็นจำนวนเต็มใดๆ ระหว่าง 1 ถึงvรวมทั้งสองค่า และความเท่าเทียมกันนี้เป็นจริงสำหรับค่าทั้งหมดดังกล่าว ดังนั้น เราจึงมี สมการเชิงเส้น vสมการ ไม่ใช่แค่สมการเดียว ระบบสมการเชิงเส้นนี้จึงสามารถแก้หาค่าสัมประสิทธิ์ Λ iของพหุนามตำแหน่งข้อผิดพลาดได้: ข้างต้นถือว่าตัวถอดรหัสรู้จำนวนข้อผิดพลาดνแต่จำนวนนั้นยังไม่ได้ถูกกำหนด ตัวถอดรหัส PGZ ไม่ได้กำหนดνโดยตรง แต่จะค้นหาโดยการลองค่าต่างๆ ต่อเนื่องกัน ตัวถอดรหัสจะสมมติค่าที่มากที่สุดสำหรับการทดลองν ก่อน แล้วตั้งค่าระบบเชิงเส้นสำหรับค่านั้น หากสามารถแก้สมการได้ (เช่น ดีเทอร์มิแนนต์ของเมทริกซ์ไม่เป็นศูนย์) ค่าทดลองนั้นก็คือจำนวนข้อผิดพลาด หากไม่สามารถแก้ระบบเชิงเส้นได้ ค่าทดลองνจะลดลงหนึ่งค่า และจะตรวจสอบระบบที่เล็กกว่าถัดไป[ 16 ]
จงหารากของพหุนามระบุตำแหน่งข้อผิดพลาด
ใช้สัมประสิทธิ์ Λ iที่พบในขั้นตอนที่แล้วเพื่อสร้างพหุนามระบุตำแหน่งข้อผิดพลาด รากของพหุนามระบุตำแหน่งข้อผิดพลาดสามารถหาได้โดยการค้นหาอย่างละเอียด ตัวระบุตำแหน่งข้อผิดพลาดX kคือส่วนกลับของรากเหล่านั้น ลำดับของสัมประสิทธิ์ของพหุนามระบุตำแหน่งข้อผิดพลาดสามารถกลับด้านได้ ในกรณีนี้ รากของพหุนามที่กลับด้านนั้นจะเป็นตัวระบุตำแหน่งข้อผิดพลาด(ไม่ใช่ส่วนกลับของมัน) การค้นหาแบบ Chienเป็นวิธีที่มีประสิทธิภาพในการดำเนินการขั้นตอนนี้
คำนวณค่าความคลาดเคลื่อน
เมื่อทราบตำแหน่งข้อผิดพลาดX kแล้ว ก็สามารถกำหนดค่าข้อผิดพลาดได้ โดยสามารถทำได้โดยการหาค่าY k โดยตรง จาก เมทริกซ์ สมการข้อผิดพลาดที่ให้ไว้ข้างต้น หรือโดยใช้ อัลกอริ ทึม ของ Forney
คำนวณตำแหน่งข้อผิดพลาด
คำนวณค่าi kโดยใช้ลอการิทึมฐานของX kโดยทั่วไปจะทำโดยใช้ตารางค้นหา ที่คำนวณไว้ ล่วงหน้า
แก้ไขข้อผิดพลาด
สุดท้ายe ( x ) จะถูกสร้างขึ้นจากi kและe i kจากนั้นจะถูกลบออกจากr ( x ) เพื่อให้ได้ข้อความที่ส่งมาแต่เดิมs ( x ) โดยแก้ไขข้อผิดพลาดแล้ว
ตัวอย่าง
พิจารณาโค้ด Reed–Solomon ที่กำหนดไว้ในGF (929)โดยที่α = 3และt = 4 (ซึ่งใช้ใน บาร์โค้ด PDF417 ) สำหรับโค้ด RS(7,3) พหุนามตัวสร้างคือ ถ้าพหุนามข้อความคือp ( x ) = 3 x 2 + 2 x + 1แล้วคำรหัสที่เป็นระบบจะถูกเข้ารหัสดังนี้: ข้อผิดพลาดในการส่งอาจทำให้ได้รับสิ่งนี้แทน: ซินโดรมคำนวณโดยการประเมินrที่กำลังของα : ทำให้ได้ระบบ
โดยใช้การ กำจัดแบบเกาส์เซียน จะ ได้รากx 1 = 757 = 3 −3และx 2 = 562 = 3 −4สามารถสลับสัมประสิทธิ์ได้ เพื่อให้ได้ราก 27 = 3 3และ 81 = 3 4ที่มีเลขชี้กำลังเป็นบวก แต่โดยทั่วไปแล้วจะไม่ใช้ ค่าลอการิทึมของรากที่กลับด้านจะสอดคล้องกับตำแหน่งของข้อผิดพลาด (จากขวาไปซ้าย ตำแหน่ง 0 คือพจน์สุดท้ายในรหัสคำ)
ในการคำนวณค่าความคลาดเคลื่อน ให้ใช้อัลกอริทึมของ Forney :
การลบออกจากพหุนามที่ได้รับr ( x ) จะสร้างคำรหัสเดิมs ขึ้นมา ใหม่
ตัวถอดรหัสเบอร์เลแคมป์-แมสซีย์
อัลกอริทึม Berlekamp–Masseyเป็นวิธีการวนซ้ำทางเลือกสำหรับการหาพหุนามระบุตำแหน่งข้อผิดพลาด ในแต่ละรอบการวนซ้ำ จะคำนวณความคลาดเคลื่อนโดยอิงจากอินสแตนซ์ปัจจุบันของ Λ( x ) โดยมีจำนวนข้อผิดพลาดที่สมมติไว้e จาก นั้นปรับ Λ( x ) และeเพื่อให้ Δ ที่คำนวณใหม่เป็นศูนย์ บทความเรื่องอัลกอริทึม Berlekamp–Masseyมีคำอธิบายโดยละเอียดเกี่ยวกับกระบวนการนี้ ในตัวอย่างต่อไปนี้C ( x ) ถูกใช้เพื่อแทน Λ( x )
ตัวอย่าง
โดยใช้ข้อมูลชุดเดียวกับตัวอย่าง Peterson Gorenstein Zierler ด้านบน:
| n | S n +1 | ง | ซี | บี | ข | ม |
|---|---|---|---|---|---|---|
| 0 | 732 | 732 | 197 x + 1 | 1 | 732 | 1 |
| 1 | 637 | 846 | 173 x + 1 | 1 | 732 | 2 |
| 2 | 762 | 412 | 634 x 2 + 173 x + 1 | 173 x + 1 | 412 | 1 |
| 3 | 925 | 576 | 329 x 2 + 821 x + 1 | 173 x + 1 | 412 | 2 |
ค่าสุดท้ายของCคือพหุนามระบุตำแหน่งข้อผิดพลาด Λ( x )
ตัวถอดรหัสซูกิยามะ
อีกวิธีหนึ่งที่ใช้การวนซ้ำในการคำนวณทั้งพหุนามระบุตำแหน่งข้อผิดพลาดและพหุนามค่าข้อผิดพลาดนั้น อิงตามการดัดแปลงอัลกอริธึมยุคลิดแบบขยาย ของซูกิยา มะ
กำหนดS ( x ), Λ( x ) และ Ω( x ) สำหรับ ซินโดรม tและ ข้อผิดพลาด e :
สมการสำคัญคือ:
สำหรับt = 6 และe = 3:
ค่าตรงกลางเป็นศูนย์เนื่องจากความสัมพันธ์ระหว่าง Λ และกลุ่มอาการ
อัลกอริทึมยุคลิดแบบขยายสามารถค้นหาอนุกรมของพหุนามในรูปแบบดังกล่าวได้
โดยที่ระดับของRจะลดลงเมื่อiเพิ่มขึ้น เมื่อระดับของR i ( x ) < t /2 แล้ว
ไม่จำเป็นต้องบันทึก B ( x ) และQ ( x ) ดังนั้นอัลกอริทึมจึงเป็นดังนี้:
R −1 := x t R 0 := S ( x ) A −1 := 0 A 0 := 1 i := 0 ในขณะที่ดีกรีของR i ≥ t /2 i := i + 1 Q := R i -2 / R i -1 R i := R i -2 - Q R i -1 A i := A i -2 - Q A i -1
เพื่อกำหนดพจน์ลำดับต่ำของ Λ( x ) ให้เป็น 1 ให้หาร Λ( x ) และ Ω( x ) ด้วยA i (0):
A i (0) คือเทอมคงที่ (ลำดับต่ำ) ของA i
ตัวอย่าง
โดยใช้ข้อมูลชุดเดียวกับตัวอย่างของ Peterson–Gorenstein–Zierler ข้างต้น:
| ฉัน | ริไอ | เอไอ |
|---|---|---|
| −1 | 001 x 4 + 000 x 3 + 000 x 2 + 000 x + 000 | 000 |
| 0 | 925 x 3 + 762 x 2 + 637 x + 732 | 001 |
| 1 | 683 x 2 + 676 x + 024 | 697 x + 396 |
| 2 | 673 x + 596 | 608 x 2 + 704 x + 544 |
ตัวถอดรหัสโดยใช้การแปลงฟูริเยร์แบบไม่ต่อเนื่อง
สามารถใช้การแปลงฟูริเยร์แบบไม่ต่อเนื่องในการถอดรหัสได้[ 17 ]เพื่อหลีกเลี่ยงความขัดแย้งกับชื่อซินโดรม ให้c ( x ) = s ( x ) เป็นรหัสคำที่เข้ารหัสr ( x ) และe ( x ) เหมือนกับข้างต้น กำหนดC ( x ), E ( x ) และR ( x ) เป็นการแปลงฟูริเยร์แบบไม่ต่อเนื่องของc ( x ), e ( x ) และr ( x ) เนื่องจากr ( x ) = c ( x ) + e ( x ) และเนื่องจากการแปลงฟูริเยร์แบบไม่ต่อเนื่องเป็นตัวดำเนินการเชิงเส้นR ( x ) = C ( x ) + E ( x )
แปลงr ( x ) เป็นR ( x ) โดยใช้การแปลงฟูริเยร์แบบไม่ต่อเนื่อง เนื่องจากการคำนวณสำหรับการแปลงฟูริเยร์แบบไม่ต่อเนื่องนั้นเหมือนกับการคำนวณสำหรับซินโดรม ดังนั้นสัมประสิทธิ์t ของ R ( x ) และE ( x ) จึงเหมือนกับซินโดรม:
ใช้ค่าต่างๆเป็นกลุ่มอาการ (ซึ่งเหมือนกัน) และสร้างพหุนามระบุตำแหน่งข้อผิดพลาดโดยใช้วิธีการจากตัวถอดรหัสใดๆ ข้างต้น
ให้v = จำนวนข้อผิดพลาด สร้างE ( x ) โดยใช้สัมประสิทธิ์ที่ทราบของพหุนามระบุตำแหน่งข้อผิดพลาด และสูตรเหล่านี้
จากนั้นคำนวณC ( x ) = R ( x ) − E ( x ) และทำการแปลงผกผัน ( การประมาณค่าพหุนาม ) ของC ( x ) เพื่อสร้างc ( x )
การถอดรหัสเกินขอบเขตการแก้ไขข้อผิดพลาด
ขอบเขตของ ซิงเกิลตัน ระบุว่าระยะทางขั้นต่ำdของรหัสบล็อกเชิงเส้นขนาด ( n , k ) มีขอบเขตบนอยู่ที่n - k + 1 โดยปกติแล้ว ระยะทางdจะเข้าใจว่าจำกัดความสามารถในการแก้ไขข้อผิดพลาดไว้ที่⌊( d - 1) / 2⌋รหัสรีด-โซโลมอนบรรลุขอบเขตนี้ด้วยความเท่าเทียมกัน และสามารถแก้ไขข้อผิดพลาดได้มากถึง⌊( n - k ) / 2⌋อย่างไรก็ตาม ขอบเขตการแก้ไขข้อผิดพลาดนี้ไม่แน่นอน
ในปี พ.ศ. 2542 Madhu SudanและVenkatesan Guruswamiที่ MIT ได้ตีพิมพ์ "การถอดรหัสที่ดีขึ้นของรหัส Reed–Solomon และรหัสเรขาคณิตเชิงพีชคณิต" โดยแนะนำอัลกอริทึมที่อนุญาตให้แก้ไขข้อผิดพลาดที่เกินครึ่งหนึ่งของระยะทางขั้นต่ำของรหัส[ 18 ] อัลกอริทึมนี้ ใช้ได้กับรหัส Reed–Solomon และโดยทั่วไปกับรหัสเรขาคณิตเชิงพีชคณิตอัลกอริทึมนี้สร้างรายการคำรหัส (เป็น อัลกอริทึม การถอดรหัสรายการ ) และอิงตามการแทรกสอดและการแยกตัวประกอบของพหุนามเหนือGF (2 m )และส่วนขยายของมัน
ในปี 2023 นักทฤษฎีการเข้ารหัสแสดงให้เห็นว่ารหัส Reed-Solomon ที่กำหนดเหนือจุดประเมินแบบสุ่มสามารถบรรลุ ความสามารถ ในการถอดรหัสรายการ (ข้อผิดพลาดสูงสุดn - k ) บนตัวอักษรขนาดเชิงเส้นด้วยความน่าจะเป็นสูง [ 19 ] [ 20 ] [ 21 ] ผลลัพธ์เหล่านี้ไม่ได้ให้ขั้นตอนวิธีสำหรับการดำเนินการถอดรหัส
การถอดรหัสแบบอ่อน
วิธีการถอดรหัสพีชคณิตที่อธิบายไว้ข้างต้นเป็นวิธีการแบบตัดสินใจอย่างเด็ดขาด ซึ่งหมายความว่าสำหรับทุกสัญลักษณ์ จะมีการตัดสินใจอย่างเด็ดขาดเกี่ยวกับค่าของมัน ตัวอย่างเช่น ตัวถอดรหัสอาจเชื่อมโยงค่าเพิ่มเติมกับแต่ละสัญลักษณ์ ซึ่งสอดคล้องกับ ความมั่นใจของ ตัวถอดรหัส ช่อง สัญญาณในความถูกต้องของสัญลักษณ์ การเกิดขึ้นของ รหัส LDPCและรหัสเทอร์โบซึ่งใช้ วิธีการถอดรหัส การแพร่กระจายความเชื่อแบบตัดสินใจอย่างอ่อนโยน ซ้ำๆ เพื่อให้ได้ประสิทธิภาพการแก้ไขข้อผิดพลาดที่ใกล้เคียงกับขีดจำกัดทางทฤษฎีได้กระตุ้นความสนใจในการประยุกต์ใช้การถอดรหัสแบบตัดสินใจอย่างอ่อนโยนกับรหัสพีชคณิตแบบดั้งเดิม ในปี 2546 Ralf Koetter และAlexander Vardyได้นำเสนออัลกอริทึมการถอดรหัสรายการพีชคณิตแบบตัดสินใจอย่างอ่อนโยนในเวลาพหุนามสำหรับรหัส Reed–Solomon ซึ่งอิงตามงานของ Sudan และ Guruswami [ 22 ] ในปี 2559 Steven J. Franke และ Joseph H. Taylor ได้ตีพิมพ์ตัวถอดรหัสแบบตัดสินใจอย่างอ่อนโยนแบบใหม่[ 23 ]
ตัวถอดรหัสภาพต้นฉบับของ Reed Solomon
ตัวถอดรหัสที่อธิบายไว้ในส่วนนี้ใช้มุมมองดั้งเดิมของรีด-โซโลมอนเกี่ยวกับรหัสคำว่าเป็นลำดับของค่าพหุนาม โดยที่พหุนามนั้นอิงตามข้อความที่จะเข้ารหัส ชุดค่าคงที่เดียวกันนี้ถูกใช้โดยตัวเข้ารหัสและตัวถอดรหัส และตัวถอดรหัสจะกู้คืนพหุนามการเข้ารหัส (และอาจรวมถึงพหุนามระบุตำแหน่งข้อผิดพลาด) จากข้อความที่ได้รับ
ตัวถอดรหัสเชิงทฤษฎี
Reed และ Solomon อธิบายตัวถอดรหัสเชิงทฤษฎีที่แก้ไขข้อผิดพลาดโดยการค้นหาพหุนามข้อความที่ได้รับความนิยมมากที่สุด[ 1 ]ตัวถอดรหัสรู้เพียงชุดค่าถึงและวิธีการเข้ารหัสที่ใช้ในการสร้างลำดับค่าของคำรหัสเท่านั้น ข้อความต้นฉบับ พหุนาม และข้อผิดพลาดใดๆ นั้นไม่เป็นที่รู้จัก ขั้นตอนการถอดรหัสอาจใช้วิธีการเช่นการแทรกสอดแบบ Lagrange บนชุดย่อยต่างๆ ของค่าคำรหัส n ค่าที่เลือก k ค่าในแต่ละครั้งเพื่อสร้างพหุนามที่เป็นไปได้ซ้ำๆ จนกว่าจะสร้างพหุนามที่ตรงกันจำนวนมากพอที่จะกำจัดข้อผิดพลาดใดๆ ในคำรหัสที่ได้รับได้อย่างเหมาะสม เมื่อกำหนดพหุนามแล้ว ข้อผิดพลาดใดๆ ในคำรหัสสามารถแก้ไขได้โดยการคำนวณค่าคำรหัสที่สอดคล้องกันใหม่ น่าเสียดายที่ในกรณีส่วนใหญ่ ยกเว้นกรณีที่ง่ายที่สุด มีชุดย่อยมากเกินไป ดังนั้นอัลกอริทึมจึงไม่สามารถนำไปใช้ได้จริง จำนวนชุดย่อยคือสัมประสิทธิ์ทวินาม , , และจำนวนชุดย่อยนั้นเป็นไปไม่ได้แม้แต่สำหรับรหัสที่ไม่ซับซ้อนมากนัก สำหรับ รหัส (255,249)ที่สามารถแก้ไขข้อผิดพลาดได้ 3 ข้อ ตัวถอดรหัสเชิงทฤษฎีแบบง่ายๆ จะตรวจสอบชุดย่อย 359 พันล้านชุด
เครื่องถอดรหัส Berlekamp Welch
ในปี 1986 ได้มีการพัฒนาตัวถอดรหัสที่รู้จักกันในชื่ออัลกอริทึม Berlekamp–Welchซึ่งสามารถกู้คืนพหุนามข้อความต้นฉบับได้ เช่นเดียวกับพหุนาม "ระบุตำแหน่ง" ข้อผิดพลาดที่สร้างค่าศูนย์สำหรับค่าอินพุตที่สอดคล้องกับข้อผิดพลาด โดยมี ความ ซับซ้อนของเวลาO ( n³ )โดยที่nคือจำนวนค่าในข้อความ จากนั้นพหุนามที่กู้คืนได้จะถูกนำมาใช้เพื่อกู้คืน (คำนวณใหม่ตามความจำเป็น) ข้อความต้นฉบับ
ตัวอย่าง
โดยใช้ RS(7,3), GF(929) และเซตของจุดประเมินa i = i − 1
- a = {0, 1, 2, 3, 4, 5, 6}
ถ้าพหุนามข้อความคือ
- p ( x ) = 003 x 2 + 002 x + 001
รหัสลับคือ
- c = {001, 006, 017, 034, 057, 086, 121}
ข้อผิดพลาดในการส่งข้อมูลอาจทำให้ได้รับข้อความนี้แทน
- b = c + e = {001, 006, 123, 456, 057, 086, 121}
สมการสำคัญคือ:
- b i E ( a i ) - Q ( a i ) = 0
สมมติจำนวนข้อผิดพลาดสูงสุด: e = 2สมการหลักจึงกลายเป็น:
- b i ( e 0 + e 1 a i ) - ( q 0 + q 1 a i + q 2 a2 ฉัน+ q 3 a3 i+ q 4 a4 i) = - b i a2 ฉัน
การใช้การกำจัดแบบเกาส์เซียน :
- Q ( x ) = 003 x 4 + 916 x 3 + 009 x 2 + 007 x + 006
- E ( x ) = 001 x 2 + 924 x + 006
- คิว ( x )/อดีต) = P ( x ) = 003 x 2 + 002 x + 001
คำนวณP ( x ) ใหม่ โดยที่E ( x ) = 0 : {2, 3}เพื่อแก้ไขbส่งผลให้ได้รหัสคำที่แก้ไขแล้ว:
- c = {001, 006, 017, 034, 057, 086, 121} }}
ตัวถอดรหัสเกา
ในปี พ.ศ. 2545 Shuhong Gao ได้พัฒนาตัวถอดรหัสที่ได้รับการปรับปรุงโดยอิงจากอัลกอริทึม Euclid ที่ขยายเพิ่มเติม[ 24 ]
ตัวอย่าง
- การประมาณค่าแบบลากรางจ์ของสำหรับถึง
- สร้างและจนถึงระดับของสำหรับตัวอย่างนี้
| ฉัน | ริไอ | เอไอ |
|---|---|---|
| −1 | 001 x 7 + 908 x 6 + 175 x 5 + 194 x 4 + 695 x 3 + 094 x 2 + 720 x + 000 | 000 |
| 0 | 055 x 6 + 440 x 5 + 497 x 4 + 904 x 3 + 424 x 2 + 472 x + 001 | 001 |
| 1 | 702 x 5 + 845 x 4 + 691 x 3 + 461 x 2 + 327 x + 237 | 152 x + 237 |
| 2 | 266 x 4 + 086 x 3 + 798 x 2 + 311 x + 532 | 708 x 2 + 176 x + 532 |
- Q ( x ) = R 2 = 266 x 4 + 086 x 3 + 798 x 2 + 311 x + 532
- E ( x ) = A 2 = 708 x 2 + 176 x + 532
เพื่อสร้างพหุนามซ้ำกันที่สร้างโดย Berlekamp Welsh ให้หารQ ( x ) และE ( x ) ด้วยสัมประสิทธิ์ที่มีนัยสำคัญที่สุดของE ( x ) = 708
- Q ( x ) = 003 x 4 + 916 x 3 + 009 x 2 + 007 x + 006
- E ( x ) = 001 x 2 + 924 x + 006
- คิว ( x )/อดีต) = P ( x ) = 003 x 2 + 002 x + 001
คำนวณP ( x ) ใหม่ โดยที่E ( x ) = 0 : {2, 3}เพื่อแก้ไขbส่งผลให้ได้รหัสคำที่แก้ไขแล้ว:
- c = {001, 006, 017, 034, 057, 086, 121}
ตัวถอดรหัสกลุ่มอาการ
ประมาณปี 2015 มีการพัฒนาตัวถอดรหัสที่ได้รับการปรับปรุง[ 25 ]ตัวถอดรหัสสร้างซินโดรม และคล้ายกับมุมมอง BCH สมการสำคัญระหว่างพหุนามระบุตำแหน่งข้อผิดพลาดและซินโดรมจะเหมือนกัน แต่พหุนามระบุตำแหน่งข้อผิดพลาดมีรากที่สอดคล้องกับและใช้ตารางค้นหาเพื่อแปลงรากเป็นค่าชดเชยรหัสคำ
การเริ่มต้น: กำหนดพหุนาม: . กำหนด เซตของ พหุนาม: . สร้าง เซตของ ค่า : . สร้าง เซตของ พหุนาม:
การถอดรหัส - ได้รับรหัสคำที่มีข้อผิดพลาดที่เป็นไปได้มี การสร้างพหุนามซินโดรมถ้า ไม่พบข้อผิดพลาด มิฉะนั้นจะพบข้อผิดพลาด อนุกรมยูคลิดแบบขยายจะเริ่มต้นด้วย, , , และดำเนินต่อไปจนถึงดีกรีของ พหุนามระบุตำแหน่งข้อผิดพลาดคือ และพหุนามค่าข้อผิดพลาดคือและถูกหารด้วยพจน์ที่มีนัยสำคัญน้อยที่สุดของมี การสร้าง อนุพันธ์อย่างเป็นทางการ ของ : ค่าชดเชยของข้อผิดพลาดสอดคล้องกับรากของ สำหรับราก = , ค่าข้อผิดพลาดสำหรับคือ
ถ้า ตรวจพบค่าความคลาดเคลื่อนที่สอดคล้อง กับค่าออฟเซ็ต และมีการคำนวณค่าความคลาดเคลื่อนแยกต่างหาก: เซตที่สอดคล้องกับรากของสัมประสิทธิ์ที่มีนัยสำคัญที่สุดของ
ตัวอย่าง
โดยใช้ข้อมูลชุดเดียวกับตัวอย่างของ Berlekamp Welch
การเริ่มต้นระบบ:
| ฉัน | พีไอ |
|---|---|
| 0 | 040 |
| 1 | 689 z 3 + 689 z 2 + 689 z + 689 |
| 2 | 155 ซี3 + 542 ซี2 + 271 ซี + 600 |
| 3 | 696 ซ3 + 232 ซ2 + 387 ซ + 129 |
| 4 | 311 z 3 + 310 z 2 + 542 z + 600 |
| 5 | 657 z 3 + 503 z 2 + 658 z + 689 |
| 6 | 279 ซ3 + 511 ซ2 + 240 ซ + 040 |
การถอดรหัส: ยูคลิด:
| ฉัน | ริไอ | เอไอ |
|---|---|---|
| -1 | 001 z 4 + 000 z 3 + 000 z 2 + 000 z + 000 | 000 |
| 0 | 785 ซี3 + 213 ซี2 + 666 ซี + 055 | 001 |
| 1 | 658 z 2 + 858 z + 323 | 200 z + 141 |
| 2 | 294 z + 709 | 905 z 2 + 020 z + 925 |
หารด้วย925
ดูเพิ่มเติม
- รหัส BCH
- อัลกอริทึมเบอร์เลแคมป์-แมสซีย์
- อัลกอริทึมเบอร์เลแคมป์-เวลช์
- การค้นหา Chien
- รหัสวงจร
- รหัสพับกก-โซโลมอน
- การแก้ไขข้อผิดพลาดล่วงหน้า
หมายเหตุ
- ^ผู้เขียนใน Andrews et al. (2007) นำเสนอผลการจำลองที่แสดงให้เห็นว่าสำหรับอัตราการเข้ารหัสเดียวกัน (1/6) รหัสเทอร์โบมีประสิทธิภาพเหนือกว่ารหัส Reed-Solomon ที่เชื่อมต่อกันได้ถึง 2 dB (อัตราข้อผิดพลาดบิต ) [ 10 ]
ลิงก์ภายนอก
ข้อมูลและบทแนะนำ
- เวลช์, แอลอาร์ (1997), มุมมองดั้งเดิมของรหัสรีด-โซโลมอน (PDF) , บันทึกการบรรยาย
- Koetter, Ralf (2005), รหัสรีด-โซโลมอน , บันทึกการบรรยาย MIT 6.451 (วิดีโอ), เก็บถาวรจากต้นฉบับเมื่อ 2013-03-13
- บทนำเกี่ยวกับรหัสรีด-โซโลมอน: หลักการ สถาปัตยกรรม และการนำไปใช้งาน (มหาวิทยาลัยรัฐโคโลราโด)
- Geisel, William A. (สิงหาคม 1990), คู่มือเกี่ยวกับการเข้ารหัสแก้ไขข้อผิดพลาดแบบ Reed–Solomon , เอกสารทางเทคนิค, NASA , TM-102162
- รีด, เจฟฟ์ เอ. (เมษายน 1995), CRC และ Reed Solomon ECC (PDF)
การนำไปใช้
- ไลบรารี FEC ในภาษา C โดย Phil Karn (หรือที่รู้จักในชื่อ KA9Q) ประกอบด้วยโคเด็ก Reed–Solomon ทั้งเวอร์ชันทั่วไปและเวอร์ชันปรับให้เหมาะสม (223,255)
- ไลบรารีถอดรหัสแบบอ่อน Reed–Solomon ที่เขียนด้วยภาษา C++ แบบโอเพนซอร์ส
- การนำการถอดรหัส Reed–Solomon แบบมีข้อผิดพลาดและการลบมาใช้ใน Matlab
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การแก้ไขข้อผิดพลาดของ Reed–Solomon
ใน ทฤษฎีสารสนเทศ และ ทฤษฎีการเข้ารหัส รหัส Reed–Solomon เป็นกลุ่มของ รหัสแก้ไขข้อผิดพลาด ที่ Irving S. Reed และ Gustave Solomon นำเสนอ ในปี พ.ศ.
ประวัติศาสตร์
รหัส Reed–Solomon ได้รับการพัฒนาในปี 1960 โดย Irving S. Reed และ Gustave Solomon ซึ่งในขณะนั้นเป็นเจ้าหน้าที่ของ MIT Lincoln Laboratory บทความสำคัญของพวกเขามีชื่อว่า "Polynomial Codes over Certain Finite Fields" [ 1 ]...
การจัดเก็บข้อมูล
การเข้ารหัสแบบรีด-โซโลมอนถูกนำมาใช้กันอย่างแพร่หลายใน ระบบ จัดเก็บข้อมูลขนาดใหญ่ เพื่อแก้ไขข้อผิดพลาดแบบเบิร์สต์ที่เกิดจากข้อบกพร่องของสื่อบันทึกข้อมูล
บาร์โค้ด
บาร์โค้ดสองมิติเกือบทั้งหมด เช่น PDF-417 , MaxiCode , Datamatrix , QR Code , Aztec Code และ Han Xin Code ใช้การแก้ไขข้อผิดพลาดแบบ Reed–Solomon เพื่อให้สามารถอ่านได้อย่างถูกต้องแม้ว่าส่วนใดส่วนหนึ่งของบาร์โค้ดจะเสียหาย...