Главная страница

лабораторная работа №3 «Линейные блоковые корректирующие коды. Кодирование и декодирование. ЛР№3 теория информации. Отчёт по лабораторной работе 3 Линейные блоковые корректирующие коды. Кодирование и декодирование по дисциплине " теория информации и кодирования " Работу


Скачать 259.9 Kb.
НазваниеОтчёт по лабораторной работе 3 Линейные блоковые корректирующие коды. Кодирование и декодирование по дисциплине " теория информации и кодирования " Работу
Анкорлабораторная работа №3 «Линейные блоковые корректирующие коды. Кодирование и декодирование
Дата19.05.2022
Размер259.9 Kb.
Формат файлаdocx
Имя файлаЛР№3 теория информации.docx
ТипДокументы
#539381

Министерство транспорта Российской Федерации

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

Федеральное агентство воздушного транспорта Российской Федерации

Федеральное государственное образовательное учреждение высшего образования

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

Кафедра вычислительных машин, комплексов, сетей и систем (ВМКСС)
ОТЧЁТ
По лабораторной работе №3

«Линейные блоковые корректирующие коды. Кодирование и декодирование»

по дисциплине “теория информации и кодирования


Работу выполнил и защитил:

Студент группы


Проверил: ______________________________


г. Москва - 2021

Цель лабораторной работы:

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

Закрепить навыки работы с блоковым кодом Хэмминга. Получить навыки применения кода Хэмминга для обнаружения и исправления одиночных ошибок.
Задание на выполнение:

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

Таблица 1

НОМЕР ПОДГРУППЫ

ИСХОДНОЕ СООБЩЕНИЕ

1

0111

2

0110

3

0101

4

0100

5

0011

6

0010

7

0001

8

0000


2. Закодировать выбранное сообщение (7, 4)-кодом Хэмминга, используя

порождающую матрицу (7,4)-кода Хэмминга, приведённую на Рис. 3

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

Ход работы:

Кодовое слово V и информационное слово U связаны соотношением:

V = U*G,

где G – порождающая матрица.

2 подгруппа – 0110 = U

Порождающие и проверочные матрицы для такого кода записываются следующим образом:

Сложение производится по модулю 2



V = (0110) * =

= (0*1+1*0+1*1+0*1; 0*1+1*1+1*1+0*0; 0*0+1*1+1*1+0*1; 0*1+1*0+1*0+0*0; 0*0+1*1+1*0+0*0; 0*0+1*1+1*0+0*0; 0*0+1*0+1*0+0*1) = (1000110)

В полученном векторе V последние четыре разряда совпадают с информационным вектором U. Это свойство называется систематичностью кода.

Систематический код – это код, в котором информационное слово входит в кодовое слово (вектор) как составная часть, целиком и без изменений.
Листинг программы
#include

#include

#include

#include

#include

#include
using namespace std;

int main() {

setlocale(LC_ALL, "Russian");

int a;

int data[10];

int dataatrec[10], c, c1, c2, c3, i;

int r1 = 0; int r2 = 0; int r3 = 1; int r4 = 0; int r5 = 0; int r6 = 0; int r7 =

0;

int fin1, fin2, fin3, fin4;

int fin[4];

cout << "Исходное сообщение U: \n";

cin >> data[3];

cin >> data[5];

cin >> data[6];

cin >> data[7];

data[1] = data[3] ^ data[5] ^ data[7];

data[2] = data[3] ^ data[6] ^ data[7];

data[4] = data[5] ^ data[6] ^ data[7];

cout << "\nКодовое слово V:\n";

for (i = 1; i < 8; i++)

cout << data[i];

cout << "\nВведите принятое слово R:\n";

for (i = 1; i < 8; i++)

cin >> dataatrec[i];

c1 = dataatrec[1] ^ dataatrec[3] ^ dataatrec[5] ^ dataatrec[7];

c2 = dataatrec[2] ^ dataatrec[3] ^ dataatrec[6] ^ dataatrec[7];

c3 = dataatrec[4] ^ dataatrec[5] ^ dataatrec[6] ^ dataatrec[7];

c = c3 * 4 + c2 * 2 + c1;

if (c == 0) {

cout << "\nОшибки в передаче нет\n";

}

else {

cout << "\nОшибка в " << c << " бите ";

cout << "\n Кодовое слово V : ";

for (i = 1; i < 8; i++)

cout << data[i];

cout << "\n принятое слово R : ";

for (i = 1; i < 8; i++)

cout << dataatrec[i];

cout << "\n Кодовое слово V с исправленной ошибкой: ";

if (dataatrec[c] == 0)

dataatrec[c] = 1;

else

dataatrec[c] = 0;

for (i = 1; i < 8; i++) {

cout << dataatrec[i];

}

}

cout << "\n_________________________________";

fin1 = (r3 * data[3]);

fin2 = (r3 * data[5]);

fin3 = (r3 * data[6]);

fin4 = (r3 * data[7]);

cout << "\nДекодированное сообщение U': ";

cout << "\n" << fin1 << fin2 << fin3 << fin4;

_getch();

return 0;

}

Результат выполнения программы



написать администратору сайта