Читайте также:
|
|
Завдання1. Зобразити у двійково-десятковому коді 8421 (BCD) наступні числа
Варіант | ||||||||||
Дані | ||||||||||
Варіант | ||||||||||
дані | ||||||||||
Варіант | ||||||||||
дані |
Завдання 2. Перевести із двійкового коду 8421 (BCD) у десятковий
Варіант | ||||||||||
дані | ||||||||||
Варіант | ||||||||||
дані | ||||||||||
Варіант | ||||||||||
дані |
Завдання 3. Перевести у двійкову систему числення дроби
Варіант | ||||||||||
дані | а)78,61 б)0,117 | а)38,49 б)0,3125 | а)4,531 б)13,6 | а)84,37 б)1,245 | а)5,41 б)71,35 | а)3,28 б)6,513 | а)4,771 б)9,18 | а)1,112 б)99,3 | а)2,67 б)71,15 | а)11,31 б)7,123 |
Варіант | ||||||||||
дані | а)7,16 б)65,48 | а)15,17 б)28,413 | а)1,135 б)49,761 | а)2,81 б)33,111 | а)0,84 б)85,221 | а)1,932 б)14,5 | а)0,37 б)21,08 | а)3,121 б)74,1 | а)1,434 б)27,4 | а)8,5 б)0,871 |
Варіант | ||||||||||
дані | а)1,7 б)243,6 | а)0,333 б)7,6 | а)16,82 б)5,51 | а)0,19 б)5,28 | а)7,43 б)23,75 | а)2,74 б)3,47 | а)0,001 б)10,8 | а)63,7 б)3,77 | а)1,64 б)99,1 | а)4,31 б)0,02 |
Завдання 4. Перевести у десятковий код, а тоді зобразити у двійково-десятковому коді 8421(BCD) наступні числа:
Варіант | |||||
Дані | 054(16) | 62(16) | 777(8) | ||
Варіант | |||||
Дані | 543(8) | E2(16) | |||
Варіант | |||||
Дані | 721(8) | 4CA(16) | |||
Варіант | |||||
Дані | 4EF(16) | 531(8) | FF(16) | 56(8) | |
Варіант | |||||
Дані | 2A1(16) | DE(16) | 717(8) | 511(8) | |
Варіант | |||||
Дані | 0541(16) | 475(8) | AB1(16) |
Завдання5. Перевести двійкові числа в десяткову систему числення, застосовуючи спрощений спосіб:
Варіант | |||||
дані | |||||
Варіант | |||||
дані | |||||
Варіант | |||||
дані | |||||
Варіант | |||||
Дані | |||||
Варіант | |||||
Дані | |||||
Варіант | |||||
Дані |
Завдання 6. Скориставшись двійково-десятковими кодами з надлишком 3 чисел, розрахувати S=A+B:
Варіант | |||||
дані A= B= | |||||
Варіант | |||||
дані A= B= | |||||
Варіант | |||||
дані A= B= | |||||
Варіант | |||||
дані A = B= | |||||
Варіант | |||||
дані A= B= | |||||
Варіант | |||||
дані A= B= |
Лабораторна робота №9. Код Хемінга.
Теоретичні положення
В елементах пам’яті, виготовлюваних у вигляді напвіпровідникових ВІС, а також в процесорах підвищеної надійності використовується оперативний апаратний контроль за допомогою кодів Хемінга. Даний кодом виявляє і виправляє одноразові помилки. Кожній з 2n-1 ненульових комбінацій n -розрядного числа відповідає комбінація з n+k бітів. Значення перевірних бітів отримуються в результаті додавання за модулем 2 значень бітів у деяких визначених інформаційних розрядах, Із загальної кількості 2 n-k -1 можливих помилок код Хеммінга може виявити та виправити 2 k -1 помилок. Припустімо, що треба передати або обробити 15 різних послідовностей з одиниць та нулів. Без кодування для цього достатньо чотирьох інформаційних бітів (n =4). Потрібну кількість додаткових перевірних бітів k обчислюють з формули 2 k -1 = n+k. Звідки визначають кількість перевірних розрядів та кількість одноразових помилок, які можуть бути виявлені та виправлені. У цьому випадку кількість додаткових розрядів k = 3, а кількість одноразових помилок – 2 k -1 = 7.
Контрольні біти ki розташовують у послідовності інформаційних бітів uj на позиціях із номерами 2 i- 1 (табл. 1.).
Таблиця 1. Послідовність контрольних та інформаційних бітів у коді Хеммінга
… | |||||||||||
u 11 | … | u 6 | u5 | k 4 | u 4 | u3 | u 2 | k 3 | u 1 | k 2 | k 1 |
Значення перевірних бітів k i обчислюється додаванням за модулем 2 значень бітів, у двійковому виразі номерів яких наявна одиниця в i -му розряді.
Для обчислення значення k 1 потрібно додати за модулем 2 значення бітів із непарними номерами. Це біти на позиціях з номерами 3, 5, 7, 9, 11, 13, 15:
.
Для визначення k 2 треба додати за модулем 2 біти, у двійковому виразі
номерів яких наявна одиниця у другому розряді, тобто 3, 6, 7, 10, 11, 14, 15:
Контрольний біт k 3 визначається додаванням за модулем 2 бітів, у двійковому виразі номерів яких наявна одиниця у третьому розряді, тобто 5, 6, 7, 12, 13, 14, 15:
.
Аналогічно визначається k4 через біти з номерами: 9,10,11,12,13,14,15:
Визначення та виправлення помилок здійснюється k перевірками. При кожній перевірці додаються за модулем 2 біти послідовності інформаційних та контрольних бітів, двійкові номери яких мають одиницю в першому, другому, третьому і так далі розрядах. Якщо під час передавання не було збою, то результати перевірок дорівнюють нулю. Якщо збій відбувся, то хоча б одна перевірка не дорівнює нулю. У цьому випадку треба сформувати двійковий код з результатів перевірок, який вкаже на розряд, де відбувся збій. Молодший розряд коду результату перевірок формує перша перевірка, старший - остання. Інверсія біта в розряді з одержаним номером виправить помилку.
Приклад. Сформувати код Хеммінга, що виявляє і виправляє одноразову помилку у послідовності:
u 4 | u 3 | u 2 | u 1 |
Для формування коду Хеммінга необхідно к = 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
Дата добавления: 2014-12-18; просмотров: 52 | Поможем написать вашу работу | Нарушение авторских прав |