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

Заказать уникальную дипломную работу
Тип работы: Дипломная работа
Предмет: Программирование
  • 7575 страниц
  • 13 + 13 источников
  • Добавлена 06.08.2016
3 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
ВВЕДЕНИЕ 2
1 ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ 3
1.1 Понятие информации и ее основные свойства 3
1.2 Принципы количественной оценки информации 7
1.3 Помехоустойчивое кодирование и его особенности 11
2 ОБЩИЕ ПРИНЦИПЫ ОРГАНИЗАЦИИ БЛОЧНЫХ КОДОВ 18
2.1 Линейные коды и их структура 18
2.2 Описание БЧХ-кодов и их особенности 26
2.3 Алгоритмы кодирования и декодирования на основе БЧХ-кодов 27
3. РАЗРАБОТКА ПРОГРАММЫ РАБОТЫ С БЧХ-КОДАМИ 34
3.1 Выбор инструментов и технологий разработки программы 34
3.2 Состав модулей программы 35
3.3 Инструкция пользователя по работе с программой 36
4. РАЗРАБОТКА ЛАБОРАТОРНОЙ РАБОТЕ ПО РАБОТЕ С БЧХ-КОДАМИ 40
4.1 Постановка цели и задач лабораторной работе 40
4.2 Порядок выполнения лабораторной работы 41
4.3 Разработка вариантов выполнения лабораторной работы 41
ЗАКЛЮЧЕНИЕ 43
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 45
ПРИЛОЖЕНИЕ 46


Фрагмент для ознакомления

Вид программы в момент запуска приведен на рисунке 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].ToString();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].ToString());Console.WriteLine("Кодированиеданных");int[] EncodeData = bch.encode_bch(input);Console.WriteLine("Закодированнаякомбинация");Console.WriteLine(ToString(EncodeData));Console.WriteLine("Необходимо ли изменение комбинации? (Y/N)");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{///

///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 = число ошибок расшифровки///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));} }////// Создание пол 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)///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; }//////Вычисляется порождающий полином двоичного БЧХ-кода. ///Генерируется циклическое множество по модулю 2^m - 1 вида cycle[][] = (i, 2*i, 4*i, ..., 2^l*i). Тогда///определяются те наборы цикла, которые содержат целые числа в наборе (d-1)///последовательные целые числа {1.. (d-1)}. Порождающий полином считается как произведение сомножителей вида (x+alpha^i), ///для каждого упомянутого ранее множества .///void gen_poly() {int ii, jj, ll, kaux;int test, aux, nocycles, root, noterms, rdncy;int[,] cycle;int[] size, min, zeros; cycle = newint[10250, 21]; size = newint[10250]; min = newint[10250]; zeros = newint[10250];// Генерацияциклическогомножества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(); } }//////Кодированиеисходныхданных// Вычисление избыточного массива, коэффициенты B(х). Избыточность/// полинома B(x) является остатком от деления x^(length-k)*data(x) на порождающий полином g(х)./// /// Кодируются как данные для кодирования первые k чисел /////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[10260, 1024]; d = newint[10260]; l = newint[10260]; u_lu = newint[10260]; s = newint[10250]; 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 с.

Вопрос-ответ:

Какие основные свойства информации?

Основные свойства информации включают: количественную оценку, структурированность, достоверность, полноту, достаточность, актуальность, понятность, целостность, уникальность, доступность, релевантность, конфиденциальность, и т.д.

Как оценивается количество информации?

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

Чем отличается помехоустойчивое кодирование от обычного кодирования?

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

Какие основные принципы организации блочных кодов?

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

Какие алгоритмы используются при кодировании и декодировании с использованием БЧХ кодов?

Для кодирования и декодирования с использованием БЧХ кодов применяются различные алгоритмы, такие как: алгоритмы Берлекэмпа-Месси, декодирование с использованием расширенного преобразования синдрома, алгоритмы Эрли и Велша, алгоритмы декодирования на основе циклического кодирования и многое другое.

Какие основные свойства информации?

Основные свойства информации: объективность, полнота, достоверность, своевременность, актуальность, единственность, научность и практичность.

Что такое помехоустойчивое кодирование и каковы его особенности?

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

Какие принципы организации блочных кодов?

Принципы организации блочных кодов включают линейные коды, описание БЧХ кодов и их особенности, алгоритмы кодирования и декодирования на основе БЧХ кодов.

Что такое линейные коды и какова их структура?

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

Каковы основные этапы разработки программы работы с БЧХ кодами?

Основные этапы разработки программы работы с БЧХ кодами включают анализ предметной области, разработку программной модели кодера-декодера, постановку лабораторной работы и разработку алгоритмов кодирования и декодирования.

Какие принципы количественной оценки информации используются?

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

Какие особенности имеют БЧХ коды?

БЧХ коды обладают свойством корректирования ошибок, разделения ошибок и малым размером кодовых слов. Они также обладают возможностью корректировать не только единичные ошибки, но и множественные ошибки.