กลับไปหน้าบทความ

อ่าน 45 นาที

รหัสสีเทา

รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์...

รหัสสีเทา

รหัสสีเทา
4321
00000
10001
20011
30010
40110
50111
60101
70100
81100
91101
101111
111110
121010
131011
141001
151000

รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์ เกรย์คือการเรียงลำดับของระบบตัวเลขไบนารีโดยที่ค่าสองค่าที่อยู่ติดกันจะแตกต่างกันเพียงบิต เดียว (หลักไบนารี)

ตัวอย่างเช่น การแสดงค่าทศนิยม "1" ในระบบเลขฐานสองโดยปกติจะเป็น " 001 " และ "2" จะเป็น " 010 " แต่ในรหัสเกรย์ ค่าเหล่านี้จะถูกแสดงเป็น " 001 " และ " 011 " ด้วยวิธีนี้ การเพิ่มค่าจาก 1 เป็น 2 จึงต้องเปลี่ยนเพียงบิตเดียว แทนที่จะเป็นสองบิต

รหัสเกรย์ถูกใช้กันอย่างแพร่หลายเพื่อป้องกันเอาต์พุตที่ไม่พึงประสงค์จากสวิตช์อิเล็กโทรเมคานิกส์ และเพื่ออำนวยความสะดวก ใน การแก้ไขข้อผิดพลาดในการสื่อสารดิจิทัล เช่นโทรทัศน์ภาคพื้นดินดิจิทัล และระบบ เคเบิลทีวีบางระบบ การใช้รหัสเกรย์ในอุปกรณ์เหล่านี้ช่วยลดความซับซ้อนของการดำเนินการทางตรรกะและลดข้อผิดพลาดในทางปฏิบัติ[ 1 ]

การทำงาน

อุปกรณ์หลายชนิดระบุตำแหน่งโดยการปิดและเปิดสวิตช์ หากอุปกรณ์นั้นใช้รหัสไบนารีแบบธรรมชาติตำแหน่งที่ 3 และ 4 จะอยู่ติดกัน แต่บิตทั้งสามของเลขฐานไบนารีจะแตกต่างกัน:

ทศนิยมไบนารี
3011
4100

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

ทศนิยมไบนารีสีเทา
000000000
100010001
200100011
300110010
401000110
501010111
601100101
701110100
810001100
910011101
1010101111
1110111110
1211001010
1311011011
1411101001
1511111000

สำหรับเลขฐานสิบ 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 ]

ส่วนหนึ่งของหน้าแรกของสิทธิบัตรของเกรย์ แสดงหลอด PCM (10) พร้อมรหัสไบนารีสะท้อนในแผ่น (15)

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

ตัวเข้ารหัสตำแหน่ง

ตัวเข้ารหัสแบบหมุนสำหรับอุปกรณ์วัดมุมที่ทำเครื่องหมายด้วยรหัสเกรย์สะท้อนไบนารี 3 บิต (BRGC)
ตัวเข้ารหัสแบบหมุนสัมบูรณ์รหัสเกรย์ที่มี 13 แทร็ก ตัวเรือน จานตัดวงจร และแหล่งกำเนิดแสงอยู่ด้านบน ส่วนประกอบตรวจจับและส่วนประกอบรองรับอยู่ด้านล่าง

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

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

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

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

อัลกอริทึมทางพันธุกรรม

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

การลดวงจรบูลีนให้เหลือน้อยที่สุด

รหัสเกรย์ยังใช้ในการติดฉลากแกนของแผนที่คาร์โนห์ตั้งแต่ปี พ.ศ. 2496 [ 42 ] [ 43 ] [ 44 ]เช่นเดียวกับในกราฟวงกลมแฮนด์เลอร์ตั้งแต่ปี พ.ศ. 2491 [ 45 ] [ 46 ] [ 47 ] [ 48 ] ซึ่งทั้งสองวิธีนี้เป็นวิธีการกราฟิกสำหรับการลดวงจรตรรกะให้เล็กที่สุด

