Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ ден 3.doc
Скачиваний:
15
Добавлен:
12.02.2016
Размер:
233.47 Кб
Скачать

Приклад crc(7,3)

Тепер, коли ми розглянули CRC-арифметику, ми можемо інтерпретувати обчислення CRC як узяття залишку від ділення. У цьому пункті ми обговоримо деякі деталі і розв’яжемо приклад.

Розглянемо приклад CRC(7,3):

CRC(7,3) означає що:

  1. загальна довжина послідовності n=7 біт

  2. довжина корисної інформації k=3 біта

  3. довжина надлишкової інформації r=n-k=7-3=4 біта (CRC- залишок)

По-перше, необхідно вибрати твірний поліном. Його довжина повинна на один біт перевершувати необхідну довжину CRC. Тобто, для одержання CRC(7,3) необхідно взяти (n-k+1)=r+1=5-бітний поліном (дільник) (відповідно до даного вище визначення його довжина буде рівна 4). Оскільки залишок повинний бути менше дільника (інакше можна виконати ділення ще раз), ми одержимо CRC необхідної довжини.

Узявши довільний дільник, ми прийдемо до деякого CRC-алгоритму. Однак не всі дільники дають гарні результати, тому треба з обережністю підходити до вибору.

Дільник (твірний поліном) повинен відповідати таким вимогам:

  1. Степінь полінома повинна бути рівна r.

  2. Твірний поліном повинен бути неприводимий (ділитися тільки на себе).

  3. Поліном (x^n + 1) повинен ділитися на твірний поліном без остачі.

10000001|11101

11101 |

11010 |

11101 |

11101|

11101|

0|

10000001|10111

10111 |

11100 |

10111 |

10111|

10111|

0|

x^4+x^3+x^2+x^0

x^4+x^2+x^1+x^0

Для CRC(7,3) твірний поліном є 11101: x^4+x^3+x^2+x^0; треба зауважити, що поліном 10111 (дзеркальний до вибраного) також підійде, але будемо розглядати перший.

Кодування

На основі цього твірного полінома 11101 побудуємо схему кодера (ми будемо розглядати апаратне кодування)

Вертикальні зв’язки в кодері будуються за таким принципом:

Присутність і-го зв’язку на схемі відповідає присутності одинички при і-й степені у поліномі.

0 <= і <= n-k.

Пр.: 11101 (тв. поліном)

і=0 ....1-> зв’язок зліва від a1

і=1 ...0.-> зв’язку нема зліва від a2

і=2 ..1..-> зв’язок зліва від a3

і=3 .1...-> зв’язок зліва від a4

і=4 1....-> останній зв’язок є.

Треба зауважити, що перший та останній зв’язок є завжди.

Нехай на вхід надходить k інформаційних біт тоді за k кроків у регістрах a1,a2,a3,a4 утвориться деяка послідовність яка і буде шуканим CRC.

Розглянемо формули за якими можна аналітично визначити значення ai на кожному кроці.

a1=a’4+k, a2=a’1, a3=k+a’4+a’2, a4=k+a’4+a’3, де a’I означає попередній стан I-го регістра (1<=I<=4).

Оскільки a’4+k=a1 то формули для a3, a4 можна записати і так: a3=a1+a’2, a4=a1+a’3

Декодування

На основі твірного полінома будуємо схему декодера. Зв’язки у схемі будуються за тим самим принципом, що і у схемі кодера.

Формули для визначення a1,a2,a3,a4 тепер будуть мати такий вигляд:

a1=a’4+k, a2=a’1, a3=a’4+a’2, a4=a’4+a3

Декодер циклічного коду ділить прийняту кодову комбінацію на твірний поліном. Якщо у результаті в регістрах є лише нулі то має місце правильна передача або помилка що не виявляється.

Розглянемо роботу декодера:

У нашому випадку на вхід декодера поступає n=7 біт з них k=3 записуються у запам’ятовуючому регістрі. За n тактів (поки вона поступає) відбувається процес ділення на твірний поліном, якщо остача від ділення =0 то k біт з запам’ятовуючого регістру видаються користувачу.

Виправлення помилки

Якщо після ділення (у декодері) у регістрах a1, a2, a3, a4 є хоча б одна одиничка то значить що при передачі послідовності була помилка. Для виправлення помилки застосовується таке правило:

На вхід декодера подається стільки нулів поки у регістрі не з’явиться комбінація 1000 (у нашому випадку) тобто у регістрі a1=1 а всі інші =0; номер такту при якому з’явилась комбінація 1000 і є номером спотвореного біту. Після цього залишається лише інвертувати спотворений біт і видати користувачу послідовність.

Приклад ( СRС(7.3), тв. поліном =11101 )

Для прикладу закодуємо 100 у результаті отримаємо послідовність 1001110

Зліва кожен і-й рядок відповідає стану регістрів у кодері після надходження і-го біту.

Значення CRC можна отримати й таким способом:

1000000|11101

+11101..|

.1101..|

+.11101.|

...1110|=CRC

Вхідна комбінація доповнюється r нулями і отримана послідовність ділиться на тв. поліном (див. справа).

Запис CRC зліва дзеркальний до CRC справа (їх значення однакові) лише тому, що при кодуванні нам простіше вводити спочатку молодший біт, а при звичайному діленні більш звично починати з старшого біту.

Тепер розкодуємо цю послідовність (1001110) у результаті отримаємо що у регістрах a1, a2, a3, a4 будуть нулі це означає що при передачі послідовність не була спотворена, або у послідовності є помилка, що не виявляється.

Зліва кожен і-й рядок відповідає стану регістрів у декодері після надходження і-го біту.

Аналогічно до кодування є й інший спосіб перевірки (справа).

1001110|11101

+11101..|

.11101.|

+.11101.|

...0000|

Припустимо що при передачі послідовності 3-й біт послідовності був спотворений (1011110). У результаті буде виявлена помилка і після додавання 3-х нулів з’явиться потрібна послідовність, інвертуємо 3-й біт і таким чином визначимо що передавана послідовність була 100

Зліва кожен і-й рядок відповідає стану регістрів у декодері після надходження і-го біту.

1011110000.|11101

+11101......|

.10101.....|

+.11101.....|

..10000....|

+..11101....|

...11010...|

+...11101...|

.....11100.|

+.....11101.|

=......0001.|

Після надходження n біт виявляється, що у повідомленні є помилка.

Після додавання у кінець послідовності 3-х нулів ми отримуємо 1 у молодшому розряді (регістр a1=1), всі інші 0. Таким чином ми визначили, що помилка була у 3-му біті (рахуючи не з нуля, а з одинички), інвертуючи його 101 отримуємо передану послідовність 100.

Завдання Код CRC(n,k). Виберіть твірний поліном. Нарисуйте функціональну схему кодера. Закодуйте 3 слова. Нарисуйте функціональну схему декодера. В одній з отриманих послідовностей спотворте вказаний символ. Декодуйте спотворену послідовність. Нештатні ситуації, які можуть виникнути при деяких вхідних даних проаналізуйте.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]