Разработка системы сбора и передачи информации

Способы передачи данных и методы фазирования. Передача алфавитно-цифровой информации. Разработка кодирующего и декодирующего устройства. Расчет среднего времени запаздывания информации. Разработка структурных схем и алгоритмов функционирования СПД.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.12.2012
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

В курсовом проекте необходим лишь контроль циклическим кодом, то есть контроль ошибок. Для обнаружения ошибки достаточно разделить принятую последовательность на образующий полином и проанализировать остаток. При нулевом остатке ошибок при передаче не обнаружено, в противном случае в принятой последовательности содержатся ошибки и требуется повторная передача блока. Аналогично кодеру, n-бит старшим разрядом вперед поступают на вход схемы деления на образующий полином Р(х), при этом ключ К1 в положении «1». После передачи n-символов схема управления переключает ключ К1 в положение «2» и остаток за r тактов поступает на УУ. Структурная схема декодера будет иметь вид.

Рисунок 3.6 - Структурная схема декодера

Выводы к главе 3

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

4. Разработка кодирующего и декодирующего устройства

4.1 Описание программы

Общие сведения

В соответствии с заданием на курсовой проект был разработан программный продукт «Передача и прием информации с использованием CRC - кода», наглядно демонстрирующий работу кодера и декодера циклического кода. Приложение было разработано в среде программирования C++ Builder 5.0. Компиляция выполнена без использования динамических библиотек и runtime пакетов с целью обеспечения переносимости программы на компьютер, где не установлена среда C++ Builder 5.0. Для функционирования приложения на компьютере должна быть установлена операционная система семейства Microsoft Windows. Аппаратные требования приложения невелики, благодаря чему оно может быть использовано и на «слабых» компьютерах.

Функциональное значение

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

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

Входные данные

Программный продукт позволяет вводить данные с клавиатуры или загружать из файла. Исходными данными являются:

· информационная последовательность,

· образующий полином P(x),

· вектор ошибок

Ввод названных данных производится в двоичном виде (нули и единицы), что позволяет наглядно анализировать работу системы.

Выходные данные

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

Математическая постановка задачи

Циклические коды находят наибольшее распространение в системах передачи данных с решающей обратной связью, что обусловлено их высокими корректирующими свойствами, сравнительно простой реализацией, невысокой избыточностью. Особенно они эффективны при обнаружении пакетов ошибок. Циклические коды относятся к блочным систематическим кодам, в которых каждая комбинация кодируется самостоятельно в виде блока таким образом, что информационные k и проверочные г элементы всегда находятся на определенных местах. Для упрощения процедуры кодирования и декодирования проверочные биты размещают в конце блока. Кодирование передаваемого сообщения осуществляется умножением двоичной последовательности G(x) на одночлен хr, имеющий ту же степень, что и образующий полином Р(х), с добавлением к этому произведению остатка R(x), полученного после деления произведения G(x)*xr на образующий полином, т. е. передаваемое в канал связи сообщение F(x) имеет вид:

F(x) = G(x)* xr+R(x). (4.1)

При декодировании принимаемая последовательность F(x) снова делится на образующий полином Р(х). Полученный нулевой остаток R(x)=0 свидетельствует об отсутствии ошибок в принятом блоке, а отличие от нуля - о наличии ошибок.

Описание логической структуры

Для моделирования работы кодера и декодера циклического кода в составы программы был включен класс Coder. В состав класса входят следующие переменные:

Таблица 4.1 - Переменные класса Coder

Имя переменной

Тип

Комментарии

Step_P

integer

Степень образующего полинома

V

Объем передаваемой информации

i

Счетчики в циклах

j

Inf

bool *

Указатель на массив информации

Pol

Указатель на массив представления полинома

Reg_Cod

Указатель на массив представления кодера

Reg_Dec

Указатель на массив представления декодера

Err

Указатель на вектор ошибок

Для представления информации в программе используется тип bool. Это приводит к увеличению объема занимаемой памяти, но в данном случае оно несущественно, так как передается лишь 240 бит. Каждый элемент массива Reg_Cod и Reg_Dec соответствует одной ячейке регистра.

Прототипы функций класса Coder:

· void Init();

· bool* getInf();

· bool* getPol();

· bool* getReg();

