해밍 코드 계산기 쉽게 이해하기 — 개념과 원리
해밍 코드는 데이터에 검사 비트 몇 개를 더해, 뒤바뀐 비트 하나를 찾아 고칠 수 있게 합니다. 이 계산기는 데이터 비트를 해밍 부호어로 부호화하거나, 받은 부호어를 검사해 신드롬을 구하고 1비트 오류를 고칩니다. 컴퓨터 과학, 디지털 통신, 메모리 설계의 대표적인 주제입니다.
계산 방법
위치는 1부터 번호를 매깁니다. 1, 2, 4, 8 … 위치에는 검사 비트, 나머지에는 데이터 비트를 차례로 넣습니다.
검사 비트 p는 이진 번호에 p가 포함된 모든 위치를 맡으며, 그 묶음의 1 개수가 짝수가 되도록 정합니다.
검사 비트 수 k: 데이터 m비트에 대해 2^k ≥ m + k + 1을 만족하는 가장 작은 k
검사: 1인 모든 위치 번호를 XOR한 값이 신드롬이며, 0이면 오류 없음, 아니면 틀린 비트의 위치입니다.
원리
각 위치에는 이진 번호가 있고, 각 검사 비트는 이진 번호의 한 자리를 공유하는 위치들을 지켜봅니다. 비트 하나가 뒤집히면 그 위치를 맡은 검사들만 정확히 실패합니다. 실패한 검사를 이진수 자리로 읽으면 위치 번호가 되므로 신드롬이 오류를 바로 가리킵니다. 검사 비트가 k개면 신드롬은 2^k가지라서 m + k개 위치 중 하나 또는 '오류 없음'을 모두 나타낼 수 있습니다. 기본 해밍 코드는 오류 하나를 고치며, 오류가 둘이면 잘못 고칩니다.
예제 풀이
기본값인 데이터 1011 부호화로 계산합니다.
- 데이터 m = 4, 2³ = 8 ≥ 4 + 3 + 1이므로 k = 3, 부호는 (7, 4)입니다.
- 데이터를 위치 3, 5, 6, 7에 1, 0, 1, 1로 넣습니다.
- p1(3, 5, 7) = 1 ⊕ 0 ⊕ 1 = 0, p2(3, 6, 7) = 1 ⊕ 1 ⊕ 1 = 1, p4(5, 6, 7) = 0 ⊕ 1 ⊕ 1 = 0입니다.
- 부호어(위치 1~7) = 0110 011, 데이터 비트 = 1011입니다.
- 부호화 모드에서는 검사를 하지 않으므로 오류 위치와 신드롬은 —입니다.
결과 해석
부호어를 보내거나 저장하십시오. 검사할 때 신드롬이 0이면 1비트 오류가 없다는 뜻이고, 부호어 길이 안의 0이 아닌 값이면 그 비트를 되돌리면 됩니다. 실제 메모리 시스템은 전체 패리티 비트 하나를 더해(SECDED) 오류 둘을 잘못 고치는 대신 검출하는 경우가 많습니다.
흔한 실수
- 위치 번호를 1이 아니라 0부터 매기는 경우
- 2의 거듭제곱 위치에 데이터 비트를 넣는 경우
- 한쪽은 홀수 패리티, 다른 쪽은 짝수 패리티를 쓰는 경우
- 두 비트 이상 뒤집혔을 수 있는데 수정 결과를 믿는 경우
자주 묻는 질문
(7, 4)는 무슨 뜻인가요?
전체 7비트에 데이터 4비트, 검사 비트 3비트라는 뜻입니다.
오류 위치는 어떻게 찾나요?
1인 비트의 위치 번호를 모두 XOR하면 신드롬, 즉 오류 위치가 나옵니다.
해밍 코드는 어디에 쓰이나요?
메모리 오류 정정과 교육에 쓰이며, 더 발전된 부호의 기초가 되었습니다.
출처: R. W. Hamming, "Error Detecting and Error Correcting Codes", The Bell System Technical Journal 29(2): 147–160, 1950