อ่าน 45 นาที
รหัสสีเทา
รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์...
รหัสสีเทา
| รหัสสีเทา | ||||
|---|---|---|---|---|
| 4 | 3 | 2 | 1 | |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 2 | 0 | 0 | 1 | 1 |
| 3 | 0 | 0 | 1 | 0 |
| 4 | 0 | 1 | 1 | 0 |
| 5 | 0 | 1 | 1 | 1 |
| 6 | 0 | 1 | 0 | 1 |
| 7 | 0 | 1 | 0 | 0 |
| 8 | 1 | 1 | 0 | 0 |
| 9 | 1 | 1 | 0 | 1 |
| 10 | 1 | 1 | 1 | 1 |
| 11 | 1 | 1 | 1 | 0 |
| 12 | 1 | 0 | 1 | 0 |
| 13 | 1 | 0 | 1 | 1 |
| 14 | 1 | 0 | 0 | 1 |
| 15 | 1 | 0 | 0 | 0 |
รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์ เกรย์คือการเรียงลำดับของระบบตัวเลขไบนารีโดยที่ค่าสองค่าที่อยู่ติดกันจะแตกต่างกันเพียงบิต เดียว (หลักไบนารี)
ตัวอย่างเช่น การแสดงค่าทศนิยม "1" ในระบบเลขฐานสองโดยปกติจะเป็น " 001 " และ "2" จะเป็น " 010 " แต่ในรหัสเกรย์ ค่าเหล่านี้จะถูกแสดงเป็น " 001 " และ " 011 " ด้วยวิธีนี้ การเพิ่มค่าจาก 1 เป็น 2 จึงต้องเปลี่ยนเพียงบิตเดียว แทนที่จะเป็นสองบิต
รหัสเกรย์ถูกใช้กันอย่างแพร่หลายเพื่อป้องกันเอาต์พุตที่ไม่พึงประสงค์จากสวิตช์อิเล็กโทรเมคานิกส์ และเพื่ออำนวยความสะดวก ใน การแก้ไขข้อผิดพลาดในการสื่อสารดิจิทัล เช่นโทรทัศน์ภาคพื้นดินดิจิทัล และระบบ เคเบิลทีวีบางระบบ การใช้รหัสเกรย์ในอุปกรณ์เหล่านี้ช่วยลดความซับซ้อนของการดำเนินการทางตรรกะและลดข้อผิดพลาดในทางปฏิบัติ[ 1 ]
การทำงาน
อุปกรณ์หลายชนิดระบุตำแหน่งโดยการปิดและเปิดสวิตช์ หากอุปกรณ์นั้นใช้รหัสไบนารีแบบธรรมชาติตำแหน่งที่ 3 และ 4 จะอยู่ติดกัน แต่บิตทั้งสามของเลขฐานไบนารีจะแตกต่างกัน:
| ทศนิยม | ไบนารี |
|---|---|
| … | … |
| 3 | 011 |
| 4 | 100 |
| … | … |
ปัญหาของรหัสไบนารีแบบธรรมชาติคือ สวิตช์ทางกายภาพไม่สมบูรณ์แบบ: เป็นไปได้ยากมากที่สวิตช์ทางกายภาพจะเปลี่ยนสถานะพร้อมกันอย่างแม่นยำ ในการเปลี่ยนสถานะระหว่างสองสถานะที่แสดงข้างต้น สวิตช์ทั้งสามตัวจะเปลี่ยนสถานะ ในช่วงเวลาสั้นๆ ขณะที่สวิตช์ทั้งหมดกำลังเปลี่ยนสถานะ สวิตช์จะอ่านค่าตำแหน่งที่ไม่ถูกต้อง แม้จะไม่มีการกระเด้งของปุ่มการเปลี่ยนสถานะอาจดูเหมือน011 — 001 — 101 — 100เมื่อสวิตช์ปรากฏว่าอยู่ในตำแหน่ง001ผู้สังเกตการณ์ไม่สามารถบอกได้ว่านั่นคือตำแหน่ง 1 ที่ "จริง" หรือเป็นสถานะการเปลี่ยนผ่านระหว่างสองตำแหน่งอื่น หากเอาต์พุตป้อนเข้าสู่ ระบบ ลำดับอาจผ่านทางตรรกะเชิงผสมระบบลำดับอาจจัดเก็บค่าที่ไม่ถูกต้อง
ปัญหานี้สามารถแก้ไขได้โดยการเปลี่ยนสวิตช์ทีละตัวเท่านั้น ดังนั้นจึงไม่มีความกำกวมของตำแหน่ง ส่งผลให้รหัสถูกกำหนดให้กับชุดจำนวน เต็มที่ต่อเนื่องกัน หรือให้กับสมาชิกแต่ละตัวในรายการวงกลม คำของสัญลักษณ์ โดยที่ไม่มีคำรหัสสองคำใดที่เหมือนกัน และคำรหัสสองคำที่อยู่ติดกันจะแตกต่างกันเพียงหนึ่งสัญลักษณ์เท่านั้น รหัสเหล่านี้ยังเป็นที่รู้จักในชื่อรหัสระยะทางหน่วย [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] รหัสระยะทางเดี่ยวรหัสขั้นตอนเดียวรหัสโมโนสโทรฟิก[ 7 ] [ 8 ] [ 5 ] [ 6 ]หรือรหัสซิงโคปิก [ 7 ] โดยอ้างอิงถึงระยะทางแฮมมิง 1 ระหว่างรหัสที่อยู่ติดกัน
สิ่งประดิษฐ์

โดยหลักการแล้ว อาจมีรหัสมากกว่าหนึ่งรหัสสำหรับความยาวคำที่กำหนด แต่คำว่ารหัสเกรย์ถูกนำมาใช้ครั้งแรกกับ รหัส ไบนารี เฉพาะ สำหรับจำนวนเต็มที่ไม่เป็นลบ ซึ่งก็คือรหัสเกรย์แบบสะท้อนไบนารีหรือBRGCนักวิจัย ของ Bell Labsชื่อGeorge R. Stibitzได้อธิบายรหัสดังกล่าวไว้ในคำขอสิทธิบัตรในปี 1941 ซึ่งได้รับอนุมัติในปี 1943 [ 9 ] [ 10 ] [ 11 ] Frank Grayได้แนะนำคำว่ารหัสไบนารีแบบสะท้อนในคำขอสิทธิบัตรของเขาในปี 1947 โดยกล่าวว่ารหัสนี้ "ยังไม่มีชื่อที่ได้รับการยอมรับ" [ 12 ]เขาได้ชื่อนี้มาจากข้อเท็จจริงที่ว่า "สามารถสร้างขึ้นจากรหัสไบนารีแบบดั้งเดิมโดยกระบวนการสะท้อนชนิดหนึ่ง"


ในการเข้ารหัสแบบมาตรฐานของรหัสเกรย์ บิตที่มีค่าน้อยที่สุดจะเรียงตัวซ้ำกันเป็น 2 เปิด 2 ปิด(… 11001100 …);ตัวเลขถัดไปจะเรียงตัวเป็น 4 เปิด 4 ปิด; บิตที่มีค่าน้อยที่สุดลำดับที่i จะเรียงตัวเป็น 2i เปิด 2i ปิด ส่วนตัวเลขที่มีค่ามากที่สุดนั้นเป็นข้อยกเว้น: สำหรับรหัสเกรย์n บิต ตัวเลขที่มีค่ามากที่สุดจะเรียงตัวเป็น 2n − 1 เปิด 2n − 1 ปิด ซึ่งเป็นลำดับค่าเดียวกัน (แบบวนซ้ำ) กับตัวเลขที่มีค่ามากเป็นอันดับสอง แต่เลื่อนไปข้างหน้า 2n − 2ตำแหน่ง เวอร์ชันสี่บิตของรูปแบบนี้แสดงไว้ด้านล่าง:
| ทศนิยม | ไบนารี | สีเทา |
|---|---|---|
| 0 | 0000 | 0000 |
| 1 | 0001 | 0001 |
| 2 | 0010 | 0011 |
| 3 | 0011 | 0010 |
| 4 | 0100 | 0110 |
| 5 | 0101 | 0111 |
| 6 | 0110 | 0101 |
| 7 | 0111 | 0100 |
| 8 | 1000 | 1100 |
| 9 | 1001 | 1101 |
| 10 | 1010 | 1111 |
| 11 | 1011 | 1110 |
| 12 | 1100 | 1010 |
| 13 | 1101 | 1011 |
| 14 | 1110 | 1001 |
| 15 | 1111 | 1000 |
สำหรับเลขฐานสิบ 15 รหัสจะเปลี่ยนเป็นเลขฐานสิบ 0 โดยมีการเปลี่ยนแปลงสวิตช์เพียงครั้งเดียว นี่เรียกว่าคุณสมบัติแบบวงจรหรือ แบบประชิด ของรหัส[ 13 ]
ในระบบสื่อสารดิจิทัล สมัยใหม่ รหัสเกรย์มีบทบาทสำคัญในการแก้ไขข้อผิดพลาดตัวอย่างเช่น ใน ระบบ การมอดูเลชั่นดิจิทัลเช่นQAMซึ่งโดยทั่วไปแล้วข้อมูลจะถูกส่งในรูปแบบสัญลักษณ์ สี่บิตขึ้นไป แผนภาพกลุ่มจุดสัญญาณจะถูกจัดเรียงเพื่อให้รูปแบบบิตที่ส่งโดยจุดกลุ่มจุดที่อยู่ติดกันแตกต่างกันเพียงหนึ่งบิตเท่านั้น เมื่อรวมสิ่งนี้เข้ากับการแก้ไขข้อผิดพลาดแบบส่งต่อที่สามารถแก้ไขข้อผิดพลาดแบบบิตเดียวได้ ผู้รับจึงสามารถแก้ไขข้อผิดพลาดในการส่งใดๆ ที่ทำให้จุดกลุ่มจุดเบี่ยงเบนเข้าไปในพื้นที่ของจุดที่อยู่ติดกันได้ ทำให้ระบบส่งสัญญาณมีความไวต่อสัญญาณรบกวน น้อย ลง
แม้ว่า Stibitz จะอธิบายรหัสนี้[ 9 ] [ 10 ] [ 11 ]ก่อน Gray แต่รหัสไบนารีสะท้อนกลับก็ได้รับการตั้งชื่อตาม Gray ในภายหลังโดยผู้อื่นที่ใช้มัน คำขอสิทธิบัตรปี 1953 สองฉบับที่แตกต่างกันใช้ "รหัส Gray" เป็นชื่อทางเลือกสำหรับ "รหัสไบนารีสะท้อนกลับ" [ 14 ] [ 15 ]หนึ่งในนั้นยังระบุ "รหัสข้อผิดพลาดขั้นต่ำ" และ "รหัสการเรียงสับเปลี่ยนแบบวงจร" ไว้ในชื่อด้วย[ 15 ]คำขอสิทธิบัตรปี 1954 อ้างถึง "รหัส Gray ของ Bell Telephone" [ 16 ]ชื่ออื่นๆ ได้แก่ "รหัสไบนารีแบบวงจร" [ 10 ] "รหัสความก้าวหน้าแบบวงจร" [ 17 ] [ 10 ] "ไบนารีแบบเรียงสับเปลี่ยนแบบวงจร" [ 18 ]หรือ "ไบนารีแบบเรียงสับเปลี่ยนแบบวงจร" (CPB) [ 19 ] [ 20 ]
บางครั้งรหัสเกรย์ก็ถูกเข้าใจผิดว่าเป็นผลงานของเอลิชา เกรย์นัก ประดิษฐ์อุปกรณ์ไฟฟ้าในศตวรรษที่ 19 [ 11 ] [ 21 ] [ 22 ] [ 23 ]
ประวัติศาสตร์และการประยุกต์ใช้ในทางปฏิบัติ
ปริศนาคณิตศาสตร์
รหัสไบนารีแบบสะท้อนถูกนำมาประยุกต์ใช้กับปริศนาทางคณิตศาสตร์ก่อนที่วิศวกรจะรู้จักวิธีการนี้
รหัส Gray แบบสะท้อนไบนารีแสดงถึงโครงร่างพื้นฐานของปริศนาวงแหวนจีน แบบคลาสสิก ซึ่งเป็นกลไกปริศนาเชิงกลแบบลำดับที่อธิบายโดย Louis Gros ชาวฝรั่งเศสในปี พ.ศ. 2415 [ 24 ] [ 11 ]
สามารถใช้เป็นแนวทางแก้ปัญหาสำหรับ ปัญหา Towers of Hanoiซึ่งอิงจากเกมของÉdouard Lucas ชาวฝรั่งเศส ในปี 1883 [ 25 ] [ 26 ] [ 27 ] [ 28 ]ในทำนองเดียวกัน การกำหนดค่าเกม Towers of Bucharest และ Towers of Klagenfurt ที่เรียกว่านี้ จะให้รหัส Gray แบบไตรภาคและห้าภาค[ 29 ]
Martin Gardnerเขียนบทความยอดนิยมเกี่ยวกับรหัส Gray ในคอลัมน์ "Mathematical Games" ของเขา ในScientific American เดือนสิงหาคม พ.ศ. 2515 [ 30 ]
รหัสยังสร้างวงจรแฮมิลโทเนียนในกราฟไฮเปอร์คิวบ์ที่มีความยาว[ 31 ]
รหัสโทรเลข
เมื่อวิศวกรชาวฝรั่งเศสÉmile Baudotเปลี่ยนจากการใช้รหัส 6 หน่วย (6 บิต) เป็นรหัส 5 หน่วยสำหรับระบบโทรเลขพิมพ์ ของเขาในปี พ.ศ. 2418 [ 32 ]หรือ พ.ศ. 2419 [ 33 ] [ 34 ]เขาได้เรียงลำดับตัวอักษรบนวงล้อพิมพ์ของเขาโดยใช้รหัสไบนารีแบบสะท้อน และกำหนดรหัสโดยใช้เพียงสามบิตให้กับสระ ด้วยการเรียงลำดับสระและพยัญชนะตามลำดับตัวอักษร และสัญลักษณ์อื่นๆ ที่วางไว้อย่างเหมาะสม รหัสอักขระ 5 บิตจึงได้รับการยอมรับว่าเป็นรหัสไบนารีแบบสะท้อน[ 11 ]รหัสนี้กลายเป็นที่รู้จักในชื่อรหัส Baudot [ 35 ]และด้วยการเปลี่ยนแปลงเล็กน้อย ในที่สุดก็ได้รับการยอมรับเป็นอักษรโทรเลขสากลหมายเลข 1 (ITA1, CCITT-1) ในปี พ.ศ. 2475 [ 36 ] [ 37 ] [ 38 ]
ในเวลาเดียวกันนั้น Otto Schäfflerชาวเยอรมัน-ออสเตรีย[ 39 ]ได้สาธิตโทรเลขพิมพ์อีกเครื่องหนึ่งในเวียนนาโดยใช้รหัสไบนารีสะท้อน 5 บิตเพื่อจุดประสงค์เดียวกันในปี พ.ศ. 2417 [ 40 ] [ 11 ]
การแปลงสัญญาณอนาล็อกเป็นดิจิทัล
แฟรงค์ เกรย์ผู้ซึ่งมีชื่อเสียงจากการคิดค้นวิธีการส่งสัญญาณที่ใช้กับโทรทัศน์สีที่เข้ากันได้ ได้คิดค้นวิธีการแปลงสัญญาณอนาล็อกเป็นกลุ่มรหัสไบนารีแบบสะท้อนโดยใช้ อุปกรณ์ที่ใช้ หลอดสุญญากาศวิธีการและอุปกรณ์ดังกล่าวได้รับการยื่นจดสิทธิบัตรในปี 1947 และได้รับสิทธิบัตรในปี 1953 [ 12 ]และชื่อของเกรย์ก็ติดมากับรหัสเหล่านั้น อุปกรณ์ " หลอด PCM " ที่เกรย์จดสิทธิบัตรนั้นผลิตโดยเรย์มอนด์ ดับเบิลยู. เซียร์ส แห่งเบลล์แล็บส์ ซึ่งทำงานร่วมกับเกรย์และวิลเลียม เอ็ม. กู๊ดดอลล์ ผู้ซึ่งให้เครดิตเกรย์สำหรับแนวคิดของรหัสไบนารีแบบสะท้อน[ 41 ]

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