· void setInf(bool* );

· void setPol(bool* );

· void setReg(bool* );

· void setSt(int);

· int getSt();

· int getV();

· bool* getDec();

· bool* getErr();

· void setDec(bool* );

· void setErr(bool* );

· void coder::Cod();

· void coder::Decod().

Функция Init() - конструктор класса.

Большинство функций класса предназначены для «извлечения» или изменения значения закрытых переменных класса. Наибольший практический интерес представляют функции кодирования (void Cod() ) и декодирования (void Decod() ) информации.

Рисунок 4.1 - Блок-схема алгоритма функции Cod()

Рисунок 4.2 - Блок-схема алгоритма функции Decod()

Моделирование работы системы происходит в несколько этапов:

1. инициализация образующего полинома;

2. формирование информационной последовательности;

3. кодирование;

4. наложение вектора ошибок;

5. декодирование.

Все перечисленные этапы отражены в интерфейсе программы.

Рисунок 4.3 - Интерфейс программы.

4.2 Тестирование программной реализации

Пусть объем исходной информации равен 1 байту: I=10111011

Полином четвертой степени:

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

Тест первый - нулевой вектор ошибок

1

0

1

1

1

0

1

1

0

0

0

0

1

1

0

0

1

1

1

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

1

1

1

1

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

0

0

1

1

0

0

1

1

1

0

0

0

1

1

0

1

1

0

0

1

1

Рисунок 4.4 - Кодирование исходной последовательности

Остаток от деления в двоичном виде: 0011.

1

0

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

0

1

1

1

0

1

1

0

0

1

1

Для декодирования разделим информацию на образующий полином

1

0

1

1

1

0

1

1

0

0

1

1

1

1

0

0

1

1

1

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

1

1

1

1

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

0

1

1

1

0

0

0

1

1

0

1

1

1

1

0

1

1

0

0

0

0

Рисунок 4.5 Декодирование информационной последовательности (нулевой вектор ошибок)

Нулевой вес остатка свидетельствует об отсутствии ошибок в принятой последовательности.

Тест второй (одиночная ошибка).

Исказим третий бит закодированной последовательности:

1

0

0

1

1

0

1

1

0

0

1

1

1

1

0

0

1

1

1

0

0

1

1

0

1

0

0

1

1

0

0

1

1

1

0

1

1

1

1

0

0

1

1

0

1

0

0

1

1

0

0

1

1

1

0

1

1

1

1

0

0

1

0

1

0

1

Рисунок 4.6 - Декодирование информационной последовательности (одна ошибка)

Так как вес остатка не равен нулю, то информация передана с ошибками.

Тест третий (двойная ошибка).

Исказим 4-й и 5-й бит передаваемой последовательности

1

0

1

0

0

0

1

1

0

0

1

1

1

1

0

0

1

1

1

0

0

1

1

1

0

1

0

1

1

0

0

1

1

1

1

1

0

1

1

0

0

1

1

1

1

0

1

1

1

0

0

1

1

0

0

1

Рисунок 4.7 - Декодирование информационной последовательности (две ошибки)

Остаток от деления свидетельствует о наличии ошибок в принятой последовательности.

Введем предложенные данные для тестирования программной реализации

Рисунок 4.8 - Тестирование программной реализации (первый тест)

Рисунок 4.9 - Тестирование программной реализации (второй тест)

Рисунок 4.10 - Тестирование программной реализации (третий тест)

Результаты тестирования полностью совпали с теорией, что свидетельствует о верной работе программной реализации.

Выводы к главе 4

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

Листинг программы приведен в приложении C.

Заключение

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

Приложение А

Список используемых сокращений

СПД - система передачи данных.

УФЦ - устройство фазирования по циклу.

ТИ - система телеизмерения.

ТС - система телесигнализации.

ТУ - система телеуправления.

ТУ-ТС - система телеуправления и телесигнализации.

ТИ-ТС - система телеизмерения и телесигнализации.

ОС - обратная связь.

ИОС - информационная обратная связь.

РОС - решающая обратная связь.

КОС - комбинированная обратная связь.

ГВП - групповое время прохождения.

УУ - устройство управления.

СПЗ счетчик повторных запросов.

БФИ - блок формирования информации.

КУ - кодирующее устройство.

БНУ - блок начальной установки.

ФТИ - формирователь тактовых импульсов.

ДНБ - датчик номера блока.

ДМК - датчик маркерной комбинации.

АОКС - анализатор обратного канала связи.

БАСИ - блок аварийной сигнализации и индикации.

Кл - ключевая схема.

ФСО - формирователь сигналов обмена.

ФК - фазовый корректор.

БН - буферный накопитель.

ДА - датчик адреса источника.

БППИ - блок преобразования передаваемой информации.

РгМК - регистр маркерной комбинации.

РгСК - регистр служебной комбинации.

ВхРг - входной регистр.

ДшМК - дешифратор маркерной комбинации.

ДКУ - декодирующее устройство.

ФСОС - формирователь сообщения обратной связи.

БАСК - блок анализа служебной комбинации.

БПВИ - блок преобразования и выдачи информации.

Приложение Б

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

Coder.h

#ifndef coderH

#define coderH

//-----------------

class coder

{protected:

private:

int Step_P; //степень полинома

bool *Inf; //указатель на массив информационных элеметов

bool *Pol; //указатель на массив представления полинома

bool *Reg_Cod;

bool *Err;

bool *Reg_Dec; //регистры кодера

int V; //объем информации

public:

int i,j; //счетчики

void Init();

bool* getInf();

bool* getPol();

bool* getReg();

void setInf(bool* );

void setPol(bool* );

void setReg(bool* );

void setSt(int);

int getSt();

int getV();

bool* getDec();

bool* getErr();

void setDec(bool* );

void setErr(bool* );

void coder::Cod();

void coder::Decod();};

Coder.cpp

extern PACKAGE coder *My;

//---------------------------------------------------------------------------

#endif

#include <vcl.h>

#pragma hdrstop

#include "coder.h"

pragma package(smart_init)

void coder::Init()

{ Inf=0; Pol=0; Reg_Cod=0; Step_P=0; Reg_Dec=0; Err=0; V=12; }

bool* coder::getInf() { return Inf; }

bool* coder::getPol() { return Pol; }

bool* coder::getReg() { return Reg_Cod; }

void coder::setInf(bool* A) { Inf=A; }

void coder::setPol(bool* A) { Pol=A;}

void coder::setReg(bool* A) { Reg_Cod=A; }

void coder::setSt(int B) { Step_P=B; }

int coder::getSt() { return Step_P; }

int coder::getV() { return V; }

bool* coder::getDec() { return Reg_Dec; }

bool* coder::getErr() { return Err;}

void coder::setDec(bool* A) { Reg_Dec=A;}

void coder::setErr(bool* A) { Err=A; }

void coder::Cod()

{if(Inf!=0&&Pol!=0)

{ if (Reg_Cod==0) Reg_Cod=new bool[Step_P];

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

{ Reg_Cod[i]=0; } //Начальное заполнение регистра

for(i=0;i<V-Step_P;i++)

{ bool Scan=Inf[i]^Reg_Cod[0];

if(Scan==0)

{for(j=0;j<Step_P;j++) { Reg_Cod[j]=Reg_Cod[j+1]; }

Reg_Cod[Step_P-1]=0; }

if(Scan==1)

{ for(j=0;j<Step_P;j++) { Reg_Cod[j]=Reg_Cod[j+1]^Pol[j+1]; }

Reg_Cod[Step_P-1]=1; } }

for(i=0;i<Step_P;i++) { Inf[V-Step_P+i]=Reg_Cod[i]; } } }

//-------------------------------------------------------------------------------

void coder::Decod()

{ if(Inf!=0&&Pol!=0&&Err!=0)

{ Reg_Dec=new bool[Step_P];

for(i=0;i<Step_P;i++) { Reg_Dec[i]=0; }

for(i=0;i<V;i++) { bool Scan=Reg_Dec[0];

if(Scan==0)

{for(j=0;j<Step_P-1;j++) { Reg_Dec[j]=Reg_Dec[j+1]; }

Reg_Dec[Step_P-1]=Inf[i]^Err[i]; }

if(Scan==1)

{ for(j=0;j<Step_P-1;j++) { Reg_Dec[j]=Reg_Dec[j+1]^Pol[j+1]; }

Reg_Dec[Step_P-1]=(Inf[i]^Err[i])^1; } } } }

Unit2.cpp

#pragma hdrstop

#include <stdio.h>

#include "Unit3.h"

#include "Unit2.h"

#include "coder.h"

#include <math.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1; coder * My;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ My=new coder; My->Init(); }

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{Randomize(); My->setSt(StrToInt(Edit1->Text));

int Step_P=My->getSt(); //считывание степени полинома

StringGrid2->ColCount=Step_P+1;

if(My->getPol()!=0) delete [Step_P+1] My->getPol(); //если массив не инициализирован

bool* Pol=new bool[Step_P+1]; Pol[0]=1; Pol[Step_P]=1;

for (i=1;i<Step_P;i++) { Pol[i]=random(2); } //инициализация полинома

for(i=0;i<Step_P+1;i++)

{ StringGrid2->Cells[i][1]=IntToStr(Pol[i]);

StringGrid2->Cells[i][0]=IntToStr(Step_P-i); } //вывод на экран

StringGrid2->Visible=true; Label2->Visible=true; My->setPol(Pol); }

//---------------------------------------------------------------------------

void __fastcall TForm1::Inversia_pol(TObject *Sender) //инверсия элемента в массиве полинома

{My->getPol()[Scan]=StrToInt(StringGrid2->Cells[Scan][1])^1;

StringGrid2->Cells[Scan][1]=IntToStr(My->getPol()[Scan]);}

//---------------------------------------------------------------------------

void __fastcall TForm1::scan(TObject *Sender, int ACol, int ARow,bool &CanSelect)

{Scan=ACol;}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{ int Step_P=My->getSt();

if(RadioButton1->Checked==true&&My->getSt()<32&&My->getSt()>2) //Заполнение информационного массива random

{ bool* Inf=My->getInf();

if(Inf==0) Inf=new bool[240];

StringGrid1->ColCount=240;

for(i=0;i<My->getV()-Step_P;i++) //Инициализация информации

{ Inf[i]=random(2); StringGrid1->Cells[i][0]=IntToStr(Inf[i]); }

for(i=My->getV()-Step_P;i<My->getV();i++)

{ Inf[i]=0; StringGrid1->Cells[i][0]=IntToStr(Inf[i]); } //Умоножаем на степень полинома

StringGrid1->Visible=true; My->setInf(Inf); }

if(RadioButton2->Checked==true&&My->getSt()<32&&My->getSt()>2) //загрузка из файла

{bool* Inf=My->getInf(); OpenDialog1->DefaultExt="isk"; OpenDialog1->FilterIndex=2;

if(OpenDialog1->Execute())

{ FILE *P=fopen(OpenDialog1->FileName.c_str(),"r"); fseek(P,0l,0);

char a[33]={0}; i=0;

do { a[i]=fgetc(P); i++; } while(feof(P)==0&&i<33);

if(Inf==0) Inf=new bool[My->getV()]; char A=128;

for(i=0;i<30;i++) //вывод на экран

{A=128;

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

{ Inf[8*i+j]=((a[i]&A)>>(7-j))&0x1; A=A/2; } }

StringGrid1->ColCount=My->getV(); StringGrid4->ColCount=My->getV();

for(i=0;i<My->getV();i++)

{StringGrid4->Cells[i][0]=IntToStr(Inf[i]); StringGrid1->Cells[i][0]=IntToStr(Inf[i]); }

StringGrid1->Visible=true; StringGrid4->Visible=true;

My->setInf(Inf); fclose(P); } } }

//---------------------------------------------------------------------------

void __fastcall TForm1::Inversia_inf(TObject *Sender)

{My->getInf()[Scan]=StrToInt(StringGrid1->Cells[Scan][0])^1;

StringGrid1->Cells[Scan][0]=IntToStr(My->getInf()[Scan]);}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender) //кодирование информации

{ My->Cod(); StringGrid3->ColCount=My->getSt(); StringGrid3->Visible=true;

for(i=0;i<My->getSt();i++) //Вывод на экран регистров кодера

{StringGrid3->Cells[i][0]=IntToStr(My->getReg()[i]); }

bool *Err=My->getErr();

if(Err==0) { Err=new bool[My->getV()]; }

StringGrid4->ColCount=My->getV();

for(i=0;i<My->getV();i++)

{ Err[i]=0; StringGrid4->Cells[i][0]=IntToStr(My->getInf()[i]);

StringGrid4->Cells[i][1]=IntToStr(0); }

StringGrid4->Visible=true; My->setErr(Err); }