การแก้ไขข้อผิดพลาด

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

การสื่อสารระหว่างโดเมนนาฬิกา

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

ปั่นจักรยานผ่านรัฐต่างๆ ด้วยความพยายามเพียงเล็กน้อย

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

สามารถสร้างรหัสเกรย์แบบสมดุลได้[ 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 เป็นเลขคู่ แสดงว่ารหัสเกรย์นั้นเป็นเลขคู่

ทศนิยมไบนารีความสม่ำเสมอการนับบิตไบนารีสีเทาจำนวนบิตสีเทา
0000 0สม่ำเสมอ000000
1000 1แปลก100011
2001 0สม่ำเสมอ100112
3001 1แปลก200101
4010 0สม่ำเสมอ101102
5010 1แปลก201113
6011 0สม่ำเสมอ201012
7011 1แปลก301001
8100 0สม่ำเสมอ111002
9100 1แปลก211013
10101 0สม่ำเสมอ211114
11101 1แปลก311103
12110 0สม่ำเสมอ210102
13110 1แปลก310113
14111 0สม่ำเสมอ310012
15111 1แปลก410001

โปรเซสเซอร์บางตัว เช่นZilog Z80 , Japan ASCII R800และIntel 8086มี แฟล็กสถานะ พาริตีซึ่งบ่งชี้ความสม่ำเสมอของบิตในรีจิสเตอร์บางตัว ช่วยให้ตรวจสอบได้ว่าจำนวนบิตขึ้นในรีจิสเตอร์เหล่านั้นเป็นเลขคู่หรือไม่

การสร้าง รหัสเกรย์ nบิต

ขั้นตอนแรกๆ ของวิธีการสะท้อนและเติมคำนำหน้า
การเรียงสับเปลี่ยนรหัสเกรย์ 4 บิต

รายการรหัสเกรย์แบบสะท้อนไบนารีสำหรับ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 บิต ลำดับของคำรหัสสองคำที่อยู่ติดกันจะกลับด้าน

000,001,010,011,100,101,110,111 → 001,000,011,010,101,100,111,110  (กลับบิตที่ 0)

ถ้าบิตที่ 1 ถูกกลับค่า บล็อกของรหัสคำ 2 คำจะเปลี่ยนลำดับ:

000,001,010,011,100,101,110,111 → 010,011,000,001,110,111,100,101  (กลับบิตที่ 1)

ถ้าบิตที่ 2 ถูกกลับค่า บล็อกของรหัสคำ 4 คำจะเรียงลำดับกลับกัน:

000,001,010,011,100,101,110,111 → 100,101,110,111,000,001,010,011  (กลับบิตที่ 2)

ดังนั้น การดำเนินการเอ็กซ์คลูซีฟออร์บนบิตที่ตำแหน่งกับบิตที่ตำแหน่งจะทำให้ลำดับของรหัสคำคงเดิมหากและจะกลับลำดับของบล็อกรหัสคำหากซึ่งเป็นการดำเนินการเดียวกันกับวิธีสะท้อนและเติมคำนำหน้าเพื่อสร้างรหัสเกรย์

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

เลขฐานสาม → รหัสเกรย์ฐานสาม

0 → 000 1 → 001 2 → 002 10 → 012 11 → 011 12 → 010 20 → 020 21 → 021 22 → 022 100 → 122 101 → 121 102 → 120 110 → 110 111 → 111 112 → 112 120 → 102 121 → 101 122 → 100 200 → 200 201 → 201 202 → 202 210 → 212 211 → 211 212 → 210 220 → 220 221 → 221

222 → 222

นอกจากรหัสเกรย์แบบสะท้อนไบนารีแล้ว ยังมีรหัสเกรย์เฉพาะทางอีกหลายประเภท หนึ่งในนั้นคือรหัสเกรย์แบบn -ary หรือที่รู้จักกันใน ชื่อ รหัสเกรย์แบบไม่ใช้ค่าบูลีนดังชื่อที่บ่งบอก รหัสเกรย์ประเภทนี้ใช้ค่าที่ไม่ใช่ ค่า บูลีนในการเข้ารหัส

ตัวอย่างเช่น รหัสเกรย์แบบ 3 ฐาน ( ternary ) จะใช้ค่า 0, 1, 2 [ 29 ]รหัสเกรย์ ( nk ) คือ รหัสเกรย์แบบ nฐานที่มีkหลัก[ 60 ] ลำดับขององค์ประกอบในรหัสเกรย์ (3, 2) คือ: 00, 01, 02, 12, 11, 10, 20, 21, 22 รหัสเกรย์ ( nk ) อาจสร้างขึ้นแบบเรียกซ้ำ เช่นเดียวกับ BRGC หรืออาจสร้างขึ้นแบบวนซ้ำอัลกอริทึมสำหรับการสร้างรหัสเกรย์ ( nk ) แบบ วนซ้ำได้ ถูกนำเสนอ (ในภาษา 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]

มีอัลกอริทึมรหัสเกรย์อื่นๆ สำหรับรหัสเกรย์ ( nk ) รหัสเกรย์ ( nk ) ที่สร้างโดยอัลกอริทึมข้างต้นจะเป็นแบบวนรอบเสมอ อัลกอริทึมบางอย่าง เช่น ของ 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 ]

