> hamming | (7,4) | ecc <
// 해밍 코드 – 신뢰할 수 있는 데이터 전송을 위한 오류 정정 코드
오류 정정
데이터의 단일 비트 오류를 자동으로 탐지하고 수정합니다.
이중 오류 검출
각 블록에서 2비트 오류를 검출할 수 있습니다(수정은 불가).
적은 오버헤드
4비트 데이터당 패리티 비트는 3비트뿐입니다(효율 75%).
>> 기술 정보
해밍 코드는 어떻게 동작하나요?:
Hamming(7,4) 코드는 4비트 데이터마다 3비트 패리티 비트를 추가하여 7비트 블록을 만듭니다. 패리티 비트는 2의 거듭제곱 위치(1, 2, 4)에 배치됩니다. 오류가 발생하면 시드롬(패리티 검사 결과)이 잘못된 비트의 위치를 직접 가리킵니다.
Hamming(7,4) 구조:
데이터: 1011 (4비트) 위치: P1 P2 D1 P3 D2 D3 D4 Hamming: 1 0 1 1 0 1 1 P1 = D1 ⊕ D2 ⊕ D4 = 1 ⊕ 0 ⊕ 1 = 0 P2 = D1 ⊕ D3 ⊕ D4 = 1 ⊕ 1 ⊕ 1 = 1 P3 = D2 ⊕ D3 ⊕ D4 = 0 ⊕ 1 ⊕ 1 = 0
해밍 코드를 사용하는 이유:
- >메모리 오류 정정
- >위성 통신
- >데이터 저장 시스템
- >네트워크 전송
- >RAID 어레이
>> 자주 묻는 질문
해밍 코드는 무엇인가요?
해밍 코드는 1950년 리처드 해밍이 만든 오류 정정 코드입니다. 데이터에 패리티 비트를 추가하여 단일 비트 오류를 자동으로 탐지하고 수정할 수 있게 해 줍니다.
(7,4)는 무엇을 의미하나요?
Hamming(7,4)는 총 7비트 중 4비트가 데이터, 3비트가 패리티 비트라는 뜻입니다. 7비트 블록 내의 모든 단일 비트 오류를 수정할 수 있습니다. (15,11)이나 (31,26) 같은 다른 변형도 있습니다.
오류 정정은 어떻게 동작하나요?
데이터를 수신하면 패리티 비트가 다시 계산됩니다. 값이 일치하지 않으면 시드롬(차이)이 어느 비트가 잘못되었는지 직접 알려 줍니다. 해당 비트를 뒤집어 오류를 수정합니다.
해밍 코드 vs. 다른 ECC 코드?
해밍 코드는 단일 비트 오류에 대해 단순하고 효율적입니다. Reed–Solomon과 같은 더 복잡한 코드는 여러 오류를 정정할 수 있지만 오버헤드가 더 큽니다. 해밍 코드는 노이즈가 낮은 채널에 적합합니다.
// 빠른 참조
| Pos | bit | covered by |
|---|---|---|
| 1 | p1 | p1 |
| 2 | p2 | p2 |
| 3 | d1 | p1 p2 |
| 4 | p3 | p3 |
| 5 | d2 | p1 p3 |
| 6 | d3 | p2 p3 |
| 7 | d4 | p1 p2 p3 |
// 계산 예시
Data 1011 -> positions 3,5,6,7 = 1,0,1,1 p1 = d3^d5^d7 = 1^0^1 = 0 p2 = d3^d6^d7 = 1^1^1 = 1 p3 = d5^d6^d7 = 0^1^1 = 0 Codeword (pos 1..7) 0110011 Received 0110111 (bit 5 flipped) Syndrome s3 s2 s1 = 1 0 1 = 5 -> flip bit 5 -> 0110011 corrected
>> 더 많은 질문
Q: 해밍 코드에서 (7,4)는 무슨 뜻인가요?
A: 4비트 데이터에 3비트 패리티를 더해 7비트 코드워드를 만듭니다. 패리티 비트는 2의 거듭제곱 위치(1, 2, 4)에 놓입니다. 최소 거리가 3이라 1비트 오류는 정정하고 2비트 오류는 검출만 합니다.
Q: 신드롬은 오류 위치를 어떻게 알려주나요?
A: 각 패리티 비트는 위치 번호의 해당 비트가 1인 위치를 검사합니다. 세 결과를 이진수로 읽으면 오류 비트의 위치가 됩니다(0은 오류 없음). 예시에서 101은 5번 위치입니다.
Q: 확장 해밍 코드(SECDED)란?
A: 전체 패리티 비트를 더해 (7,4)를 (8,4)로 만들면 1비트 정정과 2비트 검출이 가능합니다. ECC 메모리도 같은 원리로 보통 64데이터 비트에 8검사 비트인 (72,64)를 씁니다.