Коди Хемінга

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт
Предмет:
Методи та засоби комп’ютерних інформаційних технологій
Група:
КН-313

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра САП  Звіт до лабораторної роботи №4 на тему: „Коди Хемінга” З курсу : ”Методи та засоби комп”ютерних інформаційних технологій” Львів 2007 МЕТА РОБОТИ Мета роботи - вивчення методiв побудови кодiв Хемiнга та їх програмна реалiзацiя для практичного використання. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Завадостійке кодування. Завадостійкі коди – це один із найефективніших засобів забезпечення високої достовірності передачі інформації. Розвиток цього напрямку зумовлений використанням мікропроцесорної техніки у системах зв’язку. Завадостійке кодування базується на теоремі Шеннона для передачі дискретної інформації по каналу із завадами: “Імовірністть помилкового декодування може бути як завгодно малою при виборі відповідного способу кодування”. Теорема вказує на принципову можливість, але не визначає спосіб кодування. Це обумовило інтерес до розробки завадостійких кодів. Під завадостійкими розуміють коди, які дозволяють виявляти чи виявляти і виправляти помилки, які виникли через вплив завад. Завадостійкість кодування забезпечується за рахунок внесення надлишковості в кодові комбінації, тобто крім інформаційних є і надлишкові (додаткові) розряди. Всі завадостійкі коди поділяються на два класи:блочні та неперервні [1]. В блочних кодах кожному повідомленню (або елементу повідомлення) відповідає кодова комбінація (блок) із певної кількості сигналів. Блоки кодуються і декодуються окремо один від одного. Блочні коди можуть бути рівномірними (довжина кодових комбінацій n – постійна), або нерівномірними (n – міняється). Нерівномірні практично не використовуються через складність їх технічної реалізації. В неперервних кодах внесення надлишковості в послідовність вхідних символів здійснюється без розбивки на окремі блоки. Для неперервних кодів процеси кодування та декодування мають теж неперервний характер. Цей напрям тільки розвивається. Блочні і неперервні коди в залежності від методів внесення надлишковості поділяють на роздільні та нероздільні. В роздільних чітко визначена роль окремих символів. Одні символи є інформаційні, інші є перевірочними і забезпечують виявлення і виправлення помилок. Роздільні блочні коди називають ще n, k – кодами, де n – довжина кодових комбінацій, k – кількість інформаційних символів в комбінаціях. У нероздільних кодах немає чіткого поділу символів кодової комбінації на інформаційні та перевірочні. Таких кодів мало. Роздільні блочні коди поділяються на систематичні і несистематичні. Несистематичні будуються таким чином, що перевірочні символи визначаються як сума підблоків, на які поділяється блок інформаційних символів. Більшість відомих роздільних кодів є систематичними кодами. Для цих кодів перевірочні символи визначаються в результаті проведення лінійних операцій над певними інформаційними символами. Декодування зводиться до перевірки на парність певних груп символів. В результаті цих перевірок отримується інформація про наявність помилок, а при потребі і про позицію помилкових символів. Основні принципи завадостійкого кодування. Будемо розглядати блочні рівномірні двійкові завадостійкі коди. Кількість розрядів n в кодовій комбінації називається довжиною коду. Символи коду – 0,1. Кількість одиниць в кодовій комбінації називається її вагою w. Наприклад: 100101100 – n=9, w=4. Кодова віддаль d визначається кількістю позицій чи символів, в яких кодові комбінації відрізняються одна від одної і рівна вазі суми (по модулю 2) цих кодових комбінацій 100101100 + 110110101 _________ 010011001 w=4, d=4. За рахунок впливу завад в одному чи кількох рядках кодової комбінації можуть з’являтися помилки (0 ( 1, 1(0). По кількості помилкових розрядів помилки бувають одно, двох і більше кратними. Експериментальні дослідження показали, що помилки символів при передачі по каналу зв’язку групуються у пачки різної тривалості. Пачка – це участок послідовності символів, які починаються і закінчується помилковими символами. В середині пачки можуть бути і окремі правильні символи. Для визначення місця помилкових символів у кодовій комбінації використовується вектор помилки е (n – розрядна комбінація, одиниці якої вказують місце помилкових символів). Наприклад, е = 01100 – третій і четвертий символи справа – помилкові. Сума по модулю 2 спотвореної кодової комбінації і вектора помилки дає правильну комбінацію. Звадостійкість кодування забезпечується надлишковістю (k<n). Тобто із загальної кількості No = 2n можливих кодових комбінацій для передачі інформації використовується тільки N = 2k комбінацій, тобто множина No ділиться на дві групи N=2k – множина дозволених і (No-N)=2n-2k множина заборонених комбінацій. Якщо прийнята комбінація заборонена, то це означає, що сигнал створений в каналі. Якщо дозволена – то або комбінація без спотворень, або був перехід з однієї дозволеної в іншу. У загальному випадку кожна із N дозволених комбінацій може перетворитись у будь-яку із No можливих, тобто можливі N* No варіантів передачі, з них N варіантів безпомилкові, N*(N-1) - перехід із одних дозволених у інші дозволені, N*(No-N) – перехіід із дозволених у заборонені. Таким чином не всі спотворення можуть бути виявлені. Частка помилкових комбінацій, що можуть бути виявлені визначається як ; Для використання коду як коректуючого, множина заборонених кодових комбінацій розбивається на N підмножин Mі , що не перетинаються. Кожна їз цих підмножин відповідає одній із дозволених комбінацій Аі . Якщо прийнята заборонена комбінація належить підмножині Mі , то вважається, що передана комбінація Аі. Помилка буде виправлена лише тоді, коли заборонена комбінація утворилася із Аі . Таким чином, помилка виправляється в (N0-N) випадках (тільки для заборонених комбінацій). Частка виправлених помилкових комбінацій із загальної кількості виявлених помилкових рівна ; Спосіб розбиття на підмножини залежить від того які помилки повинні виправлятися даним кодом. Зв’язок коректуючої здатності коду і кодової віддалі. Кодова віддаль характеризує ступінь відмінності між двома довільними кодовими комбінаціями. Найменша віддаль між дозволеними кодовими комбінаціями dmin - важлива характеристика коду, яка визначає його виявляючу і коректуючу здатність. Якщо необхідно побудувати код, який виявляє всі помилки кратністю t і нижче – це значить із множини N0 можливих вибрати N дозволених комбінацій так, щоб будь-яка з них в сумі по модулю 2 із будь-яким вектором помилок з вагою Wі не більшою t, не дала б в результаті іншої дозволеної комбінації. Для цього необхідно, щоб кодова віддаль dmin була не меншою t+1. Для виправлення виявленої помилки необхідно щоб кодова віддаль між двома дозволеними комбінаціями була не меншою ніж t+2. Це забезпечує утворення для кожної із дозволениих комбінацій множини заборонених, яка, при заданій кратності помилки, не перетинається із множинами заборонених для інших дозволених, що дає можливість однозначно виправити помилку. Очевидно, що виправлення помилок зведенням до дозволеної будь-якої комбінації із її множини заборонених базується на гіпотезі, що мала місце помилка з кратністю не більше t. Однак на практиці не виключена можливіть виникнення помилки з більшою кратністю і тоді помилкова кодова комбінація буде неправильно виправлена до найближчої дозволеної. Таким чином методи виправлення помилок мають імовірнісний характер. Код Хемінга. Код Хемiнга належить до найважливiших лiнiйних кодiв, якi широко використовуються на практицi i мають зручний для технiчноi реалiзацii алгоритм виявлення та виправлення однiєї помилки. Код складаеться з k iнформацiйних двійкових розрядів та n-k контрольних. Загальна кількість розрядів у кодi n. Нумерація розрядів здійснюється справа наліво від 1 до n. Число n повинно задoвiльняти нерiвнiсть 2n-k не менше n+1. Для визначення основних параметрiв коду Хемiнга задається кiлькiсть iнформацiйних розрядів k, по яких обчислюється n та n-k. Кiлькiсть iнформацiйних k та контрольних n-k розрядів коду, який виявляє та коректує одну помилку приведена в таблиці. k 1…4 5…11 12…26 27…57 58…120 121…247  n-k 3 4 5 6 7 8  n 7 15 31 63 127 255   На основi основних параметрiв коректуючого коду визначають позицii інформаційних та контрольних розрядів. Позиції контрольних розрядів вибираються по значенню степенi 2і, де i=0,1,2,3... Тобто номери контрольних розрядів будуть рiвнi 1,2,4,16... Між контрольними розрядами справа наліво вписуються інформаційні. Потiм визначають значення контрольних розрядів по такому правилу: сума одиниць на перевiрочних позицiях для даного контрольного розряду повинна бути непарною. Якщо ця сума непарна, то контрольний розряд встановлюється рiвним нулю, якщо парна – одиницi (доповнення до непарності). Перевiрочнi позицii вибирають таким чином. Cкладають таблицю для ряду натуральних чисел у двiйковому кодi. Кiлькiсть чисел - n. Потiм визначають перевiрочнi позицii по такому правилу: в першу перевiрку входять розряди, якi мiстять одиницю в першому розрядi справа (1,3,5,7 і т.д.), в другу - в другому (2,3,6,7…) і т.д. 8 7 6 5 4 3 2 1 1 0 0 1 1 0 1 0   12 11 10 9 8 7 6 5 4 3 2 1 1 0 0 1 0 1 0 1 0 0 0 0      1    0  0 0   1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 Рис.1. Формування коду Хемінга. Текст програми: #include <stdio.h> #include <conio.h> #include <math.h> int main() { clrscr(); char a[12],a1[12]; char a2[4]; int i,j,b1,b2,b3,b4,b5,b6,b7,b8,k; printf ("Vvedit 12 znachen\n"); for (i=0;i<12;i++) scanf ("%1d",&a[i]); clrscr(); printf ("\Vu vvelu znachenja:\n"); for (i=0;i<12;i++) printf ("%1d",a[i]); getch(); printf ("\nVash bayt pislja dodavannja perevirochnuh bitiv:\n"); b1=a[1]+a[3]+a[5]+a[7]+a[9]; if (b1%2==0) a[11]=1; else a[11]=0; b2=a[1]+a[2]+a[5]+a[6]+a[9]; if (b2%2==0) a[10]=1; else a[10]=0; b3=a[0]+a[5]+a[6]+a[7]; if (b3%2==0) a[8]=1; else a[8]=0; b4=a[0]+a[1]+a[2]+a[3]; if (b4%2==0) a[4]=1; else a[4]=0; for (i=0;i<12;i++) printf ("%1d",a[i]); printf ("\nvvedit novuy bayt z pomulkoy:\n"); for (j=0;j<12;j++) scanf ("%1d",&a1[j]); b5=a1[1]+a1[3]+a1[5]+a1[7]+a1[9]+a1[11]; if (b5%2==0) a2[3]=1; else a2[3]=0; b6=a1[1]+a1[2]+a1[5]+a[6]+a1[9]+a1[10]; if (b6%2==0) a2[2]=1; else a2[2]=0; b7=a1[0]+a1[5]+a1[6]+a1[7]+a[8]; if (b7%2==0) a2[1]=1; else a2[1]=0; b8=a1[0]+a1[1]+a1[2]+a1[3]+a1[4]; if (b8%2==0) a2[0]=1; else a2[0]=0; printf ("\nNomer bayta z pomulkoy:"); for (k=0;k<4;k++) printf ("%d",a2[k]); getch(); return 0; } Висновок: На лабораторній роботі №4 я вивчив методи побудови кодiв Хемiнга та їх програмна реалiзацiя для практичного використання.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!