해밍 부호
1. 개요
해밍 부호는 주어진 데이터에 오류를 검출하고 정정하기 위해 추가 비트를 사용하는 선형 부호이다. 1950년 리처드 해밍에 의해 개발되었으며, 데이터 비트와 오류 정정 비트로 구성된다. 해밍 부호는 오류 정정 능력을 갖춘 다양한 형태로 존재하며, 이진 해밍 부호, 삼진 해밍 부호, 확장 해밍 부호 등이 있다. 확장 해밍 부호는 추가 패리티 비트를 사용하여 오류 검출 능력을 향상시킨다. 해밍 부호는 컴퓨터 메모리 시스템 등에서 널리 사용되며, 오류 정정 및 데이터 무결성 확보에 기여한다.
-
1951년 컴퓨팅 -
테이프 드라이브
테이프 드라이브는 자기 테이프에 데이터를 읽고 쓰는 장치이며, 1951년 UNISERVO 출시 이후 기술 발전을 거쳐 현재는 높은 저장 용량과 데이터 안정성을 바탕으로 백업, 아카이브 등에 활용된다. -
부호 이론 -
해밍 거리
해밍 거리는 길이가 같은 두 문자열에서 서로 다른 기호의 개수를 나타내는 거리 척도로, 아벨 군에서는 벡터의 해밍 무게를 영벡터와의 해밍 거리로 정의하며, 오류 검출, 수정 부호 이론, 정보 이론, 계통학 등에서 활용된다. -
부호 이론 -
선형 부호
선형 부호는 유한체 위의 벡터 공간의 부분 공간으로, 데이터 전송 및 오류 정정을 위해 사용되며, 길이, 차원, 최소 거리에 따라 표기되고, 부호어, 생성 행렬, 패리티 검사 행렬 등의 개념을 갖는다. -
컴퓨터 산술 -
IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. -
컴퓨터 산술 -
1의 보수
1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다.
2. 정의
해밍 부호는 데이터 전송이나 저장 과정에서 발생하는 오류를 검출하고 정정하기 위해 설계된 선형 부호의 한 종류이다. 이는 원본 데이터에 추가적인 확인용 비트(패리티 비트)를 덧붙이는 방식으로 작동하며, 일반적으로 해밍 거리 3을 갖도록 설계되어 1비트의 오류를 수정하거나 2비트의 오류를 검출할 수 있다.
데이터에 오류 정정 비트를 포함시키고, 이 비트들을 특정 규칙에 따라 배열하면, 어떤 비트에서 오류가 발생했는지 식별하는 것이 가능하다. 예를 들어, 7비트 데이터가 있을 때, 3개의 오류 제어 비트를 추가하면 총 10비트가 되는데, 이 3개의 비트를 통해 7개의 데이터 비트 중 어느 위치에서 단일 비트 오류가 발생했는지 알아낼 수 있다.
1950년 벨 연구소의 리처드 해밍은 이러한 오류 정정 부호 시스템을 설명하기 위한 명명법을 개발했다. 이 표기법은 (n, k) 형식으로 나타내는데, 여기서 n은 부호화된 후의 총 비트 수이고, k는 원래 데이터 비트의 수이다. 예를 들어, 7비트 ASCII 데이터에 패리티 비트 1개를 추가하는 간단한 오류 검출 코드는 (8, 7) 코드로 표현된다. 코드 속도는 k/n으로 계산되며, 이는 전체 비트 중 실제 데이터가 차지하는 비율을 나타낸다.
해밍은 또한 두 개 이상의 비트에서 오류가 발생하는 문제에 주목하여 '거리'라는 개념을 도입했는데, 이는 현재 그의 이름을 따 해밍 거리라고 불린다. 해밍 거리는 두 부호어(code word) 사이에 서로 다른 비트의 개수를 의미한다. 예를 들어, 단순 패리티 검사는 해밍 거리가 2인데, 이는 1비트 오류는 감지할 수 있지만 수정할 수는 없고, 2비트 오류는 감지조차 못 할 수 있음을 의미한다. 반면, 해밍 거리가 3인 코드는 1비트 오류를 수정하거나, 2비트 오류를 감지할 수 있다. 일반적으로 거리가 k인 코드는 최대 k − 1개의 오류를 감지할 수 있다.
해밍은 높은 코드 속도를 유지하면서 동시에 해밍 거리를 늘려 오류 정정 능력을 향상시키는 것을 목표로 연구했으며, 패리티 비트들을 서로 중첩시켜 데이터와 다른 패리티 비트들을 동시에 검사하는 혁신적인 방식을 고안했다.
해밍 부호는 알려진 오류 정정 부호 중 가장 오래된 것 중 하나로, 블록당 1비트의 오류를 정정할 수 있다. 리드-솔로몬 부호와 같은 더 강력한 부호들에 비해 정정 능력은 상대적으로 낮지만, 처리 속도가 빠르다는 장점이 있다. 이러한 특징으로 인해 오류 발생률이 비교적 낮으면서 빠른 처리가 요구되는 ECC 메모리나 RAID 2와 같은 시스템에 사용된다. 또한, WinRAR의 복구 레코드에도 사용되고 있다.
2.1. 이진 해밍 부호
선형 부호의 일종인 해밍 부호 중, 0과 1만을 사용하는 이진 해밍 부호는 비교적 간단하게 정의할 수 있다.
먼저 2 이상의 정수 ()을 하나 선택한다. 그리고 체 위에서 다음과 같은 크기의 행렬 를 만든다. 행렬 의 번째 열 벡터는 1부터 까지의 정수 를 이진법으로 표현했을 때 각 자릿수를 위에서부터 순서대로 나열한 것이다.
예를 들어 일 경우, 이므로 는 3×7 행렬이 된다. 1부터 7까지의 수를 이진법으로 나타내면 각각 001, 010, 011, 100, 101, 110, 111이다. (계산을 위해 앞에 0을 붙여 세 자리로 맞춤) 이를 각 열에 세로로 배치하면 다음과 같은 행렬 를 얻는다.
:
이렇게 만들어진 행렬 를 패리티 확인 행렬로 사용하는 이진 선형 부호 를 -이진 해밍 부호라고 한다. 이 부호 는 행렬 의 핵(kernel)으로 정의되며, 수식으로는 와 같이 나타낼 수 있다. 여기서 는 벡터 의 전치(transpose)를 의미한다.
-이진 해밍 부호는 파라미터 를 가지므로, -해밍 부호라고도 부른다. 여기서 은 부호어의 길이, 는 정보 비트의 수, 는 최소 거리(해밍 거리)를 의미한다.
2.2. 임의의 진법의 해밍 부호
해밍 부호는 흔히 이진법에서 사용되지만, 이를 일반화하여 임의의 진법에서도 정의할 수 있다.
보다 일반적으로, 소수의 거듭제곱인 수 (예: 2, 3, 4, 5, 7, 8, 9, 11 등)와 2 이상의 정수 이 주어졌다고 하자. 여기서 는 사용하는 진법의 크기를 나타낸다. 예를 들어 이면 이진법, 이면 삼진법 해밍 부호가 된다.
이때 유한체 (크기가 인 유한체) 위의 차원 벡터 공간 을 생각한다. 이 벡터 공간에서 영벡터()를 제외한 벡터들에 대해, 한 벡터가 다른 벡터의 0이 아닌 스칼라배와 같으면 같은 것으로 간주하는 관계를 정의한다 (). 이 관계에 따라 벡터들을 묶어 차원 사영 공간 을 구성할 수 있다. 이 사영 공간은 서로 다른 '방향'을 나타내는 점들의 집합으로 볼 수 있으며, 점의 개수는 다음과 같다.
: