인코딩 | 디코딩 | 시각화

> 그레이 | 반사 | 이진 <

// 그레이 코드 - 연속된 값 사이에서 단 1비트만 바뀌는 2진수 체계

0 자
0 자
[SINGLE-BIT]

단위 거리

연속된 두 값 사이에서 항상 한 비트만 변경됩니다.

[ERROR-REDUCTION]

오류 감소

아날로그-디지털 변환 시 발생하는 오류를 줄여 줍니다.

[CYCLIC]

순환 특성

첫 번째 값과 마지막 값도 한 비트만 다른 순환 구조를 가집니다.

>> 기술 정보

그레이 코드의 동작 원리:

그레이 코드(반사 이진 코드)는 연속된 두 값이 항상 한 비트만 다르도록 정의된 2진수 체계입니다. 각 비트를 바로 앞 비트와 XOR 연산하여 생성합니다. 이러한 특성 덕분에 위치 인코더와 같은 장치에서 전이 오류를 줄이는 데 적합합니다.

그레이 코드 예시:

Decimal | Binary | Gray Code
0       | 0000   | 0000
1       | 0001   | 0001
2       | 0010   | 0011
3       | 0011   | 0010
4       | 0100   | 0110
5       | 0101   | 0111
6       | 0110   | 0101
7       | 0111   | 0100

참고: 인접한 그레이 코드 사이에서는 항상 한 비트만 변경됩니다

그레이 코드를 사용하는 이유:

  • ▸로터리 인코더
  • ▸카르노 맵(Karnaugh map)
  • ▸오류 정정
  • ▸디지털 통신
  • ▸위치 센서

>> 자주 묻는 질문

그레이 코드란 무엇인가요?

그레이 코드는 반사 이진 코드라고도 불리며, 연속된 값이 항상 한 비트만 다르도록 정의된 2진 코드입니다. 전이 중간 상태에서 잘못된 값을 읽는 문제를 줄이기 위해 디지털 시스템에서 널리 사용됩니다.

이진수를 그레이 코드로 변환하려면 어떻게 하나요?

이진수에서 그레이 코드로 변환하는 방법: 1) 최상위 비트(MSB)는 그대로 둡니다. 2) 그 이후 각 비트에 대해 현재 비트와 직전 비트를 XOR 합니다. 수식: G[i] = B[i] XOR B[i-1]. 예를 들어, 이진수 1011은 그레이 코드 1110이 됩니다.

엔코더에서 그레이 코드가 더 좋은 이유는 무엇인가요?

일반적인 이진 카운트에서는 여러 비트가 동시에 변경될 수 있어, 7(0111)에서 8(1000)으로 넘어갈 때 중간의 잘못된 값이 읽힐 수 있습니다. 그레이 코드는 한 단계마다 한 비트만 바뀌므로 로터리 인코더에서 보다 안정적인 출력을 제공합니다.

그레이 코드는 어디에 사용되나요?

그레이 코드는 로터리 인코더, 카르노 맵 기반 논리 최소화, 디지털 통신의 오류 정정, 유전 알고리즘, A/D 변환기 등 단일 비트 전이가 중요한 다양한 시스템에서 사용됩니다.

// 빠른 참조

DecBinaryGray
0000000
1001001
2010011
3011010
4100110
5101111
6110101
7111100

// 코드 예제

Binary -> Gray   g = b ^ (b >> 1)
Gray -> Binary   b = g; for (m = g >> 1; m; m >>= 1) b ^= m;
Python           def to_gray(n): return n ^ (n >> 1)
                 def from_gray(g):
                     n = 0
                     while g: n ^= g; g >>= 1
                     return n
n bits           2^n codes, successive codes differ by exactly 1 bit (also 2^n - 1 -> 0)

>> 더 많은 질문

Q: 그레이 코드란 무엇인가요?

A: 그레이 코드(반사 이진 코드)는 연속한 값이 정확히 한 비트만 다른 표현입니다. 벨 연구소의 프랭크 그레이가 특허를 냈고 순환형이라 마지막 값도 첫 값과 한 비트만 다릅니다.

Q: 로터리 엔코더에 쓰이는 이유는?

A: 일반 이진수에서는 011에서 100으로 갈 때처럼 여러 비트가 동시에 바뀝니다. 센서가 완벽히 동기화되지 않으면 순간적으로 잘못된 값이 나옵니다. 그레이 코드는 한 비트만 바뀌어 오차가 최대 한 칸입니다.

Q: 그레이 코드를 이진수로 바꾸려면?

A: 최상위 비트는 그대로 두고, 이후 이진 비트는 "이전 이진 비트 XOR 현재 그레이 비트"입니다. 수식으로 b = g ^ (g >> 1) ^ (g >> 2) ^ …. 이진→그레이는 g = b ^ (b >> 1)입니다.

다른 언어