Кодирование по кодам Хемминга

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Новосибирский государственный технический университет

Кафедра вычислительной техники

Отчет по дисциплине «Кодирование»

Лабораторная работа №2

Кодирование по кодам Хемминга.

Факультет: АВТ                                                                         Преподаватель:

Группа:       АМ-610                                                                   Титов Г. И.

Студенты:  Королевская В.Е.

                    Таратухин И.И.

Новосибирск, 2009


          1. Цель работы

Изучение и сравнение результатов  кодирования по кодам Хемминга.

          2. Задание

Изучить защитный код, используемый в лабораторной работе. Составить программу  кодирования и декодирования передаваемого числа.  Выбрать номер выполняемой лабораторной работы, вывести число для передачи, выбрать требуемый режим передачи. Проанализировать полученные результаты, сравнить их с эталонной функцией.

          3. Ход работы                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

В приложении «Стенд» во вкладке «Code» составляем программу кодирования исходного числа (листинг. 1).

Функция encode принимает в качестве входного параметра исходное число valueтипа char(так как используется 8-разрядное число для передачи). Результат выполнения функции – закодированное число.

Листинг 1. Программа кодирования исходного числа.

#define EXPORT extern "C" __declspec (dllexport)

EXPORT char encode(char value)

{

  char bits[8];

  int i = 0;

  for ( i = 0; i < 8; i++ )

  bits[i] = (value >> i) & 0x1;

  bits[0]=bits[2] ^ bits[4] ^ bits[6];

  value = value | bits[0];

  bits[1]=bits[2] ^ bits[5] ^ bits[6];

  value = value | ((bits[1])*2);

  bits[3]=bits[4] ^ bits[5] ^ bits[6];

  value = value | ((bits[2])*8);

  for( i = 0; i < 7; i++)

  bits[7] ^= bits[i];

  value = value | (bits[7])*128;

return value;

}

Составляем программу декодирования принятого числа (рис.2). Функция decode принимает в качестве входного параметра принятое число value. Результат выполнения функции – раскодированное число.

Листинг 2. Программа декодирования принятого числа.

#define EXPORT extern "C" __declspec (dllexport)

EXPORT char decode(char value)

{

  char bits[8];

  char contBits = 0;

  char contParitBit = 0;

  int i = 0;

  for ( i = 0; i < 8; i++ )

   bits[i] = (value >> i) & 1;

   contBits = contBits | (bits[0] ^ bits[2] ^ bits[4] ^ bits[6])*1;

   contBits = contBits | (bits[1] ^ bits[2] ^ bits[5] ^ bits[6])*2;

   contBits = contBits | (bits[3] ^ bits[4] ^ bits[5] ^ bits[6])*4;

  for( i = 0; i < 8; i++)

    contParitBit ^= bits[i];

    if ( contBits && contParitBit )

  {

char temp = 1;

for ( i = 1; i < ((int)contBits)&255; i++ )

      temp = temp << 1;

if ( bits[((int)contBits)&255 - 1] ) { temp = ~temp; value &= temp; }

else value |= temp;

value = value & 116;

  }

  if ( !contBits ) value = value & 116;

  return value;

}

Примеры обнаружения двойной ошибки

7

6

5

4

3

2

1

0

128

64

32

16

8

4

2

1

1

1

1

1

0

1

1

0

Сумма первой контрольной группы

0111=1

Сумма второй контрольной группы

1111=0

Сумма третей контрольной группы

0111=1

Соответственно ContBits=101

Контроль по паритету

ContParitBit=01101111=0

Получили двойную ошибку, должны вернуть полученное число без изменений!

4. Выводы

В ходе работы были построены кодер и декодер по модифицированному коду Хемминга, которые, в отличие от контроля по паритету, позволяет исправлять одиночную ошибку и детектировать двойную ошибку.

Похожие материалы

Информация о работе