МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
до лабораторної роботи №3
з курсу:
«Засоби передачі інформації у системах технічного захисту інформації»
на тему:
«ДОСЛІДЖЕННЯ КОДОУТВОРЕННЯ ТА ПРИНЦИПІВ ПОБУДОВИ
КОДЕРІВ І ДЕКОДЕРІВ ІТЕРАТИВНИХ КОДІВ»
Мета роботи - вивчити принципи побудови ітеративних кодів, дослідити перетворення двійкового коду в двоступеневий ітеративний код та формування синдрому помилки, одержати практичні навики розробки функціональних схем кодерів і декодерів.
Виконання:
Номер залікової книжки – 1009021
Складемо вихідну матрицю згідно номера залікової книжки:
І11
І12
І13
І14
І15
І16
І17
І21
І22
І23
І24
І25
І26
І27
І31
І32
І33
І34
І35
І36
І37
І41
І42
І43
І44
І45
І46
І47
0
0
0
0
0
1
1
0
0
0
0
0
1
1
0
0
0
1
1
0
0
0
0
0
1
1
0
0
Закодуємо одержану матрицю ітеративним кодом:
І11
І12
І13
І14
І15
І16
І17
Кр1
І21
І22
І23
І24
І25
І26
І27
Кр2
І31
І32
І33
І34
І35
І36
І37
Кр3
І41
І42
І43
І44
І45
І46
І47
Кр4
Кс1
Кс2
Кс3
Кс4
Кс5
Кс6
Кс7
Кср
0
0
0
0
0
1
1
0
0
0
0
0
0
1
1
0
0
0
0
1
1
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
Кр1 = І11 + І12 + І13 + І14 + І15 + І16 + І17 = 0
Кр2 = І21 + І22 + І23 + І24 + І25 + І26 + І27 = 0
Кр3 = І31 + І32 + І33 + І34 + І35 + І36 + І37 = 0
Кр4 = І41 + І42 + І43 + І44 + І45 + І46 + І47 = 0
Кс1 = І11 + І21 + І31 + І41 = 0
Кс2 = І12 + І22 + І32 + І42 = 0
Кс3 = І13 + І23 + І33 + І43 = 0
Кс4 = І14 + І24 + І34 + І44 = 0
Кс5 = І15 + І25 + І35 + І45 = 0
Кс6 = І16 + І26 + І36 + І46 = 0
Кс7 = І17 + І27 + І37 + І47 = 0
Здійснимо декодування:
Помилка відсутня
Матриця матиме такий вигляд:
0
0
0
0
0
1
1
0
Ір1
0
0
0
0
0
1
1
0
Ір2
0
0
0
1
1
0
0
0
Ір3
0
0
0
1
1
0
0
0
Ір4
0
0
0
0
0
0
0
0
Ір5
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=0, Ір2 =0,Ір3 = 0, Ір4=0, Ір5=0; Іс1=0, Іс2=0, Іс3=0, Іс4=0, Іс5=0, Іс6=0, Іс7=0 Іс8=0.
Синдроми помилок дорівнюють нулю, отже, помилка відсутня.
Одна помилка
Внесемо помилку у елемент І17, тоді вихідна матриця матиме вигляд:
0
0
0
0
0
1
0
0
Ір1
0
0
0
0
0
1
1
0
Ір2
0
0
0
1
1
0
0
0
Ір3
0
0
0
1
1
0
0
0
Ір4
0
0
0
0
0
0
0
0
Ір5
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=1, Ір2 =0, Ір3 = 0, Ір4=1,Ір5=0; Іс1=0, Іс2=1, Іс3=0, Іс4=1, Іс5=0, Іс6=0, Іс7=1, Іс8 =0. Синдроми Ір1 та Іс7 дорівнюють одиниці, звідси випливає,що помилка є у елементі І17.
Дві помилки
Внесемо помилки у елементи І17 та І26, тоді вихідна матриця матиме вигляд:
0
0
0
0
0
1
0
0
Ір1
0
0
0
0
0
0
1
0
Ір2
0
0
0
1
1
0
0
0
Ір3
0
0
0
1
1
0
0
0
Ір4
0
0
0
0
0
0
0
0
Ір5
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=1, Ір2 =1, Ір3 = 0, Ір4=0,Ір5=0;Іс1=0, Іс2=0, Іс3=0, Іс4=0, Іс5=0, Іс6=1, Іс7=1, Іс8=0.
Три помилки
Внесемо помилки у елементи І17, І26 та І24. Тоді вихідна матриця матиме вигляд:
0
0
0
0
0
1
0
0
Ір1
0
0
0
1
0
0
1
0
Ір2
0
0
0
1
1
0
0
0
Ір3
0
0
0
1
1
0
0
0
Ір4
0
0
0
0
0
0
0
0
Іср
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=1, Ір2 =0, Ір3 = 1, Ір4=0, Ір5=0; Іс1=0, Іс2=0, Іс3=0, Іс4=1, Іс5=0, Іс6=1, Іс7=1,Іс8=0.
Чотири помилки
Внесемо помилки у елементи І11, І17, І41 та І47. Тоді вихідна матриця матиме вигляд:
1
0
0
0
0
1
0
0
Ір1
0
0
0
0
0
1
1
0
Ір2
0
0
0
1
1
0
0
0
Ір3
1
0
0
1
1
0
1
0
Ір4
0
0
0
0
0
0
0
0
Іср
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=0, Ір2 =0, Ір3 = 0, Ір4=0, Ір5=0; Іс1=0, Іс2=0, Іс3=0, Іс4=0, Іс5=0, Іс6=0, Іс7=0,Іс8=0.
Отже, помилку не виявлено.
Шість помилок
Внесемо помилки у елементи І12, І13 , І14 ,І22 ,І23 та І32. Тоді вихідна матриця матиме вигляд:
0
0
0
0
0
1
0
0
Ір1
0
0
0
1
0
0
1
0
Ір2
0
0
0
0
1
0
0
0
Ір3
0
0
0
0
0
0
0
0
Ір4
0
0
0
0
0
0
0
0
Іср
Іс1
Іс2
Іс3
Іс4
Іс5
Іс6
Іс7
Іс8
Виходячи із матриці:
Ір1=1, Ір2 =0, Ір3 = 1, Ір4=0, Ір5=0; Іс1=0, Іс2=0, Іс3=0, Іс4=1, Іс5=1, Іс6=1, Іс7=1, Іс8=0.
Визначимо основні параметри досліджуваного ІК:
У даному коді кількість контрольних символів nк = 12. Для коду з nк = 12 використовується блок інформаційних елементів розміру 4×7 ( з nі1 = 4 рядками і nі2 = 7 стовпцями). Отже, nі = 28.
Загальна кількість розрядів n = nк + nі = 12 + 28 = 40.
Надлишковість R = nк / n = 12/40 = 0,3.
Порахуємо загальну кількість чотиризначних помилок, що можуть виникати при передачі ІК:
N4 = Cn4 = n1*n2(n1*n2-1)(n1*n2-2)(n1*n2-3) / 4! = 91390
Кількість невиявлених помилок:
N4H = Cn12*Cn22 = n1(n1-1)n2(n2-1) / 2!*2! = 280
Кількість помилок, які можуть бути виявлені:
N = N4- N4H = 91110
Помилка відсутня
/
/
Одна помилка
/
/
Часова діаграма з 1 помилкою
/
Дві помилки
/
/Часова діаграма з 2 помилками
/
Три помилки
/
Часова діаграма з 3 помилками
/
Чотири помилки
/
Часова діаграма з 4 помилками
/
Шість помилок
/
/Часова діаграма з 6 помилками
/
Текст програми для кодування ітеративним кодом
#include <stdio.h>
#define NI1 5
#define NI2 8
main()
{
printf("\n");
int k = 0, i, j, sum2 = 0;
int KK[NI1][NI2] = {{0, 0 ,0 ,0, 0, 1, 1}, {0, 0, 0, 0, 0, 1, 1}, {0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0}}; // Інформаційні комбінації
for (i = 0; i < NI1-1; i++)
{
for (j = 0; j < NI2-1; j++)
{
printf("%7d", KK[i][j]);
}
printf("\n");
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
for (i = 0; i < (NI1-1); i++) // Формування контрольних розрядів по рядках
{
for (j = 0; j < (NI2-1); j++)
{
sum2 ^= KK[i][j];
}
if (sum2)
KK[i][j] = 1;
else KK[i][j] = 0;
sum2 = 0;
}
for (j = 0; j < (NI2-1); j++) // Формування контрольних розрядів по стовпцях
{
for (i = 0; i < (NI1-1); i++)
{
sum2 ^= KK[i][j];
}
if (sum2)
KK[i][j] = 1;
else KK[i][j] = 0;
sum2 = 0;
}
for (j = 0; j < (NI2-1); j++) // Формування контрольно розряду по стовпцях
{
sum2 ^= KK[NI1-1][j];
}
if (sum2)
KK[NI1-1][j] = 1;
else KK[NI1-1][j] = 0;
sum2 = 0;
for (i = 0; i < (NI1-1); i++) // Формування контрольного розряду по рядках
{
sum2 ^= KK[i][NI2-1];
}
if (sum2)
KK[i][NI2-1] = 1;
else KK[i][NI2-1] = 0;
for (i = 0; i < NI1; i++)
{
for (j = 0; j < NI2; j++)
{
printf("%7d", KK[i][j]);
}
printf("\n");
}
printf("\n");printf("\n");printf("\n");
printf("Set distortion (if no, enter zero): "); // Задання спотворення
scanf("%d", &sum2);
while (sum2)
{
printf("Row: ");
scanf("%d", &i);
printf("Column: ");
scanf("%d", &j);
if (KK[i-1][j-1])
KK[i-1][j-1] = 0;
else KK[i-1][j-1] = 1;
printf("Set distortion (if no, enter zero): ");
scanf("%d", &sum2);
}
sum2 = 0;
for (i = 0; i < NI1; i++) // Перевірка розрядів по рядках
{
for (j = 0; j < NI2; j++)
sum2 ^= KK[i][j];
if (sum2)
k = 1;
sum2 = 0;
}
for (j = 0; j < NI2; j++) // Перевірка розрядів по стовпцях
{
for (i = 0; i < NI1; i++)
sum2 ^= KK[i][j];
if (sum2)
k = 1;
sum2 = 0;
}
if (k)
printf("Error");
else printf("Error not found");
}
7.Результат програми:
0 0 0 0 0 1 1
0 0 0 0 0 1 1
0 0 0 1 1 0 0
0 0 0 1 1 0 0
0 0 0 0 0 1 1 0
0 0 0 0 0 1 1 0
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0
Висновок: У даній лабораторній роботі я вивчив принципи побудови ітеративних кодів, дослідив перетворення двійкового коду в двоступеневий ітеративний код та формування синдрому помилки.