Министерство науки и высшего образования Российской Федерации ФГБОУ ВО «Кубанский государственный технологический университет» (ФГБОУ ВО «КубГТУ») Институт компьютерных систем и информационной безопасности Кафедра информационных систем и программирования Направление подготовки 09.03.04 «Программная инженерия» Профиль «Беспрофильный» КУРСОВОЙ РАБОТА по дисциплине Теория информации и сигналов на тему «Алгоритм выбора образующего полинома циклического кода.» Выполнил студент Филимонов Дмитрий Сергеевич курса 2 группы 18-КБ-ПР1 Допущен к защите _28 сентября 2020г._____________ Руководитель (нормоконтроллер) проекта ст. преп. Н.В. Кушнир Защищена _30 сентября 2020г.________ Оценка Члены комиссии Ю.С. Носова К.Е. Тотухов Краснодар 2020 г. ФГБОУ ВО «Кубанский Государственный Технологический Университет» (ФГБОУ ВО «КубГТУ») Кафедра информационных систем и программирования Институт компьютерных систем и информационной безопасности Направление подготовки 09.03.04 "Программная инженерия" Профиль «Беспрофильный» УТВЕРЖДАЮ Зав. кафедрой « 11 » февраля М.В. Янаева _ 2020 г. ЗАДАНИЕ на курсовую работу Студенту Филимонову Дмитрию Сергеевичу курса 2 группы 18-КБ-ПР1 Тема проекта Алгоритм выбора образующего полинома циклического кода. (утверждена указанием директора института №___ от _____ 20__ г.) План работы: 1. Анализ предметной области 2. Проектирование 3. Реализация программы Объем работы: а) пояснительная записка 22 с. б) программа Рекомендуемая литература: 1.Ключко В.И., Власенко А.В., Кушнир Н.В., Кушнир А.В. Теория информации и сигналов: учеб. пособие / Кубан. гос. технол. ун-т.- Краснодар: Изд. ФГБОУ ВПО «КубГТУ», 2014.- 132 с. 2. 3. Срок выполнения проекта: с " 11 " февраля Срок защиты: Дата выдачи задания: Дата сдачи проекта на кафедру: Руководитель проекта ст. преподаватель Задание принял студент по " 30 " сентября 2020 г. " 30 " сентября 2020 г. " 11 " февраля 2020 г. " 28 " сентября 2020 г. Кушнир Н.В. Филимонов Д.С. 2 Реферат Пояснительная записка курсовой работы 22 с., 4 рис., 6 источника, 2 приложения, 1 таблица, 4 формулы. C#, WINDOWS FORMS, ИНФОРМАЦИЯ, КОД, АЛГОРИТМ, ПОМЕХОУСТОЙЧИВОСТЬ, МЕТОД, ПОЛИНОМ, ЦИКЛИЧЕСКИЙ КОД Объектом исследования является изучение процессов и методов эффективного кодирования информации. Цель работы состоит в последовательном изучении правил, методов, принципов эффективного кодирования, навыков написания программ на языке высокого уровня C#, закрепления умений работы с Windows Forms. К полученным результатам относится отлаженная программа в рабочей среде Microsoft Visual Studio на языке высокоуровневого программирования C#. 3 Содержание Введение ............................................................................................................... 5 1 Нормативные ссылки ....................................................................................... 6 2 Анализ предметной области............................................................................ 7 2.1 Циклические коды ......................................................................................... 7 2.2 Принцип работы кодирующий и декодирующих устройств .................... 8 2.3 Алгоритм нахождение полиномов циклического кода ............................. 9 3 Требования к программному изделию ......................................................... 12 3.1 Требования к функциональным характеристикам................................... 12 3.2 Контроль входной и выходной информации ........................................... 12 4 Описание программы ..................................................................................... 13 4.1 Выбор языка программирования ............................................................... 13 4.2 Выбор среды разработки ............................................................................ 13 4.3 Интерфейс пользователя ............................................................................ 14 5 Тестирование возможностей программы .................................................... 15 Заключение ........................................................................................................ 16 Список использованной литературы ............................................................... 17 Приложение А – Листинг программы выбора образующего полинома циклического кода. ............................................................................................ 19 Приложение Б – Скриншот проверки курсовой работы в системе Antiplagiat.ru ....................................................................................................... 22 4 Введение В современном обществе стало нормально передавать информацию по спутниковой, радио, телефонной связи, и для надежной передачи информации было необходимо передавать информацию таким образом, чтоб было наименьшее количество ошибок. Для обеспечения надежности передачи данных применяются полиномаиальные помехоустойчивые коды. Для построения помехоустойчивого кода необходимо подобрать образующий полином, удовлетворяющий заданным условиям, таким как, длина информационного блока и кратность исправляемость ошибок. В данной курсовой работе поставленная задача выбора образующего полинома циклического кода. 5 1 Нормативные ссылки В данной работе используются следующие ссылки: ГОСТ Р 1.5-2002 ГСС РФ. Стандарты. Общие требования к построению, изложению, оформлению, содержанию и обозначению. ГОСТ 2.301-68 ЕСКД. Форматы. ГОСТ 7.1-2003 СИБИД. Библиографическая запись. Библиографическое описание. Общие требования и правила составления. ГОСТ 7.12-93 СИБИД. Библиографическая запись. Сокращения слов на русском языке. Общие требования и правила. ГОСТ 7.9-95 СИБИД. Реферат и аннотация. Общие требования. ГОСТ 7.82-2001 СИБИД. Библиографическая запись. Библиографическое описание электронных ресурсов. Общие требования и правила составления. 6 2 Анализ предметной области 2.1 Циклические коды Алгебраическая структура циклических кодов впервые была исследована Боузом, Чоудхури и Хоквингемом, поэтому они известны как БЧХ-коды. Эти коды характеризируются следующими свойствами: – длина кодовых последовательностей n 2m 1, (1) где m=1, 2, 3, …; – число проверочных единичных элементов не превышает величины 0,5 m , т. е. 2r ; m (2) – код обнаруживает все пачки ошибок длины l r; (3) – циклический сдвиг разрешенной кодовой комбинации кода приводит к образованию разрешенной комбинации этого же кода. Воспользуемся более простыми методиками, базирующимися на алгебраических понятиях. В этом случае более удобной является запись кодовых комбинаций в виде многочлена переменной x : G( x) ak 1 x k 1 ak 2 x k 2 ... a1 x a0 , (4) где x основание системы счисления. Коэффициенты a1 представляют собой цифры данной системы счисления. В двоичной системе счисления коэффициенты могут принимать 7 одно из двух значений: 0 или 1. Так, например, двоичное четырехразрядное число 1001 может быть записано в виде полинома G( x) 1 x3 0 x 2 0 x 1 x3 1 1001 . Это выражение устанавливает однозначное соответствие между двумя формами записи кодовых комбинаций. Циклические коды образуются путем умножения каждой кодовой комбинации k-элементного безызбыточного кода, выраженной в виде многочлена G(x), на образующий полином P(x) степени (n – k). При этом умножение производится по обычным правилам алгебры с приведением подобных членов по модулю два. Следовательно, в случае отсутствия ошибок любая разрешенная кодовая комбинация циклического кода должна разделиться на образующий полином P(x) без остатка. Появление остатка от деления указывает на наличие ошибок в кодовой комбинации. 2.2 Принцип работы кодирующий и декодирующих устройств Рассмотрим схемные реализации кодирующих и декодирующих устройств, задаваемых умножением на образующий полином. Кодер содержит регистр сдвига, число разрядов которого обусловливается степенью образующего полинома, и сумматоры по модулю два, число которых и связи с которыми определяется коэффициентами 𝑎𝑖 . Если 𝑎𝑖 = 1, то сумматор по модулю два и соответствующая связь имеют место, если а=0, то сумматор и соответствующая связь отсутствуют. На рисунке 1 представлена схема кодирующего устройства, осуществляющего умножение на образующий полином 𝑃(𝑥) = 𝑥 3 + 𝑥 + 1 . Работа кодера сводится к следующему. При подаче на его вход информационного элемента 𝑎𝑘−1 на выходе образуется произведение 𝑎𝑘−1 ∗ 𝑎𝑛−𝑘−1 𝑎𝑘−2 ∗ 𝑎𝑘−𝑛 , и значение 𝑎𝑘−1 запоминается в первом разряде регистра сдвига. При втором такте работы схемы на выходе образуется элемент, равный 𝑎𝑘−10 ∗ 𝑎𝑛−𝑘−1 𝑎𝑘−2 ∗ 𝑎𝑛−𝑘 , причем в первом 8 разряде регистра сдвига оказывается записанным коэффициент 𝑎𝑘−2 , а во втором - коэффициент 𝑎𝑘−1 . После n-го такта процесс формирования комбинации заканчивается. Первыми на выходе кодера образуются коэффициенты при старших членах многочлена M(x)=G(x)P(x). Декодер, осуществляющий деление на образующий полином P(x), конструируется на регистре сдвига с обратными связями через сумматоры по модулю два. Число разрядов регистра сдвига соответствует степени полинома P(x), а количество сумматоров по модулю два с соответствующими связями определяется коэффициентами 𝑎𝑖 . На рисунке 2 приведена схема декодера для деления на полином 𝑃(𝑥) = 𝑥 3 + 𝑥 + 1. [2] Рисунок 1 – Кодирующие устройство Рисунок 2 – Декодирующие устройство 2.3 Алгоритм нахождение полиномов циклического кода Исходными данными для построения ЦК являются: 9 - допустимое значение вероятности не обнаружения ошибки Рнод , - число информационных элементов 𝑘, - вероятность искажения символов Р0 . Алгоритм нахождения образующего полинома ЦК, удовлетворяющего заданной верности состоит в следующем. На первом этапе определяют 𝑛∗ , удовлетворяющее условию 𝑛∗ (𝑚 − 1) < 𝑘 < 𝑛∗ (𝑚). По заданному 𝑘 и найденному значению 𝑛 ∗ (𝑚) определяют 𝑟 ∗ 𝑟 ∗ 𝑛 ∗ 𝑚 𝑘 . Уточняют число проверочных элементов по соответствующим таблицам (таблица 1 представляет собой фрагмент этих таблиц), выбирая ближайшее табличное значение 𝑟𝑡 ≤ 𝑟 ∗ . [2] Определяют табличное значение 𝑡 , соответствующее 𝑟𝑡 . Так как табличные коды могут быть дополнены проверкой на четность, то определяют максимальную избыточность 𝑟𝑡𝑚𝑎𝑥 = 𝑟𝑡 + 1, и максимальную кратность гарантийно обнаруживаемых 𝑚𝑎𝑥 𝑡 + 1. [2] Таблица 1 – Таблица выбора полинома Уточняют длину КК ЦК: 𝑛 = 𝑘 + 𝑟𝑡𝑚𝑎𝑥 . 𝑛 = 𝑘 + 𝑟𝑚𝑎𝑥 . 10 ошибок Для найденных значений 𝑛, 𝑟𝑚𝑎𝑥 и 𝑚𝑎𝑥 определяют вероятность необнаружения ошибок Рно . Проверяют логическое условие Рно ≤ Рнод При невыполнении этого условия выбирают 𝑛 ∗ (𝑚 + 1) и повторяют п.п.2-8. Если условие выполняется, то методом последовательного приближения, например, методом половинного разбиения, определяют минимальное число 𝑟𝑚𝑖𝑛 и соответствующие значение 𝑛𝑚𝑖𝑛 и 𝑚𝑖𝑛 , для которых выполняется условие. В этом случае 𝑚𝑖𝑛 = 𝑘 + 𝑟𝑚𝑖𝑛 , а 𝑟𝑚𝑖𝑛 = 𝑟𝑇𝑚𝑖𝑛 и 𝑇𝑚𝑖𝑛 = 𝑇𝑚𝑖𝑛 при отсутствии дополнительной проверки на четность, или 𝑟𝑚𝑖𝑛 = 𝑟𝑇𝑚𝑖𝑛 + 1 и 𝑚𝑖𝑛 = 𝑇𝑚𝑖𝑛 + 1 при введении таковой. Выбирают образующий полином Р(х), соответствующий вычисленным значениям 𝑟𝑚𝑖𝑛 и 𝑚𝑖𝑛 . Для этого случая, находим 𝑃(𝑥) = ∏𝛼𝑖=1 𝑓𝑖 (𝑥), где 𝑓𝑖 (𝑥) – неприводимые многочлены, индекс 𝑖 которых возрастает с увеличением 𝑟𝑡 ; 𝛼 – индекс, соответствующий 𝑟𝑚𝑖𝑛 . При введении дополнительной проверки на четность: 𝑃(𝑥) = (𝑥 + 1) ∏𝛼𝑖=1 𝑓𝑖 (𝑥) Образующий полином Р(х) является предпосылкой для построения кодирующего и декодирующего устройства ЦК. 11 3 Требования к программному изделию 3.1 Требования к функциональным характеристикам Разработанная в ходе выполнения курсовой работы программа пригодна для нахождения образующего полинома. 3.2 Контроль входной и выходной информации Принимая входную информацию (исходные данные для расчетов) от пользователя, программа фильтрует входную информацию перед ее обработкой. При поступлении ошибочной информации или информации, не удовлетворяющей ограничительным критериям, становится невозможной обработка всего потока входной информации. В этом случае пользователю сообщается о некорректном вводе входной информации и предоставляется возможность повторного ввода. [2] 12 4 Описание программы 4.1 Выбор языка программирования Для разработки приложения был выбран язык программирования C#. C# это объектно-ориентированный язык, это значит, что фундаментом данного языка являются разнообразные абстрактные конструкции, благодаря чему работать с информацией становится значительно удобнее. C# обладает множеством уже готовых функций, классов и методов, благодаря чему программисту станоится проще писать код. 4.2 Выбор среды разработки Microsoft Visual Studio – это интегрированная среда разработки (IDE) от Microsoft, основной инструмент разработки приложений для платформы .NET и Windows в целом. Visual Studio дает возможность разрабатывать приложения на языках C#, VB.NET и C++/CLI. Также доступны дополнения, позволяющие программировать на языках Python, Ruby и др. Visual Studio содержит обширный набор инструментов, для создания программного обеспечения, таких как: написание кода, его отладка, тестирование, анализ его качества и производительности. Все эти инструменты взаимодействуют друг с другом, благодаря чему достигается максимальная эффективность работы. Помимо разнообразного списка инструментов, в Visual Studio имеется мощные средства редактирования и визуального дизайна, которые позволяют реализовать самые нереальные идеи. Visual Studio очень понятная и легкая в понимании среда разработки. Она позволяет создавать самые различные приложения, от самых простых, таких как приложение для хранения информации о товарах, до программ, предназначенных для автоматизации больших систем. 13 4.3 Интерфейс пользователя Интерфейс пользователя представлен на рисунке 3. В нем реализован ввод и вывод всех промежуточных результатов, а также вывод образующего полинома, так же присутствует кнопка пуск и очистки интерфейса. Рисунок 3 – Интерфейс пользователя 14 5 Тестирование возможностей программы После запуска программы необходимо ввести данные в полях ввода данных. После успешного заполнения области информацией требуется нажать подходящую под выполняемый в данный момент времени процесс кнопку. Программа выполнит все необходимые действия, и выведет информацию пользователю в окне результата. Это продемонстрированно на рисунке 4. Рисунок 4 – результат работы программы. 15 Заключение В результате написания курсовой работы было разработано приложение с помощью компонентов Windows Forms в среде Microsoft Visual Studio, представляющее собой реализацию выбора образующего полинома циклического кода. Во время подготовки курсовой работы и в процессе ее выполнения были изучены и закреплены основные правила работы со средой разработки Visual Studio, в частности с языком программирования C#. Написанная программа способна выполнять все необходимые функции, что говорит о том, что задача, поставленная в данной курсовой работе, была выполнена в полной мере. 16 Список использованной литературы Основная 1. Ключко В.И., Власенко А.В., Кушнир Н.В., Кушнир А.В. Теория информации и сигналов: учеб. пособие / Кубан. гос. технол. ун-т.- Краснодар: Изд. ФГБОУ ВПО «КубГТУ», 2014.- 132 с. 2. Теория информации и сигналов: метод. указания по выполнению курсовой работы для студентов всех форм обучения по направлениям: 230100.62 Информатика и вычислительная техника, 231000.62 Программная инженерия, 230700.62 Прикладная информатика / Сост.: В.И. Ключко, А.В. Власенко, Н.В. Кушнир; Кубан. гос. технол. ун-т. Каф. вычислительной техники и АСУ. – Краснодар: Изд. КубГТУ, 2011. – 23 с. 3. Теория информации и сигналов: метод. указания по выполнению лабораторных работ для студентов всех форм обучения по направлениям 230100.62 Информатика и вычислительная техника, 231000.62 Программная инженерия, 230700.62 Прикладная информатика / Сост.: В.И.Ключко, А.В. Власенко, Н.В. Кушнир; Кубан. гос. технол. ун-т. Каф. вычислительной техники и АСУ. – Краснодар: Изд. КубГТУ, 2011. – 51 с. Дополнительная 4. Шавенько Н.К. Основы теории информации и кодирования. Учебное пособие. –М,: Изд-во МИИГАиК, 2012.-125 с. Интернет ресурсы 5. Описание языка программирования C# [Электронный ресурс] URL: https://wiki2.org/ru/C_Sharp 26.05.2020) 17 (Дата обращения: 6. Описание среды разработки Visual Studio [Электронный ресурс] URL: https://biograf.academic.ru/dic.nsf/ruwiki/611670 (Дата обращения: 26.05.2020) 18 Приложение А – Листинг программы выбора образующего полинома циклического кода. using using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; System.Data.OleDb; namespace TISLR7 { public partial class Form1 : Form { public Form1() { InitializeComponent(); groupBox1.BackColor = Color.Transparent; groupBox2.BackColor = Color.Transparent; label4.BackColor = Color.Transparent; } private void button1_Click(object sender, EventArgs e) { int k = Convert.ToInt32(textBox2.Text); double n = 0; int m = 0; for (int m1 = 3; m1 <= 8; m1++) if (Math.Pow(2, m1 - 1) - 1 < k && k < Math.Pow(2, m1) - 1) { n = Math.Pow(2, m1) - 1; m = m1; break; } Method(n, k, m); } public void Method(double n, int k, int m) { double r = n - k; OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\db.accdb"); connection.Open(); OleDbCommand command = connection.CreateCommand(); command.CommandText = "SELECT r FROM dbTable WHERE m = " + m.ToString(); OleDbDataReader dataReader = command.ExecuteReader(); int rt = 0; while (dataReader.Read()) { if (dataReader.GetInt32(0) <= r) { rt = dataReader.GetInt32(0); } else break; } 19 dataReader.Close(); dataReader.Dispose(); command.CommandText = "SELECT g FROM dbTable WHERE m = " + m.ToString() + " AND r = " + rt.ToString(); int g = (int)command.ExecuteScalar(); int rmax = rt + 1; int gmax = g + 1; double P0 = Math.Pow(2, -rmax) * Math.Pow(Convert.ToDouble(textBox3.Text), gmax + 1) * Math.Pow(10, -3) * Factarial(m) / Factarial(k) * Factarial(m - k); double Pn = Convert.ToDouble(textBox2.Text) * Math.Pow(10, -9); if (P0 > Pn) { Method(Math.Pow(2, m) - 1, k, m++); return; } command.CommandText = "SELECT r,g,f FROM dbTable WHERE m = " + m.ToString(); dataReader = command.ExecuteReader(); int f = 0; int rmin = 0, gmin = 0; while (dataReader.Read()) { rmin = dataReader.GetInt32(0); gmin = dataReader.GetInt32(1); P0 = Math.Pow(2, -rmin) * Math.Pow(Convert.ToDouble(textBox3.Text), gmin + 1) * Math.Pow(10, -3) * Factarial(m) / Factarial(k) * Factarial(m - k); if (P0 <= Pn) { f = dataReader.GetInt32(2); break; } } dataReader.Close(); dataReader.Dispose(); connection.Close(); string binary = Convert.ToString(f, 2); string result = ""; for (int i = 0; i < binary.Length; i++) { if (binary[i] != Convert.ToChar("0")) { result += "x^" + (binary.Length - i - 1); if (i != binary.Length - 1) result += " + "; } } textBox4.Text += result; textBox6.Text += m; textBox7.Text += r; textBox8.Text += rt; textBox9.Text += g; textBox10.Text += rmax; textBox11.Text += gmax; textBox12.Text += n; textBox13.Text += P0; textBox15.Text += gmin; textBox16.Text += rmin; textBox17.Text += f; 20 } public double Factarial(int q) { double fact = 1; while (q > 0) fact *= q--; return fact; } private void button2_Click(object sender, EventArgs e) { this.Height = 185; textBox3.Clear(); textBox2.Clear(); textBox1.Clear(); textBox6.Clear(); textBox7.Clear(); textBox8.Clear(); textBox9.Clear(); textBox10.Clear(); textBox11.Clear(); textBox12.Clear(); textBox13.Clear(); textBox15.Clear(); textBox16.Clear(); textBox17.Clear(); textBox4.Clear(); } private void TextBox4_TextChanged(object sender, EventArgs e) { } } } 21 Приложение Б – Скриншот проверки курсовой работы в системе Antiplagiat.ru 22