DIY를 위한 AI

2022년 8월 17일 수요일

부호 1 (Code 1)

1. 부호에 대해

컴퓨터상에서 전기가 흐른다(1)와 흐르지 않는다(0)의 반복 중 상태가 온전하지 않아 온전한 수치를 알 수 없는 경우가 있다. 따라서 2진수의 나열들에 추가하거나 수정하여 원래의 수치와 일치하는지 확인을 하는데 이것을 포괄적으로 부호(Code)라고 부른다.
 
별도의 기준이 정해져 있지는 않으나 크게 두 가지로 컴퓨터 장치의 오류를 줄이거나 확인하려는 코드와 사람이 숫자나 문자를 편하게 쓰기 위한 부호로 나눌 수 있다. 부호의 종류는 아래의 내용보다 더 많지만 오류감소를 위한 부호를 몇 가지만 보도록 한다.

 

2. 패리티 부호

2진수의 전달 중 오류의 발생여부를 확인하기 위해 1자리수를 추가하는 것으로써 가장 간단한 구조인 것이 장점이다. 패리티 자리는 2진수에 포함된 1의 개수를 세어 짝수로 맞추려는 짝수 패리티와 1의 개수를 홀수로 맞추려는 홀수 패리티로 나뉜다. 아래의 예시는 짝수 패리티의 경우이다.

 

2진수

패리티

 

 

0

0

1

1

0

1

1

 

0

1

1

0

0

1

0

1

1

1

1

1

0

0

1

1

0

0

0

0

0

0

0

0

1

1

 

첫 번째 2진수는 6자리이고 ‘1’의 개수는 홀수(3)이므로 패리티는 1이 되어 전체 ‘1’의 개수가 짝수가 된다. 두 번째 2진수는 7자리이지만 ‘1’의 개수가 마찬가지로 홀수(3)이므로 패리티는 역시 1이 된다. 세 번째 2진수는 8자리이고 ‘1’의 개수가 짝수(6)이므로 패리티는 0이 되어 짝수를 유지, 네 번째 2진수는 8자리이고 ‘1’의 개수가 홀수(1)이므로 패리티는 1이 되어 짝수가 된다. 홀수 패리티의 경우 이 결과와 반대로 나오도록 생각하면 된다.
 
구조가 간단한 대신 오류의 확인만 가능하고 수정이 불가능하다는 단점이 있다. 게다가 에러가 한 번에 여러 자릿수(2 또는 4자리 등)에서 오류가 동시에 발생하면 오류의 확인조차 안 된다. 마지막으로 오류를 찾더라도 발생한 자릿수는 알 수 없다는 문제가 있다. 이것은 싱글 패리티에서만 문제시되며 병렬 패리티(각 자릿수별로 전체 2진수에 대한 패리티를 별도로 추가)로 확장하여 해결하는 방법도 있으나 잘 쓰이지는 않는다.
 
이런 단점들이 있어도 매우 간단하다는 이유로 자주 쓰인다.

 

3. 해밍부호

패리티를 2진수와 섞는 것으로 오류를 찾아 수정할 수 있는 부호로, 리처드 웨슬리 해밍(Richard Wesley Hamming)의 이름에서 유래한다. 해밍부호를 만드는 데에 패리티 자리는 복수로 삽입되며 그 개수를 구하는 공식은 다음과 같다.

 

2PDP1​ (D=데이터(2진수) 개수, P=패리티 개수)

 

2진수가 5개라면(D5), 식은 2PP6P3에서 부등호는 성립한다. 이 때, 패리티의 개수를 더 많이 하더라도 오류 검출이 가능하다는 점은 같은데 계산할 시간만 늘어나는 손실이 있기에 최소값으로 적용한다. 그리고 이 패리티의 위치는 자릿수 번호 1, 2, 4, 8, 16과 같이 2의 거듭제곱의 위치에 삽입한다. 이 사항들을 종합하여 2진수 101011012에 해밍부호(D8, P4)를 짝수 패리티로 적용하면 다음과 같다.

 

순번

12

11

10

9

8

7

6

5

4

3

2

1

구분

D

D

D

D

P8

D

D

D

P4

D

P2

P1

계산 전

1

0

1

0

-

1

1

0

-

1

-

-

P1 범위

 

V

 

V

 

V

 

V

 

V

 

V

P2 범위

 

V

V

 

 

V

V

 

 

V

V

 

P4 범위

V

 

 

 

 

V

V

V

V

 

 

 

P8 범위

V

V

V

V

V

 

 

 

 

 

 

 

계산 후

1

0

1

0

0

1

1

0

1

1

0

0

 

표와 같이 패리티 자리별로 계산대상이 각각 다른데 자기 위치부터 순번의 개수만큼 반복하여 띄운다. , 패리티 계산범위는 각각 P1(1)·(3)·(5)·(7)·(9)·(11), P2(2·3)·(6·7)·(10·11), P4(4·5·6·7)·(12), P8(8·9·10·11·12)에 대해서만 계산하고 ‘1’의 개수가 짝수가 되도록 값을 정한다. 이렇게 정해진 P80, P41, P20, P10을 패리티 위치에 삽입하여 부호를 완성한다.
  12
자리의 수를 전달 후 7번째 숫자에 문제가 생겨 ‘0’이 되었다고 할 때, 받은 쪽에서는 2PDP1로부터 dP12임을 알고 계산된 2P13으로부터 P4을 구하여 D8임을 이해한다. 이후 각 패리티 자리별로 계산하여 P80, P41, P21, P11가 나오는데 이 네 자리를 2진수로 취급하여 01112(710)의 결과로 7번째 자리에 이상이 있음을 확인한다. 2진수는 0 또는 1이므로 7번째 자리를 반전시키는 것으로 수정이 완료된다. 받은 쪽에서 패리티 계산시에 모두 ‘0’이 나오면 오류가 없다고 할 수 있다.
  
동시에 복수로 발생할 경우 오류의 확인조차 못 한다는 약점은 있지만 하나의 자릿수에 대해서라도 오류의 검출과 동시에 오류의 수정이 가능하다는 장점으로 쓰인다.

 

4. 그레이 부호

그레이(교번2) 부호는 본래의 2진수에서 별도의 자릿수 추가는 없이 수정만 된 것으로, 연속된 수의 사이에는 1개의 자리만 다르게 한 부호이다. 기본 2진수의 경우 010에서 710까지 반복하여 변화하는데 000200120102011210021012110211120002순으로 자릿수의 변화가 12131213개로 계속 변경된다. 이 중 2개 이상 변화할 때 정확히 동시에 일어난다는 보장을 못 하는 반면 컴퓨터의 성능이 좋아서 오차를 인식한다면 한 순간이지만 다른 수치가 있었던 것으로 인식할 수 있다는 가능성이 있다.
  
이런 문제가 없어지도록 수의 나열을 0002G0012G0112G0102G1102G1112G1012G1002G0002G순으로 변경하여 자릿수의 변화가 항상 한 자리가 되도록 한다. 자릿수의 변화가 항상 한 자리만인 것은 연속적으로 변하는 수치(계수기 등)나 양(아날로그 환경)을 나타낼 때 변화폭이 줄었으므로 오류가 줄어든다는 장점이 된다.

 

< 엔코더(회전각도 측정기)3자리 그레이 부호식 표기법이다. 빠르게 회전하면 회색으로 보일지도...

 

8자리 기준 2진수 100111012를 그레이 부호로 변경하는 방법은 아래와 같다.

 

순번

 

8

 

7

 

6

 

5

 

4

 

3

 

2

 

1

 

2진수

 

1

0

0

1

1

1

0

1

 

 

 

 

 

 

 

 

 

 

그레이 부호

 

1

 

1

 

0

 

1

 

0

 

0

 

1

 

1

 

 

먼저, 가장 높은 자릿수(8번째)의 숫자(1)는 그대로 가져온다. 다음 자릿수(7번째)2진수의 상위 자릿수(8번째)2진수의 현재 자릿수(7번째)에 대한 짝수 패리티 연산을 한다. , ‘1’의 개수가 홀수(1)이므로 1이 된다. 그 다음 자릿수(6번째)도 동일하게 2진수의 상위(7번째)2진수의 현재(6번째) 자릿수에 대해 짝수 패리티 연산하는데 ‘1’의 개수가 짝수(0)이므로 0이 된다. 이것을 가장 낮은 자릿수(1번째)까지 반복한다.
  
이와 반대로 그레이 부호 011001002G2진수로 변경하는 방법은 아래와 같다.

 

순번

 

8

 

7

 

6

 

5

 

4

 

3

 

2

 

1

 

그레이 부호

 

0

 

1

 

1

 

0

 

0

 

1

 

0

 

0

 

 

 

2진수

 

0

 

1

 

0

 

0

 

0

 

1

 

1

 

1

 

 

먼저, 가장 높은 자릿수(8번째)의 숫자(0)는 그대로 가져온다. 다음 자릿수(7번째) 2진수의 상위 자릿수(8번째)와 그레이 부호의 현재 자릿수(7번째)에 대한 짝수 패리티 연산을 한다. , ‘1’의 개수가 홀수(1)이므로 1이 된다. 그 다음 자릿수(6번째)도 동일하게 2진수의 상위(7번째)와 그레이 부호의 현재(6번째) 자릿수에 대해 짝수 패리티 연산하는데 ‘1’의 개수가 짝수(2)이므로 0이 된다. 이것을 가장 낮은 자릿수(1번째)까지 반복한다.
 
숫자의 최대 자릿수가 바뀌더라도 변경방법은 동일하고, 변경을 하더라도 가장 높은 자릿수는 항상 그대로이기에 2진수와 그레이 부호의 가장 높은 자릿수는 일치한다.
 
마지막으로 그레이 부호로 변환하여 오류의 감소를 기대할 수 있더라도 사칙연산과 같은 계산이 성립하지 않으므로 2진수로 재변환해야 한다는 점을 기억한다.

5. 결론

부호의 종류만 알아 두고 필요할 때는 인터넷에서 계산기를 찾아서 쓰도록 한다.

댓글 없음:

댓글 쓰기