//---------------------------------------------------------------------------

void __fastcall TForm1::Inversia_err(TObject *Sender)

{My->getErr()[Scan]=StrToInt(StringGrid4->Cells[Scan][1])^1;

StringGrid4->Cells[Scan][1]=IntToStr(My->getErr()[Scan]); }

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender) //декодирование

{ My->Decod(); StringGrid5->ColCount=My->getSt(); StringGrid5->Visible=true;

for(i=0;i<My->getSt();i++) { StringGrid5->Cells[i][0]=IntToStr(My->getDec()[i]); }

int E=0 ; //наличие ошибки

for (i=0;i<My->getSt();i++) //проверка регстра декодара на наличие "1"

{ if(My->getDec()[i]==1) E=1; }

if (E==0) Label6->Caption="Ошибок не обнаружено" ; //нулевой вес остатка

if (E==1) Label6->Caption="Передача произведена с ошибками" ; }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender) //Сохранение полинома в файл

{ SaveDialog1->DefaultExt="pol"; SaveDialog1->FilterIndex=2;

if(SaveDialog1->Execute())

{FILE *P=fopen(SaveDialog1->FileName.c_str(),"w+"); fseek(P,0l,0);

if(My->getPol()!=0)

{char A=0; int B=128;

for(i=0;i<=(My->getSt())/8;i++)

{ A=0; B=0x80;

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

{ if(8*i+j<=My->getSt()) A=A|((My->getPol()[i*8+j])*B);

B=B/2; }

fputc(A,P); }

fclose(P); } } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender) //Загрузка полинома из файла

{ OpenDialog1->DefaultExt="pol"; OpenDialog1->FilterIndex=2;

if(OpenDialog1->Execute())

{ FILE *P=fopen(OpenDialog1->FileName.c_str(),"r"); fseek(P,0l,0);

My->setSt(StrToInt(Edit1->Text)); char a[4]={0}; i=0;

do { a[i]=fgetc(P); i++; } while(feof(P)==0&&i<4);

if(My->getPol()!=0) delete [My->getSt()+1] My->getPol();

StringGrid2->ColCount=My->getSt()+1; bool* Pol=new bool[32]; char A=128;

for(i=0;i<4;i++) //вывод на экран

{ A=128;

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

{Pol[8*i+j]=((a[i]&A)>>(7-j))&0x1; A=A/2; } }

for(i=0;i<=My->getSt();i++)

{StringGrid2->Cells[i][0]=IntToStr(My->getSt()-i); StringGrid2->Cells[i][1]=IntToStr(Pol[i]); }

Edit1->Text=StrToInt(My->getSt()); StringGrid2->Visible=true; Label2->Visible=true;

My->setPol(Pol); fclose(P); } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender) //запись информации в файл

{SaveDialog1->InitialDir=GetCurrentDir(); SaveDialog1->DefaultExt="inf";

SaveDialog1->FilterIndex=2;

if(SaveDialog1->Execute())

{ FILE *P=fopen(SaveDialog1->FileName.c_str(),"w+");fseek(P,0l,0);

if(My->getInf()!=0)

{char A=0; int B=128;

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

{ A=0; B=0x80;

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

{ A=A|((My->getInf()[i*8+j])*B); B=B/2; }

fputc(A,P); } }

fclose(P); } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender) //сохранение значений регистров кодера

