Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
При возникновении трудностей в анализе этого листинга обращайтесь к блок-схемам, приведенным на рис. 3, 4 и 5 – они помогут.
Листинг 2. Исходный текст простейшего декодера Рида-Соломона
/*-----------------------------------------------------------------------------------------------------
*
* декодер Рида-Соломона
* =====================
*
* Процедура декодирования кодов Рида-Соломона состоит из нескольких шагов: сначала мы вычисляем
* 2t-символьный синдром путем постановки alpha**i в recd(x), где recd – полученное кодовое слово,
* предварительно переведенное в индексную форму. По факту вычисления recd(x) мы записываем
* очередной символ синдрома в s[i], где i принимает значение от 1 до 2t, оставляя s[0] равным нулю.
* Затем, используя итеративный алгоритм Берлекэмпа, мы находим полином локатора ошибки – elp[i].
* Если степень elp превышает собой величину t, мы бессильны скорректировать все ошибки и ограничиваемся
* выводом сообщения о неустранимой ошибке, после чего совершаем аварийный выход из декодера.
* Если же степень elp не превышает t, мы подставляем alpha**i, где i = 1..n в elp для вычисления
* корней полинома. Обращение найденных корней дает нам позиции искаженных символов. Если количество
* определенных позиций искаженных символов меньше степени elp, искажению подверглось более чем t
* символов и мы не можем восстановить их. Во всех остальных случаях восстановление оригинального
* содержимого искаженных символов вполне возможно. В случае, когда количество ошибок заведомо велико,
* для их исправления декодируемые символы проходят сквозь декодер без каких-либо изменений.
*
* на основе исходных текстов Simon Rockliff, от 26.06.1991, распространяемых по лицензии GNU
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––--------------------------------------------*/
decode_rs()
{
int i, j, u, q;
int s[n-k+1]; // полином синдрома ошибки
int elp[n – k + 2][n - k]; // полином локатора ошибки лямбда