รหัสเกรย์ถูกนำมาใช้ในตัวเข้ารหัสตำแหน่งเชิงเส้นและเชิงหมุน ( ตัวเข้ารหัสแบบสัมบูรณ์และตัวเข้ารหัสแบบควอดราเจอร์ ) แทนการเข้ารหัสไบนารีแบบถ่วงน้ำหนัก วิธีนี้ช่วยหลีกเลี่ยงความเป็นไปได้ที่เมื่อบิตหลายบิตเปลี่ยนแปลงในค่าไบนารีของตำแหน่ง จะทำให้เกิดการอ่านค่าผิดพลาดเนื่องจากบิตบางส่วนเปลี่ยนแปลงก่อนบิตอื่น
ตัวอย่างเช่น ตัวเข้ารหัสแบบหมุนบางชนิดมีแผ่นดิสก์ที่มีรูปแบบรหัสเกรย์ที่เป็นตัวนำไฟฟ้าอยู่บนวงแหวนศูนย์กลาง (แทร็ก) แต่ละแทร็กมีหน้าสัมผัสสปริงโลหะแบบอยู่กับที่ซึ่งให้การสัมผัสทางไฟฟ้ากับรูปแบบรหัสที่เป็นตัวนำไฟฟ้า เมื่อรวมกันแล้ว หน้าสัมผัสเหล่านี้จะสร้างสัญญาณเอาต์พุตในรูปแบบของรหัสเกรย์ ตัวเข้ารหัสอื่นๆ ใช้กลไกแบบไม่สัมผัสโดยอาศัยเซ็นเซอร์แบบออปติคอลหรือแม่เหล็กเพื่อสร้างสัญญาณเอาต์พุตรหัสเกรย์
ไม่ว่ากลไกหรือความแม่นยำของตัวเข้ารหัสแบบเคลื่อนที่จะเป็นอย่างไร ข้อผิดพลาดในการวัดตำแหน่งอาจเกิดขึ้นได้ที่ตำแหน่งเฉพาะ (ที่ขอบเขตของรหัส) เนื่องจากรหัสอาจเปลี่ยนแปลงในขณะที่อ่าน (สุ่มตัวอย่าง) รหัสเอาต์พุตแบบไบนารีอาจทำให้เกิดข้อผิดพลาดในการวัดตำแหน่งอย่างมาก เพราะเป็นไปไม่ได้ที่จะทำให้บิตทั้งหมดเปลี่ยนแปลงพร้อมกันอย่างแม่นยำ หากในขณะที่สุ่มตัวอย่างตำแหน่ง บิตบางส่วนเปลี่ยนแปลงและบางส่วนยังคงเดิม ตำแหน่งที่สุ่มตัวอย่างได้จะไม่ถูกต้อง ในกรณีของตัวเข้ารหัสแบบสัมบูรณ์ ตำแหน่งที่แสดงอาจอยู่ห่างไกลจากตำแหน่งจริง และในกรณีของตัวเข้ารหัสแบบเพิ่มค่า อาจทำให้การติดตามตำแหน่งผิดพลาดได้
ในทางตรงกันข้าม รหัสเกรย์ที่ใช้ในตัวเข้ารหัสตำแหน่งจะทำให้มั่นใจได้ว่ารหัสสำหรับตำแหน่งสองตำแหน่งที่อยู่ติดกันจะแตกต่างกันเพียงหนึ่งบิตเท่านั้น และด้วยเหตุนี้ จึงสามารถเปลี่ยนแปลงได้เพียงครั้งละหนึ่งบิตเท่านั้น ในกรณีนี้ ข้อผิดพลาดของตำแหน่งสูงสุดจะมีค่าน้อย ซึ่งบ่งชี้ว่าตำแหน่งนั้นอยู่ใกล้เคียงกับตำแหน่งจริง
อัลกอริทึมทางพันธุกรรม
เนื่องจาก คุณสมบัติ ระยะทางแฮมมิงของรหัสเกรย์ บางครั้งจึงถูกนำมาใช้ในอัลกอริธึมทางพันธุกรรม [ 13 ] อาจมีประโยชน์ในด้านนี้เพราะการกลายพันธุ์ในรหัสช่วยให้เกิดการเปลี่ยนแปลงทีละน้อยเป็นส่วนใหญ่ แต่บางครั้งการเปลี่ยนแปลงบิตเพียงครั้งเดียวก็อาจทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่และนำไปสู่คุณสมบัติใหม่ได้
การลดวงจรบูลีนให้เหลือน้อยที่สุด
รหัสเกรย์ยังใช้ในการติดฉลากแกนของแผนที่คาร์โนห์ตั้งแต่ปี พ.ศ. 2496 [ 42 ] [ 43 ] [ 44 ]เช่นเดียวกับในกราฟวงกลมแฮนด์เลอร์ตั้งแต่ปี พ.ศ. 2491 [ 45 ] [ 46 ] [ 47 ] [ 48 ] ซึ่งทั้งสองวิธีนี้เป็นวิธีการกราฟิกสำหรับการลดวงจรตรรกะให้เล็กที่สุด
การแก้ไขข้อผิดพลาด
ในระบบสื่อสารดิจิทัล สมัยใหม่ รหัสเกรย์แบบ 1 มิติและ 2 มิติมีบทบาทสำคัญในการป้องกันข้อผิดพลาดก่อนที่จะทำการแก้ไขข้อผิดพลาดตัวอย่างเช่น ใน ระบบ การมอดูเลชั่นดิจิทัลเช่นQAMซึ่งโดยทั่วไปแล้วข้อมูลจะถูกส่งในรูปแบบสัญลักษณ์ ขนาด 4 บิตขึ้นไป แผนภาพกลุ่มจุดสัญญาณจะถูกจัดเรียงเพื่อให้รูปแบบบิตที่ส่งผ่านจุดกลุ่มสัญญาณที่อยู่ติดกันแตกต่างกันเพียงหนึ่งบิตเท่านั้น เมื่อรวมสิ่งนี้เข้ากับการแก้ไขข้อผิดพลาดแบบส่งต่อ ที่สามารถแก้ไขข้อผิดพลาดแบบบิตเดียวได้ ผู้รับจึงสามารถ แก้ไขข้อผิดพลาดในการส่งใดๆ ที่ทำให้จุดกลุ่มสัญญาณเบี่ยงเบนเข้าไปในพื้นที่ของจุดที่อยู่ติดกันได้ ทำให้ระบบส่งสัญญาณมีความไว ต่อ สัญญาณ รบกวนน้อยลง
- รหัส 4-PSK
- รหัส 8-PSK
- รหัส 16-QAM
การสื่อสารระหว่างโดเมนนาฬิกา
นักออกแบบวงจรดิจิทัลใช้รหัสเกรย์อย่างกว้างขวางในการส่งผ่านข้อมูลการนับหลายบิตระหว่างวงจรซิงโครนัสที่ทำงานที่ความถี่สัญญาณนาฬิกาต่างกัน วงจรดังกล่าวถือว่าทำงานใน "โดเมนสัญญาณนาฬิกา" ที่แตกต่างกัน นี่เป็นพื้นฐานสำคัญในการออกแบบชิปขนาดใหญ่ที่ทำงานด้วยความถี่สัญญาณนาฬิกาที่หลากหลาย
ปั่นจักรยานผ่านรัฐต่างๆ ด้วยความพยายามเพียงเล็กน้อย
หากระบบต้องวนรอบตามลำดับของชุดควบคุมที่มีสถานะเปิด-ปิดที่เป็นไปได้ทั้งหมด และการเปลี่ยนแปลงการควบคุมนั้นต้องใช้ค่าใช้จ่ายที่ไม่น้อย (เช่น เวลา การสึกหรอ แรงงานคน) รหัสเกรย์จะช่วยลดจำนวนการเปลี่ยนแปลงการตั้งค่าเหลือเพียงการเปลี่ยนแปลงเดียวสำหรับแต่ละชุดสถานะ ตัวอย่างเช่น การทดสอบระบบท่อสำหรับชุดการตั้งค่าทั้งหมดของวาล์วที่ควบคุมด้วยมือ
สามารถสร้างรหัสเกรย์แบบสมดุลได้[ 49 ]ซึ่งจะพลิกบิตทุกบิตเท่าๆ กัน เนื่องจากมีการพลิกบิตอย่างสม่ำเสมอ จึงถือว่าเหมาะสมที่สุดในลักษณะต่อไปนี้: รหัสเกรย์แบบสมดุลจะลดจำนวนการพลิกบิตสูงสุดสำหรับแต่ละหลักให้น้อยที่สุด
ตัวนับรหัสเกรย์และการคำนวณทางคณิตศาสตร์
George R. Stibitzใช้รหัสไบนารีแบบสะท้อนในอุปกรณ์นับพัลส์ไบนารีในปี พ.ศ. 2484 [ 9 ] [ 10 ] [ 11 ]
การใช้งานตัวนับรหัสเกรย์โดยทั่วไปคือการสร้าง บัฟเฟอร์ข้อมูล FIFO (first-in, first-out) ที่มีพอร์ตอ่านและเขียนซึ่งอยู่ในโดเมนนาฬิกาที่แตกต่างกัน ตัวนับอินพุตและเอาต์พุตภายใน FIFO แบบสองพอร์ตดังกล่าว มักจะถูกจัดเก็บโดยใช้รหัสเกรย์เพื่อป้องกันไม่ให้สถานะชั่วคราวที่ไม่ถูกต้องถูกจับเมื่อการนับข้ามโดเมนนาฬิกา[ 50 ]ตัวชี้อ่านและเขียนที่อัปเดตแล้วจำเป็นต้องส่งผ่านระหว่างโดเมนนาฬิกาเมื่อมีการเปลี่ยนแปลง เพื่อให้สามารถติดตามสถานะว่างและเต็มของ FIFO ในแต่ละโดเมนได้ บิตแต่ละบิตของตัวชี้จะถูกสุ่มตัวอย่างแบบไม่แน่นอนสำหรับการถ่ายโอนโดเมนนาฬิกานี้ ดังนั้นสำหรับแต่ละบิต ค่าเก่าหรือค่าใหม่จะถูกส่งต่อ ดังนั้น หากมีบิตมากกว่าหนึ่งบิตในตัวชี้หลายบิตเปลี่ยนแปลง ณ จุดสุ่มตัวอย่าง ค่าไบนารีที่ "ผิด" (ไม่ใช่ทั้งค่าใหม่หรือค่าเก่า) อาจถูกส่งต่อ ด้วยการรับประกันว่าจะมีเพียงบิตเดียวเท่านั้นที่เปลี่ยนแปลงได้ รหัสเกรย์จึงรับประกันว่าค่าที่สุ่มตัวอย่างที่เป็นไปได้เพียงอย่างเดียวคือค่าหลายบิตใหม่หรือค่าเก่า โดยทั่วไปจะใช้รหัสเกรย์ที่มีความยาวเป็นกำลังสองของสอง
บางครั้งบัสแบบดิจิทัลในระบบอิเล็กทรอนิกส์ถูกใช้เพื่อส่งปริมาณที่สามารถเพิ่มหรือลดได้ทีละหนึ่งเท่านั้น ตัวอย่างเช่น เอาต์พุตของตัวนับเหตุการณ์ที่ส่งผ่านระหว่างโดเมนนาฬิกาหรือไปยังตัวแปลงดิจิทัลเป็นอนาล็อก ข้อดีของรหัสเกรย์ในการใช้งานเหล่านี้คือ ความแตกต่างในความล่าช้าในการแพร่กระจายของสายไฟจำนวนมากที่แสดงถึงบิตของรหัสจะไม่ทำให้ค่าที่ได้รับผ่านสถานะที่อยู่นอกลำดับของรหัสเกรย์ นี่คล้ายกับข้อดีของรหัสเกรย์ในการสร้างตัวเข้ารหัสเชิงกล อย่างไรก็ตาม แหล่งที่มาของรหัสเกรย์ในกรณีนี้คือตัวนับอิเล็กทรอนิกส์ ตัวนับเองต้องนับในรหัสเกรย์ หรือหากตัวนับทำงานในระบบไบนารี ค่าเอาต์พุตจากตัวนับจะต้องถูกปรับเวลาใหม่หลังจากแปลงเป็นรหัสเกรย์แล้ว เพราะเมื่อค่าถูกแปลงจากไบนารีเป็นรหัสเกรย์[หมายเหตุ 1 ]เป็นไปได้ว่าความแตกต่างในเวลาการมาถึงของบิตข้อมูลไบนารีในวงจรแปลงไบนารีเป็นเกรย์จะหมายความว่ารหัสอาจผ่านสถานะที่อยู่นอกลำดับอย่างมากในช่วงเวลาสั้น ๆ การเพิ่มรีจิสเตอร์แบบมีสัญญาณนาฬิกาหลังจากวงจรที่แปลงค่าการนับเป็นรหัสเกรย์อาจทำให้เกิดความล่าช้าของรอบสัญญาณนาฬิกา ดังนั้นการนับโดยตรงในรหัสเกรย์อาจเป็นประโยชน์มากกว่า[ 51 ]
ในการสร้างค่าการนับถัดไปในตัวนับรหัสเกรย์ จำเป็นต้องมีตรรกะเชิงผสมบางอย่างที่จะเพิ่มค่าการนับปัจจุบันที่จัดเก็บไว้ วิธีหนึ่งในการเพิ่มค่าตัวเลขรหัสเกรย์คือการแปลงเป็นรหัสไบนารีธรรมดา[ 52 ]เพิ่มหนึ่งเข้าไปด้วยตัวบวกไบนารีมาตรฐาน แล้วแปลงผลลัพธ์กลับเป็นรหัสเกรย์[ 53 ]วิธีการนับอื่นๆ ในรหัสเกรย์มีการกล่าวถึงในรายงานของRobert W. Doranรวมถึงการนำเอาเอาต์พุตจากแลตช์แรกของฟลิปฟลอปมาสเตอร์-สเลฟในตัวนับริปเปิลไบนารี[ 54 ]
การกำหนดแอดเดรสด้วยรหัสเกรย์
เนื่องจากการดำเนินการโค้ดที่สามารถเรียกใช้งานได้มักจะทำให้เกิดรูปแบบการเข้าถึงหน่วยความจำคำสั่งของแอดเดรสที่ต่อเนื่องกันในพื้นที่การเข้ารหัสบัสโดยใช้แอดเดรสแบบ Gray code แทนแอดเดรสแบบไบนารีสามารถลดจำนวนการเปลี่ยนแปลงสถานะของบิตแอดเดรสได้อย่างมีนัยสำคัญ ซึ่งจะช่วยลดการใช้พลังงานของ CPUในการออกแบบพลังงานต่ำบางแบบ[ 55 ] [ 56 ]
ความสม่ำเสมอและความผิดปกติของรหัสเกรย์
ใน ระบบ รหัสไบนารีแบบธรรมชาติบิตที่มีค่าน้อยที่สุดจะบ่งบอกว่าตัวเลขนั้นเป็นเลขคู่ (0) หรือเลขคี่ (1) ซึ่งเป็นคุณสมบัติที่ไม่มีในรหัสเกรย์ เนื่องจากมีการเปลี่ยนแปลงเพียงบิตเดียวในรหัสเกรย์ที่ต่อเนื่องกัน จำนวนบิต 1 จึงจะสลับกันระหว่างเลขคู่และเลขคี่ ดังนั้น ในการตรวจสอบความเป็นเลขคู่ของรหัสเกรย์ จึงจำเป็นต้องนับจำนวนบิต 1 กล่าวคือ หากมีจำนวนบิต 1 เป็นเลขคู่ แสดงว่ารหัสเกรย์นั้นเป็นเลขคู่
| ทศนิยม | ไบนารี | ความสม่ำเสมอ | การนับบิตไบนารี | สีเทา | จำนวนบิตสีเทา |
|---|---|---|---|---|---|
| 0 | 000 0 | สม่ำเสมอ | 0 | 0000 | 0 |
| 1 | 000 1 | แปลก | 1 | 0001 | 1 |
| 2 | 001 0 | สม่ำเสมอ | 1 | 0011 | 2 |
| 3 | 001 1 | แปลก | 2 | 0010 | 1 |
| 4 | 010 0 | สม่ำเสมอ | 1 | 0110 | 2 |
| 5 | 010 1 | แปลก | 2 | 0111 | 3 |
| 6 | 011 0 | สม่ำเสมอ | 2 | 0101 | 2 |
| 7 | 011 1 | แปลก | 3 | 0100 | 1 |
| 8 | 100 0 | สม่ำเสมอ | 1 | 1100 | 2 |
| 9 | 100 1 | แปลก | 2 | 1101 | 3 |
| 10 | 101 0 | สม่ำเสมอ | 2 | 1111 | 4 |
| 11 | 101 1 | แปลก | 3 | 1110 | 3 |
| 12 | 110 0 | สม่ำเสมอ | 2 | 1010 | 2 |
| 13 | 110 1 | แปลก | 3 | 1011 | 3 |
| 14 | 111 0 | สม่ำเสมอ | 3 | 1001 | 2 |
| 15 | 111 1 | แปลก | 4 | 1000 | 1 |
โปรเซสเซอร์บางตัว เช่นZilog Z80 , Japan ASCII R800และIntel 8086มี แฟล็กสถานะ พาริตีซึ่งบ่งชี้ความสม่ำเสมอของบิตในรีจิสเตอร์บางตัว ช่วยให้ตรวจสอบได้ว่าจำนวนบิตขึ้นในรีจิสเตอร์เหล่านั้นเป็นเลขคู่หรือไม่
การสร้าง รหัสเกรย์ nบิต


รายการรหัสเกรย์แบบสะท้อนไบนารีสำหรับnบิตสามารถสร้างแบบเรียกซ้ำจากรายการสำหรับn − 1 บิตได้โดยการสะท้อนรายการ (เช่น แสดงรายการในลำดับย้อนกลับ) นำหน้ารายการในรายการเดิมด้วยเลขฐานสอง0นำหน้ารายการในรายการที่สะท้อนด้วยเลขฐานสอง 1จากนั้นจึงรวมรายการเดิมเข้ากับรายการที่กลับด้าน[ 11 ] ตัวอย่างเช่น การสร้าง รายการ n = 3 จาก รายการ n = 2:
| รายการ 2 บิต: | 00 , 01 , 11 , 10 | |
| สะท้อน: | 10 , 11 , 01 , 00 | |
| ใส่เลข 0นำหน้ารายการเก่า: | 000 , 001 , 011 , 010 , | |
| เพิ่ม เลข 1นำหน้ารายการใหม่: | 110 , 111 , 101 , 100 | |
| ต่อกัน: | 000 , 001 , 011 , 010 , | 110 , 111 , 101 , 100 |
รหัสเกรย์แบบหนึ่งบิตคือG 1 = ( 0,1 ) สามารถคิดได้ว่าสร้างขึ้นแบบวนซ้ำดังที่กล่าวมาข้างต้นจากรหัสเกรย์แบบศูนย์บิตG 0 = ( Λ ) ซึ่งประกอบด้วยรายการเดียวที่มีความยาวเป็นศูนย์ กระบวนการวนซ้ำในการสร้างG n +1จากG nทำให้คุณสมบัติต่อไปนี้ของรหัสสะท้อนมาตรฐานชัดเจนขึ้น:
- G nคือการเรียงสับเปลี่ยนของตัวเลข 0, …, 2 n − 1 (แต่ละตัวเลขปรากฏเพียงครั้งเดียวในรายการ)
- G nถูกฝังเป็นครึ่งแรกของG n +1
- ดังนั้น การเข้ารหัสจึงมีความเสถียรในแง่ที่ว่าเมื่อเลขฐานสองปรากฏในG n แล้วมันจะปรากฏในตำแหน่งเดียวกันในรายการที่ยาวกว่าทั้งหมด ดังนั้นจึงสมเหตุสมผลที่จะพูดถึงค่ารหัสเกรย์สะท้อนของตัวเลข: G ( m ) = รหัสเกรย์สะท้อนลำดับที่ mนับจาก 0
- แต่ละรายการในG nจะแตกต่างจากรายการก่อนหน้าเพียงหนึ่งบิตเท่านั้น (ระยะทางแฮมมิงคือ 1)
- ค่าสุดท้ายในG nแตกต่างจากค่าแรกเพียงหนึ่งบิตเท่านั้น (รหัสนี้เป็นแบบวนซ้ำ)
ลักษณะเหล่านี้ชี้ให้เห็นถึงวิธีการที่ง่ายและรวดเร็วในการแปลงค่าไบนารีเป็นรหัสเกรย์ที่สอดคล้องกัน แต่ละบิตจะถูกกลับค่าหากบิตถัดไปที่สูงกว่าของค่าอินพุตถูกตั้งค่าเป็นหนึ่ง การดำเนินการนี้สามารถทำได้แบบขนานโดยการเลื่อนบิตและการดำเนินการเอ็กซ์คลูซีฟออร์หากมี: รหัสเกรย์ที่ nได้มาจากการคำนวณการเพิ่ม บิต 0ไว้ข้างหน้าจะไม่เปลี่ยนแปลงลำดับของคำรหัส การเพิ่ม บิต 1 ไว้ ข้างหน้าจะกลับลำดับของคำรหัส หากบิตที่ตำแหน่งของคำรหัสถูกกลับค่า ลำดับของบล็อกคำรหัสที่อยู่ติดกันจะกลับด้าน ตัวอย่างเช่น หากบิต 0 ถูกกลับค่าในลำดับคำรหัส 3 บิต ลำดับของคำรหัสสองคำที่อยู่ติดกันจะกลับด้าน
ถ้าบิตที่ 1 ถูกกลับค่า บล็อกของรหัสคำ 2 คำจะเปลี่ยนลำดับ:
ถ้าบิตที่ 2 ถูกกลับค่า บล็อกของรหัสคำ 4 คำจะเรียงลำดับกลับกัน:
ดังนั้น การดำเนินการเอ็กซ์คลูซีฟออร์บนบิตที่ตำแหน่งกับบิตที่ตำแหน่งจะทำให้ลำดับของรหัสคำคงเดิมหากและจะกลับลำดับของบล็อกรหัสคำหากซึ่งเป็นการดำเนินการเดียวกันกับวิธีสะท้อนและเติมคำนำหน้าเพื่อสร้างรหัสเกรย์
สามารถใช้วิธีการที่คล้ายกันในการแปลงกลับได้ แต่การคำนวณแต่ละบิตขึ้นอยู่กับค่าที่คำนวณได้ของบิตที่สูงกว่าถัดไป ดังนั้นจึงไม่สามารถดำเนินการแบบขนานได้ สมมติว่าเป็นบิตที่ th ของรหัสเกรย์ ( โดยที่ เป็นบิตที่มีนัยสำคัญที่สุด) และเป็นบิตที่ th ของรหัสไบนารี ( โดยที่ เป็นบิตที่มีนัยสำคัญที่สุด) การแปลงกลับสามารถกำหนดได้แบบเวียนซ้ำ: , และหรืออีกทางหนึ่ง การถอดรหัสรหัสเกรย์เป็นเลขไบนารีสามารถอธิบายได้ว่าเป็นผลรวมนำหน้าของบิตในรหัสเกรย์ โดยที่การดำเนินการบวกแต่ละครั้งในผลรวมนำหน้าจะดำเนินการแบบโมดูลัสสอง
ในการสร้างรหัสเกรย์แบบสะท้อนไบนารีแบบวนซ้ำ ในขั้นตอนที่ 0 ให้เริ่มต้นด้วยและในขั้นตอนให้หาตำแหน่งบิตของเลข 1 ที่มีค่าน้อยที่สุด ในการแสดงไบนารีของและพลิกบิตที่ตำแหน่งนั้นในรหัสก่อนหน้าเพื่อให้ได้รหัสถัดไปตำแหน่งบิตเริ่มต้นที่ 0, 1, 0, 2, 0, 1, 0, 3, … [หมายเหตุ 2 ]ดูชุดแรกสำหรับอัลกอริทึมที่มีประสิทธิภาพในการคำนวณค่าเหล่านี้
การแปลงไปมาระหว่างรหัสเกรย์
ฟังก์ชันต่อไปนี้ในภาษา Cแปลงระหว่างเลขฐานสองและรหัสเกรย์ที่เกี่ยวข้อง แม้ว่าการแปลงเกรย์เป็นเลขฐานสองอาจดูเหมือนว่าต้องจัดการแต่ละบิตทีละบิต แต่ก็มีอัลกอริทึมที่เร็วกว่า[ 57 ] [ 52 ] [ nb 1 ]
typedef unsigned int uint ;// ฟังก์ชันนี้แปลงเลขฐานสองที่ไม่มีเครื่องหมายเป็นรหัสเกรย์แบบไบนารีสะท้อนuint BinaryToGray ( uint num ) { return num ^ ( num >> 1 ); // ตัวดำเนินการ >> คือการเลื่อนไปทางขวา ตัวดำเนินการ ^ คือการดำเนินการเอกซ์คลูซีฟออร์}// ฟังก์ชันนี้แปลงเลขรหัสเกรย์แบบไบนารีสะท้อนกลับเป็นเลขไบนารีuint GrayToBinary ( uint num ) { uint mask = num ; while ( mask ) { // แต่ละบิตของรหัสเกรย์จะถูกดำเนินการเอ็กซ์คลูซีฟออร์ดิเนชันกับบิตที่มีค่ามากกว่าทั้งหมดmask >>= 1 ; num ^= mask ; } return num ; }// เวอร์ชันที่มีประสิทธิภาพมากขึ้นสำหรับรหัสเกรย์ 32 บิตหรือน้อยกว่า โดยใช้เทคนิค SWAR (SIMD ภายในรีจิสเตอร์) // มันใช้ฟังก์ชัน XOR แบบพรีฟิกขนาน คำสั่งการกำหนดค่าสามารถอยู่ในลำดับใดก็ได้// // ฟังก์ชันนี้สามารถปรับใช้กับรหัสเกรย์ที่ยาวขึ้นได้โดยการเพิ่มขั้นตอนuint GrayToBinary32 ( uint num ) { num ^= num >> 16 ; num ^= num >> 8 ; num ^ = num >> 4 ; num ^= num >> 2 ; num ^= num >> 1 ; return num ; } // รูปแบบที่แปลงเลขฐานสอง (abcd)2 เป็น (abcd)2 ^ (00ab)2 แล้วแปลงเป็น (abcd)2 ^ (00ab)2 ^ (0abc)2 ^ (000a)2ในโปรเซสเซอร์รุ่นใหม่ จำนวนคำสั่ง ALU ในขั้นตอนการถอดรหัสสามารถลดลงได้โดยใช้ประโยชน์จากชุดคำสั่ง CLMULถ้า MASK เป็นสตริงไบนารีคงที่ของเลขหนึ่งที่ลงท้ายด้วยเลขศูนย์ตัวเดียว การคูณแบบไม่มีตัวทดของ MASK กับการเข้ารหัสสีเทาของ x จะให้ผลลัพธ์เป็น x หรือการกลับบิตของ x เสมอ
รหัสเกรย์ประเภทพิเศษ
ในทางปฏิบัติ "รหัสเกรย์" มักหมายถึงรหัสเกรย์สะท้อนไบนารี (BRGC) เกือบทุกครั้ง อย่างไรก็ตาม นักคณิตศาสตร์ได้ค้นพบรหัสเกรย์ประเภทอื่น ๆ อีกด้วย เช่นเดียวกับ BRGC รหัสเกรย์แต่ละประเภทประกอบด้วยรายการคำ โดยแต่ละคำจะแตกต่างจากคำถัดไปเพียงหลักเดียว (แต่ละคำมีระยะห่างแฮมมิงเท่ากับ 1 จากคำถัดไป)
รหัสเกรย์ที่มีnบิตและมีความยาวน้อยกว่า2n
สามารถสร้างรหัส Gray แบบไบนารีที่มีnบิตที่มีความยาวน้อยกว่า2n ได้หากความยาวเป็นเลขคู่ ความเป็นไปได้ประการหนึ่งคือการเริ่มต้นด้วยรหัส Gray ที่สมดุลและลบค่าคู่ที่จุดเริ่มต้นและจุดสิ้นสุด หรือตรงกลาง[ 58 ] ลำดับ OEIS A290772 [ 59 ]ให้จำนวนลำดับ Gray ที่เป็นไปได้ที่มีความยาว2nซึ่งรวมถึงศูนย์และใช้จำนวนบิตขั้นต่ำ
รหัสเกรย์แบบn -ary
|
นอกจากรหัสเกรย์แบบสะท้อนไบนารีแล้ว ยังมีรหัสเกรย์เฉพาะทางอีกหลายประเภท หนึ่งในนั้นคือรหัสเกรย์แบบn -ary หรือที่รู้จักกันใน ชื่อ รหัสเกรย์แบบไม่ใช้ค่าบูลีนดังชื่อที่บ่งบอก รหัสเกรย์ประเภทนี้ใช้ค่าที่ไม่ใช่ ค่า บูลีนในการเข้ารหัส
ตัวอย่างเช่น รหัสเกรย์แบบ 3 ฐาน ( ternary ) จะใช้ค่า 0, 1, 2 [ 29 ]รหัสเกรย์ ( n , k ) คือ รหัสเกรย์แบบ nฐานที่มีkหลัก[ 60 ] ลำดับขององค์ประกอบในรหัสเกรย์ (3, 2) คือ: 00, 01, 02, 12, 11, 10, 20, 21, 22 รหัสเกรย์ ( n , k ) อาจสร้างขึ้นแบบเรียกซ้ำ เช่นเดียวกับ BRGC หรืออาจสร้างขึ้นแบบวนซ้ำอัลกอริทึมสำหรับการสร้างรหัสเกรย์ ( n , k ) แบบ วนซ้ำได้ ถูกนำเสนอ (ในภาษา C ):
// อินพุต: ฐาน, ตัวเลข, ค่า// เอาต์พุต: รหัสเกรย์// แปลงค่าเป็นรหัสเกรย์ด้วยฐานและตัวเลขที่กำหนด// การวนซ้ำผ่านลำดับของค่าจะส่งผลให้ได้ลำดับ// ของรหัสเกรย์ซึ่งมีการเปลี่ยนแปลงเพียงตัวเลขเดียวในแต่ละครั้งvoid toGray ( unsigned base , unsigned digits , unsigned value , unsigned gray [ digits ]) { unsigned baseN [ digits ]; // เก็บเลขฐาน N ปกติ หนึ่งหลักต่อรายการunsigned i ; // ตัวแปรลูป// ใส่เลขฐาน N ปกติลงในอาร์เรย์ baseN สำหรับฐาน 10, 109 // จะถูกเก็บเป็น [9,0,1] for ( i = 0 ; i < digits ; i ++ ) { baseN [ i ] = value % base ; value = value / base ; } // แปลงเลขฐาน N ปกติเป็นรหัสเกรย์ที่เทียบเท่า โปรดทราบว่า// ลูปเริ่มต้นที่หลักที่มีค่ามากที่สุดและลงไปunsigned shift = 0 ; while ( i-- ) { // ตัวเลข Gray จะถูกเลื่อนลงตามผลรวมของตัวเลขที่สูงกว่า // gray [ i ] = ( baseN [ i ] + shift ) % base ; shift = shift + base - gray [ i ]; // ลบออกจาก base เพื่อให้ shift เป็นค่าบวก} } // ตัวอย่าง// อินพุต: value = 1899, base = 10, digits = 4 // เอาต์พุต: baseN[] = [9,9,8,1], gray[] = [0,1,7,1] // อินพุต: value = 1900, base = 10, digits = 4 // เอาต์พุต: baseN[] = [0,0,9,1], gray[] = [0,1,8,1]มีอัลกอริทึมรหัสเกรย์อื่นๆ สำหรับรหัสเกรย์ ( n , k ) รหัสเกรย์ ( n , k ) ที่สร้างโดยอัลกอริทึมข้างต้นจะเป็นแบบวนรอบเสมอ อัลกอริทึมบางอย่าง เช่น ของ Guan [ 60 ]ขาดคุณสมบัตินี้เมื่อkเป็นเลขคี่ ในทางกลับกัน ในขณะที่วิธีนี้เปลี่ยนเพียงหลักเดียวในแต่ละครั้ง แต่สามารถเปลี่ยนได้โดยการวนรอบ (วนจากn − 1 ถึง 0) ในอัลกอริทึมของ Guan จำนวนนับจะเพิ่มขึ้นและลดลงสลับกัน ดังนั้นความแตกต่างเชิงตัวเลขระหว่างหลักรหัสเกรย์สองหลักจึงเป็นหนึ่งเสมอ
รหัสเกรย์ไม่ได้ถูกกำหนดอย่างเฉพาะเจาะจง เพราะการสลับตำแหน่งของคอลัมน์ในรหัสดังกล่าวก็เป็นรหัสเกรย์เช่นกัน ขั้นตอนข้างต้นสร้างรหัสที่ยิ่งตัวเลขมีความสำคัญต่ำเท่าใด ตัวเลขนั้นก็จะยิ่งเปลี่ยนแปลงบ่อยขึ้น ทำให้คล้ายกับวิธีการนับแบบปกติ
ดูเพิ่มเติมที่ระบบเลขฐานสองแบบเฉียง (Skew binary number system ) ซึ่งเป็นระบบเลขฐานสามแบบหนึ่ง ที่มีการเปลี่ยนแปลงตัวเลขไม่เกินสองหลักในแต่ละขั้น เนื่องจากแต่ละขั้นสามารถเพิ่มค่าได้โดยใช้การ ทดเลข ไม่เกินหนึ่งหลัก
รหัสสีเทาสมดุล
แม้ว่ารหัส Gray แบบสะท้อนไบนารีจะมีประโยชน์ในหลายสถานการณ์ แต่ก็ไม่เหมาะสมในบางกรณีเนื่องจากขาด "ความสม่ำเสมอ" [ 49 ]ในรหัส Gray ที่สมดุลจำนวนการเปลี่ยนแปลงในตำแหน่งพิกัดที่แตกต่างกันจะใกล้เคียงกันมากที่สุด เพื่อให้มีความแม่นยำมากขึ้น ให้Gเป็นวงจร Gray ที่สมบูรณ์R -ary ที่มีลำดับการเปลี่ยน ผ่านจำนวนการเปลี่ยนผ่าน ( สเปกตรัม ) ของGคือชุดของจำนวนเต็มที่กำหนดโดย
รหัสเกรย์จะเป็นแบบสม่ำเสมอหรือสมดุลสม่ำเสมอหากจำนวนการเปลี่ยนสถานะทั้งหมดเท่ากัน ซึ่งในกรณีนี้เราจะมีสำหรับk ทั้งหมด เห็นได้ชัดว่าเมื่อรหัสดังกล่าวจะมีอยู่ก็ต่อเมื่อnเป็นกำลังของ 2 เท่านั้น [ 61 ]หากnไม่ใช่กำลังของ 2 ก็เป็นไปได้ที่จะสร้าง รหัสไบนารี ที่สมดุลดีซึ่งความแตกต่างระหว่างจำนวนการเปลี่ยนสถานะสองค่าไม่เกิน 2 ดังนั้น (เมื่อรวมทั้งสองกรณีเข้าด้วยกัน) จำนวนการเปลี่ยนสถานะทุกค่าจะเป็นหรือ[ 49 ] รหัสเกรย์ยังสามารถสมดุลแบบเอก ซ์โพเนนเชียลได้ หากจำนวนการเปลี่ยนสถานะทั้งหมดเป็นกำลังของ 2 ที่อยู่ติดกัน และรหัสดังกล่าวมีอยู่สำหรับกำลังของ 2 ทุกค่า[ 62 ]
ตัวอย่างเช่น รหัสเกรย์ 4 บิตที่สมดุลจะมี 16 การเปลี่ยนสถานะ ซึ่งสามารถกระจายอย่างสม่ำเสมอระหว่างตำแหน่งทั้งสี่ (การเปลี่ยนสถานะสี่ครั้งต่อตำแหน่ง) ทำให้สมดุลอย่างสม่ำเสมอ: [ 49 ]
ในขณะที่รหัสเกรย์ 5 บิตที่สมดุลจะมีทรานซิชันทั้งหมด 32 ทรานซิชัน ซึ่งไม่สามารถกระจายอย่างเท่าเทียมกันระหว่างตำแหน่งต่างๆ ได้ ในตัวอย่างนี้ สี่ตำแหน่งมีทรานซิชันหกทรานซิชันต่อตำแหน่ง และหนึ่งตำแหน่งมีแปดทรานซิชัน: [ 49 ]
ตอนนี้เราจะแสดงการสร้าง[ 63 ]และการใช้งาน[ 64 ]สำหรับรหัส Gray ไบนารีที่สมดุล ซึ่งช่วยให้เราสามารถสร้างรหัส Gray ที่สมดุลn หลักสำหรับทุก nได้ หลักการสำคัญคือการสร้างรหัส Gray ( n + 2) หลักแบบอุปนัยโดยกำหนด รหัส Gray nหลักGในลักษณะที่รักษาคุณสมบัติสมดุลไว้ ในการทำเช่นนี้ เราพิจารณาการแบ่งส่วนของ ออกเป็นจำนวนคู่Lของบล็อกที่ไม่ว่างเปล่าในรูปแบบ
โดยที่, , และ) การแบ่งส่วนนี้ทำให้เกิดรหัสเกรย์แบบ -หลัก ซึ่งกำหนดโดย
ถ้าเรากำหนดความหลากหลายของการเปลี่ยนผ่าน
ถ้าจำนวนครั้งที่ตัวเลขในตำแหน่งiเปลี่ยนไประหว่างบล็อกที่ต่อเนื่องกันในพาร์ติชัน คือจำนวนครั้งนั้น สำหรับรหัสเกรย์ ( n + 2) หลักที่เกิดจากพาร์ติชันนี้ สเปกตรัมการเปลี่ยนผ่านจะเป็น
ส่วนที่ละเอียดอ่อนของการสร้างนี้คือการค้นหาการแบ่งส่วนที่เหมาะสมของรหัสเกรย์n หลักที่สมดุลเพื่อให้รหัสที่เหนี่ยวนำโดยมันยังคงสมดุล แต่สำหรับสิ่งนี้มีเพียงจำนวนการเปลี่ยนผ่านเท่านั้นที่มีความสำคัญ การรวมบล็อกสองบล็อกที่ต่อเนื่องกันผ่าน การเปลี่ยนผ่านหลักหนึ่งและการแยกบล็อกอื่นที่การเปลี่ยนผ่านหลักอื่นจะสร้างรหัสเกรย์ที่แตกต่างกันโดยมีสเปกตรัมการเปลี่ยนผ่านที่เหมือนกันทุกประการดังนั้นตัวอย่างเช่น[ 62 ] อาจ กำหนดการเปลี่ยนผ่านครั้งแรกที่หลักหนึ่งเป็นการเปลี่ยนผ่านที่ตกอยู่ระหว่างสองบล็อก สามารถพบรหัสที่สม่ำเสมอได้เมื่อและและการสร้างนี้สามารถขยายไปยัง กรณี R -ary ได้เช่นกัน[ 63 ]
รหัสเกรย์ระยะยาว
รหัสเกรย์ แบบยาว (หรือช่องว่างสูงสุด ) จะเพิ่มระยะห่างระหว่างการเปลี่ยนแปลงตัวเลขที่ต่อเนื่องกันในตำแหน่งเดียวกันให้มากที่สุด นั่นคือ ความยาวขั้นต่ำของบิตใดๆ จะยังคงไม่เปลี่ยนแปลงให้นานที่สุดเท่าที่จะเป็นไปได้[ 65 ]
รหัสเกรย์แบบโมโนโทนิก
รหัสโมโนโทนิกมีประโยชน์ในทฤษฎีของเครือข่ายการเชื่อมต่อ โดยเฉพาะอย่างยิ่งสำหรับการลดการขยายตัวสำหรับอาร์เรย์เชิงเส้นของโปรเซสเซอร์[ 66 ] หากเรากำหนดน้ำหนักของสตริงไบนารีเป็นจำนวน 1 ในสตริง แม้ว่าเราจะไม่สามารถมีรหัสเกรย์ที่มีน้ำหนักเพิ่มขึ้นอย่างเคร่งครัดได้ แต่เราอาจต้องการประมาณค่านี้โดยให้รหัสทำงานผ่านน้ำหนักที่อยู่ติดกันสองค่าก่อนที่จะถึงค่าถัดไป
เราสามารถกำหนดแนวคิดของรหัสเกรย์แบบโมโนโทนได้ดังนี้: พิจารณาการแบ่งไฮเปอร์คิวบ์ออกเป็นระดับของจุดยอดที่มีน้ำหนักเท่ากัน กล่าวคือ
สำหรับ. ระดับเหล่านี้เป็นไปตามเงื่อนไข. ให้เป็นกราฟย่อยของที่เกิดจากและให้เป็นขอบใน. รหัสเกรย์แบบโมโนโทนิกคือเส้นทางแฮมิลโทเนียนในโดยที่เมื่อใดก็ตามที่มาก่อนในเส้นทางนั้น แล้ว.
การสร้างรหัสเกรย์แบบโมโนโทนิกn หลักที่สง่างามสำหรับ n ใดๆ นั้น ขึ้นอยู่กับแนวคิดของการสร้างเส้นทางย่อยที่มีความยาวซึ่งมีขอบใน ซ้ำ ๆ[ 66 ]เรากำหนดเมื่อใดก็ตามที่หรือและ
มิฉะนั้น ในที่นี้คือการเรียงสับเปลี่ยนที่กำหนดไว้อย่างเหมาะสม และหมายถึงเส้นทางPที่มีพิกัดถูกสลับโดยเส้นทางเหล่านี้ก่อให้เกิดรหัสเกรย์แบบโมโนโทนิกn หลักสองรหัส และกำหนดโดย
การเลือกค่าที่ทำให้มั่นใจได้ว่ารหัสเหล่านี้เป็นรหัสเกรย์อย่างแท้จริงคือค่า โดยค่าแรกๆ ของแสดงอยู่ในตารางด้านล่าง
| j = 0 | j = 1 | j = 2 | j = 3 | |
|---|---|---|---|---|
| n = 1 | 0, 1 | |||
| n = 2 | 00, 01 | 10, 11 | ||
| n = 3 | 000, 001 | 100, 110, 010, 011 | 101, 111 | |
| n = 4 | 0000, 0001 | 1000, 1100, 0100, 0110, 0010, 0011 | 1010, 1011, 1001, 1101, 0101, 0111 | 1110, 1111 |
รหัสเกรย์แบบโมโนโทนิกเหล่านี้สามารถนำไปใช้งานได้อย่างมีประสิทธิภาพในลักษณะที่แต่ละองค์ประกอบถัดไปสามารถสร้างขึ้นได้ใน เวลา O ( n ) อัลกอริทึมนี้อธิบายได้ง่ายที่สุดโดยใช้โครูทีน
รหัสโมโนโทนิกมีความเชื่อมโยงที่น่าสนใจกับสมมติฐานของ Lovászซึ่งระบุว่ากราฟที่เชื่อมต่อกันแบบ vertex-transitive ทุกกราฟ จะมีเส้นทางแฮมิลโทเนียนอยู่ กราฟย่อย "ระดับกลาง" เป็น แบบ vertex-transitive (นั่นคือ กลุ่มออโตมอร์ฟิซึมของมันเป็นแบบ transitive ดังนั้นแต่ละจุดยอดจึงมี "สภาพแวดล้อมเฉพาะที่" เดียวกันและไม่สามารถแยกแยะออกจากจุดยอดอื่นได้ เนื่องจากเราสามารถติดป้ายกำกับพิกัดใหม่ได้เช่นเดียวกับตัวเลขไบนารีเพื่อให้ได้ออโตมอร์ฟิซึม ) และปัญหาของการค้นหาเส้นทางแฮมิลโทเนียนในกราฟย่อยนี้เรียกว่า "ปัญหาระดับกลาง" ซึ่งสามารถให้ข้อมูลเชิงลึกเกี่ยวกับสมมติฐานทั่วไปได้ คำถามนี้ได้รับการตอบรับในเชิงบวกสำหรับและการสร้างรหัสโมโนโทนิกก่อนหน้านี้รับประกันเส้นทางแฮมิลโทเนียนที่มีความยาวอย่างน้อย 0.839 Nโดยที่Nคือจำนวนจุดยอดในกราฟย่อยระดับกลาง[ 67 ]
รหัสเบคเก็ตต์-เกรย์
รหัสเกรย์อีกประเภทหนึ่งคือรหัสเบคเก็ตต์-เกรย์ซึ่งตั้งชื่อตามซามูเอล เบคเก็ ตต์ นักเขียนบทละครชาวไอริช ผู้ซึ่งสนใจในความสมมาตรบทละครเรื่อง " Quad " ของเขามีนักแสดงสี่คนและแบ่งออกเป็นสิบหกช่วงเวลา แต่ละช่วงเวลาจบลงด้วยนักแสดงคนใดคนหนึ่งในสี่คนเข้าหรือออกจากเวที บทละครเริ่มต้นและจบลงด้วยเวทีที่ว่างเปล่า และเบคเก็ตต์ต้องการให้นักแสดงแต่ละกลุ่มปรากฏบนเวทีเพียงครั้งเดียว[ 68 ]เห็นได้ชัดว่าชุดของนักแสดงที่อยู่บนเวทีในขณะนั้นสามารถแทนด้วยรหัสเกรย์ไบนารี 4 บิตได้ อย่างไรก็ตาม เบคเก็ตต์ได้กำหนดข้อจำกัดเพิ่มเติมในบทละคร: เขาต้องการให้นักแสดงเข้าและออกโดยที่นักแสดงที่อยู่บนเวทีนานที่สุดจะเป็นคนออกเสมอ จากนั้นนักแสดงสามารถแทนด้วยคิว FIFO ได้ ดังนั้น (ในบรรดานักแสดงที่อยู่บนเวที) นักแสดงที่ถูกดึงออกจากคิวจะเป็นคนที่ถูกเพิ่มเข้าไปในคิวก่อนเสมอ[ 68 ]เบ็คเก็ตต์ไม่สามารถหาโค้ดเบ็คเก็ตต์-เกรย์สำหรับบทละครของเขาได้ และที่จริงแล้ว รายการที่ครบถ้วนของลำดับที่เป็นไปได้ทั้งหมดเผยให้เห็นว่าไม่มีโค้ดดังกล่าวสำหรับn = 4 เป็นที่ทราบกันในปัจจุบันว่าโค้ดดังกล่าวมีอยู่สำหรับn = 2, 5, 6, 7 และ 8 และไม่มีอยู่สำหรับn = 3 หรือ 4 ตัวอย่างของโค้ดเบ็คเก็ตต์-เกรย์ 8 บิตสามารถพบได้ในหนังสือ Art of Computer ProgrammingของDonald Knuth [ 11 ]ตามที่ Sawada และ Wong กล่าว พื้นที่การค้นหาสำหรับn = 6 สามารถสำรวจได้ใน 15 ชั่วโมง และมากกว่านั้นพบ วิธีแก้ปัญหา 9500วิธีสำหรับกรณีn = 7 [ 69 ]
รหัสงูในกล่อง

