рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Теоретичні положення

Теоретичні положення - раздел Образование, Лабораторна робота №9. Код Хемінга. В Елементах Пам’Яті, Виготовлюваних У Вигляді Напвіпровідникових Віс, А Також...

В елементах пам’яті, виготовлюваних у вигляді напвіпровідникових ВІС, а також в процесорах підвищеної надійності використовується оперативний апаратний контроль за допомогою кодів Хемінга. Даний кодом виявляє і виправляє одноразові помилки. Кожній з 2n-1 ненульових комбінацій n-розрядного числа відповідає комбінація з n+k бітів. Значення перевірних бітів отримуються в результаті додавання за модулем 2 значень бітів у деяких визначених інформаційних розрядах, Із загальної кількості 2n-k-1 можливих помилок код Хеммінга може виявити та виправити 2k-1 помилок. Припустімо, що треба передати або обробити 15 різних послідовностей з одиниць та нулів. Без кодування для цього достатньо чотирьох інформаційних бітів (n=4). Потрібну кількість додаткових перевірних бітів k обчислюють з формули 2k-1 =n+k. Звідки визначають кількість перевірних розрядів та кількість одноразових помилок, які можуть бути виявлені та виправлені. У цьому випадку кількість додаткових розрядів k = 3, а кількість одноразових помилок – 2k-1 = 7.

Контрольні біти ki розташовують у послідовності інформаційних бітів uj на позиціях із номерами 2i-1 (табл. 1.).

Таблиця 1. Послідовність контрольних та інформаційних бітів у коді Хеммінга

u11 u6 u5 k4 u4 u3 u2 k3 u1 k2 k1

 

Значення перевірних бітів ki обчислюється додаванням за модулем 2 значень бітів, у двійковому виразі номерів яких наявна одиниця в i-му розряді.

Для обчислення значення k1 потрібно додати за модулем 2 значення бітів із непарними номерами. Це біти на позиціях з номерами 3, 5, 7, 9, 11, 13, 15:

.

Для визначення k2 треба додати за модулем 2 біти, у двійковому виразі

номерів яких наявна одиниця у другому розряді, тобто 3, 6, 7, 10, 11, 14, 15:

Контрольний біт k3 визначається додаванням за модулем 2 бітів, у двійковому виразі номерів яких наявна одиниця у третьому розряді, тобто 5, 6, 7, 12, 13, 14, 15:

.

Аналогічно визначається k4 через біти з номерами: 9,10,11,12,13,14,15:

Визначення та виправлення помилок здійснюється k перевірками. При кожній перевірці додаються за модулем 2 біти послідовності інформаційних та контрольних бітів, двійкові номери яких мають одиницю в першому, другому, третьому і так далі розрядах. Якщо під час передавання не було збою, то результати перевірок дорівнюють нулю. Якщо збій відбувся, то хоча б одна перевірка не дорівнює нулю. У цьому випадку треба сформувати двійковий код з результатів перевірок, який вкаже на розряд, де відбувся збій. Молодший розряд коду результату перевірок формує перша перевірка, старший - остання. Інверсія біта в розряді з одержаним номером виправить помилку.

Приклад. Сформувати код Хеммінга, що виявляє і виправляє одноразову помилку у послідовності:

u4 u3 u2 u1

Для формування коду Хеммінга необхідно к = 3 контрольні біти, які мають займати позиції з номерами 1, 2 і 4.

Послідовність з контрольними символами має вигляд:

u4 u3 u2 k3 u1 k2 k1

Значення контрольних бітів визначимо як:

Отже, послідовність, закодована за кодом Хеммінга, буде такою: 1100001. Нехай після передачі відбувся збій в одному розряді і прийнята послідовність 1110001.

Перша та друга перевірки дадуть значення 0, а третя - 1:

1.

2.

3.

