Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОИБ Lab 4.doc
Скачиваний:
4
Добавлен:
24.09.2019
Размер:
198.14 Кб
Скачать

3. Результаты работы

1.) Кодирование Хемминга с подсчетом единичных бит

Создадим файл, на котором будем проверять работоспособность программ

В результате кодировки получаем фрагмент

Вносим изменения в исходный файл:

Получили искажения в файле:

Запускаем декодер, восстанавливаем сообщение:

3.2. Ответы на контрольные вопросы

1.) Использование помехоустойчивое кодирования

Реальные системы передачи данных не совершенны. Применяя информационную технику, мы должны учитывать возможность возникновения ошибок при передаче и хранении информации. Это в первую очередь относится к

  • хранению информации на носителях с высокой плотностью записи (магнитные носители, CD-ROM, DVD);

  • передаче данных при ограниченной мощности сигнала (спутниковая и мобильная связь);

  • передаче информации по сильно зашумленным каналам (мобильная связь, высокоскоростные проводные линии связи);

  • каналам связи с повышенными требованиями к надежности информации (вычислительные сети, линии передачи со сжатием данных).

Во всех вышеперечисленных случаях используются коды, контролирующие ошибки.

2.) Расстояние Хемминга – это минимальное число разрядов с неодинаковыми значениями кодовых слов.

3.) Отличие кодов Рида-Соломона от кодов Хемминга

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

4.) Отличие эффекта контрольного суммирования от расчета помехоустойчивых кодов

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

Листинги разработанных программ

Кодер:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <locale.h>

#include <conio.h>

FILE *message;

FILE *crc;

FILE *bug;

void encode()

{

printf("\n Ok! \n");

char *string;

int size_message;

bug = fopen("file.txt", "rt");

fseek(bug , 0 , SEEK_END);

size_message = ftell(bug);

rewind(bug);

if ( ( string = (char*)calloc(sizeof(char) , size_message + 1) ) == NULL )

exit(1);

fread(string , sizeof(char) , size_message + 1 , bug);

fclose(bug);

puts(string);

int *dec_code = new int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++) {

dec_code[i] = string[i];

}

int **bin_code = new int *[strlen(string)];

for(int i=0 ; i<strlen(string) ; i++)

bin_code[i] = new int [7];

for(int i=0 ; i<strlen(string) ; i++)

for(int j=0 ; j<7 ; j++) {

bin_code[i][j] = dec_code[i] % 2;

dec_code[i] /= 2;

}

for(int i=0 ; i<strlen(string) ; i++) {

for(int j=6 ; j>=0 ; j--)

printf(" ");

}

crc = fopen("code.txt", "w");

int *dec_xor = new int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++) {

dec_xor[i] = 0;

for(int j=0 ; j<7 ; j++)

if(bin_code[i][j] == 1)

dec_xor[i] ^= j + 1;

}

for(int i=0 ; i<strlen(string) ; i++) {

fprintf(crc , "%d ", dec_xor[i]);

}

fclose(crc);

}

int main()

{

setlocale(LC_ALL,"Russian");

encode();

getch();

return 0;

}

Декодер:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <locale.h>

#include <conio.h>

FILE *message;

FILE *crc;

FILE *bug;

void decode()

{

printf("\n Ok!\n");

char *string;

int size_message;

message = fopen("file.txt", "rt");

fseek(message , 0 , SEEK_END);

size_message = ftell(message);

rewind(message);

if ( ( string = (char*)calloc(sizeof(char) , size_message + 1) ) == NULL )

exit(1);

fread(string , sizeof(char) , size_message + 1 , message);

fclose(message);

puts(string);

unsigned int *dec_code = new unsigned int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++) {

dec_code[i] = string[i];

}

int **bin_code = new int *[strlen(string)];

for(int i=0 ; i<strlen(string) ; i++)

bin_code[i] = new int [7];

for(int i=0 ; i<strlen(string) ; i++)

for(int j=0 ; j<7 ; j++) {

bin_code[i][j] = dec_code[i] % 2;

dec_code[i] /= 2;

}

for(int i=0 ; i<strlen(string) ; i++) {

for(int j=6 ; j>=0 ; j--);

}

int *dec_xor = new int [strlen(string)];

int *temp = new int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++) {

dec_xor[i] = 0;

for(int j=0 ; j<7 ; j++)

if(bin_code[i][j] == 1)

dec_xor[i] ^= j + 1;

}

for(int i=0 ; i<strlen(string) ; i++)

crc = fopen("code.txt", "rt");

int *crc_bug = new int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++)

fscanf(crc , "%d" , &crc_bug[i]);

fclose(crc);

for(int i=0 ; i<strlen(string) ; i++) {

if(crc_bug[i] != dec_xor[i]) {

dec_xor[i] ^= crc_bug[i];

for(int j=0 ; j<7 ; j++)

if(j == dec_xor[i] - 1)

bin_code[i][j] ^= 1;

for(int k=6 ; k>=0 ; k--);

}

}

int *recovered = new int [strlen(string)];

for(int i=0 ; i<strlen(string) ; i++) {

recovered[i] = 0;

for(int j=0 ; j<7 ; j++)

recovered[i] += bin_code[i][j] * pow(2.0 , j);

}

}

int main()

{

setlocale(LC_ALL,"Russian");

decode();

getch();

return 0;

}

8

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