Mã Gray

**Mã nhị phân phản xạ**, cũng được biết đến với tên gọi là **mã Gray** – đặt theo tên của Frank Gray, là một hệ thống ký số nhị phân, trong đó hai giá trị liên tiếp chỉ khác nhau một chữ số.
Lúc đầu, mã nhị phân phản xạ được phát minh với mục đích ngăn ngừa tín hiệu ngõ ra không chính xác của các bộ chuyển mạch cơ điện. Ngày nay, mã Gray được sử dụng rộng rãi để sửa lỗi trong những phương tiện liên lạc bằng số, ví dụ như truyền hình kỹ thuật số mặt đất và một vài hệ thống truyền hình cáp.

## Tên gọi
Tên gốc "mã nhị phân phản xạ" được đưa ra dựa vào một tính chất của bảng mã Gray: các giá trị ở nửa sau của bảng mã có sự đối xứng với các giá trị ở nửa đầu của bảng mã theo thứ tự ngược lại, ngoại trừ bit cao nhất bị đảo giá trị. Tính chất đối xứng này vẫn đúng cho các bit thấp hơn trong mỗi nửa của bảng mã, trong mỗi phần tư của bảng mã, v.v..
Cách gọi thông dụng hiện nay -mã Gray - được đặt theo tên của nhà nghiên cứu Frank Gray làm việc ở phòng thí nghiệm Bell. Gray đã dùng mã này trong hệ thống thông tin mã xung của ông, trong một bằng sáng chế xin cấp vào năm 1947 (được cấp vào năm 1953). Thực ra, Gray không phát minh ra mã này, mà trong bằng sáng chế của mình,ông ta chỉ trích dẫn và gọi đó là "mã nhị phân phản xạ".."

## Lịch sử và các ứng dụng thực tiễn

Mã nhị phân phản xạ đã được ứng dụng trong những câu đố toán học trước khi trở nên phổ biến trong lĩnh vực kỹ thuật. Kỹ sư người Pháp Émile Baudot đã dùng mã Gray trong hệ thống điện báo vào năm 1878. Ông ta đã được nhận huân chương Bắc đẩu bội tinh cho công trình này. Mã Gray đôi khi bị gán nhầm là được đặt tên theo Elisha Gray, chẳng hạn trong một cuốn sách giáo khoa bàn về điều chế mã xung...

Frank Gray, nhà vật lý thuộc phòng thí nghiệm Bell, người nổi tiếng với việc phát minh ra phương pháp tín hiệu hoá được dùng cho tivi màu tương thích, đã phát minh một phương pháp để chuyển đổi tín hiệu tương tự sang những nhóm mã nhị phân phản xạ bằng cách dùng thiết bị dựa trên đèn chân không... Phương pháp và các thiết bị này được cấp bằng sáng chế năm 1953 và kể từ đó Gray được lấy tên để đặt cho loại mã này. Loại thiết bị "đèn PCM" mà Gray mô tả trong bằng sáng chế của mình đã được chế tạo thực sự bởi Raymond W. Sears của phòng thí nghiệm Bell, cùng làm việc với Gray và William M. Goodall, là người đã gợi ý cho Gray về việc dùng mã nhị phân phản xạ...

Trong thời kỳ đó, Gray đã hết sức thích thú với việc dùng mã này để tối thiểu hóa sai số trong việc chuyển đổi từ tín hiệu tương tự sang tín hiệu số; và cho đến tận bây giờ, mã mang tên ông vẫn còn được dùng với mục đích này cùng với một số mục đích khác nữa.

Trong các thiết bị đo góc quay, người ta thích dùng mã Gray hơn so với mã nhị phân bình thường. Nếu góc quay được biểu diễn bằng mã nhị phân bình thường, khi chuyển từ góc quay này sang góc quay kế tiếp, do có sự thay đổi nhiều bit một lúc trên mã góc quay, có khả năng thiết bị đo đọc nhầm sang mã của một góc quay khác xa với hai góc quay đang xét. Vì tính chất xoay vòng của mã Gray, mã của hai góc quay kế cận chỉ khác nhau một bit nên hiện tượng đọc nhầm sang mã góc quay hoàn toàn khác với hai góc quay này là không thể xảy ra.

Người ta có thể dùng mã nhị phân phản xạ Gray làm phương tiện hướng dẫn giải bài toán Tháp Hà Nội. Có thể tìm thấy một phương pháp chi tiết ở đây . Mã Gray cũng hình thành một chu trình Hamilton trên một siêu lập phương, mà mỗi bit được xem như là một chiều.

## Code bằng ngôn ngữ Pascal

```pascal
function gray(n:byte):byte; 
begin 
gray:= n xor (n shr 1); 
End;
```


## Xem thêm
* mã BCD
* Thanh ghi dịch hồi tiếp tuyến tính

## Ghi chú

Một số hàm và thủ tục về xử lý bit trong pascal

## Tham khảo
* Black, Paul E. *Gray code*. 25 tháng 2 năm 2004. NIST. http://www.nist.gov/dads/HTML/graycode.html.
* Savage, Carla. "A Survey of Combinatorial Gray Codes." *Society of Industrial and Applied Mathematics Review* 39 (1997): 605-629. http://epubs.siam.org/sam-bin/getfile/SIREV/articles/29527.pdf.

## Liên kết ngoài
* NIST Dictionary of Algorithms and Data Structures: Gray code
* ''Numerical Recipes in C'', section 20.2  Mô tả chi tiết mã Gray (ISBN 0-521-43108-5)
* Hitch Hiker's Guide to Evolutionary Computation, Q21: What are Gray codes, and why are they used? , có mã lập trình C để chuyển đổi giữa số nhị phân và BRGC
* Subsets or Combinations  Chỉ cách tạo ra các chuỗi BRGC
* "The Structure of Single-Track Gray Codes"  by Moshe Schwartz, Tuvi Etzion
* Single-Track Circuit Codes  by Hiltgen, Alain P.; Paterson, Kenneth G.
* Dragos A. Harabor uses .
* single-track gray codes, binary chain codes (Lancaster 1994), and linear feedback shift registers are all useful in finding one's absolute position on a single-track rotary encoder (or other position sensor).
* [ * http://etc.manuel-breitfeld.de/gray-code-java-implementierung.html A Gray code implementation in Java to convert decimals 

* Use of snake-in-the-box codes for reliable identification of tracks in servo fields of a disk drive
* United States Patent 6496312: Use of snake-in-the-box codes for reliable identification of tracks in servo fields of a disk drive