В алгоритме Уэлча-Берлекампа для декодирования кодов Рида-Соломона каждому дается список точек представляющих сообщение с ошибками на в неизвестных местах (и задается алгоритму). Выходными данными является полином, проходящий через все заданные точки, кроме тех, в которых произошли ошибки.
Метод предполагает решение системы линейных уравнений вида
для всех где имеет степень а имеет степень не более . Переменные коэффициенты и .
Чтобы гарантировать, что имеет степень обычно добавляют ограничение, что коэффициент равен 1, к линейной системе выше. Однако на практике не обязательно знать . Один из неэффективных (но все еще полиномиальных) способов решения этой проблемы состоит в том, чтобы попробовать для всех значений, начиная с падая до тех пор, пока не будет найдено решение.
Мой вопрос: есть ли более эффективный способ определить ? В качестве альтернативы, есть ли модификация линейной системы, которая позволяет использовать верхнюю границу для вместо точного значения?
В частности, я хочу использовать этот конкретный декодер для кодов Рида-Соломона, а не совсем другой алгоритм, основанный на других методах.
В ответ на ответ 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]]
Так что ошибка в третьем пункте.
Когда рассматриваемое полиномиальное уравнение
А включение дает систему в матричной форме:
[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]
Последняя строка - это ограничение, что . Применяя гауссовское исключение, получаем
[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
И не делит . Обратите внимание, что равнаQ Q
Для я получаю хорошее решение:
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
Обратите внимание, что хотя приведенный выше контрпример был сгенерирован с помощью кода, который я написал с нуля (это было в основном первое, что я попробовал), можно проверить правильность решений вручную, поэтому даже если мой код содержит ошибки, он все еще является действительным контрпримером к заявке. что использование работает.