| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Всем спасибо, проблема решена! Надо было всего лишь изменить синдромный многочлен (вместо 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)). Может кому-то поможет |
| Автор: boostcoder 17.9.2012, 14:59 |
| в boost.sandbox лежит библиотека для операций с кодами Рида-Соломона. она даже работает. вот только название немогу вспомнить. склероз совсем замучил |