Як визначити кількість помилок в алгоритмі Вельча-Берлекампа?


9

В алгоритмі Welch-Berlekamp для декодування кодів Рід-Соломона надається перелік точок представляють повідомлення з помилками на у невідомих місцях (і задано алгоритму). Вихід - це поліном, що проходить через усі задані точки, за винятком тих, в яких виникли помилки.(ai,bi)ebie

Метод передбачає розв’язання системи лінійних рівнянь виду

biE(ai)=Q(ai)

для всіх де має ступінь а має ступінь не більше . Змінні коефіцієнти і .iEeQe+kEQ

Щоб забезпечити, що має ступінь зазвичай додається обмеження, що коефіцієнт дорівнює 1 до лінійної системи, наведеної вище. Однак на практиці не обов’язково знати . Один з неефективних (але все-таки багаточленних) способів вирішити це - спробувати для всіх значень, починаючи з знижуючись, поки не буде знайдено рішення.Eexeee(n+k1)/21

Моє запитання: чи існує більш ефективний спосіб визначення ? eЯк варіант, чи є модифікація лінійної системи, яка дозволяє використовувати верхню межу на замість точного значення?e

Зокрема, я хочу використовувати цей специфічний декодер для кодів Рід-Соломона, а не зовсім інший алгоритм, заснований на інших методах.


У відповідь на відповідь DW, ось мій робочий приклад. Все робиться за модулем 7.

plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]

Отже помилка в третьому пункті.

Коли поліномічне рівняння, про яке йдеться, дорівнюєe=2

bi(e0+e1x+e2x2)q0q1xq2x2q3x3q4x4=0

А підключення дає системі в матричному вигляді:x=0,1,2,3,4

[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]

Останній рядок - обмеження, що . Застосовуючи гауссова елімінація, ми отримуємоe2=1

[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]

І підбираючи 1 для обох вільних змінних, ми отримуємо вектор рішення

[2, 2, 1, 4, 1, 0, 1, 1]

Що перекладається на

E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4

І поділяє . Зауважимо, що коефіцієнти якEQQ(t+6)(t3+2t2+2t+3)mod7

Для я отримую вдале рішення:e=1

system is:    
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0] 
[0, 1, 0, 0, 0, 0, 1]

reduced system is:

[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]

solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0

Зауважте, що хоча контрприклад вище генерувався кодом, який я написав з нуля (це було в основному першим, що я спробував), можна перевірити, чи рішення дійсні вручну, тому навіть якщо мій код баггі, він все-таки є дійсним контрприкладом до претензії що використання працює.e=2


@DW вектор рішення дійсний. Це насправді 1 * 2 + 1 * 1 + 4 * 1 (розмірність вектора розчину є одиничною, оскільки останній стовпчик матриці залишився поза). Мій вихід з - це друкарська помилка в написанні тут, але це правильно в моїй реалізації. Ви можете побачити його ефект, наприклад, у другому рядку системи, яка використовує крапку [1, 0], а перші три входи в цілому дорівнюють нулю, тому що вони помножені на 0. Якщо мій приклад незрозумілий, я можу розмістити повідомлення мій код на github. Я вважаю свій код чистим, але він був біднішим через його загальність. bi
JeremyKun

Відповіді:


3

Ця сама процедура фактично працює для виправлення будь-якої кількості помилок до .e

Вимога полягає в тому, що поліном помилки має бути нульовим у кожній точці де була помилка. Ніщо не говорить про те, що він повинен бути нульовим лише в цих точках; ви можете мати який дорівнює нулю і в інших точках, і це нормально, якщо його ступінь .E(x)aiE(x)e

Отже, якщо - верхня межа кількості помилок, то існує поліном з усіма бажаними властивостями (тобто має ступінь точно і дорівнює нулю в кожній точці, де є помилка). Наприклад, якщо помилок менше, ніж , то існує поліном який дорівнює нулю при кожній помилці, і zero у ще декількох точках, щоб отримати число нулів до .eE(x)eeE(x)e

Нарешті, теорема про правильність говорить про те, що якщо такий поліном існує, то алгоритм Берлекампа-Вельча зможе його знайти. Отже, навіть якщо помилок менше, ніж , процедура все одно буде правильно працювати для ідентифікації . Після того, як у вас буде , ви можете визначити позиції, які не містять помилок, а потім можете розшифрувати прямо.E(x)eE(x)E(x)ne


Щоб задокументувати результат розмови про "контрприклад" у питанні:

Це насправді не є дійсним контрприкладом. Недолік був у підрахунку того, скільки помилок слід очікувати, що Берлекамп-Велч зможе виправити. Відстань - , тому слід очікувати, що вона зможе виправити до помилок (як вказує Ран Г.). У вашому контрприкладі і , тому , тому слід очікувати, що ця процедура зможе виправити одну помилку, тобто . Отже, коли ви запустили процедуру на прикладі з , немає підстав очікувати, що процедура працюватиме правильно.nk+1(nk)/2n=5k=3(nk)/2=1e=1e=2

Отже, зразок контрприкладу насправді не є контрприкладом, і це не суперечить моїй відповіді вище.


1
@JeremyKun відстань тому код може виправити до помилок, правда? nk+1(nk)/2
Ран Г.

Хоча доказ відсутній, пояснення у цій відповіді для мене має сенс. Встановлення нулів в "вказує" алгоритму, які точки він повинен ігнорувати при інтерполяції многочлена. Тому, поки набір нулів у містить набір точки, в якій трапляються помилки, декодування має працювати. У цьому випадку повинно бути більше вільних змінних (встановити інші місця нулів довільним чином). E(x)E(x)
Ран Г.

Оооо, це проблема ... що я зіпсував межу Сінглтона? Отже, щоб перевірити, якщо я повинен був встановити , ввести єдину помилку і встановити , то слід очікувати, що все вийде. Я зараз спробую це. n=7e=2
JeremyKun

Гаразд, це працює на прикладах, які я пробую. Відмінно!
JeremyKun
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.