Помощь в написании студенческих работ
Антистрессовый сервис

Разработка программной модели кодерадекадера кода БЧХ. И постановка лаб. 
работы

Дипломная Купить готовую Узнать стоимостьмоей работы

Коды с обнаружением ошибок. Коды с обнаружением и исправлением, ошибок (корректирующие).Основным признаком существования ошибок является увеличение кодового расстояния между кодовыми комбинациями. Это говорит о отличии комбинаций в двух и более разрядах. По этой информации можно принимать решения для обнаружения и исправления ошибок. Кодовое расстояние (Хемминга) — это минимальное число… Читать ещё >

Разработка программной модели кодерадекадера кода БЧХ. И постановка лаб. работы (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • 1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
    • 1. 1. Понятие информации и ее основные свойства
    • 1. 2. Принципы количественной оценки информации
    • 1. 3. Помехоустойчивое кодирование и его особенности
  • 2. ОБЩИЕ ПРИНЦИПЫ ОРГАНИЗАЦИИ БЛОЧНЫХ КОДОВ
    • 2. 1. Линейные коды и их структура
    • 2. 2. Описание БЧХ-кодов и их особенности
    • 2. 3. Алгоритмы кодирования и декодирования на основе БЧХ-кодов
  • 3. РАЗРАБОТКА ПРОГРАММЫ РАБОТЫ С БЧХ-КОДАМИ
    • 3. 1. Выбор инструментов и технологий разработки программы
    • 3. 2. Состав модулей программы
    • 3. 3. Инструкция пользователя по работе с программой
  • 4. РАЗРАБОТКА ЛАБОРАТОРНОЙ РАБОТЕ ПО РАБОТЕ С БЧХ-КОДАМИ
    • 4. 1. Постановка цели и задач лабораторной работе
    • 4. 2. Порядок выполнения лабораторной работы
    • 4. 3. Разработка вариантов выполнения лабораторной работы
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  • ПРИЛОЖЕНИЕ 4

Вид программы в момент запуска приведен на рисунке 8. Рисунок 8. Вид программы в момент запуска.

После ввода порядка примитивного полинома, описывающего поле, появляются приглашения на ввод дополнительной информации. После ее ввода появятся данные о примитивном и порождающем полиномах для поля заданного порядка (см. рисунок 9). Рисунок 9. Вид программы после задания параметров кодирования.

После ввода параметров кодирования появляется запрос на ввод кодовой комбинации. Длина кодовой комбинации не должна быть меньше числа информационных бит, в противном случае будет выдаваться сообщение о ошибке выхода массива данных за границы определения. В случае корректного ввода данных будет выполнено их кодирование с выводом закодированной комбинации. На рисунке 10 приведен пример ввода данных и их кодирования.

Рисунок 10. Вид результатов ввода и прямого кодирования.

После ввода данных и их кодирования осуществляется запрос на ввод измененной комбинации. В случае утвердительного ответа (ввод строки «Y») появляется возможность ввода закодированной комбинации, искаженной ошибками в виде инвертированных бит на определяемых пользователем позициях. Если же выбран отрицательный ответ, то выдается сообщениео том, что изменения не потребовались. Далее выполняется декодирование сообщения и выдача промежуточных результатов. Примеры результатов с искажением комбинации и без нее приведены на рисунках 11, 12. Рисунок 11. Пример работы программы с искаженными данными после кодирования.

Рисунок 12. Пример работы программы с неискаженными данными после кодирования.

Как видно из результатов, если длина сообщения превосходит число информационных бит, то происходит усечение сообщения. В диагностических сообщениях в программе в строке «S (x)=» выдаются синдромные коэффициенты, а в строке «sigma (x)=» выдается информация о коэффициентах многочлена-локатора и числе его корней Roots. Из приведенных примеров видно, что реализованная программа работает верно.

4.РАЗРАБОТКА ЛАБОРАТОРНОЙ РАБОТЕ ПО РАБОТЕ С БЧХ-КОДАМИ4.1Постановка цели и задач лабораторной работе.

Целью лабораторной работы является развитие и углубление знаний о помехозащищенном кодировании, получение представления о его математическом аппарате и построении кодов БЧХ. Можно сформулировать следующие задачи, которые должны быть решены в рамках лабораторной работы: Изучение принципов измерения информации, помехозащищенного кодирования, моделей его представления;

Изучение принципов организации блоковых кодов и их строения;

Изучение принципов организации циклических кодов и их строения;

Изучение принципов построения кодов БЧХ, использования их для кодирования и декодирования информации. Изучение и выполнение программной реализации базовых алгоритмов БЧХ-кодирования.При выполнении лабораторной работы студенты должны показать следующие знания и умения:

Знание основных принципов представления и кодирования информации;

Знание принципов построения конечных полей и полей Галуа;

Знание устройства и взаимодействия частей представленного и/или своего кода программы. Умение компиляции, сборки программного кода.

Умение запуска программы и работы в диалоговом режиме. Умение модификации программного кода и понимания его работы. Умение интерпретировать результаты сравнения работы своего и предоставленного вам готового кода. Сформулируем необходимый теоретический минимум, необходимый для выполнения лабораторной работы. При телеуправлении, телеизмерении и телесигнализации в информационно-измерительных и информационно-управляющих системах (ИИС и ИУС) вся необходимая информация передается по каналам связи. При этом передача должна осуществляться без искажений или с минимальными искажениями. Для минимизации искажений информации в системах передачи данных (СПД) используется ее кодирование. Кодирование — это осуществляемый по определенной системе правил перевод дискретного сообщения в дискретный сигнал. Декодирование — это восстановление дискретного сообщения по сигналу на выходе дискретного канала, осуществляемое с учетом правила кодирования. Код есть сигнально-символическое множестводискретной природы. Сигналы или символы, входящие в него, обозначают дискретные сообщения.

Последовательность кодовых символов, поставленных в соответствие одному элементу (символу) дискретного сообщения, называется кодовой комбинацией. Другими словами, кодовая кобинация — т. е. число, записанное в выбранной системе счисления. Оно отвечает записи дискретного сигнала в выбранном (например, двоичном) коде. Коды делятся на помехозащищенные и не защищенные от действия помех. Типичным примеромкодов такого типа является двоичный код на все сочетания. Существует и другие виды кодов.

Это может быть, например, единично-десятичный код, двоично-десятичный код, код Грея и др. [ 6,7]. Особенностью кодов, не обладающих свойством помехозащищенности является наличие их в составе кодовых комбинаций, оличающихся друг от друга лишь в одном разряде. Помехозащищенными называют коды, позволяющие обнаружить или обнаружить и исправить ошибки в кодовых комбинациях. Отсюда деление этих кодов на две большие группы:

Коды с обнаружением ошибок. Коды с обнаружением и исправлением, ошибок (корректирующие).Основным признаком существования ошибок является увеличение кодового расстояния между кодовыми комбинациями. Это говорит о отличии комбинаций в двух и более разрядах. По этой информации можно принимать решения для обнаружения и исправления ошибок. Кодовое расстояние (Хемминга) — это минимальное число элементов, в которых одна кодовая комбинация отличается от другой (по всем парам кодовых слов). Понятие избыточности означает, что из исходных символов можно построить больше комбинаций, чем предусмотрено при их приеме. Таким образом, уменьшение числа используемых комбинаций приводит к повышению помехоустойчивости кода, которая связана с увеличением кодового расстояния.

4.2Порядок выполнения лабораторной работы.

Для выполнения лабораторной работы необходимо:

Получить свой вариант задания;

Выбрать вариант примитивного полинома или построить его путем полного перебора над заданным полем;

На базе примитивного полинома выполнить построение порождающего полинома;

Задать кодовую комбинацию в двоичной форме;

Выполнить кодирование комбинации с учетом параметров БЧХ-кода и порождающего полинома;

Рассмотреть и выполнить процесс декодирования программного кода с помощью различных алгоритмов;

Рассмотреть представленный ниже программный код декодирования посредством алгоритма Берлекемпа-Месси и описать его работу.

Самостоятельно реализовать алгоритмы Евклида и PGZ-декодирования;

Оценить качество кодирования и декодирования на различных исходных данных. Лабораторная работа сводится в отчет и сдается в установленном виде. Код программы приведен в приложении4.

3Разработка вариантов выполнения лабораторной работы.

Варианты лабораторной работы сведены в таблицу, представленную ниже.

Таблица 5. Варианты исполнения лабораторной работы№ п/пЗначение порядка mЗначение длины кода.

Число ошибок s1516125172351814519255251663227633386341964021076431177011277621378231471262159257116926621792751189284219929312093023211051212210522223105323241054212510552226105623271110241281110352291110463301110571.

Представленная таблица охватывает большое число вариантов применения БЧХ-кодов и может быть использована как опорный сборник вариантов лабораторных работ.

ЗАКЛЮЧЕНИЕ

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

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

Это дает серьезные преимущества при их программной и аппаратной реализации. Важный класс циклических кодов образуют коды БЧХ. Показано, что они имеют достаточно широкие возможности для кодирования информации с возможностью обнаружения и исправления ошибок. Проведен анализ принципов построения кодов БЧХ. Одними из базовых является принципыпостроенияпримитивного и порождающего многочленов.

В целом, не существует единого взгляда на их синтез, что учитывалось при разработке программы и является одним из специфических ограничений методов на базе БЧХ-кодирования. Изучены основные алгоритмы декодирования БЧХ-кодов.На базе языка C# и в среде XamarineStudioсоздана демонстрационная программа для практического создания кодов БЧХ в широком диапазоне параметров, задаваемых пользователем в процессе работы с программой. С учетом описанного материала и разработанной программы разработан банк вариантов для лабораторных работ по тематике БЧХ-кодирования.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Лавровская О. Б. Технические средства информатизации. Практикум. — М.: Академия, 2012. — 208 с.Гребенюк.

Е.И., Гребенюк.

Н.А. Технические средства информатизации. — М.: Академия, 2012. — 352 с.Шишов.О. В. Современные технологии и технические средства информатизации. — М.: Инфра-М, 2012. — 464 с.Келим.

Ю.М. Вычислительная техника. — М.: Академия, 2012. — 368 с. Королев А. И. Коды и устройства помехоустойчивого кодирования информации. — Мн.: Бестпринт, 2002.

— 286 c. Соловьева Ф. И.

Введение

в теорию кодирования: Учебное пособие / Новосиб. гос. ун-т. Новосибирск, 2006.

— 127 с. Блейхут Р. Теория и практика кодов, контролирующих ошибки. М.: Мир, 1986.

Лидл Р., Нидеррайтер Г. Конечные поля, т.

1. М.: Мир, 1988.

Березкин Е. Ф. Основы теории информации и кодирования: Учебное пособие. — М.: НИЯУ МИФИ, 2010. — 312 сР. Морелос-Сарагоса Искусство помехоустойчивого кодирования. Методы, алгоритмы, применение. Москва: Техносфера, 2005. — 320с. Васильев К. К., Глушков В. А., Дормидонтов.

А.В., Нестеренко А. Г. Теория электрической связи: учебное пособие / под общ. ред. К. К. Васильева. — Ульяновск: УлГТУ, 2008. ;

452 с. Березкин Е. Ф. Основы теории информации и кодирования. Лабораторный практикум: Учебно-методическое пособие. — 2-е изд., перераб. и доп. — М.: МИФИ, 2009.

— 84 с. О. Е. Александров. Помехозащищенное кодирование.

Декодирование Боуза-Чоудхури-Хоккенгема. Универсальное табличное декодирование и алгоритм Питерсона-Горенстейна-Цирлера: методические указания к лабора-торной работе Екатеринбург: УрФУ, 2011. 33 с.ПРИЛОЖЕНИЕProgram.csusing System;namespace BCH_DriverProject{classMainClass{//Преобразование массива в строкуprivatestaticstring ToString (int[] arr) {string str=null;for (int i = 0; i < arr. Length; i++) str += arr[i]. T oString ();return str; }//Преобразованиестрокивмассивprivatestaticint[] ToArr (string str) {int[] arr = newint[str.Length]; for (int i = 0; i < str. Length; i++) arr[i] = Convert. ToInt32(str[i].

ToString ());return arr; }publicstaticvoid Main (string[] args){try{int m;int len;int t;int[] input;Console.WriteLine («Задайтепорядокполиномаот {0} до {1}», 1, 12);m = Convert. ToInt32(Console.ReadLine ());Console.WriteLine («Задайтедлинукода.

БЧХ");len = Convert. ToInt32(Console.ReadLine ());Console.WriteLine («Задайте число ошибок»);t = Convert. ToInt32(Console.ReadLine ());//Режим вывода промежуточных сообщенийBCHCoder. debug = true;BCHCoder bch = newBCHCoder (m, len, t);Console.WriteLine («Введите исходное сообщение в виде двоичного кода»);string str = Console. ReadLine ();input = newint[str.Length]; for (int i = 0; i < str. Length; i++)input[i] = Convert. ToInt32(str[i]. T oString ());Console.WriteLine («Кодированиеданных»);int[] EncodeData = bch. encode_bch (input);Console.WriteLine («Закодированнаякомбинация»);Console.WriteLine (ToString (EncodeData));Console.WriteLine («Необходимо ли изменение комбинации? (Y/N)& quot;);string str_ = Console. ReadLine ();if (str_=="Y») {Console.WriteLine («Введите модифицированную комбинацию»);str = Console. ReadLine (); EncodeData = ToArr (str);}elseif (str_ == «N»)Console.WriteLine («Модификация не потребовалась»);Console.WriteLine («Выполнение декодирования»);int[] output = bch. DecodeBCH_BMA (EncodeData);if (output≠null) {Console.WriteLine («Декодированнаякомбинация»);Console.WriteLine (ToString (output)); }Console.WriteLine ();Console.ReadKey ();}catch (Exception ex){Console.WriteLine (ex.Message);Console.ReadKey ();}}}}BCHCoder.csusing System;using System. Collections;using System. IO;namespace BCH_DriverProject{///<summary>///m = порядок поля Галуа GF (2^m)///n = 2^m — 1 = размер мультипликативной группы GF (2^m)///length = длина кода БЧХ///t = максимальное число исправленных ошибок///d = 2*t + 1 = минимальное Хеммингово расстояние. Она есть число последовательных корней g (x) + 1///k = n — deg (g (x)) = размерность (число информационных битов/ на ключевое слово) кода///p [] = коэффициенты примитивного полинома, образующего GF (2^m)///g [] = коэффициенты порождающего полинома g (x)///Alpha_To [] = таблица степеней GF (2 ** m)///index_of [] = таблица антилогарифмов GF (2 ** m)///data[] = информационные биты = коэффициенты полинома данных, i (x)///bb [] = коэффициенты полинома x^(length-k) i (x) modulo g (x)///numerr = число ошибок///errpos [] = позиции ошибок///recd [] = коэффициенты полученного полинома///decerror = число ошибок расшифровки///</summary>publicclassBCHCoder {privateint m, n, length, k, t, d;publicint N {get{ return n; }set{ n = value; } }privateint ninf;publicint Ninf {get{ return ninf; }set{ ninf = value; } }privateint[] p;privateint[] Alpha_To, Index_Of, g;publicstaticbool debug = false;privateconstint MAX_M = 12;publicBCHCoder (int m, int len, int t) {this.m = m;this.length = len;this.t = t; generate_polynominal (); //Чтение mgenerate_gf (); //Созданиеполя GF (2^m)gen_poly (); //Вычисление порождающего полинома БЧХ кода }//Генерация примитивного полинома по величине порядка mprivatevoid generate_polynominal () {//Если порядок поля задан неверноif ((m <= 1) — (m > MAX_M)) {//Создается исключениеthrownewArgumentException (String.Format («Порядок m должен быть в диапазоне (1, {0:D}», MAX_M)); }//Массив коэффициентов примитивного полинома p = newint[m + 1]; for (inti = 1; i < m; i++){ p[i] = 0; }//Просмотр вариантов задания коэффициентов в зависимости от порядкаp[0] = p[m] = 1;if (m == 2) p[1] = 1;elseif (m == 3) p[1] = 1;elseif (m == 4) p[1] = 1;elseif (m == 5) p[2] = 1;elseif (m == 6) p[1] = 1;elseif (m == 7) p[1] = 1;elseif (m == 8) p[4] = p[5] = p[6] = 1;elseif (m == 9) p[4] = 1;elseif (m == 10) p[3] = 1;elseif (m == 11) p[2] = 1;elseif (m == 12) p[3] = p[4] = p[7] = 1; //Если отладочный режим включенif (debug){Console.Write («p (x) = «);for (int i = 0; i <= m; i++) {Console.Write («{0:D}», p[i]); }Console.WriteLine (); } n = (int) Math. Pow (2, m) — 1; ninf = (n + 1)/2 — 1;if ((length > n) — (length < ninf)) {thrownewArgumentException (String.Format («Длинакодадолжнабытьвдиапазоне [{0:D}, {1:D}]», ninf, n));} }///<summary>/// Создание пол GF (2^m) по неприводимому полиному p (X) с коэффициентами p[0].

. p[m].////// Формы представления:/// Индекс-полиномиальная форма: Alpha_To[] содержит j=alpha^i;/// полиномиально-Индексная форма index_of[j=alpha^i] = i/// alpha=2 — примитивный элемент поля GF (2^m)///</summary>privatevoid generate_gf (){int mask;//Задаем массивы длины n+1Alpha_To = newint[n + 1]; Index_Of = newint[n + 1]; g = newint[n + 1]; //Маска mask = 1;Alpha_To[m] = 0;//Генерация элементов поля с учетом примитивного полиномаfor (int i = 0; i < m; i++) { Alpha_To[i] = mask; Index_Of[Alpha_To[i]] = i;//Если коэффициент ненулевойif (p[i] ≠ 0) {//Побитовое исключающее или с маской Alpha_To[m] ^= mask; } mask <<= 1; //Умножение на 2 побитовым сдвигом }Index_Of[Alpha_To[m]] = m; mask >>= 1; //Делениена 2 побитовымсдвигомfor (int i = m + 1; i < n; i++) {if (Alpha_To[i — 1] >= mask) { Alpha_To[i] = Alpha_To[m] ^ ((Alpha_To[i — 1] ^ mask) << 1); }else { Alpha_To[i] = Alpha_To[i — 1] << 1; } Index_Of[Alpha_To[i]] = i;} Index_Of[0] = -1; }///<summary>///Вычисляется порождающий полином двоичного БЧХ-кода. /// Генерируется циклическое множество по модулю 2^m — 1 вида cycle[][] = (i, 2*i, 4*i, …, 2^l*i). Тогда///определяются те наборы цикла, которые содержат целые числа в наборе (d-1)///последовательные целые числа {1. (d-1)}. Порождающий полином считается как произведение сомножителей вида (x+alpha^i), ///для каждого упомянутого ранее множества .///</summary>void gen_poly () {int ii, jj, ll, kaux;int test, aux, nocycles, root, noterms, rdncy;int[,] cycle;int[] size, min, zeros; cycle = newint[10 250, 21]; size = newint[10 250]; min = newint[10 250]; zeros = newint[10 250]; // Генерацияциклическогомножестваcycle[0, 0] = 0;size[0] = 1;cycle[1, 0] = 1;size[1] = 1; jj = 1; // cycle set indexif (debug && (m > 9)) {Console.WriteLine («Вычисление циклического множества по модулю {0:D}», n);Console.WriteLine («(Это может занять некоторое время)…»); }do {// Задание jj-го множества ii = 0;do { ii++;cycle[jj, ii] = (cycle[jj, ii — 1]*2)%n;size[jj]++;//Остаток от деления по модулюaux = (cycle[jj, ii]*2)%n;} while (aux ≠ cycle[jj, 0]);// Переход к следующему циклуll = 0;do { ll++; test = 0;for (ii = 1; ((ii <= jj) && (0 == test)); ii++) {// Проверкапредыдущихмножествfor (kaux = 0; ((kaux < size[ii]) && (0 == test)); kaux++){//Если есть совпадениеif (ll == cycle[ii, kaux]){ test = 1; } } } } while ((0 ≠ test) && (ll < (n — 1)));if ((0 == test)){ jj++; // Меняем индекс множества на следующийcycle[jj, 0] = ll; size[jj] = 1;} } while (ll < (n — 1)); nocycles = jj; // Число множеств по модулю n d = 2*t + 1;// Поиск корней 1, 2, …, d-1 на циклическом множестве kaux = 0; rdncy = 0;//Цикл по числу множествfor (ii = 1; ii <= nocycles; ii++){ min[kaux] = 0; test = 0;//Цикл по элементам ii-го множестваfor (jj = 0; ((jj < size[ii]) && (0 == test)); jj++)//Просматриваем элементы root от 1 до d-1for (root = 1; ((root < d) && (0 == test)); root++)//Если root совпадает с элементом множестваif (root == cycle[ii, jj]){//Запоминаем переменную test = 1; min[kaux] = ii;}if (0 ≠ min[kaux]) { rdncy += size[min[kaux]]; kaux++; } } noterms = kaux; kaux = 1;//Вычисление позиций корней порождающего полиномаfor (ii = 0; ii < noterms; ii++)for (jj = 0; jj < size[min[ii]]; jj++) { zeros[kaux] = cycle[min[ii], jj]; kaux++; } k = length — rdncy;if (k < 0) {thrownewArgumentException («Неверныйпараметр!»); }if (debug) {Console.WriteLine («Создан ({0:D}, {1:D}, {2:D}) код.

БЧХ", length, k, d);}// Вычисление коэффициентов порождающего полиномаg[0] = Alpha_To[zeros[1]]; g[1] = 1; // g (x) = (X + zeros[1]) как начальное значениеfor (ii = 2; ii <= rdncy; ii++) { g[ii] = 1;for (jj = ii — 1; jj > 0; jj—){//Побитовое вычисление с учетом предыдущих коэффициентовif (g[jj] ≠ 0) { g[jj] = g[jj — 1] ^ Alpha_To[(Index_Of[g[jj]] + zeros[ii])%n]; }else { g[jj] = g[jj — 1]; } }g[0] = Alpha_To[(Index_Of[g[0]] + zeros[ii])%n]; }if (debug) {Console.WriteLine («Порождающийполином:»);Console.Write («g (x) = «);for (ii = 0; ii <= rdncy; ii++) {Console.Write («{0:D}», g[ii]);if ((ii > 0) && ((ii%50) == 0)) {Console.WriteLine (); } }Console.WriteLine (); } }///<summary>///Кодированиеисходныхданных// Вычисление избыточного массива, коэффициенты B (х). Избыточность/// полинома B (x) является остатком от деления x^(length-k)*data (x) на порождающий полином g (х)./// </summary>/// <param name="data» >Кодируются как данные для кодирования первые k чисел </param>/////publicint[] encode_bch (int[] data) {int i, j;int feedback;int[] bb = newint[length + 1]; //Инициализациямассиваfor (i = 0; i < length — k; i++){ bb[i] = 0; }//Выполнение арифметических действийfor (i = k — 1; i >= 0; i—){feedback = data[i] ^ bb[length — k — 1]; if (feedback ≠ 0) {for (j = length — k — 1; j > 0; j—) {if (g[j] ≠ 0) { bb[j] = bb[j — 1] ^ feedback; }else { bb[j] = bb[j — 1]; } }bb[0] = (0 ≠ g[0]) && (0 ≠ feedback)? 1: 0; }else {for (j = length — k — 1; j > 0; j—) { bb[j] = bb[j — 1]; }bb[0] = 0; } }for (i = 0; i < k; i++) {bb[i + length — k] = data[i]; }return bb; }//Алгоритм декодирования Берлекемпа-Мессиpublicint[] DecodeBCH_BMA (int[] recd) {int i, j, u, q, t2, count = 0, syn_error = 0;int[,] elp;int[] d, l, u_lu, s;int[] root, loc, reg; elp = newint[10 260, 1024]; d = newint[10 260]; l = newint[10 260]; u_lu = newint[10 260]; s = newint[10 250]; root = newint[200]; loc = newint[200]; reg = newint[201]; t2 = 2*t;if (debug) {Console.Write («S (x) = «); }//Вычислениесиндромовfor (i = 1; i <= t2; i++) { s[i] = 0;for (j = 0; j < length; j++) {if (recd[j] ≠ 0) { s[i] ^= Alpha_To[(i*j)%n]; } }if (s[i] ≠ 0) { syn_error = 1; // Сигналоненулевомсиндромномэлементе } s[i] = Index_Of[s[i]]; if (debug) {Console.Write («{0:D} «, s[i]); } }if (debug) {Console.WriteLine (); }if (0 ≠ syn_error) {d[0] = 0; d[1] = s[1]; elp[0, 0] = 0;elp[1, 0] = 1;for (i = 1; i < t2; i++) {elp[0, i] = -1;elp[1, i] = 0; }l[0] = 0;l[1] = 0; u_lu[0] = -1; u_lu[1] = 0; u = 0;do { u++;if (d[u] == -1) {l[u + 1] = l[u]; for (i = 0; i <= l[u]; i++) {elp[u + 1, i] = elp[u, i]; elp[u, i] = Index_Of[elp[u, i]]; } }else { q = u — 1;while ((d[q] == -1) && (q > 0)) { q—; }if (q > 0) { j = q;do { j—;if ((d[j] ≠ -1) && (u_lu[q] < u_lu[j])) { q = j; } } while (j > 0); }if (l[u] > l[q] + u — q) {l[u + 1] = l[u]; }else {l[u + 1] = l[q] + u — q; }for (i = 0; i < t2; i++) {elp[u + 1, i] = 0; }for (i = 0; i <= l[q]; i++) {if (elp[q, i] ≠ -1) {elp[u + 1, i + u — q] = Alpha_To[(d[u] + n — d[q] + elp[q, i])%n]; } }for (i = 0; i <= l[u]; i++) {elp[u + 1, i] ^= elp[u, i]; elp[u, i] = Index_Of[elp[u, i]]; } } u_lu[u + 1] = u — l[u + 1]; if (u < t2) {if (s[u + 1] ≠ -1) {d[u + 1] = Alpha_To[s[u + 1]]; }else {d[u + 1] = 0; }for (i = 1; i <= l[u + 1]; i++) {if ((s[u + 1 — i] ≠ -1) && (elp[u + 1, i] ≠ 0)) {d[u + 1] ^= Alpha_To[(s[u + 1 — i] + Index_Of[elp[u + 1, i]])%n]; } }d[u + 1] = Index_Of[d[u + 1]]; } } while ((u < t2) && (l[u + 1] <= t)); u++;if (l[u] <= t) {for (i = 0; i <= l[u]; i++) {elp[u, i] = Index_Of[elp[u, i]]; }if (debug) {Console.Write («sigma (x) = «);for (i = 0; i <= l[u]; i++) {Console.Write («{0:D} «, elp[u, i]); }Console.WriteLine (); }if (debug) {Console.Write («Roots: «); }//Поисккорнейпо.

Ченюfor (i = 1; i <= l[u]; i++) { reg[i] = elp[u, i]; } count = 0;for (i = 1; i <= n; i++) { q = 1;for (j = 1; j <= l[u]; j++)if (reg[j] ≠ -1) { reg[j] = (reg[j] + j)%n; q ^= Alpha_To[reg[j]]; }if (0 == q) {// Запоминаем корни и позиции, им отвечающиеroot[count] = i; loc[count] = n — i; count++;if (debug) {Console.Write («{0:D} «, n — i); } } }if (debug) {Console.WriteLine (); }if (count == l[u]) {//Есличислокорней <= t for (i = 0; i < l[u]; i++){ recd[loc[i]] ^= 1; } }else {//Если число корней > t решение не может быть полученоif (debug) {Console.WriteLine («Кодирование неполное: Обнаруженные ошибки не могут быть исправлены»); }returnnull; //Обнаруженные ошибки не могут быть исправлены} } }int[] result = newint[k]; for (i = 0; i < k; ++i) { result[i] = recd[i + length — k]; }return result; } }}.

Показать весь текст

Список литературы

  1. О.Б. Технические средства информатизации. Практикум. — М.: Академия, 2012. — 208 с.
  2. Е.И., Гребенюк Н. А. Технические средства информатизации. — М.: Академия, 2012. — 352 с.
  3. . О.В. Современные технологии и технические средства информатизации. — М.: Инфра-М, 2012. — 464 с.
  4. Ю.М. Вычислительная техника. — М.: Академия, 2012. — 368 с.
  5. А.И. Коды и устройства помехоустойчивого кодирования информации. — Мн.: Бестпринт, 2002. — 286 c.
  6. Ф. И. Введение в теорию кодирования: Учебное пособие / Новосиб. гос. ун-т. Новосибирск, 2006. — 127 с.
  7. Р. Теория и практика кодов, контролирующих ошибки. М.: Мир, 1986.
  8. Р., Нидеррайтер Г. Конечные поля, т.1. М.: Мир, 1988.
  9. Е.Ф. Основы теории информации и кодирования: Учебное пособие. — М.: НИЯУ МИФИ, 2010. — 312 с
  10. Р. Морелос-Сарагоса Искусство помехоустойчивого кодирования. Методы, алгоритмы, применение. Москва: Техносфера, 2005. — 320 с.
  11. К.К., Глушков В. А., Дормидонтов А. В., Нестеренко А. Г. Теория электрической связи: учебное пособие / под общ. ред. К. К. Васильева. — Ульяновск: УлГТУ, 2008. — 452 с.
  12. Е.Ф. Основы теории информации и кодирования. Лабораторный практикум: Учебно-методическое пособие. — 2-е изд., перераб. и доп. — М.: МИФИ, 2009. — 84 с.
  13. О. Е. Александров. Помехозащищенное кодирование. Декодирование Боуза-Чоудхури-Хоккенгема. Универсальное табличное декодирование и алгоритм Питерсона-Горенстейна-Цирлера: методические указания к лабора-торной работе Екатеринбург: УрФУ, 2011. 33 с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