Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Алгоритм декодирования кодов Рида-Соломона


Автор: Hirurg2605 4.9.2012, 08:53
Добрый день! Я пишу декодер Кодов Рида-Соломона и из-за разногласий в разных источниках не могу закончить программу в связи со следующей проблемой.
В своей программе я кодирую сообщение стандартным кодером из библиотеки Intel Performance Primitive, а декодирую с помощью функций полиномиальной алгебры из той же библиотеки. Так вот суть проблемы:
1) если считать синдромы как значения полинома принятого кода от значения степеней примитивного элемента альфа поля Галуа (Si = r(ai), i = 0, ..., 2*t-1), то мы получаем нулевые синдромы в случае отсутствия ошибок или ненулевые синдромы с помощью которых находим адекватные позиции от 1-ой до 8-ми ошибок (включительно). Но на этапе нахождения значений ошибок получаются неверные значения;
2) если считать синдромы как значения полинома принятого кода от значения степеней примитивного элемента альфа поля Галуа (Si = r(ai), i = 1, ..., 2*t), то мы получаем ненулевой синдром S2*t в случае отсутствия ошибок, НО при этом декодер корректно находит позиции и значения от 1-ой до 7-ми ошибок (включительно). Однако, если в сообщении допущено 8 ошибок декодер не находит их позиции, так как не может найти корни многочлена локаторов ошибок, как если бы число ошибок превосходило исправляющую способность кода.
В моём алгоритме я пробовал сочетать два набора синдромов, первый - для нахождения позиций ошибок, второй - для нахождения их значений, но для случая восьми ошибок значения всё равно вычисляются неверно.
Кто-нибудь сталкивался с такой проблемой? Что можно или нужно изменить в алгоритме?

Автор: Hirurg2605 17.9.2012, 11:53
Всем спасибо, проблема решена!  smile 
Надо было всего лишь изменить синдромный многочлен (вместо s(x) = 1 + x^s1 + x^2*s2 + ... + x^(2*t)*s2*t взять s(x) = x^s1 + x^2*s2 + ... + x^(2*t)*s2*t) и локатор полиномов считать как НОД(s(x),x^(2*t)), а не НОД(s(x),x^(2*t+1)).
Может кому-то поможет  smile 

Автор: boostcoder 17.9.2012, 14:59
в boost.sandbox лежит библиотека для операций с кодами Рида-Соломона. она даже работает.
вот только название немогу вспомнить. склероз совсем замучил  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)