รหัสงูในกล่องหรืองูคือลำดับของโหนดของเส้นทางที่เหนี่ยวนำในกราฟไฮเปอร์คิวบ์nมิติและรหัสขดลวดในกล่อง[ 70 ]หรือขดลวดคือลำดับของโหนดของวงจร ที่เหนี่ยวนำ ในไฮเปอร์คิวบ์ เมื่อมองว่าเป็นรหัสเกรย์ ลำดับเหล่านี้มีคุณสมบัติที่สามารถตรวจจับข้อผิดพลาดในการเข้ารหัสบิตเดียวได้ รหัสประเภทนี้ได้รับการอธิบายครั้งแรกโดยWilliam H. Kautzในช่วงปลายทศวรรษ 1950 [ 3 ]ตั้งแต่นั้นมา มีการวิจัยมากมายเกี่ยวกับการค้นหารหัสที่มีจำนวนคำรหัสมากที่สุดเท่าที่จะเป็นไปได้สำหรับมิติไฮเปอร์คิวบ์ที่กำหนด
รหัสเกรย์แบบแทร็กเดียว
รหัสเกรย์อีกประเภทหนึ่งคือรหัสเกรย์แบบแทร็กเดียว (STGC) ซึ่งพัฒนาโดย Norman B. Spedding [ 71 ] [ 72 ]และได้รับการปรับปรุงโดย Hiltgen, Paterson และ Brandestini ในSingle-track Gray Codes (1996) [ 73 ] [ 74 ] STGC เป็นรายการแบบวนรอบของ การเข้ารหัสไบนารีที่ไม่ซ้ำกัน Pตัวที่มีความยาว n โดยที่คำสองคำที่อยู่ติดกันจะแตกต่างกันเพียงตำแหน่งเดียว และเมื่อตรวจสอบรายการเป็นเมทริกซ์P × n แต่ละคอลัมน์จะเป็นการเลื่อนแบบวนรอบของคอลัมน์แรก[ 75 ]

ชื่อนี้มาจากวิธีการใช้งานกับตัวเข้ารหัสแบบหมุน (rotary encoders ) ซึ่งมีการตรวจจับแทร็กจำนวนหนึ่งด้วยหน้าสัมผัส ทำให้แต่ละแทร็กส่งค่าออกมาเป็น0หรือ1เพื่อลดสัญญาณรบกวนที่เกิดจากการที่หน้าสัมผัสต่างๆ ไม่ได้สลับตำแหน่งพร้อมกันอย่างแม่นยำ จึงควรตั้งค่าแทร็กเพื่อให้ข้อมูลที่ส่งออกมาจากหน้าสัมผัสอยู่ในรูปแบบรหัสเกรย์ (Gray code) เพื่อให้ได้ความแม่นยำเชิงมุมสูง จำเป็นต้องใช้หน้าสัมผัสจำนวนมาก เพื่อให้ได้ความแม่นยำอย่างน้อย 1 องศา จำเป็นต้องมีตำแหน่งที่แตกต่างกันอย่างน้อย 360 ตำแหน่งต่อการหมุนหนึ่งรอบ ซึ่งต้องใช้ข้อมูลอย่างน้อย 9 บิต และดังนั้นจึงต้องใช้จำนวนหน้าสัมผัสเท่ากัน
หากวางหน้าสัมผัสทั้งหมดไว้ที่ตำแหน่งเชิงมุมเดียวกัน จะต้องใช้แทร็ก 9 แทร็กเพื่อให้ได้ BRGC มาตรฐานที่มีความแม่นยำอย่างน้อย 1° อย่างไรก็ตาม หากผู้ผลิตย้ายหน้าสัมผัสไปยังตำแหน่งเชิงมุมที่แตกต่างกัน (แต่ยังคงอยู่ในระยะห่างเท่าเดิมจากแกนกลาง) รูปแบบ "วงแหวน" ที่สอดคล้องกันจะต้องหมุนด้วยมุมเดียวกันเพื่อให้ได้เอาต์พุตเดียวกัน หากบิตที่มีนัยสำคัญที่สุด (วงแหวนด้านในในรูปที่ 1) ถูกหมุนมากพอ มันจะตรงกับวงแหวนถัดไปอย่างแม่นยำ เนื่องจากวงแหวนทั้งสองเหมือนกัน วงแหวนด้านในจึงสามารถตัดออกได้ และเซ็นเซอร์สำหรับวงแหวนนั้นสามารถย้ายไปยังวงแหวนที่เหลือซึ่งเหมือนกัน (แต่เยื้องด้วยมุมนั้นจากเซ็นเซอร์อีกตัวบนวงแหวนนั้น) เซ็นเซอร์สองตัวบนวงแหวนเดียวนี้จะสร้างตัวเข้ารหัสแบบควอดราเจอร์ ซึ่งจะลดจำนวนแทร็กสำหรับตัวเข้ารหัสเชิงมุมที่มี "ความละเอียด 1°" เหลือ 8 แทร็ก การลดจำนวนแทร็กให้น้อยลงไปอีกนั้นไม่สามารถทำได้กับ BRGC
เป็นเวลาหลายปีที่ Torsten Sillke [ 76 ]และนักคณิตศาสตร์คนอื่นๆ เชื่อว่าเป็นไปไม่ได้ที่จะเข้ารหัสตำแหน่งบนแทร็กเดียวเพื่อให้ตำแหน่งที่ต่อเนื่องกันแตกต่างกันที่เซ็นเซอร์เพียงตัวเดียว ยกเว้นตัวเข้ารหัสแบบควอดราเจอร์ 2 เซ็นเซอร์ 1 แทร็ก ดังนั้นสำหรับแอปพลิเคชันที่แทร็ก 8 แทร็กมีขนาดใหญ่เกินไป ผู้คนจึงใช้ตัวเข้ารหัสแบบเพิ่มทีละแทร็กเดียว (ตัวเข้ารหัสแบบควอดราเจอร์) หรือตัวเข้ารหัสแบบ "ควอดราเจอร์ + ร่องอ้างอิง" 2 แทร็ก
อย่างไรก็ตาม Norman B. Spedding ได้จดสิทธิบัตรในปี 1994 พร้อมตัวอย่างหลายตัวอย่างที่แสดงให้เห็นว่าเป็นไปได้[ 71 ]แม้ว่าจะไม่สามารถแยกแยะตำแหน่ง 2 nตำแหน่งด้วย เซ็นเซอร์ n ตัวบนแทร็กเดียวได้ แต่ก็สามารถแยกแยะได้ใกล้เคียงกับจำนวนนั้น Etzion และ Paterson ตั้งข้อสันนิษฐานว่าเมื่อnเป็นกำลังของ 2 เซ็นเซอร์ n ตัว สามารถแยกแยะตำแหน่งได้มากที่สุด 2 n − 2 nตำแหน่ง และสำหรับจำนวนเฉพาะnขีดจำกัดคือ 2 n − 2 ตำแหน่ง[ 77 ]ผู้เขียนได้สร้างรหัสแทร็กเดียว 504 ตำแหน่งที่มีความยาว 9 ซึ่งพวกเขาเชื่อว่าเหมาะสมที่สุด เนื่องจากจำนวนนี้มากกว่า 2 8 = 256 จึงต้องใช้เซ็นเซอร์มากกว่า 8 ตัวสำหรับรหัสใดๆ แม้ว่า BRGC จะสามารถแยกแยะตำแหน่งได้ 512 ตำแหน่งด้วยเซ็นเซอร์ 9 ตัว
ตัวอย่าง STGC สำหรับP = 30 และn = 5 แสดงไว้ที่นี่:
| มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0° | 10000 | 72° | 01000 | 144° | 00100 | 216° | 00010 | 288° | 00001 | ||||
| 12° | 10100 | 84° | 01010 | 156° | 00101 | 228° | 10010 | 300° | 01001 | ||||
| 24° | 11100 | 96° | 01110 | 168° | 00111 | 240° | 10011 | 312° | 11001 | ||||
| 36° | 11110 | 108° | 01111 | 180° | 10111 | 252° | 11011 | 324° | 11101 | ||||
| 48° | 11010 | 120° | 01101 | 192° | 10110 | 264° | 01011 | 336° | 10101 | ||||
| 60° | 11000 | 132° | 01100 | 204° | 00110 | 276° | 00011 | 348° | 10001 |
แต่ละคอลัมน์เป็นการเลื่อนแบบวนรอบของคอลัมน์แรก และจากแถวใด ๆ ไปยังแถวถัดไปจะมีการเปลี่ยนแปลงเพียงบิตเดียว[ 78 ] ลักษณะแบบแทร็กเดียว (เช่น โซ่รหัส) มีประโยชน์ในการผลิตล้อเหล่านี้ (เมื่อเทียบกับ BRGC) เนื่องจากต้องการเพียงแทร็กเดียว จึงช่วยลดต้นทุนและขนาดลงได้ ลักษณะของรหัสเกรย์มีประโยชน์ (เมื่อเทียบกับรหัสแบบโซ่หรือที่เรียกว่าลำดับ De Bruijn ) เนื่องจากจะมีเซ็นเซอร์เพียงตัวเดียวที่เปลี่ยนแปลงในแต่ละครั้ง ดังนั้นความไม่แน่นอนในระหว่างการเปลี่ยนผ่านระหว่างสองสถานะที่ไม่ต่อเนื่องจะมีเพียงบวกหรือลบหนึ่งหน่วยของการวัดเชิงมุมที่อุปกรณ์สามารถแก้ไขได้[ 79 ]

นับตั้งแต่มีการเพิ่มตัวอย่าง 30 องศานี้ ก็มีความสนใจในตัวอย่างที่มีความละเอียดเชิงมุมสูงขึ้นมากมาย ในปี 2551 Gary Williams [ 80 ]โดยอ้างอิงจากงานก่อนหน้า[ 77 ]ได้ค้นพบรหัส Gray แบบแทร็กเดียว 9 บิตที่ให้ความละเอียด 1 องศา รหัส Gray นี้ถูกนำมาใช้ในการออกแบบอุปกรณ์จริงซึ่งเผยแพร่บนเว็บไซต์Thingiverseอุปกรณ์นี้[ 81 ]ได้รับการออกแบบโดย etzenseep (Florian Bauer) ในเดือนกันยายน 2565
ตัวอย่าง STGC สำหรับP = 360 และn = 9 แสดงไว้ที่นี่:
| มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | มุม | รหัส | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0° | 100000001 | 40° | 000000011 | 80° | 000000110 | 120° | 000001100 | 160° | 000011000 | 200° | 000110000 | 240° | 001100000 | 280° | 011000000 | 320° | 110,000,000 | |||||||||
| 1° | 110000001 | 41° | 100000011 | 81° | 000000111 | 121° | 000001110 | 161° | 000011100 | 201° | 000111000 | 241° | 001110000 | 281° | 011100000 | 321° | 111000000 | |||||||||
| 2° | 111000001 | 42° | 110000011 | 82° | 100000111 | 122° | 000001111 | 162° | 000011110 | 202° | 000111100 | 242° | 001111000 | 282° | 011110000 | 322° | 111100000 | |||||||||
| 3° | 111000011 | 43° | 110000111 | 83° | 100001111 | 123° | 000011111 | 163° | 000111110 | 203° | 001111100 | 243° | 011111000 | 283° | 111110000 | 323° | 111100001 | |||||||||
| 4° | 111000111 | 44° | 110001111 | 84° | 100011111 | 124° | 000111111 | 164° | 001111110 | 204° | 011111100 | 244° | 111111000 | 284° | 111110001 | 324° | 111100011 | |||||||||
| 5° | 111001111 | 45° | 110011111 | 85° | 100111111 | 125° | 001111111 | 165° | 011111110 | 205° | 111111100 | 245° | 111111001 | 285° | 111110011 | 325° | 111100111 | |||||||||
| 6° | 111011111 | 46° | 110111111 | 86° | 101111111 | 126° | 011111111 | 166° | 111111110 | 206° | 111111101 | 246° | 111111011 | 286° | 111110111 | 326° | 111101111 | |||||||||
| 7° | 111011011 | 47° | 110110111 | 87° | 101101111 | 127° | 011011111 | 167° | 110111110 | 207° | 101111101 | 247° | 011111011 | 287° | 111110110 | 327° | 111101101 | |||||||||
| 8° | 101011011 | 48° | 010110111 | 88° | 101101110 | 128° | 011011101 | 168° | 110111010 | 208° | 101110101 | 248° | 011101011 | 288° | 111010110 | 328° | 110101101 | |||||||||
| 9° | 101011111 | 49° | 010111111 | 89° | 101111110 | 129° | 011111101 | 169° | 111111010 | 209° | 111110101 | 249° | 111101011 | 289° | 111010111 | 329° | 110101111 | |||||||||
| 10° | 101011101 | 50° | 010111011 | 90° | 101110110 | 130° | 011101101 | 170° | 111011010 | 210° | 110110101 | 250° | 101101011 | 290° | 011010111 | 330° | 110101110 | |||||||||
| 11° | 101010101 | 51° | 010101011 | 91° | 101010110 | 131° | 010101101 | 171° | 101011010 | 211° | 010110101 | 251° | 101101010 | 291° | 011010101 | 331° | 110101010 | |||||||||
| 12° | 101010111 | 52° | 010101111 | 92° | 101011110 | 132° | 010111101 | 172° | 101111010 | 212° | 011110101 | 252° | 111101010 | 292° | 111010101 | 332° | 110101011 | |||||||||
| 13° | 101110111 | 53° | 011101111 | 93° | 111011110 | 133° | 110111101 | 173° | 101111011 | 213° | 011110111 | 253° | 111101110 | 293° | 111011101 | 333° | 110111011 | |||||||||
| 14° | 001110111 | 54° | 011101110 | 94° | 111011100 | 134° | 110111001 | 174° | 101110011 | 214° | 011100111 | 254° | 111001110 | 294° | 110011101 | 334° | 100111011 | |||||||||
| 15° | 001010111 | 55° | 010101110 | 95° | 101011100 | 135° | 010111001 | 175° | 101110010 | 215° | 011100101 | 255° | 111001010 | 295° | 110010101 | 335° | 100101011 | |||||||||
| 16° | 001011111 | 56° | 010111110 | 96° | 101111100 | 136° | 011111001 | 176° | 111110010 | 216° | 111100101 | 256° | 111001011 | 296° | 110010111 | 336° | 100101111 | |||||||||
| 17° | 001011011 | 57° | 010110110 | 97° | 101101100 | 137° | 011011001 | 177° | 110110010 | 217° | 101100101 | 257° | 011001011 | 297° | 110010110 | 337° | 100101101 | |||||||||
| 18° | 001011001 | 58° | 010110010 | 98° | 101100100 | 138° | 011001001 | 178° | 110010010 | 218° | 100100101 | 258° | 001001011 | 298° | 010010110 | 338° | 100101100 | |||||||||
| 19° | 001111001 | 59° | 011110010 | 99° | 111100100 | 139° | 111001001 | 179° | 110010011 | 219° | 100100111 | 259° | 001001111 | 299° | 010011110 | 339° | 100111100 | |||||||||
| 20° | 001111101 | 60° | 011111010 | 100° | 111110100 | 140° | 111101001 | 180° | 111010011 | 220° | 110100111 | 260° | 101001111 | 300° | 010011111 | 340° | 100111110 | |||||||||
| 21° | 000111101 | 61° | 001111010 | 101° | 011110100 | 141° | 111101000 | 181° | 111010001 | 221° | 110100011 | 261° | 101000111 | 301° | 010001111 | 341° | 100011110 | |||||||||
| 22° | 000110101 | 62° | 001101010 | 102° | 011010100 | 142° | 110101000 | 182° | 101010001 | 222° | 010100011 | 262° | 101000110 | 302° | 010001101 | 342° | 100011010 | |||||||||
| 23° | 000100101 | 63° | 001001010 | 103° | 010010100 | 143° | 100101000 | 183° | 001010001 | 223° | 010100010 | 263° | 101000100 | 303° | 010001001 | 343° | 100010010 | |||||||||
| 24° | 000101101 | 64° | 001011010 | 104° | 010110100 | 144° | 101101000 | 184° | 011010001 | 224° | 110100010 | 264° | 101000101 | 304° | 010001011 | 344° | 100010110 | |||||||||
| 25° | 000101001 | 65° | 001010010 | 105° | 010100100 | 145° | 101001000 | 185° | 010010001 | 225° | 100100010 | 265° | 001000101 | 305° | 010001010 | 345° | 100010100 | |||||||||
| 26° | 000111001 | 66° | 001110010 | 106° | 011100100 | 146° | 111001000 | 186° | 110010001 | 226° | 100100011 | 266° | 001000111 | 306° | 010001110 | 346° | 100011100 | |||||||||
| 27° | 000110001 | 67° | 001100010 | 107° | 011000100 | 147° | 110001000 | 187° | 100010001 | 227° | 000100011 | 267° | 001000110 | 307° | 010001100 | 347° | 100011000 | |||||||||
| 28° | 000010001 | 68° | 000100010 | 108° | 001000100 | 148° | 010001000 | 188° | 100010000 | 228° | 000100001 | 268° | 001000010 | 308° | 010000100 | 348° | 100001000 | |||||||||
| 29° | 000011001 | 69° | 000110010 | 109° | 001100100 | 149° | 011001000 | 189° | 110010000 | 229° | 100100001 | 269° | 001000011 | 309° | 010000110 | 349° | 100001100 | |||||||||
| 30° | 000001001 | 70° | 000010010 | 110° | 000100100 | 150° | 001001000 | 190° | 010010000 | 230° | 100100000 | 270° | 001000001 | 310° | 010000010 | 350° | 100000100 | |||||||||
| 31° | 100001001 | 71° | 000010011 | 111° | 000100110 | 151° | 001001100 | 191° | 010011000 | 231° | 100110000 | 271° | 001100001 | 311° | 011000010 | 351° | 110000100 | |||||||||
| 32° | 100001101 | 72° | 000011011 | 112° | 000110110 | 152° | 001101100 | 192° | 011011000 | 232° | 110110000 | 272° | 101100001 | 312° | 011000011 | 352° | 110000110 | |||||||||
| 33° | 100000101 | 73° | 000001011 | 113° | 000010110 | 153° | 000101100 | 193° | 001011000 | 233° | 010110000 | 273° | 101100000 | 313° | 011000001 | 353° | 110000010 | |||||||||
| 34° | 110000101 | 74° | 100001011 | 114° | 000010111 | 154° | 000101110 | 194° | 001011100 | 234° | 010111000 | 274° | 101110000 | 314° | 011100001 | 354° | 111000010 | |||||||||
| 35° | 010000101 | 75° | 100001010 | 115° | 000010101 | 155° | 000101010 | 195° | 001010100 | 235° | 010101000 | 275° | 101010000 | 315° | 010100001 | 355° | 101000010 | |||||||||
| 36° | 010000111 | 76° | 100001110 | 116° | 000011101 | 156° | 000111010 | 196° | 001110100 | 236° | 011101000 | 276° | 111010000 | 316° | 110100001 | 356° | 101000011 | |||||||||
| 37° | 010000011 | 77° | 100000110 | 117° | 000001101 | 157° | 000011010 | 197° | 000110100 | 237° | 001101000 | 277° | 011010000 | 317° | 110100000 | 357° | 101000001 | |||||||||
| 38° | 010000001 | 78° | 100000010 | 118° | 000000101 | 158° | 000001010 | 198° | 000010100 | 238° | 000101000 | 278° | 001010000 | 318° | 010100000 | 358° | 101000000 | |||||||||
| 39° | 000000001 | 79° | 000000010 | 119° | 000000100 | 159° | 000001000 | 199° | 000010000 | 239° | 000100000 | 279° | 001000000 | 319° | 010000000 | 359° | 100000000 |
| มุมเริ่มต้น | มุมสุดท้าย | ความยาว | |
|---|---|---|---|
| 3 | 4 | 2 | |
| 23 | 28 | 6 | |
| 31 | 37 | 7 | |
| 44 | 48 | 5 | |
| 56 | 60 | 5 | |
| 64 | 71 | 8 | |
| 74 | 76 | 3 | |
| 88 | 91 | 4 | |
| 94 | 96 | 3 | |
| 99 | 104 | 6 | |
| 110 | 115 | 6 | |
| 131 | 134 | 4 | |
| 138 | 154 | 17 | |
| 173 | 181 | 9 | |
| 186 | 187 | 2 | |
| 220 | 238 | 19 | |
| 242 | 246 | 5 | |
| 273 | 279 | 7 | |
| 286 | 289 | 4 | |
| 307 | 360 | 54 |
รหัสเกรย์สองมิติ

