Коди корекції помилок: як захистити дані у зашумленому світі
Кожен канал, що передає цифрову інформацію — оптоволоконна лінія, канал зв'язку з космічним апаратом, подряпаний компакт-диск, комірка флеш-пам'яті — зазнає впливу шуму. Проте фотографії на вашому телефоні, повідомлення, які ви надсилаєте, і дані, отримані від зондів за мільярди кілометрів, приходять бездоганно точними. Причина — коди корекції помилок: хитра надлишковість, яка дозволяє приймачу не просто виявити пошкодження, а й точно відновити початкове повідомлення. Ця стаття простежує розвиток галузі від дивовижної теореми Клода Шеннона 1948 року — яка довела, що майже ідеальний зв'язок через зашумлений канал можливий — через практичні коди, що побудували цифровий світ, аж до квантових кодів, які лежать в основі майбутніх комп'ютерів.
1. Теорема Шеннона про кодування для зашумленого каналу
У 1948 році Клод Шеннон заснував теорію інформації та довів результат, що здавався майже парадоксальним: кожен канал зв'язку має максимальну швидкість — свою пропускну здатність C — нижче якої інформацію можна передавати з настільки малою ймовірністю помилки, наскільки завгодно, незалежно від того, наскільки зашумлений канал.
Теорема має дві половини. Частина про досяжність стверджує, що для будь-якої швидкості R < C існують коди, що дають як завгодно малу помилку. Обернена частина стверджує, що для R > C надійний зв'язок неможливий — помилки не можна звести до нуля. Доказ Шеннона був неконструктивним: він гарантував існування хороших кодів (фактично випадкових кодів), не пояснюючи інженерам, як побудувати практичні. Наступні десятиліття стали довгими пошуками кодів, що наближаються до межі Шеннона за реалізованого кодування й декодування.
2. Коди Хеммінга та SECDED
Річард Хеммінг, розчарований релейними комп'ютерами, що зупинялися при кожній виявленій помилці, винайшов 1950 року перший практичний код, що виправляє помилки. Код Хеммінга(7,4) кодує 4 інформаційні біти у 7-бітове кодове слово, додаючи 3 біти парності, розміщені у позиціях-степенях двійки.
Геніальність у тому, що синдром безпосередньо вказує місце помилки. Загальний код Хеммінга має параметри:
Додавання ще одного загального біта парності дає SECDED — Single Error Correction, Double Error Detection (виправлення однієї помилки, виявлення двох; d_min = 4). Коди SECDED захищають ECC-пам'ять практично в кожному сервері: вони безшумно виправляють одноразові збої (спричинені космічними променями та електричним шумом) і сигналізують про невиправні подвійні помилки, перш ніж вони пошкодять дані.
3. Коди Ріда-Соломона: CD та QR-коди
Коди Хеммінга виправляють розсіяні одиночні помилки. Але реальні пошкодження часто трапляються пакетами — подряпина на CD, кавова пляма на QR-коді, загасаючий радіозв'язок. Коди Ріда-Соломона (RS), розроблені 1960 року, працюють із символами (групами бітів) над скінченним полем GF(2^m), а не з окремими бітами, що робить їх ідеальними для пакетних помилок.
Аудіо-CD використовує багатошарову схему під назвою CIRC (Cross-Interleaved Reed-Solomon Code), яка перемежовує два RS-коди так, що суцільна подряпина розподіляється по багатьох кодових словах, кожне з яких тоді бачить лише невеликий, виправний пакет. CD може повністю виправити дефектну доріжку завдовжки до приблизно 2,5 мм. QR-коди також використовують Рід-Соломон, із чотирма рівнями надлишковості, що обираються (L/M/Q/H), відновлюючи до близько 30% пошкодженого символу — саме тому частково закритий чи стилізований QR-код усе одно сканується. Та ж сама родина кодів захищала дані, надіслані зондами «Вояджер».
4. CRC: поліноміальне виявлення помилок
Не кожна ситуація потребує корекції; часто швидке, надійне виявлення з подальшою повторною передачею дешевше. Циклічний надлишковий код (CRC) — робочий кінь виявлення помилок, що зустрічається в кадрах Ethernet, ZIP-файлах, жорстких дисках і незліченних мережевих протоколах.
Сила CRC полягає у вдалому виборі G(x). Ретельно спроєктований генератор степеня r гарантує виявлення: усіх одиночних помилок, усіх подвійних помилок, будь-якої непарної кількості помилок (якщо G(x) має множник (x+1)) і будь-якого пакета помилок довжиною не більше r бітів. Популярний CRC-32, що використовується в Ethernet, виявляє всі пакети завдовжки до 32 бітів і переважну більшість довших, з ймовірністю невиявленої помилки близько 2⁻³² для випадкового пошкодження — і все це обчислюється лише операціями зсуву та XOR в апаратному забезпеченні.
5. LDPC та коди, що наближаються до межі пропускної здатності
Півстоліття межа Шеннона залишалася ціллю, якої жоден практичний код не міг досягти. Прорив стався з появою турбо-кодів (1993) та повторним відкриттям кодів з малою щільністю перевірки на парність (LDPC), які спочатку винайшов Роберт Галлагер 1962 року, але їх обчислення були нездійсненними, доки сучасне обладнання не наздогнало ідею.
Код LDPC визначається розрідженою матрицею перевірки на парність H — такою, що має дуже мало одиниць у кожному рядку та стовпці. Ця розрідженість — ключ: вона дозволяє декодеру використовувати ефективний ітеративний алгоритм поширення переконань (обміну повідомленнями) на графі Таннера коду, обмінюючись ймовірнісними оцінками між вузлами змінних (бітами) та вузлами перевірки (обмеженнями парності), доки вони не зійдуться до найімовірнішого кодового слова.
Коди LDPC зараз захищають Wi-Fi (802.11n/ac/ax), канали даних 5G, 10-гігабітний Ethernet, супутникове мовлення DVB-S2 та контролери сучасних SSD. Через шістдесят років після того, як Шеннон довів, що коди, які досягають межі пропускної здатності, повинні існувати, інженери нарешті їх побудували — і вони працюють на чипі у вашій кишені.
6. Квантова корекція помилок
Квантові комп'ютери стикаються зі складнішою задачею, ніж будь-який класичний канал. Кубіти декогерують, їх не можна копіювати (теорема заборони клонування забороняє просте копіювання, на якому засновані класичні коди повторення), і вони зазнають не лише перевертань бітів (помилки X), а й перевертань фази (помилки Z) — а вимірювання кубіта для перевірки руйнує його суперпозицію.
Квантова корекція помилок (QEC) вирішує все це одночасно. Хитрість полягає в тому, щоб розподілити інформацію одного логічного кубіта серед багатьох заплутаних фізичних кубітів, а потім вимірювати ретельно обрані оператори парності (стабілізатори), які виявляють, чи сталася помилка — і якого типу — не вимірюючи самі закодовані дані.
Ця теорема порогу є квантовим аналогом результату Шеннона: якщо фізичні кубіти достатньо якісні — нижче порогової частоти помилок — то як завгодно надійні квантові обчислення можливі шляхом масштабування коду. Поверхневий код, з його скромною зв'язністю та високим порогом, є провідним кандидатом і лежить в основі планів кожного великого проєкту з квантових обчислень. Від реле Хеммінга до заплутаних кубітів — та сама ідея живе: структурована надлишковість перетворює зашумлений світ на надійний.