3 Тестовый пример
В качестве тестового примера использовалась комбинация 11001010000.
В задании к курсовому проекту указано, что n=16, а k=11. Таким образом получили образующую матрицу, которая имеет следующий вид:
Построение матрицы реализовано программно для заданных n и k.
После кодирования исходной комбинации 11001010000 по полученной образующей матрице получили комбинацию1010111101010000. При этом мы суммируем те разряды исходной комбинации, на соответствующих позициях которых, в рассматриваемом столбце образующей матрицы, стоят единицы. Например, возьмем четвертый столбец. Единицы имеются в разрядах 1,2,3,6. При суммировании этих разрядов получим 0. То есть в закодированной комбинации в четвертом разряде получили 0:
Декодирование осуществляется по мажоритарному признаку, то есть при декодировании каждый разряд комбинации проверяется несколькими уравнениями. Благодаря этому можно избежать ошибок при передаче. Даже если в каком-либо разряде ошибка, она поменяет результат только одного уравнения. А в остальных результат останется тот же.
Вывод
В ходе курсовой работы был исследован простой помехоустойчивый код, а именно код Рида-Малера. Данный код обнаруживает ошибки, но не исправляет их. Рассматривался случай, когда n=16, k=11, поэтому в матрице присутствуют только вектора первого и второго порядка. Однако если появится необходимость использовать также вектора третьего порядка, то образующая матрица станет значительно больше, что не выгодно с точки зрения экономии памяти. При этом также увеличится длина закодированной комбинации, что увеличит время передачи сообщения по каналу связи.
Библиографический список
1. Березюк Н.Т. «Кодирование Информации» - 1978.
2. Конспект лекций по дисциплине «Кодирование и защита информации».
Приложение
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
const N=16;
const K=11;
char *s;
int f,l[11],l1[16];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{int i,j;
for (i=0;i<N;i++)
{ StringGrid1->Cells[i][0]=1; }
for (i=0;i<N;i++)
{ StringGrid1->Cells[i][1]=0;
i++; StringGrid1->Cells[i][1]=1; }
for (i=0;i<N;i++)
{ StringGrid1->Cells[i][2]=0;
i++; StringGrid1->Cells[i][2]=0;
i++; StringGrid1->Cells[i][2]=1;
i++; StringGrid1->Cells[i][2]=1; }
for (i=0;i<N;i++)
{ if (i<N/2)
{ StringGrid1->Cells[i][4]=0; }
else
{ StringGrid1->Cells[i][4]=1; }
}
for (i=0;i<N;i++)
{ if (7<i&&i<12||4>i&&i<8)
{ StringGrid1->Cells[i][3]=0; }
else { StringGrid1->Cells[i][3]=1; }
}
int b;
int k1,k2,a=5;
j=1; b=1;
for (j;j<4;j++)
{ for(i=0;i<N;i++)
{ k1=StringGrid1->Cells[i][b].ToInt();
j++; k2=StringGrid1->Cells[i][j].ToInt(); j--;
if (k1==1&&k2==1)
{ StringGrid1->Cells[i][a]=1; }
else
{ StringGrid1->Cells[i][a]=0; }
}
a++; }
b=2; j=2;
for (j;j<4;j++)
{ for(i=0;i<N;i++)
{ k1=StringGrid1->Cells[i][b].ToInt(); j++;
k2=StringGrid1->Cells[i][j].ToInt(); j--;
if (k1==1&&k2==1)
{ StringGrid1->Cells[i][a]=1; }
else
{ StringGrid1->Cells[i][a]=0; }
}
a++;
}
b=3; j=3;
for (j;j<4;j++)
{ for(i=0;i<N;i++)
{ k1=StringGrid1->Cells[i][b].ToInt(); j++;
k2=StringGrid1->Cells[i][j].ToInt(); j--;
if (k1==1&&k2==1)
{ StringGrid1->Cells[i][a]=1; }
else
{ StringGrid1->Cells[i][a]=0; }
}
}
s=" "; Edit1->Text=s;
Edit1->MaxLength=12;
Memo1->Text=s;
Memo1->Lines->Add("U1=Uk1");
Memo1->Lines->Add("U2=Uk1+Uk2");
Memo1->Lines->Add("U3=Uk1+Uk3");
Memo1->Lines->Add("U4=Uk1+Uk2+Uk3+Uk6");
Memo1->Lines->Add("U5=Uk1+Uk4");
Memo1->Lines->Add("U6=Uk1+Uk2+Uk4+Uk7");
Memo1->Lines->Add("U7=Uk1+Uk3+Uk4+Uk9");
Memo1->Lines->Add("U8=Uk1+Uk2+Uk3+Uk4+Uk6+Uk7+Uk9");
Memo1->Lines->Add("U9=Uk1+Uk5");
Memo1->Lines->Add("U10=Uk1+Uk2+Uk5+Uk8");
Memo1->Lines->Add("U11=Uk1+Uk3+Uk5+Uk10");
Memo1->Lines->Add("U12=Uk1+Uk2+Uk3+Uk5+Uk6+Uk8+Uk10");
Memo1->Lines->Add("U13=Uk1+Uk4+Uk5+Uk11");
Memo1->Lines->Add("U14=Uk1+Uk2+Uk4+Uk5+Uk7+Uk8+Uk11");
Memo1->Lines->Add("U15=Uk1+Uk3+Uk4+Uk5+Uk9+Uk10+Uk11");
Memo1->Lines->Add("U16=Uk1+Uk2+Uk3+Uk4+Uk5+Uk6+Uk7+Uk8+Uk9+Uk10+Uk11");}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{s=Edit1->Text.c_str();
for(int i=1;i<K+1;i++)
{ l[i-1]=StrToInt(s[i]); }
for (int i=0;i<N;i++)
{ f=0;
for (int j=0;j<K;j++)
{ if (StringGrid1->Cells[i][j]==1)
{ f=l[j]+f; if (f==2) f=0;
}
l1[i]=f;
}
}
for(int i=0;i<N;i++)
{ StringGrid2->Cells[i][0]=l1[i];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ int ed, nul,i,j,perem[4];
int l2[16]; int edin1=0,edin2=0,edin3=0,edin4=0,edin5=0,edin6=0;
ed=0; nul=0;
for(int i=0;i<N;i++)
{ l1[i]=StringGrid2->Cells[i][0].ToInt(); }
for(i=0;i<N;i++)
{ l2[i]=l1[i]; }
perem[0]=l1[0]+l1[4]+l1[8]+l1[12]; perem[1]=l1[1]+l1[5]+l1[9]+l1[13];
perem[2]=l1[2]+l1[6]+l1[10]+l1[14];perem[3]=l1[3]+l1[7]+l1[11]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[10][0]=1; edin1=10; }
else
{ StringGrid3->Cells[10][0]=0; }
//------------------------------
ed=0; nul=0;
perem[0]=l1[0]+l1[2]+l1[8]+l1[10]; perem[1]=l1[1]+l1[3]+l1[9]+l1[11];
perem[2]=l1[4]+l1[6]+l1[12]+l1[14]; perem[3]=l1[5]+l1[7]+l1[13]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[9][0]=1; edin2=9; }
else
{ StringGrid3->Cells[9][0]=0; }
//----------------------------
ed=0; nul=0;
perem[0]=l1[0]+l1[2]+l1[4]+l1[6]; perem[1]=l1[1]+l1[3]+l1[5]+l1[7];
perem[2]=l1[8]+l1[10]+l1[12]+l1[14]; perem[3]=l1[9]+l1[11]+l1[13]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[8][0]=1; edin3=8; }
else
{ StringGrid3->Cells[8][0]=0; }
//----------------------------
ed=0; nul=0;
perem[0]=l1[0]+l1[1]+l1[8]+l1[9]; perem[1]=l1[2]+l1[3]+l1[10]+l1[11];
perem[2]=l1[4]+l1[5]+l1[12]+l1[13]; perem[3]=l1[6]+l1[7]+l1[14]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[7][0]=1; edin4=7; }
else
{ StringGrid3->Cells[7][0]=0; }
//---------------------------
ed=0; nul=0;
perem[0]=l1[0]+l1[1]+l1[4]+l1[5]; perem[1]=l1[2]+l1[3]+l1[6]+l1[7];
perem[2]=l1[8]+l1[9]+l1[12]+l1[13]; perem[3]=l1[10]+l1[11]+l1[14]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[6][0]=1; edin5=6; }
else
{ StringGrid3->Cells[6][0]=0; }
//----------------------------
ed=0; nul=0;
perem[0]=l1[0]+l1[1]+l1[2]+l1[3]; perem[1]=l1[4]+l1[5]+l1[6]+l1[7];
perem[2]=l1[8]+l1[9]+l1[10]+l1[11]; perem[3]=l1[12]+l1[13]+l1[14]+l1[15];
for (i=0;i<4;i++)
{ if (perem[i]==1||perem[i]==3)
{ perem[i]=1; ++ed; }
else
{ perem[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[5][0]=1; edin6=5; }
else
{ StringGrid3->Cells[5][0]=0; }
//ПРЕОБРАЗОВАНHOЕ СООБЩЕНИЯ
if (edin1!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][10].ToInt(); }
if (edin2!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][9].ToInt(); }
if (edin3!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][8].ToInt(); }
if (edin4!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][7].ToInt(); }
if (edin5!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][6].ToInt(); }
if (edin6!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][5].ToInt(); }
for(i=0;i<N;i++)
{ if (l1[i]==1||l1[i]==3||l1[i]==5||l1[i]==7)
{ l1[i]=1; }
else
{ l1[i]=0; }
}
//-----------------------------------
int edin7=0,edin8=0,edin9=0,edin10=0;
ed=0;nul=0;
int perem1[8];
perem1[0]=l1[0]+l1[8]; perem1[1]=l1[1]+l1[9];
perem1[2]=l1[2]+l1[10]; perem1[3]=l1[3]+l1[11];
perem1[4]=l1[4]+l1[12]; perem1[5]=l1[5]+l1[13];
perem1[6]=l1[6]+l1[14]; perem1[7]=l1[7]+l1[15];
for (i=0;i<4;i++)
{ if (perem1[i]==1||perem1[i]==3||perem1[i]==5||perem1[i]==7)
{ perem1[i]=1; ++ed; }
else
{ perem1[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[4][0]=1; edin7=6; }
else
{ StringGrid3->Cells[4][0]=0; }
//------------------------------
ed=0; nul=0;
perem1[0]=l1[0]+l1[4]; perem1[1]=l1[1]+l1[5];
perem1[2]=l1[2]+l1[6]; perem1[3]=l1[3]+l1[7];
perem1[4]=l1[8]+l1[12]; perem1[5]=l1[9]+l1[13];
perem1[6]=l1[10]+l1[14]; perem1[7]=l1[11]+l1[15];
for (i=0;i<4;i++)
{ if (perem1[i]==1||perem1[i]==3||perem1[i]==5||perem1[i]==7)
{ perem1[i]=1; ++ed; }
else
{ perem1[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[3][0]=1; edin8=7; }
else
{ StringGrid3->Cells[3][0]=0; }
//----------------------------------
ed=0; nul=0;
perem1[0]=l1[0]+l1[2]; perem1[1]=l1[1]+l1[3];
perem1[2]=l1[4]+l1[6]; perem1[3]=l1[5]+l1[7];
perem1[4]=l1[8]+l1[10]; perem1[5]=l1[9]+l1[11];
perem1[6]=l1[12]+l1[14]; perem1[7]=l1[13]+l1[15];
for (i=0;i<4;i++)
{ if (perem1[i]==1||perem1[i]==3||perem1[i]==5||perem1[i]==7)
{ perem1[i]=1; ++ed; }
else
{ perem1[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[2][0]=1; edin9=8; }
else
{ StringGrid3->Cells[2][0]=0; }
//----------------------------
ed=0; nul=0;
perem1[0]=l1[0]+l1[1]; perem1[1]=l1[2]+l1[3];
perem1[2]=l1[4]+l1[5]; perem1[3]=l1[6]+l1[7];
perem1[4]=l1[8]+l1[9]; perem1[5]=l1[10]+l1[11];
perem1[6]=l1[12]+l1[13]; perem1[7]=l1[14]+l1[15];
for (i=0;i<4;i++)
{ if (perem1[i]==1||perem1[i]==3||perem1[i]==5||perem1[i]==7)
{ perem1[i]=1; ++ed; }
else
{ perem1[i]=0; ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[1][0]=1; edin10=9; }
else
{ StringGrid3->Cells[1][0]=0; }
//2-e преобразование
int l3[11];
if (edin7!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][4].ToInt(); }
if (edin8!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][3].ToInt(); }
if (edin9!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][2].ToInt(); }
if (edin10!=0)
for (i=0;i<N;i++)
{ l1[i]=l1[i]+StringGrid1->Cells[i][1].ToInt(); }
for(i=0;i<N;i++)
{ if (l1[i]==1||l1[i]==3||l1[i]==5)
{ l1[i]=1; }
else
{ l1[i]=0; }
}
//-------------------------------
int perem2=0;
for(i=0;i<N;i++)
{ if (l1[i]==1)
{ ++ed; }
else
{ ++nul; }
}
if (nul<ed)
{ StringGrid3->Cells[0][0]=1; }
else
{ StringGrid3->Cells[0][0]=0; }
}
//---------------------------------------------------------------------------
... давление, гПа 613 Радиорелейная станция Р-419А Рисунок 1.1.3 – Внешний вид станции Р-419А PPC P-419 А предназначена для создания временных быстроразвертываемых малоканальных радиорелейных линий связи, PPC смонтирована на автошасси ЗИЛ-131 в кузове K2-13L Станция имеет три варианта исполнения, отличающихся используемой транспортной базой: Р-419 А - используется ...
0 комментариев