รหัสเกรย์สองมิติใช้ในการสื่อสารเพื่อลดจำนวนข้อผิดพลาดของบิตในจุดที่อยู่ติดกันในคอนสเต ลเลชันของ การมอดูเลชันแอมพลิจูดควอดราเจอร์ (QAM) ในการเข้ารหัสทั่วไป จุดคอนสเตลเลชันที่อยู่ติดกันในแนวนอนและแนวตั้งจะแตกต่างกันเพียงบิตเดียว และจุดที่อยู่ติดกันในแนวทแยงจะแตกต่างกัน 2 บิต[ 82 ]
รหัส Gray สองมิติยังมีประโยชน์ใน แผนการ ระบุตำแหน่งโดยรหัสจะถูกนำไปใช้กับแผนที่พื้นที่ เช่นการฉายภาพพื้นผิวโลกแบบ Mercator และฟังก์ชันระยะทางสองมิติแบบวนรอบที่เหมาะสม เช่นเมตริก Mannheimจะถูกใช้เพื่อคำนวณระยะทางระหว่างตำแหน่งที่เข้ารหัสสองตำแหน่ง ซึ่งจะรวมคุณลักษณะของระยะทาง Hammingเข้ากับการต่อเนื่องแบบวนรอบของการฉายภาพ Mercator [ 83 ]
รหัสเกรย์ส่วนเกิน
หากส่วนย่อยของค่ารหัสเฉพาะถูกแยกออกมาจากค่านั้น ตัวอย่างเช่น 3 บิตสุดท้ายของรหัสเกรย์ 4 บิต รหัสที่ได้จะเป็น "รหัสเกรย์ส่วนเกิน" รหัสนี้แสดงคุณสมบัติการนับถอยหลังในบิตที่แยกออกมาเหล่านั้น หากค่าเดิมเพิ่มขึ้นอีก เหตุผลก็คือ ค่าที่เข้ารหัสด้วยเกรย์จะไม่แสดงพฤติกรรมของการล้น (overflow) ที่รู้จักกันดีในการเข้ารหัสไบนารีแบบคลาสสิก เมื่อค่าเพิ่มขึ้นเกินค่า "สูงสุด"
ตัวอย่าง: รหัสเกรย์ 3 บิตสูงสุดคือ 7 ซึ่งเข้ารหัสเป็น (0)100 การเพิ่ม 1 จะได้เลข 8 ซึ่งเข้ารหัสในรหัสเกรย์เป็น 1100 บิต 3 บิตสุดท้ายจะไม่เกิดการล้นและจะนับถอยหลังหากคุณเพิ่มรหัส 4 บิตเดิมต่อไปอีก
เมื่อใช้งานเซ็นเซอร์ที่ส่งค่าที่เข้ารหัสด้วยรหัสเกรย์หลายค่าออกมาในลักษณะอนุกรม จึงควรให้ความสนใจว่าเซ็นเซอร์นั้นสร้างค่าหลายค่าเหล่านั้นโดยเข้ารหัสด้วยรหัสเกรย์เดียวหรือแยกเป็นค่าต่างหาก เพราะมิเช่นนั้นค่าเหล่านั้นอาจดูเหมือนนับถอยหลังเมื่อคาดว่าจะเกิด "ค่าเกิน"
ไอโซเมตรีสีเทา
การแมปแบบหนึ่งต่อหนึ่ง { 0 ↔ 00 , 1 ↔ 01 , 2 ↔ 11 , 3 ↔ 10 } สร้างไอโซเมตรีระหว่างปริภูมิเมตริกเหนือฟิลด์จำกัดที่มีเมตริกที่กำหนดโดยระยะทางแฮมมิงและปริภูมิเมตริกเหนือวงแหวนจำกัด ( เลขคณิตมอดูลาร์ทั่วไป) ที่มีเมตริกที่กำหนดโดยระยะทางลีการแมปนี้ได้รับการขยายอย่างเหมาะสมไปยังไอโซเมตรีของปริภูมิแฮมมิงและความสำคัญของมันอยู่ที่การสร้างความสอดคล้องระหว่างรหัส "ที่ดี" ต่างๆ แต่ไม่จำเป็นต้องเป็นรหัสเชิงเส้นเช่น ภาพแผนที่เกรย์ใน รหัส เชิงเส้นวงแหวนจาก[ 84 ] [ 85 ]
รหัสที่เกี่ยวข้อง
มีรหัสไบนารีหลายประเภทที่คล้ายกับรหัสเกรย์ ได้แก่:
- รหัส Datex หรือรหัส Giannini (1954) ตามที่อธิบายโดย Carl P. Spaulding [ 7 ] [ 86 ] [ 87 ] [ 88 ] [ 89 ] [ 6 ]ใช้รูปแบบหนึ่งของรหัส O'Brien II
- รหัสที่ใช้โดย Varec (ประมาณปี 1954) [ 90 ] [ 91 ] [ 92 ] [ 93 ]ใช้รูปแบบหนึ่งของรหัส O'Brien Iเช่นเดียวกับรูปแบบรหัส Gray ฐาน 12 และฐาน 16
- รหัส Lucal (1959) [ 94 ] [ 95 ] [ 54 ]หรือที่รู้จักกันในชื่อรหัสไบนารีสะท้อนแบบดัดแปลง (MRB) [ 94 ] [ 95 ] [ nb 3 ]
- รหัส Gillham (1961/1962) [ 87 ] [ 96 ] [ 6 ] [ 97 ] [ 98 ]ใช้ รหัส Datex ที่แตกต่างกัน และรหัส O'Brien II
- รหัส Leslie และ Russell (1964) [ 99 ] [ 8 ] [ 100 ] [ 96 ]
- รหัสสถานประกอบการเรดาร์หลวง[ 96 ]
- รหัส Hoklas (1988) [ 101 ] [ 102 ] [ 103 ]
รหัส เลขฐานสองที่เข้ารหัสแบบทศนิยม (BCD) ต่อไปนี้เป็นรูปแบบหนึ่งของรหัสเกรย์เช่นกัน:
- รหัส Petherick (พ.ศ. 2496) [ 17 ] [ 104 ] [ 105 ] [ 106 ] [ 52 ] [ 102 ] [ nb 4 ]หรือที่รู้จักกันในชื่อ รหัส Royal Aircraft Establishment (RAE) [ 107 ]
- รหัส O'Brien I และ II (1955) [ 108 ] [ 109 ] [ 110 ] [ 88 ] [ 89 ] [ 102 ] (รหัส O'Brien ประเภท I [หมายเหตุ 5 ]ได้รับการอธิบายโดย Frederic A. Foss แห่งIBM [ 111 ] [ 112 ]และถูกใช้โดยVarecในปี 1954 ต่อมา รหัสนี้ยังเป็นที่รู้จักในชื่อรหัส Watts หรือรหัส Watts reflected decimal (WRD) และบางครั้งก็ถูกอ้างถึงอย่างคลุมเครือว่าเป็นรหัส Gray แบบไบนารีที่แก้ไขแบบสะท้อน[ 113 ] [ 18 ] [ 19 ] [ 114 ] [ 115 ] [ 116 ] [ 117 ] [ 118 ] [ 119 ] [หมายเหตุ 1 ] [หมายเหตุ 3 ]รหัส O'Brien ประเภท II ถูกใช้โดยDatexในปี 1954 [ nb 4 ] )
- รหัส Gray ส่วนเกิน-3 (1956) [ 120 ] (หรือที่รู้จักกันในชื่อ รหัส Gray ส่วนเกิน-3 , [ 88 ] [ 89 ] [ 6 ]รหัส Gray ส่วนเกิน 3, รหัสสะท้อนส่วนเกิน-3, รหัส Gray ส่วนเกิน, [ 102 ]รหัส Gray ส่วนเกิน, รหัส Gray ส่วนเกิน 10-3 หรือ รหัส Gray–Stibitz) อธิบายโดย Frank P. Turvey Jr. แห่งITT [ 120 ]
- รหัส Tompkins I และ II (1956) [ 2 ] [ 109 ] [ 110 ] [ 88 ] [ 89 ] [ 102 ]
- รหัส Glixon (1957) บางครั้งเรียกอย่างคลุมเครือว่ารหัส Gray ที่แก้ไขแล้ว[ 121 ] [ 52 ] [ 122 ] [ 123 ] [ 109 ] [ 110 ] [ 88 ] [ 89 ] [ 102 ] [ nb 3 ] [ nb 5 ]
| ชื่อ | นิดหน่อย | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | น้ำหนัก[ nb 7 ] | แทร็ก | คอมพลี. | วัฏจักร | 5 วินาที | ความคิดเห็น |
| เกรย์ บีซีดี | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0–3 | 4 (3 [ nb 8 ] ) | เลขที่ | (2, 4, 8, 16) | เลขที่ | [ 109 ] [ 110 ] |
| 3 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | |||||||
| พอล | 4 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1–3 | 4 (3 [ nb 8 ] ) | เลขที่ | 2, 10 | เลขที่ | [ 124 ] |
| 3 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |||||||
| 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | |||||||
| กลิกสัน | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0–3 | 4 | เลขที่ | 2, 4, 8, 10 | (เลื่อน +1) | [ 121 ] [ 109 ] [ 110 ] [ 122 ] [ 123 ] [ nb 5 ] |
| 3 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |||||||
| ทอมป์กินส์ ไอ | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0–4 | 2 | เลขที่ | 2, 4, 10 | ใช่ | [ 2 ] [ 109 ] [ 110 ] |
| 3 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | |||||||
| โอไบรอันที่ 1 (วัตต์ส) | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0–3 | 4 | 9 [ 102 ] [ 103 ] [ nb 9 ] | 2, 4, 10 | ใช่ | [ 108 ] [ 109 ] [ 110 ] [ nb 5 ] |
| 3 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | |||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | |||||||
| เพเธริค(RAE) | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1–3 | 3 | 9 [ 102 ] [ 103 ] [ nb 9 ] | 2, 10 | ใช่ | [ 17 ] [ 106 ] [ nb 4 ] |
| 3 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | |||||||
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | |||||||
| โอไบรอันที่ 2 | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1–3 | 3 | 9 [ 88 ] [ 102 ] [ 103 ] [ nb 9 ] | 2, 10 | ใช่ | [ 108 ] [ 109 ] [ 110 ] [ nb 4 ] |
| 3 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |||||||
| 2 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | |||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |||||||
| ซัสส์คินด์ | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1–4 | 3 | 9 [ nb 9 ] | 2, 10 | ใช่ | [ 4 ] |
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | |||||||
| 2 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | |||||||
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | |||||||
| คลาร์ | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0–4 | 4 (3 [ nb 8 ] ) | 9 [ nb 9 ] | 2, 10 | ใช่ | [ 125 ] [ 126 ] |
| 3 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |||||||
| 2 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | |||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | |||||||
| ทอมป์กินส์ที่ 2 | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1–3 | 2 | 9 [ nb 10 ] | 2, 10 | ใช่ | [ 2 ] [ 109 ] [ 110 ] |
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |||||||
| 2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | |||||||
| เอ็กซ์เซส-3 เกรย์ | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1–4 | 4 | 9 [ 102 ] [ 103 ] [ nb 9 ] | 2, 10 | ใช่ | [ 6 ] [ 102 ] |
| 3 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | |||||||
| 2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | |||||||
| 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |||||||
ดูเพิ่มเติม
- ลำดับเดอ บรูอิน
- รหัสแฮมมิง
- เส้นโค้งฮิลเบิร์ต
- รีจิสเตอร์เลื่อนป้อนกลับเชิงเส้น
- รหัสระยะทางขั้นต่ำ
- ลำดับพรูเฮต์-ทู-มอร์ส – เกี่ยวข้องกับรหัสเกรย์ผกผัน
- สูตรไรเซอร์
- อัลกอริทึมสไตน์เฮาส์-จอห์นสัน-ทรอตเตอร์ – อัลกอริทึมที่สร้างรหัสเกรย์สำหรับระบบจำนวนแฟกทอเรียล
หมายเหตุ
- ^ a b c โดยการใช้ กฎการผกผันอย่างง่ายรหัสเกรย์และรหัสโอไบรอัน Iสามารถแปลงเป็นรหัสไบนารีบริสุทธิ์ 8421 และรหัสไอเคน 2421 ตามลำดับ เพื่อให้การคำนวณทางคณิตศาสตร์ง่ายขึ้น[C]
- ^ลำดับ 0, 1, 0, 2, 0, 1, 0, 3, … (ลำดับ A007814ใน OEIS )
- ^ a b cมีรหัสเกรย์หลายแบบที่เรียกว่า "ดัดแปลง" ในรูปแบบต่างๆ เช่นรหัส Glixonบางครั้งเรียกว่ารหัสเกรย์ดัดแปลง[D]รหัสLucalก็เรียกว่ารหัสไบนารีสะท้อนดัดแปลง (MRB) [E]รหัสO'Brienหรือรหัส Watts บางครั้งเรียกว่ารหัสไบนารีสะท้อนดัดแปลง[F]
- ^ a b c dโดยการสลับและกลับค่าแถวบิตสามแถวรหัส O'Brien IIและรหัส Petherickสามารถแปลงเป็นกันและกันได้
- ^ a b c dโดยการสลับคู่ของแถวบิตสองคู่ เลื่อนแถวบิตสี่แถวทีละแถว และกลับค่าแถวบิตหนึ่งแถวรหัส Glixonและรหัส O'Brien Iสามารถแปลงเป็นกันและกันได้
- ^ รหัส BCD ระยะห่างหน่วยอื่นๆ ได้แก่ รหัส Libaw–Craig 5 บิตที่ไม่เกี่ยวข้องกับรหัส Grayและรหัส 1-2-1
- ^ขึ้นอยู่กับการใช้งานเป้าหมายของรหัสค่าน้ำหนักแฮมมิงของรหัสอาจเป็นคุณสมบัติที่สำคัญนอกเหนือจากการพิจารณาทางทฤษฎีการเข้ารหัสแล้ว ยังมีเหตุผลทางกายภาพอีกด้วย ในบางสถานการณ์ สถานะ "เคลียร์ทั้งหมด" และ/หรือ "ตั้งค่าทั้งหมด" จะต้องถูกละเว้น (เช่น เพื่อหลีกเลี่ยงสภาวะที่ไม่นำไฟฟ้าหรือลัดวงจร) อาจเป็นที่พึงปรารถนาที่จะรักษาน้ำหนักที่ใช้สูงสุดให้ต่ำที่สุดเท่าที่จะเป็นไปได้ (เช่น เพื่อลดการใช้พลังงานของวงจรตัวอ่าน) หรือรักษาความแปรปรวนของน้ำหนักที่ใช้ให้มีขนาดเล็ก (เช่น เพื่อลดเสียงรบกวนหรือความผันผวนของกระแสไฟฟ้า)
- ^ a b cสำหรับ รหัส Gray BCD , PaulและKlarจำนวนแทร็กการอ่านที่จำเป็นสามารถลดลงจาก 4 เหลือ 3 ได้ หากยอมรับการกลับด้านของแทร็กตรงกลางแทร็กใดแทร็กหนึ่งได้
- ^ a b c d e fสำหรับรหัส O'Brien IและIIและ รหัส Petherick , Susskind , Klarรวมถึงรหัส Gray Excess-3 สามารถสร้าง ส่วนเติมเต็ม 9ได้โดยการกลับค่าเลขฐานสองหลักที่มีค่ามากที่สุด (หลักที่สี่)
- ^สำหรับรหัส Tompkins II สามารถสร้างค่า 9s complementได้โดยการกลับค่าตัวเลขสามหลักแรกและสลับตัวเลขไบนารีสองหลักตรงกลาง
อ่านเพิ่มเติม
- Richards, Richard Kohler (1955). การดำเนินการทางคณิตศาสตร์ในคอมพิวเตอร์ดิจิทัล (ฉบับที่ 5). นิวยอร์ก สหรัฐอเมริกา: D. Van Nostrand Co., Inc.
- Richards, Richard Kohler (1967). ส่วนประกอบและวงจรดิจิทัลอิเล็กทรอนิกส์ . D. Van Nostrand Co., Inc.หน้า 490, 500–504 , 510–511 .
- แบล็ก, พอล อี. (25 กุมภาพันธ์ 2547). "รหัสสีเทา" . NIST .
- Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P. (2007). "ส่วนที่ 22.3. รหัสเกรย์" . สูตรเชิงตัวเลข: ศิลปะแห่งการคำนวณทางวิทยาศาสตร์ (ฉบับที่ 3). นิวยอร์ก สหรัฐอเมริกา: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ . ISBN 978-0-521-88068-8เก็บถาวรจากต้นฉบับเมื่อวันที่ 11 สิงหาคม 2554 เรียกดูเมื่อวันที่ 18 สิงหาคม 2554
- Savage, Carla Diane (1997). "การสำรวจรหัสเกรย์เชิงการจัดเรียง" . SIAM Review . 39 (4). สมาคมคณิตศาสตร์อุตสาหกรรมและประยุกต์ (SIAM): 605– 629. Bibcode : 1997SIAMR..39..605S . CiteSeerX 10.1.1.39.1924 . doi : 10.1137/S0036144595295272 . JSTOR 2132693 . S2CID 6375360 .
- Wilf, Herbert Saul (1989). "บทที่ 1–3". อัลกอริทึมเชิงการจัดเรียง: การปรับปรุง . สมาคมคณิตศาสตร์อุตสาหกรรมและประยุกต์ (SIAM). ISBN 0-89871-231-9.
- Dewar, Megan; Stevens, Brett (2012-08-29). การเรียงลำดับการออกแบบบล็อก – รหัสเกรย์ วงจรสากล และการกำหนดค่า CMS Books in Mathematics (ฉบับที่ 1). นิวยอร์ก สหรัฐอเมริกา: Springer Science+Business Media . doi : 10.1007/978-1-4614-4325-4 . ISBN 978-1-46144324-7ISSN 1613-5237
- Maxfield, Clive "Max" (2012-10-01) [2011-05-28]. "หลักการพื้นฐานของรหัสเกรย์" . วิธีการออกแบบ . EETimes . ตอนที่ 1. เก็บถาวรจากต้นฉบับเมื่อ 2017-10-30 . เรียกดูเมื่อ2017-10-30 .ตอนที่ 2 ตอนที่ 3
- วอร์เรน จูเนียร์, เฮนรี เอส. (2013). "บทที่ 13: รหัสเกรย์". Hacker's Delight (ฉบับที่ 2). Addison Wesley – Pearson Education, Inc.หน้า 311–317 . ISBN 978-0-321-84268-8.(7 หน้า)
- Zinovik, Igor; Kroening, Daniel; Chebiryak, Yury (2008-03-21). "การคำนวณรหัสเกรย์เชิงผสมไบนารีผ่านการค้นหาแบบครบถ้วนด้วยตัวแก้ปัญหา SAT" IEEE Transactions on Information Theory . 54 (4). IEEE : 1819– 1823. Bibcode : 2008ITIT...54.1819Z . doi : 10.1109/TIT.2008.917695 . hdl : 20.500.11850/11304 . S2CID 2854180 .(5 หน้า)
- O'Brien, Joseph A. (มิถุนายน 1957). "ตัวแปลรหัสไบนารี-ทศนิยมระยะหน่วย" . IRE Transactions on Electronic Computers . EC-6 (2): 122– 123. Bibcode : 1957IRTEC...6..122O . doi : 10.1109/TEC.1957.5221585 . ISSN 0367-9950 . สืบค้นเมื่อ2020-05-25 .(2 หน้า)
- Barr, KG (มีนาคม 1981). "รหัสเกรย์แบบทศนิยม – แปลงได้ง่ายสำหรับการเข้ารหัสตำแหน่งเพลา" (PDF) . Wireless World . เล่มที่ 87, ฉบับที่ 1542. คณะวิทยาศาสตร์ธรรมชาติมหาวิทยาลัยเวสต์อินดีส์ . หน้า 86–87 . เก็บถาวร(PDF)จากต้นฉบับเมื่อ 2020-07-28 . เรียกดูเมื่อ2020-07-28 .
ลิงก์ภายนอก
- การสาธิต "รหัสเกรย์"โดยไมเคิล ชไรเบอร์ จากโครงการสาธิตของวูล์ฟแรม (โดยใช้โปรแกรม Mathematica) ปี 2007
- พจนานุกรมอัลกอริธึมและโครงสร้างข้อมูลของ NIST: รหัสเกรย์
- คู่มือการเดินทางสู่การคำนวณเชิงวิวัฒนาการ, คำถามที่ 21: รหัสเกรย์คืออะไร และใช้เพื่ออะไร?รวมถึง โค้ด ภาษาซีสำหรับแปลงระหว่างเลขฐานสองและ BRGC
- Dragos A. Harabor ใช้รหัสเกรย์ในเครื่องดิจิไทเซอร์ 3มิติ
- รหัสเกรย์แบบแทร็กเดียวรหัสลูกโซ่ ไบนารี ( Lancaster 1994 ) และรีจิสเตอร์เลื่อนป้อนกลับเชิงเส้น ล้วนมีประโยชน์ในการค้นหาตำแหน่งสัมบูรณ์บนตัวเข้ารหัสแบบหมุนแทร็กเดียว (หรือเซ็นเซอร์ตำแหน่งอื่นๆ)
- คอลัมน์ AMS: รหัสสีเทา
- เครื่องกำเนิดวงล้อเข้ารหัสแสง
- ProtoTalk.net – ทำความเข้าใจการเข้ารหัสแบบควอดราเจอร์ – อธิบายการเข้ารหัสแบบควอดราเจอร์อย่างละเอียด โดยเน้นที่การประยุกต์ใช้ในหุ่นยนต์
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ รหัสสีเทา
รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์...
การทำงาน
อุปกรณ์หลายชนิดระบุตำแหน่งโดยการปิดและเปิดสวิตช์ หากอุปกรณ์นั้นใช้ รหัสไบนารีแบบธรรมชาติ ตำแหน่งที่ 3 และ 4 จะอยู่ติดกัน แต่บิตทั้งสามของเลขฐานไบนารีจะแตกต่างกัน:
สิ่งประดิษฐ์
โดยหลักการแล้ว อาจมีรหัสมากกว่าหนึ่งรหัสสำหรับความยาวคำที่กำหนด แต่คำว่ารหัสเกรย์ถูกนำมาใช้ครั้งแรกกับ รหัส ไบนารี เฉพาะ สำหรับจำนวนเต็มที่ไม่เป็นลบ ซึ่งก็คือ รหัสเกรย์แบบสะท้อนไบนารี หรือ BRGC นักวิจัย ของ Bell Labs ชื่อ George R.
ปริศนาคณิตศาสตร์
รหัสไบนารีแบบสะท้อนถูกนำมาประยุกต์ใช้กับปริศนาทางคณิตศาสตร์ก่อนที่วิศวกรจะรู้จักวิธีการนี้