ГоловнаСтаттіАлгоритми

Коди Ріда-Мюллера: Виправлення Помилок на Основі Булевих Многочленів

Як RM(r, m) перетворює булеві многочлени на самокоректувальні кодові слова, і чому декодування більшістю все ще працює після Марінер.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Код, побудований на основі булевих поліномів, а не просто бітових шаблонів

Більшість кодів виправлення помилок описуються виключно як множини вектори бітів. Коди Reed-Muller, незалежно введені Muller у 1954 році та Reed в той же рік, є незвичайними, оскільки починаються з булевих поліномів. Код RM(r, m) складається з кожної бінарної послідовності, яка є істинною таблицею булевої функції від m змінних, записаної як поліном степеня не більше r — внесок Reed був алгоритмом декодування більшості логіки, який безпосередньо використовує цю структуру полінома.

RM(r, m):  length n = 2^m,  dimension k = sum_(i=0..r) C(m, i),  min distance d = 2^(m-r)
RM(1, m):  the classic case — length 2^m, dimension m+1, distance 2^(m-1)
жива демонстрація · пов'язана симуляція● LIVE

RM(1, m): первинні коди та зв’язок з Хадамардом

RM(1, m) кодує m+1 біт повідомлення — один константний біт плюс m лінійних коефіцієнтів — у довжину 2^m кодового слова шляхом оцінки бінарного полінома ступеня 1 для кожного з 2^m вхідних пунктів. Кожне ненульове кодове слово відрізняється від кожного іншого точно половиною своїх бітів (відстань 2^(m-1)), що робить RM(1,m) еквівалентним розширеному коду Хадамара. Це саме код, який використовувався NASA на космічних апаратах Mariner 9 та Mariner deep-space probes на початку 1970-х років: RM(1,5), 32 біти для кодування 6 бітів повідомлення, обраний через те, що його величезна відносна відстань дозволяла дуже високі швидкості помилок у радіозв’язку слабкого міжпланетного каналу.

Рекурсивна структура: побудова |u|u+v|

Коди Reed-Muller будуються рекурсивно з менших, за допомогою конструкції |u|u+v|, де u є кодовим словом RM(r, m-1), а v - кодовим словом RM(r-1, m-1). Конкатенація (u, u+v) є дійсним кодовим словом RM(r, m). Це подвоює довжину кожного разу, коли ви переходите від m-1 до m, і це саме те, що робить як кодування, так і декодування обчислювально ефективними за допомогою рекурсивних алгоритмів, а не шляхом грубої перевірки таблиць — та сама ідея, яка лежить в основі швидкого перетворення на Гадмарді та, десятиліття пізніше, побудови кодів Поля для 5G.

Бгатомовне декодування: голосування за правильну біт

Оригінальний декодувач Ріда відновлює кожен коефіцієнт полінома, будуючи багато різних лінійних комбінацій отриманих бітів, які всі в безшумному коді оцінюються до одного й того ж коефіцієнта — а потім здійснюється голосування за більшість серед усіх з них. Оскільки поліном ступеня r у m змінних має дуже повторну структуру, кожен коефіцієнт можна перевірити десяками або сотнями незалежних сум парності, і поки менше половини цих сум не пошкоджено, голосування за більшість все ще відновлює правильну біт. Це дозволяє RM(r,m) виправляти до ⌊(d−1)/2⌋ = 2^(m-r-1) − 1 помилок, з декодером, який є простим XOR-і-рахунком, а не алгебраїчною машиною, необхідною для кодів Reed-Solomon або BCH.

corrected bit = majority_vote( parity_sum_1, parity_sum_2, ..., parity_sum_k )
error tolerance:  t = 2^(m-r-1) - 1  bit flips, guaranteed correctable

Чому коди RM все ще мають значення

Коди RM були значною мірою замінені кодами Reed-Solomon та пізніше LDPC і турбокодами для застосунків у глибокому просторі та пам’яті, оскільки вони вміщують більше бітів повідомлень на переданий біт з тією ж толерантністю до помилок. Однак RM(1,m) ніколи не зникав — він математично еквівалентний першопорядковому коду, що використовується в послідовностях розповсюдження CDMA, і загальна родина RM(r,m) з’явилася знову у 2016 році як майже оптимальний будівельний блок для кодів Поляра, кодів каналу, стандартизованих для контрольних каналів 5G. Рекурсивна структура |u|u+v|, яка робила практичною декодування більшістю в 1950-х роках, така сама структура, що робить сучасні декодери на основі послідовного скасування Поляра швидкими.

Frequently asked questions

Що означають два числа в RM(r, m)?

m встановлює довжину коду, 2^m, і кількість булевих змінних, які може використовувати поліном. r обмежує ступінь цього полінома. Більше значення r дозволяє запакувати більше бітів повідомлення на кодову структуру (вищий коефіцієнт), але зменшує мінімальну відстань 2^(m-r), тобто виправляє менше помилок — ці два параметри є компромісом між швидкістю та корекційною силою.

Як Reed-Muller відрізняється від Reed-Solomon кодування?

Коди Reed-Muller є бінарними і будуються на основі багатовимірних булевих поліномів, які оцінюються в кожній точці булевої гіперкуба. Коди Reed-Solomon є небінарними, будуються на основі унівariate поліномів, які оцінюються над кінцевим полем, і зазвичай містять більше інформації на символ — тому Reed-Solomon значною мірою замінив RM(1,m) у міжпланетних місіях після Mariner.

Чому декодування методом більшості логіки працює навіть при кількох бітових помилках?

Оскільки кожен коефіцієнт повідомляючого полінома може бути відновлений з багатьох різних, значною мірою незалежних перевірок парності над отриманими бітами. Доляк, якщо менше половини цих перевірок індивідуально пошкоджені помилками, їх голосування більшості все ще вказує на правильний коефіцієнт — надлишок поліномної структури робить голосування надійним.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Reed-Muller Codes і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Reed-Muller Codes

Що ви знайшли?

Додати кроки відтворення (опційно)