자격/임베디드기사

[임베디드기사] [필기] 2진 오류검출과 수정(패리티 비트 / 해밍코드)

패리티 비트와 해밍코드

이진세계에서 오류수정이라는 것은 오류수정 알고리즘을 통하여 데이터 전송이나 데이터 처리간에 잘못 전송될 수 있는 정보를 탐지하거나 수정하는 것을 의미한다. 가장 기본적으로 사용되는 패리티 비트와 해밍코드를 알아보자.


패리티 비트(Parity Bit)

패리티 비트는 정보전송간에 발생할 수 있는 오류를 탐지하는 것을 목적으로 한다. 원리는 매우 단순 하다.

데이터를 전송하는 두 송수신자 간에 홀수 혹은 짝수식 Parity를 사용할지 미리 설정한다. 7비트의 데이터와 1비트의 패리티비트(오류검출비트)1Byte로 데이터를 처리하며 Parity비트는 1Byte내 모든 1의 개수가 짝수/홀수 개가 되도록 설정한다. 만약 홀수 패리티비트를 설정하였는데, 수신된 1byte의 패리티비트를 포함한 1의 개수가 짝수라면 에러가 발생함을 감지 할 수 있다는 것이다. 물론 한 개의 Byte내에서만 검출 불가한 것으로 보이지만 이것들이 모이고 Parity도 여러 Bit로 사용한다면 꽤나 높은 수준의 검출율을 보여줄 수 있다.

 

해밍 코드(Hamming code)

오류의 검출을 목적으로 하는 패리티비트에서 한발자국 더 나아가서 해밍코드는 오류의 수정까지를 목표로 한다. 1940년 벨연구소에서 해밍이라는 아자씨가 만든 코드로 데이터 비트에 몇 개의 추가 비트를 써넣어서 오류를 자가 수정할 수 있도록 만든 방식이다.

 

사실 데이터에 추가비트가 들어간다는 점은 데이터 전송에 손실이 발생한다는 이야기와 크게 다르지 않다. 원래 100개를 한번에 발송할 수 있던게 오류수정을 위해서 테스트 데이터 10개를 넣는다면 90개를 전송할 수 있는 것이니 말이다. 따라서 해밍코드를 사용하기 위한 수정 비트는 최소화 하는 것이 좋은데,

(d : 데이터비트, p : 검사비트)르 만족하는 최소한의 p값을 찾아야한다. 1byte(8bit)라 할 때 p4이면 16>=13으로 최소한 만족을 한다. 8개의데이터 비트와 4개의 패리티 비트가 사용될 때의 예시이다.

 

다른 크기의 데이터도 위의 수식과 검사위치를 대입하면 쉽게 알 수 있을 것이다.

해밍코드는 기본적으로 패리티비트의 원리를 사용해서 중첩된 패리티비트로 에러의 위치를 찾아서 수정하는 것을 목적으로 한다. 예시를 보자

비트단위로 이루어지는 오류의 검출과 수정은 패리티비트와 해밍코드를 사용하지만 조합된 컴퓨터에서는 이를 응용하여 ECCARQ같은 오류 검출과 수정방식을 사용한다. 물론 패리티의 연장선에 존재한다.


정리

이번시간에는 2진 세상에서 데이터의 오류를 검출하고 수정하는 패리티비트와 해밍코등에 대해서 공부해보았다.

 

다음시간에는

순서논리회로인 래치와 플립플롭을 공부해보도록 하겠다.