{ SaveDialog1->DefaultExt="cod"; SaveDialog1->FilterIndex=2;

if(SaveDialog1->Execute())

{FILE *P=fopen(SaveDialog1->FileName.c_str(),"w+"); fseek(P,0l,0);

if(My->getReg()!=0)

{ char A=0; int B=128;

for(i=0;i<=(My->getSt())/8;i++)

{ A=0; B=0x80;

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

{ if(8*i+j<My->getSt()) A=A|((My->getReg()[i*8+j])*B);

B=B/2; }

fputc(A,P); }

fclose(P); } } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn6Click(TObject *Sender) //сохранение значений регистров декодера

{SaveDialog1->DefaultExt="dec"; SaveDialog1->FilterIndex=2;

if(SaveDialog1->Execute())

{ FILE *P=fopen(SaveDialog1->FileName.c_str(),"w+"); fseek(P,0l,0);

if(My->getDec()!=0)

{ char A=0; int B=128;

for(i=0;i<=(My->getSt())/8;i++)

{ A=0; B=0x80;

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

{ if(8*i+j<My->getSt()) A=A|((My->getDec()[i*8+j])*B); B=B/2; }

fputc(A,P); }

fclose(P); } } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn5Click(TObject *Sender) //Сохранение вектора ошибок

{ SaveDialog1->DefaultExt="err"; SaveDialog1->FilterIndex=2;

if(SaveDialog1->Execute())

{ FILE *P=fopen(SaveDialog1->FileName.c_str(),"w+"); fseek(P,0l,0);

if(My->getErr()!=0)

{char A=0; int B=128;

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

{ A=0; B=0x80;

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

{ A=A|((My->getErr()[i*8+j])*B); B=B/2; }

fputc(A,P); } }

fclose(P); } }

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn7Click(TObject *Sender) //Считывание вектора ошибок

{ bool* Err=My->getErr(); OpenDialog1->DefaultExt="err"; OpenDialog1->FilterIndex=2;

if(OpenDialog1->Execute())

{FILE *P=fopen(OpenDialog1->FileName.c_str(),"r"); fseek(P,0l,0); char a[33]={0}; i=0;

do { a[i]=fgetc(P); i++;} while(feof(P)==0&&i<33);

if(Err==0) Err=new bool[My->getV()];

char A=128;

for(i=0;i<30;i++) {A=128; //вывод на экран

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

{ Err[8*i+j]=((a[i]&A)>>(7-j))&0x1; A=A/2; } }

StringGrid4->ColCount=240;

for(i=0;i<My->getV();i++)

{StringGrid4->Cells[i][1]=IntToStr(Err[i]); }

StringGrid4->Visible=true; My->setErr(Err); fclose(P); } } }

Размещено на Allbest.ru


Подобные документы

  • Системы сбора и передачи информации. Обоснование выбора кода, способа передачи и синхронизации. Выбор длины посылки, формата кодового перехода. Расчет помехоустойчивости и времени запаздывания. Разработка структурной схемы передающего устройства.

    курсовая работа [412,8 K], добавлен 24.06.2013

  • Методы обеспечения целостности информации в системах стационарных и подвижных объектов. Определение оптимальных характеристик корректирующего кода, разработка кодирующего устройства; технические системы сбора телеметрической информации и охраны объектов.

    дипломная работа [3,8 M], добавлен 01.07.2011

  • Назначение и классификация компьютерных сетей. Распределенная обработка данных. Классификация и структура вычислительных сетей. Характеристика процесса передачи данных. Способы передачи цифровой информации. Основные формы взаимодействия абонентских ЭВМ.

    контрольная работа [36,8 K], добавлен 21.09.2011

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

    курсовая работа [754,8 K], добавлен 12.03.2009

  • Особенности управляющих микроконтроллеров. Разработка контроллера для реализации комплекса сбора информации, рассчитанного на фиксирование данных в оперативно-запоминающем устройстве и одновременную передачу её по GSM-каналу в виде SMS-сообщения.

    курсовая работа [1019,3 K], добавлен 26.12.2012

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

    контрольная работа [37,0 K], добавлен 23.09.2011

  • Анализ выбора цифрового сигнального процессора и структурной схемы устройства обработки информации. Расчет надежности устройства и производительности обмена данных, разработка ленточного графика. Обзор особенностей радиального и межмодульного интерфейса.

    дипломная работа [1,8 M], добавлен 20.05.2012

  • Теория информации как наука, предмет и методы ее изучения, применение в компьютерной технике. Системы передачи информации, разновидности сообщений и их источники. Разновидности помехи и способы их устранения. Аппаратура, используемая при передаче данных.

    реферат [23,7 K], добавлен 14.07.2009

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

    презентация [59,8 K], добавлен 14.10.2013

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

    курсовая работа [1,3 M], добавлен 16.08.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.