> hamming | (7,4) | ecc <
// Код Хэмминга – код коррекции ошибок для надёжной передачи данных
Коррекция ошибок
Автоматически обнаруживает и исправляет одиночные битовые ошибки в данных.
Обнаружение двойных ошибок
Может обнаруживать (но не исправлять) ошибки на два бита в каждом блоке.
Минимальные накладные расходы
Всего 3 бита чётности на каждые 4 бита данных (эффективность 75%).
>> техническая информация
Как работает код Хэмминга:
Код Hamming(7,4) добавляет 3 бита чётности к каждым 4 битам данных, формируя 7-битовые блоки. Биты чётности располагаются на позициях, являющихся степенями двойки (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).
Как работает коррекция ошибок?
При приёме данных биты чётности пересчитываются. Если они не совпадают, синдром (разница) напрямую указывает, какой бит неверен. Ошибка исправляется инверсией этого бита.
Код Хэмминга против других 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
>> Другие вопросы
В: Что означает (7,4) в коде Хэмминга?
О: К 4 битам данных добавляются 3 бита чётности, получается слово из 7 бит. Биты чётности стоят на позициях-степенях двойки: 1, 2 и 4. Минимальное расстояние 3: одна ошибка исправляется, две обнаруживаются, но не исправляются.
В: Как синдром указывает позицию ошибки?
О: Каждый бит чётности проверяет позиции, в номере которых установлен соответствующий бит. Три результата в двоичной записи дают позицию ошибочного бита (0 — ошибок нет). В примере 101 указывает на позицию 5.
В: Что такое расширенный код Хэмминга (SECDED)?
О: Дополнительный общий бит чётности превращает (7,4) в (8,4): исправляет 1 ошибку и обнаруживает 2. ECC-память использует тот же принцип, обычно как (72,64): 8 контрольных бит на 64 бита данных.