лабораторная работа №3 «Линейные блоковые корректирующие коды. Кодирование и декодирование. ЛР№3 теория информации. Отчёт по лабораторной работе 3 Линейные блоковые корректирующие коды. Кодирование и декодирование по дисциплине " теория информации и кодирования " Работу
Скачать 259.9 Kb.
|
Министерство транспорта Российской Федерации (РОСАВИАЦИЯ) Федеральное агентство воздушного транспорта Российской Федерации Федеральное государственное образовательное учреждение высшего образования МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ (МГТУ ГА) Кафедра вычислительных машин, комплексов, сетей и систем (ВМКСС) ОТЧЁТ По лабораторной работе №3 «Линейные блоковые корректирующие коды. Кодирование и декодирование» по дисциплине “теория информации и кодирования” Работу выполнил и защитил: Студент группы Проверил: ______________________________ г. Москва - 2021 Цель лабораторной работы: Получение практического опыта кодирования цифровой информации блоковым кодом Хэмминга на основе полученных теоретических сведений. Закрепить навыки работы с блоковым кодом Хэмминга. Получить навыки применения кода Хэмминга для обнаружения и исправления одиночных ошибок. Задание на выполнение: 1. В соответствии с номером подгруппы выбрать по Таблице 1 исходное сообщение. Таблица 1
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; } Результат выполнения программы |