グレイコード

グレイコードの最新ニュースをまとめて検索!

2ビット グレイコード
00
01
11
10
3ビット グレイコード
000
001
011
010
110
111
101
100
4ビット グレイコード
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000

グレイコード: Gray codeグレイ符号)、交番二進符号(こうばんにしんふごう、英:Reflected Binary Code)、喜安–Gray符号(きやすぐれいふごう)とは、デジタル回路用の数値符号である。アブソリュート・ロータリー・エンコーダーのセンサー出力等に使われる。前後に隣接する符号のハミング距離が常に1となる特徴がある。

交番二進符号の名はベル研究所のフランク・グレイが1947年の特許出願書で使用したのが最初である[1]。1953年に他の人物が提出した特許出願書ではフランク・グレイにちなんでグレイコードと呼ばれている[2][3]ほか、他の呼称も使われている[3]

目次

[編集] 2進数からグレイコードへ変換する方法

最上位桁から1であれば残り下桁を反転、0であれば残り下桁を変化させない。 例えば、2進数が1010であれば、グレイコードは1111となる。

C言語では、v ^ (v >> 1) で変換できる。

[編集] 利点 

グレイコードは、ある値から隣接した値に変化する際に、常に1ビットしか変化しないという点が利用される。

一般的な2進数では、隣接する値に移行する際に変化するビットの数は1以上である。たとえば3から4に変化する場合、2進数だと011から100に、3ビットの変化が起こる。

絶対的な角度をデジタル値で出力するアブソリュート・ロータリー・エンコーダーのような機器において、機械的な接点などで電気信号のオンオフを行い、このような2進数形式でのデータ出力を行った場合について考えてみよう。この場合、機械の動作やデータ読み出しのタイミングによっては、誤ったデータが得られる可能性がある。たとえば011から100に変化する際に、短時間の間に次のように出力が遷移するかもしれない。

011 → 010 → 000 → 100

各ビットとも、変化に誤りはないのであるが、機械構造の精度上の問題で、完璧に同時に全ビットが変化することは保証できないのである。そのため遷移の途中の段階でデータを読み出すと、010(2)や000(0)といった偽データを取得してしまう可能性がある。

一般的な2進数ではなく、グレイコードを使えば、隣接値への変化の際に、常に1ビットしか変わらないので(3から4の変化であれば010から110)、いかなるタイミングで読み出そうとデータの値は以前の値か次の値であり、偽データが生成されることはない。

[編集] 遺伝的アルゴリズム

遺伝的アルゴリズムや分布推定アルゴリズムなどにおいて、数値を表現するのに、グレイコードが使われることがある。多くの場合、結果が改善される。

[編集] 脚注

  1. ^ アメリカ合衆国特許第2,632,058号、F. Gray. Pulse code communication, March 17, 1953 (filed Nov. 1947).
  2. ^ アメリカ合衆国特許第2,733,432号、J. Breckman. Encoding Circuit, Jan 31, 1956 (filed Dec. 1953).
  3. ^ アメリカ合衆国特許第2,823,345号、E. A. Ragland et al. Direction-Sensitive Binary Code Position Control System, Feb. 11, 1958 (filed Oct. 1953).


最終更新 2009年11月25日 (水) 13:56 (日時は個人設定で未設定ならばUTC)。
【グレイコード】変更履歴

ご利用上の注意