0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0
0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0
0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0
0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1

ในขณะที่รหัสเกรย์ 5 บิตที่สมดุลจะมีทรานซิชันทั้งหมด 32 ทรานซิชัน ซึ่งไม่สามารถกระจายอย่างเท่าเทียมกันระหว่างตำแหน่งต่างๆ ได้ ในตัวอย่างนี้ สี่ตำแหน่งมีทรานซิชันหกทรานซิชันต่อตำแหน่ง และหนึ่งตำแหน่งมีแปดทรานซิชัน: [ 49 ]

1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 0 0
1 1 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1
1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1

ตอนนี้เราจะแสดงการสร้าง[ 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 หลักสองรหัส และกำหนดโดย

การเลือกค่าที่ทำให้มั่นใจได้ว่ารหัสเหล่านี้เป็นรหัสเกรย์อย่างแท้จริงคือค่า โดยค่าแรกๆ ของแสดงอยู่ในตารางด้านล่าง

เส้นทางย่อยในอัลกอริทึม Savage–Winkler
j = 0 j = 1 j = 2 j = 3
n = 1 0, 1
n = 2 00, 0110, 11
n = 3 000, 001100, 110, 010, 011101, 111
n = 4 0000, 00011000, 1100, 0100, 0110, 0010, 00111010, 1011, 1001, 1101, 0101, 01111110, 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 ]

รหัสงูในกล่อง

ความยาวสูงสุดของงู ( Ls )และขดลวด ( Lc )ในปัญหางูในกล่อง สำหรับมิติnตั้งแต่ 1 ถึง 4

รหัสงูในกล่องหรืองูคือลำดับของโหนดของเส้นทางที่เหนี่ยวนำในกราฟไฮเปอร์คิวบ์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 ]

ภาพเคลื่อนไหวและภาพแสดงรายละเอียดของใบพัด STGC ที่ใช้รหัสสี

