Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 2 Дианов

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
171.08 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине «Теория информации и кодирования».

Тема: «Кодирование, декодирование и исправление ошибок цифровой информации циклическими кодами».

Выполнила студентка группы ИС3-1

Магальник Екатерина Борисовна

Руководитель: Дианов Сергей Вячеславович

МОСКВА – 2024

  1. Цель работы

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

  1. Задание

  1. В соответствии с номером подгруппы выбрать по таблице 8 исходное сообщение. Вариант 1: 0001.

  2. Закодировать выбранное сообщение с помощью выбранного из Таблицы 6 порождающего полинома.

  3. Декодировать принятое сообщение, исправить ошибку, если таковая возникла.

  4. Для выполнения работы можно использовать предложенный ниже код на языке С++, либо написать свой.

Описание алгоритма кодирования:

Рисунок 1. Блок-схема функции crc().

Рисунок 2. Блок-схема функции x_or().

Рисунок 3. Блок-схема функции main().

  1. Листинг программы

#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;

}

  1. Результат работы программы

Рисунок 4. Кодирование и декодирование сообщения без ошибки.

Рисунок 6. Кодирование и декодирование без ошибки с исправлением ошибки.

5. Анализ полученных результатов

  • в качестве проверочных символов был выбран 2 бит

  • ошибок в битах принятого слова не может быть больше 1

  • в случае совпадения принятого слова и кодового слово, программа сообщает об отсутствии ошибок в передаче

  • в случае несовпадения принятого слова и кодового слово, программа указывает на порядковый номер бита с ошибкой (начинается порядок с 1), выводит кодовое слово и принятое слово, а также выводит исправленное слово.

6. Вывод

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

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

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

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