КОДИ ХЕМІНГА

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

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

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

Рік:
2006
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інші

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра САПР Звіт до лабораторної роботи №2 на тему: КОДИ ХЕМІНГА МЕТА РОБОТИ Мета роботи - вивчення методiв побудови кодiв Хемiнга та їх програмна реалiзацiя для практичного використання. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Завадостійке кодування. Завадостійкі коди – це один із найефективніших засобів забезпечення високої достовірності передачі інформації. Розвиток цього напрямку зумовлений використанням мікропроцесорної техніки у системах зв’язку. Завадостійке кодування базується на теоремі Шеннона для передачі дискретної інформації по каналу із завадами: “Імовірністть помилкового декодування може бути як завгодно малою при виборі відповідного способу кодування”. Теорема вказує на принципову можливість, але не визначає спосіб кодування. Це обумовило інтерес до розробки завадостійких кодів. Під завадостійкими розуміють коди, які дозволяють виявляти чи виявляти і виправляти помилки, які виникли через вплив завад. Завадостійкість кодування забезпечується за рахунок внесення надлишковості в кодові комбінації, тобто крім інформаційних є і надлишкові (додаткові) розряди. Всі завадостійкі коди поділяються на два класи:блочні та неперервні. В блочних кодах кожному повідомленню (або елементу повідомлення) відповідає кодова комбінація (блок) із певної кількості сигналів. Блоки кодуються і декодуються окремо один від одного. Блочні коди можуть бути рівномірними (довжина кодових комбінацій n – постійна), або нерівномірними (n – міняється). Нерівномірні практично не використовуються через складність їх технічної реалізації. В неперервних кодах внесення надлишковості в послідовність вхідних символів здійснюється без розбивки на окремі блоки. Для неперервних кодів процеси кодування та декодування мають теж неперервний характер. Цей напрям тільки розвивається. Блочні і неперервні коди в залежності від методів внесення надлишковості поділяють на роздільні та нероздільні. В роздільних чітко визначена роль окремих символів. Одні символи є інформаційні, інші є перевірочними і забезпечують виявлення і виправлення помилок. Роздільні блочні коди називають ще n, k – кодами, де n – довжина кодових комбінацій, k – кількість інформаційних символів в комбінаціях. У нероздільних кодах немає чіткого поділу символів кодової комбінації на інформаційні та перевірочні. Таких кодів мало. Роздільні блочні коди поділяються на систематичні і несистематичні. Несистематичні будуються таким чином, що перевірочні символи визначаються як сума підблоків, на які поділяється блок інформаційних символів. Більшість відомих роздільних кодів є систематичними кодами. Для цих кодів перевірочні символи визначаються в результаті проведення лінійних операцій над певними інформаційними символами. Декодування зводиться до перевірки на парність певних груп символів. В результаті цих перевірок отримується інформація про наявність помилок, а при потребі і про позицію помилкових символів. Основні принципи завадостійкого кодування. Будемо розглядати блочні рівномірні двійкові завадостійкі коди. Кількість розрядів n в кодовій комбінації називається довжиною коду. Символи коду – 0,1. Кількість одиниць в кодовій комбінації називається її вагою w. Для визначення місця помилкових символів у кодовій комбінації використовується вектор помилки е (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) випадках (тільки для заборонених комбінацій). Частка виправлених помилкових комбінацій із загальної кількості виявлених помилкових рівна ; Спосіб розбиття на підмножини залежить від того які помилки повинні виправлятися даним кодом. Код Хемінга. Код Хем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. Формування коду Хемінга. Для виявлення і виправлення одиночноi помилки в прийнятій кодовій комбінації проводять перевiрку на непарнiсть. Для першоi перевiрки сумують розряди для позицiй, що мiстять одиницю в молодшому розрядi (1,3,5,7...). Якщо кількість одиниць парна, то перший розряд справа для двійкового значення номера помилкової позиції (синдрома) встановлюється рівним одиниці. Потім сумуючи розряди для позицій, що містять одиницю у другому двійковому розряді, і перевіряючи суму на непарність визначають значення другого розряду синдрома. Процес повторюється для позицiй, що містять одиниці у розрядах 3,4,5 i т.д. В результатi формується номер помилкової позицiї коду. Для виправлення помилки символ у цiй позицii необхiдно замiнити на протилежний. Якщо синдром рівний нулю, то прийнята комбінація не містить одиночних помилок. Наприклад, при помилці в шостому розряді визначене значення синдрому буде рівне 0110. Текст програми: #include <conio.h> #include<iostream.h> #include<math.h> #include<stdlib.h> void main(void){ const int n=12,m=4,q=8; int i,j,s,num[n],er[m],w[q]; clrscr(); cout<<"Enter your signal:\n"; for(i=0;i<q;i++) cin>>w[i]; s=0; for(i=1;i<q;i++) if((i==1)||(i==3)||(i==4)||(i==6)||(i==7)) s+=w[i]; if((s%2)==0) num[11]=1; else num[11]=0; s=0; for(i=1;i<q;i++) if((i==1)||(i==2)||(i==4)||(i==5)||(i==7)) s+=w[i]; if((s%2)==0) num[10]=1; else num[10]=0; s=0; for(i=0;i<q;i++) if((i==0)||(i==4)||(i==5)||(i==6)) s+=w[i]; if((s%2)==0) num[8]=1; else num[8]=0; s=0; for(i=0;i<q;i++) if((i==0)||(i==1)||(i==2)||(i==3)) s+=w[i]; if((s%2)==0) num[4]=1; else num[4]=0; i=0; for(j=0;j<q;j++){ if((i==4)||(i==8)) i++; num[i]=w[j]; i++; } cout<<"Coded signal is:\n"; for(i=0;i<n;i++) cout<<num[i]<<' '; cout<<"\n"; cout<<"Enter number of bad position (0-11): \n"; cin>>j; if(num[j]==1)num[j]=0; else num[j]=1; s=0; for(i=1;i<n;i=i+2) s+=num[i]; if((s%2)==0) er[3]=1; else er[3]=0; s=0; for(i=1;i<(n-1);i++) if((i==1)||(i==2)||(i==5)||(i==6)||(i==9)||(i==10)) s+=num[i]; if((s%2)==0) er[2]=1; else er[2]=0; s=0; for(i=0;i<(n-3);i++) if((i==0)||(i==5)||(i==6)||(i==7)||(i==8)) s+=num[i]; if((s%2)==0) er[1]=1; else er[1]=0; s=0; for(i=0;i<5;i++) s+=num[i]; if((s%2)==0) er[0]=1; else er[0]=0; cout<<"Number of bad bit is:\n"; for(i=0;i<m;i++) cout<<er[i]<<' '; cout<<"It's "<< er[3]+er[2]*2+er[1]*4+er[0]*8<<" bit (count from raigt to left).\n"; getch(); } Висновок: Отже на цій лабораторній роботі я вивчив метод побудови коду Хемiнга та його програмну реалiзацiю для практичного використання.
Антиботан аватар за замовчуванням

28.01.2013 14:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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