Код, побудований на основі булевих поліномів, а не просто бітових шаблонів
Більшість кодів виправлення помилок описуються виключно як множини вектори бітів. Коди 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)
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