ชื่อนี้มาจากวิธีการใช้งานกับตัวเข้ารหัสแบบหมุน (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 แสดงไว้ที่นี่:

รหัสเกรย์แบบแทร็กเดียวสำหรับ 30 ตำแหน่ง
มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส
1000072°01000144°00100216°00010288°00001
12°1010084°01010156°00101228°10010300°01001
24°1110096°01110168°00111240°10011312°11001
36°11110108°01111180°10111252°11011324°11101
48°11010120°01101192°10110264°01011336°10101
60°11000132°01100204°00110276°00011348°10001

แต่ละคอลัมน์เป็นการเลื่อนแบบวนรอบของคอลัมน์แรก และจากแถวใด ๆ ไปยังแถวถัดไปจะมีการเปลี่ยนแปลงเพียงบิตเดียว[ 78 ] ลักษณะแบบแทร็กเดียว (เช่น โซ่รหัส) มีประโยชน์ในการผลิตล้อเหล่านี้ (เมื่อเทียบกับ BRGC) เนื่องจากต้องการเพียงแทร็กเดียว จึงช่วยลดต้นทุนและขนาดลงได้ ลักษณะของรหัสเกรย์มีประโยชน์ (เมื่อเทียบกับรหัสแบบโซ่หรือที่เรียกว่าลำดับ De Bruijn ) เนื่องจากจะมีเซ็นเซอร์เพียงตัวเดียวที่เปลี่ยนแปลงในแต่ละครั้ง ดังนั้นความไม่แน่นอนในระหว่างการเปลี่ยนผ่านระหว่างสองสถานะที่ไม่ต่อเนื่องจะมีเพียงบวกหรือลบหนึ่งหน่วยของการวัดเชิงมุมที่อุปกรณ์สามารถแก้ไขได้[ 79 ]

รหัสเกรย์แบบแทร็กเดียว 9 บิต แสดงความละเอียดเชิงมุม 1 องศา

นับตั้งแต่มีการเพิ่มตัวอย่าง 30 องศานี้ ก็มีความสนใจในตัวอย่างที่มีความละเอียดเชิงมุมสูงขึ้นมากมาย ในปี 2551 Gary Williams [ 80 ]โดยอ้างอิงจากงานก่อนหน้า[ 77 ]ได้ค้นพบรหัส Gray แบบแทร็กเดียว 9 บิตที่ให้ความละเอียด 1 องศา รหัส Gray นี้ถูกนำมาใช้ในการออกแบบอุปกรณ์จริงซึ่งเผยแพร่บนเว็บไซต์Thingiverseอุปกรณ์นี้[ 81 ]ได้รับการออกแบบโดย etzenseep (Florian Bauer) ในเดือนกันยายน 2565

ตัวอย่าง STGC สำหรับP  = 360 และn  = 9 แสดงไว้ที่นี่:

รหัสเกรย์แบบแทร็กเดียวสำหรับ 360 ตำแหน่ง
มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส มุมรหัส
10000000140°00000001180°000000110120°000001100160°000011000200°000110000240°001100000280°011000000320°110,000,000
11000000141°10000001181°000000111121°000001110161°000011100201°000111000241°001110000281°011100000321°111000000
11100000142°11000001182°100000111122°000001111162°000011110202°000111100242°001111000282°011110000322°111100000
11100001143°11000011183°100001111123°000011111163°000111110203°001111100243°011111000283°111110000323°111100001
11100011144°11000111184°100011111124°000111111164°001111110204°011111100244°111111000284°111110001324°111100011
11100111145°11001111185°100111111125°001111111165°011111110205°111111100245°111111001285°111110011325°111100111
11101111146°11011111186°101111111126°011111111166°111111110206°111111101246°111111011286°111110111326°111101111
11101101147°11011011187°101101111127°011011111167°110111110207°101111101247°011111011287°111110110327°111101101
10101101148°01011011188°101101110128°011011101168°110111010208°101110101248°011101011288°111010110328°110101101
10101111149°01011111189°101111110129°011111101169°111111010209°111110101249°111101011289°111010111329°110101111
10°10101110150°01011101190°101110110130°011101101170°111011010210°110110101250°101101011290°011010111330°110101110
11°10101010151°01010101191°101010110131°010101101171°101011010211°010110101251°101101010291°011010101331°110101010
12°10101011152°01010111192°101011110132°010111101172°101111010212°011110101252°111101010292°111010101332°110101011
13°10111011153°01110111193°111011110133°110111101173°101111011213°011110111253°111101110293°111011101333°110111011
14°00111011154°01110111094°111011100134°110111001174°101110011214°011100111254°111001110294°110011101334°100111011
15°00101011155°01010111095°101011100135°010111001175°101110010215°011100101255°111001010295°110010101335°100101011
16°00101111156°01011111096°101111100136°011111001176°111110010216°111100101256°111001011296°110010111336°100101111
17°00101101157°01011011097°101101100137°011011001177°110110010217°101100101257°011001011297°110010110337°100101101
18°00101100158°01011001098°101100100138°011001001178°110010010218°100100101258°001001011298°010010110338°100101100
19°00111100159°01111001099°111100100139°111001001179°110010011219°100100111259°001001111299°010011110339°100111100
20°00111110160°011111010100°111110100140°111101001180°111010011220°110100111260°101001111300°010011111340°100111110
21°00011110161°001111010101°011110100141°111101000181°111010001221°110100011261°101000111301°010001111341°100011110
22°00011010162°001101010102°011010100142°110101000182°101010001222°010100011262°101000110302°010001101342°100011010
23°00010010163°001001010103°010010100143°100101000183°001010001223°010100010263°101000100303°010001001343°100010010
24°00010110164°001011010104°010110100144°101101000184°011010001224°110100010264°101000101304°010001011344°100010110
25°00010100165°001010010105°010100100145°101001000185°010010001225°100100010265°001000101305°010001010345°100010100
26°00011100166°001110010106°011100100146°111001000186°110010001226°100100011266°001000111306°010001110346°100011100
27°00011000167°001100010107°011000100147°110001000187°100010001227°000100011267°001000110307°010001100347°100011000
28°00001000168°000100010108°001000100148°010001000188°100010000228°000100001268°001000010308°010000100348°100001000
29°00001100169°000110010109°001100100149°011001000189°110010000229°100100001269°001000011309°010000110349°100001100
30°00000100170°000010010110°000100100150°001001000190°010010000230°100100000270°001000001310°010000010350°100000100
31°10000100171°000010011111°000100110151°001001100191°010011000231°100110000271°001100001311°011000010351°110000100
32°10000110172°000011011112°000110110152°001101100192°011011000232°110110000272°101100001312°011000011352°110000110
33°10000010173°000001011113°000010110153°000101100193°001011000233°010110000273°101100000313°011000001353°110000010
34°11000010174°100001011114°000010111154°000101110194°001011100234°010111000274°101110000314°011100001354°111000010
35°01000010175°100001010115°000010101155°000101010195°001010100235°010101000275°101010000315°010100001355°101000010
36°01000011176°100001110116°000011101156°000111010196°001110100236°011101000276°111010000316°110100001356°101000011
37°01000001177°100000110117°000001101157°000011010197°000110100237°001101000277°011010000317°110100000357°101000001
38°01000000178°100000010118°000000101158°000001010198°000010100238°000101000278°001010000318°010100000358°101000000
39°00000000179°000000010119°000000100159°000001000199°000010000239°000100000279°001000000319°010000000359°100000000
มุมเริ่มต้นและมุมสิ้นสุดสำหรับแทร็กทั้ง 20 แทร็ก สำหรับรหัสเกรย์แบบแทร็กเดียวที่มีเซ็นเซอร์ 9 ตัว ห่างกัน 40°
มุมเริ่มต้นมุมสุดท้ายความยาว
342
23286
31377
44485
56605
64718
74763
88914
94963
991046
1101156
1311344
13815417
1731819
1861872
22023819
2422465
2732797
2862894
30736054

รหัสเกรย์สองมิติ

แผนภาพกลุ่มดาวแบบเกรย์โค้ดสำหรับQAM 16-16 แบบสี่เหลี่ยมผืนผ้า

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

มีรหัสไบนารีหลายประเภทที่คล้ายกับรหัสเกรย์ ได้แก่:

รหัส เลขฐานสองที่เข้ารหัสแบบทศนิยม (BCD) ต่อไปนี้เป็นรูปแบบหนึ่งของรหัสเกรย์เช่นกัน:

รหัส BCD ระยะห่างหน่วย 4 บิต[ nb 6 ]
ชื่อนิดหน่อย0123456789น้ำหนัก[ nb 7 ]แทร็กคอมพลี.วัฏจักร5 วินาทีความคิดเห็น
เกรย์ บีซีดี400000000110–34 (3 [ nb 8 ] )เลขที่(2, 4, 8, 16)เลขที่[ 109 ] [ 110 ]
30000111111
20011110000
10110011001
พอล410000000111–34 (3 [ nb 8 ] )เลขที่2, 10เลขที่[ 124 ]
30000111111
20011110000
11110011001
กลิกสัน400000000110–34เลขที่2, 4, 8, 10(เลื่อน +1)[ 121 ] [ 109 ] [ 110 ] [ 122 ] [ 123 ] [ nb 5 ]
30000111110
20011110000
10110011000
ทอมป์กินส์ ไอ400000111110–42เลขที่2, 4, 10ใช่[ 2 ] [ 109 ] [ 110 ]
30000111110
20011111000
10110001100
โอไบรอันที่ 1 (วัตต์ส)400000111110–349 [ 102 ] [ 103 ] [ nb 9 ]2, 4, 10ใช่[ 108 ] [ 109 ] [ 110 ] [ nb 5 ]
30000110000
20011111100
10110000110
เพเธริค(RAE)400000111111–339 [ 102 ] [ 103 ] [ nb 9 ]2, 10ใช่[ 17 ] [ 106 ] [ nb 4 ]
31000110001
20011111100
11110000111
โอไบรอันที่ 2400000111111–339 [ 88 ] [ 102 ] [ 103 ] [ nb 9 ]2, 10ใช่[ 108 ] [ 109 ] [ 110 ] [ nb 4 ]
30001111000
20111001110
11100000011
ซัสส์คินด์400000111111–439 [ nb 9 ]2, 10ใช่[ 4 ]
30011111100
20111001110
11110000111
คลาร์400000111110–44 (3 [ nb 8 ] )9 [ nb 9 ]2, 10ใช่[ 125 ] [ 126 ]
30001111000
20011111100
10111001110
ทอมป์กินส์ที่ 2400000111111–329 [ nb 10 ]2, 10ใช่[ 2 ] [ 109 ] [ 110 ]
30011111000
21110000011
10111001110
เอ็กซ์เซส-3 เกรย์400000111111–449 [ 102 ] [ 103 ] [ nb 9 ]2, 10ใช่[ 6 ] [ 102 ]
30111111110
21110000111
10011001100

ดูเพิ่มเติม

หมายเหตุ

  1. ^ a b c โดยการใช้ กฎการผกผันอย่างง่ายรหัสเกรย์และรหัสโอไบรอัน Iสามารถแปลงเป็นรหัสไบนารีบริสุทธิ์ 8421 และรหัสไอเคน 2421 ตามลำดับ เพื่อให้การคำนวณทางคณิตศาสตร์ง่ายขึ้น[C]
  2. ^ลำดับ 0, 1, 0, 2, 0, 1, 0, 3, … (ลำดับ A007814ใน OEIS )
  3. ^ a b cมีรหัสเกรย์หลายแบบที่เรียกว่า "ดัดแปลง" ในรูปแบบต่างๆ เช่นรหัส Glixonบางครั้งเรียกว่ารหัสเกรย์ดัดแปลง[D]รหัสLucalก็เรียกว่ารหัสไบนารีสะท้อนดัดแปลง (MRB) [E]รหัสO'Brienหรือรหัส Watts บางครั้งเรียกว่ารหัสไบนารีสะท้อนดัดแปลง[F]
  4. ^ a b c dโดยการสลับและกลับค่าแถวบิตสามแถวรหัส O'Brien IIและรหัส Petherickสามารถแปลงเป็นกันและกันได้
  5. ^ a b c dโดยการสลับคู่ของแถวบิตสองคู่ เลื่อนแถวบิตสี่แถวทีละแถว และกลับค่าแถวบิตหนึ่งแถวรหัส Glixonและรหัส O'Brien Iสามารถแปลงเป็นกันและกันได้
  6. ^ รหัส BCD ระยะห่างหน่วยอื่นๆ ได้แก่ รหัส Libaw–Craig 5 บิตที่ไม่เกี่ยวข้องกับรหัส Grayและรหัส 1-2-1
  7. ^ขึ้นอยู่กับการใช้งานเป้าหมายของรหัสค่าน้ำหนักแฮมมิงของรหัสอาจเป็นคุณสมบัติที่สำคัญนอกเหนือจากการพิจารณาทางทฤษฎีการเข้ารหัสแล้ว ยังมีเหตุผลทางกายภาพอีกด้วย ในบางสถานการณ์ สถานะ "เคลียร์ทั้งหมด" และ/หรือ "ตั้งค่าทั้งหมด" จะต้องถูกละเว้น (เช่น เพื่อหลีกเลี่ยงสภาวะที่ไม่นำไฟฟ้าหรือลัดวงจร) อาจเป็นที่พึงปรารถนาที่จะรักษาน้ำหนักที่ใช้สูงสุดให้ต่ำที่สุดเท่าที่จะเป็นไปได้ (เช่น เพื่อลดการใช้พลังงานของวงจรตัวอ่าน) หรือรักษาความแปรปรวนของน้ำหนักที่ใช้ให้มีขนาดเล็ก (เช่น เพื่อลดเสียงรบกวนหรือความผันผวนของกระแสไฟฟ้า)
  8. ^ a b cสำหรับ รหัส Gray BCD , PaulและKlarจำนวนแทร็กการอ่านที่จำเป็นสามารถลดลงจาก 4 เหลือ 3 ได้ หากยอมรับการกลับด้านของแทร็กตรงกลางแทร็กใดแทร็กหนึ่งได้
  9. ^ a b c d e fสำหรับรหัส O'Brien IและIIและ รหัส Petherick , Susskind , Klarรวมถึงรหัส Gray Excess-3 สามารถสร้าง ส่วนเติมเต็ม 9ได้โดยการกลับค่าเลขฐานสองหลักที่มีค่ามากที่สุด (หลักที่สี่)
  10. ^สำหรับรหัส 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 WesleyPearson 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 – ทำความเข้าใจการเข้ารหัสแบบควอดราเจอร์ – อธิบายการเข้ารหัสแบบควอดราเจอร์อย่างละเอียด โดยเน้นที่การประยุกต์ใช้ในหุ่นยนต์
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Gray_code&oldid=1357672538 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รหัสสีเทา

รหัสไบนารีสะท้อน ( RBC ) หรือที่รู้จักกันในชื่อไบนารีสะท้อน ( RB ) หรือรหัสเกรย์ตามชื่อของแฟรงก์...

การทำงาน

อุปกรณ์หลายชนิดระบุตำแหน่งโดยการปิดและเปิดสวิตช์ หากอุปกรณ์นั้นใช้ รหัสไบนารีแบบธรรมชาติ ตำแหน่งที่ 3 และ 4 จะอยู่ติดกัน แต่บิตทั้งสามของเลขฐานไบนารีจะแตกต่างกัน:

สิ่งประดิษฐ์

โดยหลักการแล้ว อาจมีรหัสมากกว่าหนึ่งรหัสสำหรับความยาวคำที่กำหนด แต่คำว่ารหัสเกรย์ถูกนำมาใช้ครั้งแรกกับ รหัส ไบนารี เฉพาะ สำหรับจำนวนเต็มที่ไม่เป็นลบ ซึ่งก็คือ รหัสเกรย์แบบสะท้อนไบนารี หรือ BRGC นักวิจัย ของ Bell Labs ชื่อ George R.

ปริศนาคณิตศาสตร์

รหัสไบนารีแบบสะท้อนถูกนำมาประยุกต์ใช้กับปริศนาทางคณิตศาสตร์ก่อนที่วิศวกรจะรู้จักวิธีการนี้