@Firth

Код Рида-Соломона, почему matlab не хочет вывести правильный порождающий полином?

Здравствуйте, пытаюсь реализовать передачу сообщения как в реальных радионавигационных системах. Есть замечательная книга "Авиационная электросвязь", где перечислены все стандарты и форматы сообщений. Из нее получил сведения о том как дополнять сообщение кодом, который впоследствии можно было бы использовать для восстановления у траченых данных, собственно кодом Рида-Соломона.

Вот тут то у меня и начинаются сложности, реализовать пытаюсь с помощью Matlab.

Вот выдержка из книжки:

3.6.3.3.5 FEC приложения. FEC приложения вычисляется с использованием данных приложения с помощью
систематического (255, 249) кода Рида-Соломона (R-S) фиксированной длины.
3.6.3.3.5.1 Определяющий поле примитивный полином R-S кода, р(х), имеет следующий вид:

0999455e39db2141999a297bfc501f2f82.png

3.6.3.3.5.2 Образующий полином R-S кода, g(x), описывается выражением:

41be2964d9fa4e5129b0da45eb09d06282.png

где c745b9b57c145ec5577b82542b2df54682.png представляет собой квадратный корень из p(x), используемый для построения поля Галуа размером 28,
GF(256), а 9e76ec72569f367278b2bbc8e37d72fb82.png – это i-й примитивный элемент в GF(256).


Вот тут у меня сразу возникает несколько вопросов:
1) Почему i=120? Есть ли этому причина?
2) Как это раскрыть так скобки можно? Не совсем понимаю. Я понял только про свободный член - там получается и все отлично, но как считать промежуточные степени? Там отрицательные $\alpha$ получаются и я не очень знаком с арифметикой в полях Галуа, чтобы что-нибудь с этим поделать.

Более того в книге допущена грубая ошибка перевода:
где c745b9b57c145ec5577b82542b2df54682.png представляет собой квадратный корень из p(x)


Но суть не в этом, в Mathlab существует очень полезная штука - Communications Toolbox для автоматизации процесса генерации кода Рида-Соломона. И простого получения степеней примитивного элемента позволяет нам добиться функция
Код:
rsgenpoly

, куда в качестве фактических параметров подается длинна всего сообщения, длинна полезного сообщения(т.е. за вычетом кода Р-С), десятичная запись примитивного полинома(В нашем случае eee17de5a19c7961aa634e9bab7f551782.png) p(x), и то самое i=120 происхождение которого и вызвало у меня вопрос.
Иными словами, я хочу написать:
Код:
rsgenpoly(255,249,391,120)


И получить ответ
Код:
ans = GF(2^8) array. Primitive polynomial = D^8+D^7+D^2+D+1 (391 decimal)

Array elements = 

           1         176          186         244          176         156          225


Но получаю совершенно другое:

Код:
ans = GF(2^8) array. Primitive polynomial = D^8+D^7+D^2+D+1 (391 decimal)

Array elements = 

           1         217          99          62         217         130          23


с этим разобрался c745b9b57c145ec5577b82542b2df54682.png -это примитивный элемент, матлаб выдает коэффициенты полинома, а я хочу получить эти коэффициенты, но выраженные через степени примитивного элемента.

Для того, чтобы удостовериться в правильности работы функции rsgenpoly я решил покатать по примерам, взял книжку: "Упрощение кодера Рида – Соломона при использовании альтернативных простых полиномов, образующих расширения полей Галуа Д. В. Клейко, Н. В. Лямин". И прогнал некоторые примеры, которые там предлагаются. И примеры из книжки работают просто идеально.

теперь остается открытым вопрос о выборе i=120. В остальном все уже понятно.
  • Вопрос задан
  • 1546 просмотров
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
Попробуйте матчасть почитать, а не гадать на кофейной гуще особенно понравилось что такое и и почему оно 120.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы