отчет лаба 2 Дианов
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №2
по дисциплине «Теория информации и кодирования».
Тема: «Кодирование, декодирование и исправление ошибок цифровой информации циклическими кодами».
Выполнила студентка группы ИС3-1
Магальник Екатерина Борисовна
Руководитель: Дианов Сергей Вячеславович
МОСКВА – 2024
Цель работы
Получение практических навыков кодирования информации с помощью циклических кодов. Закрепление навыков кодирование информации, закодированной с помощью циклического кода, получение навыков декодирования и исправления одиночных ошибок.
Задание
В соответствии с номером подгруппы выбрать по таблице 8 исходное сообщение. Вариант 1: 0001.
Закодировать выбранное сообщение с помощью выбранного из Таблицы 6 порождающего полинома.
Декодировать принятое сообщение, исправить ошибку, если таковая возникла.
Для выполнения работы можно использовать предложенный ниже код на языке С++, либо написать свой.
Описание алгоритма кодирования:
Рисунок 1. Блок-схема функции crc().
Рисунок 2. Блок-схема функции x_or().
Рисунок 3. Блок-схема функции main().
Листинг программы
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<conio.h>
using namespace std;
#define N strlen(g)
char t[28], cs[28], g[] = " ";
int a, e, c;
int b;
void x_or() {
for (c = 1; c < N; c++)
cs[c] = ((cs[c] == g[c]) ? '0' : '1'); b = e;
}
void crc() {
for (e = 0; e < N; e++)
cs[e] = t[e];
do {
if (cs[0] == '1')
x_or ();
for (c = 0; c < N - 1; c++)
cs[c] = cs[c + 1];
cs[c] = t[e++];
} while (e <= a + N - 1);
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "\nВведите информационное слово : ";
cin >> t;
cout << "\nВведите порождающий полином : ";
cin >> g;
a = strlen(t);
for (e = a; e < a + N - 1; e++)
t[e] = '0';
cout << "\n_________________________________________";
cout << "\nИнформационное сообщение, умноженное на степень полинома: ";
cout << t;
cout << "\n_________________________________________";
crc();
cout << "\nКонтрольные символы : " << cs;
for (e = a; e < a + N - 1; e++)
t[e] = cs[e - a];
cout << "\n_________________________________________";
cout << "\nКодовое слово : ";
cout << t;
cout << "\n_________________________________________";
cout << "\nПроверить способность исправить ошибку ? 1(да) , 2(нет) :";
cin >> e;
cout << "\n_________________________________________";
if (e == 1)
{
do {
cout << "\nВведите номер бита ошибки: ";
cin >> e;
} while (e == 0 || e > a + N - 1);
t[e - 1] = (t[e - 1] == '0') ? '1' : '0';
cout << "\n_________________________________________";
cout << "\nСообщение с ошибкой: ";
cout << t;
cout << "\n" << e << " бит!";
}
crc();
for (e = 0; (e < N - 1) && (cs[e] != '1'); e++);
if (e < N - 1)
cout << "\nОшибка найдена!";
else
cout << "\nОшибка не найдена!";
_getch();
return 0;
}
Результат работы программы
Рисунок 4. Кодирование и декодирование сообщения без ошибки.
Рисунок 6. Кодирование и декодирование без ошибки с исправлением ошибки.
5. Анализ полученных результатов
в качестве проверочных символов был выбран 2 бит
ошибок в битах принятого слова не может быть больше 1
в случае совпадения принятого слова и кодового слово, программа сообщает об отсутствии ошибок в передаче
в случае несовпадения принятого слова и кодового слово, программа указывает на порядковый номер бита с ошибкой (начинается порядок с 1), выводит кодовое слово и принятое слово, а также выводит исправленное слово.
6. Вывод
В ходе выполнения лабораторной работы была достигнута цель по получению практических навыков кодирования и декодирования информации с использованием циклических кодов. Работа над заданием позволила понять основные принципы работы циклических кодов, их структуру и алгоритмы, используемые для обеспечения надежности передачи данных.
В ходе практических упражнений мы изучили процесс кодирования информации, который включает в себя генерацию кодовых слов на основе исходных данных и заданного полинома. Мы также освоили принципы проверки целостности данных с помощью циклических кодов и алгоритмы для выявления и исправления одиночных ошибок в переданных сообщениях.
Декодирование закодированных сообщений позволило на практике убедиться в эффективности циклических кодов. Мы научились распознавать ошибочные символы и применять коррекционные методы для восстановления исходной информации. Благодаря этому эксперименты продемонстрировали, как правильно выбранный код может значительно повысить надежность передачи данных и уменьшить вероятность потери информации.
В общем, результаты лабораторной работы подтвердили, что циклические коды являются мощным инструментом для обеспечения корректности передачи данных. Приобретенные навыки будут полезны в будущей практике работы с системами передачи информации и для дальнейшего изучения кодирования и теории ошибок.