Код 101, який створюють результати перевірок, вказує, що відбувся збій у п’ятому розряді. Якщо проінвертувати п’ятий розряд, то одержимо виправлену послідовність 1100001.

Лістинг 1. Приклад програми, яка реалізує код Хемінга для передачі повідомлення довжиною 7 бітів та розшифрування отриманого повідомлення кількістю 11 бітів:

 

uses crt;

const

data_len = 7;

type

PTBlock = ^TBlock;

TBlock = array[1 .. maxint] of byte;

 

function is_power(x: byte): boolean;

var bits: byte;

begin

bits := 0;

while x > 0 do begin

if (x and $01) = $01 then inc(bits);

x := x shr 1;

end;

is_power := (bits = 1);

end;

 

procedure print_block(X: PTBlock; const n: byte);

var i: byte;

begin

for i := n downto 1 do begin

if is_power(i) then textcolor(lightred)

else textcolor(lightgray);

write(X^[i]:4);

end;

writeln; textcolor(lightgray);

end;

 

var

ctrl_bits: byte;

block: PTBlock;

s: string;

check, i, pos: byte;

 

begin

ctrl_bits := 0;

repeat

inc(ctrl_bits);

until (data_len + ctrl_bits + 1) <= (1 shl ctrl_bits);

 

writeln('p = ', ctrl_bits);

 

GetMem(block, (data_len + ctrl_bits)*sizeof(byte));

FillChar(block^, (data_len + ctrl_bits)*sizeof(byte), 0);

Write('sent data [', data_len, '] bits: '); ReadLn(s);

 

pos := 1;

for i := 1 to data_len do begin

while is_power(pos) do inc(pos);

block^[pos] := (ord(s[data_len - i + 1]) - ord('0')); inc(pos);

end;

 

check := $00;

for i := 1 to (data_len + ctrl_bits) do

if block^[i] = 1 then check := check xor i;

 

i := 1;

while check > 0 do begin

block^[i] := (check and $01);

check := check shr 1;

i := 2 * i

end;

print_block(block, (data_len + ctrl_bits));

 

{ Перевірка правильності }

check := $00;

for i := 1 to (data_len + ctrl_bits) do

if block^[i] = 1 then check := check xor i;

writeln('checking error status [0 = no error]: ', check);

 

writeln;

Write('received data [', data_len + ctrl_bits, '] bits: '); ReadLn(s);

check := $00;

for i := 1 to (data_len + ctrl_bits) do

if s[(data_len + ctrl_bits) - i + 1] = '1' then check := check xor i;

writeln('checking error status [0 = no error]: ',

(data_len + ctrl_bits) - check + 1);

 

FreeMem(block, (data_len + ctrl_bits)*sizeof(byte));

ReadLn;

end.

 

При запуску програми вводиться послідовність бітів, які повинні бути передані. Програма кодує їх з використанням коду Хемінга, і виводить результат – послідовність бітів, яка готова до передачі (при цьому червоним кольором виділені «надлишкові» біти, які не несуть інформації, а використовуються тільки для знаходження (висліджування) помилок).

Потім вводиться рядок бітів, отримана приймачем інформації, і після її аналізу виводиться результат – чи є помилка, і в якому біті. (Біти нумеруються зліва направо)

Діалог програми:

sent data [7] bits: 1110011

1 1 1 1 0 0 1 1 1 1 0

checking error status [0 = no error]: 0

 

received data [11] bits: 11111011110

checking error status [0 = no error]: 5


– Конец работы –

Эта тема принадлежит разделу:

Лабораторна робота №9. Код Хемінга.

Теоретичні положення Контрольні біти ki розташовують у послідовності інформаційних бітів uj на позиціях із... ЗАВДАННЯ... Завдання Побудувати код Хемінга Задане число X Довжина розрядної сітки N Кількість контрольних розрядів...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Теоретичні положення

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Таблиця 1.
Варіант Дані

Таблиця 2.
Варіант Дані n=4 n=4 n=4

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги