Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Алгоритм Кодирования и декодирования





Рассмотрим алгоритм рекуррентного кодирования информации на примере упрощенной типовой функция кодирования, имеющей следующий вид:

 

где: Xi – символ сообщения, подлежащий преобразованию (кодированию);
Yi – преобразованный (закодированный) i-й символ сообщения;
А, В – установочные параметры алгоритма кодирования, предназначенные для задания начальных параметров на этапе кодирования первого блока символа криптограммы.

 

Алгоритм кодирования следующий:
1. Сообщение разбивается на информационные блоки длиной n в виде последовательность символов Xi.
2. Каждый информационный блок подлежит преобразованию в соответствии с функцией кодирования.
3. Кодированные блок подлежат передаче по каналу связи, при этом в заголовке сообщения добавляются значения А, В, а в каждый информационный блок – Xn.

Процесс кодирования в виде алгоритма представлен на рисунке 1.


Рис.1. Схема алгоритма кодирования информационного блока

На приемной стороне осуществляется декодирование сообщения в соответствии с формулами, имеющими вид:

X 1*= Y 1 A - B;

X 2*= Y 2 X 1*- Y 1;

и т.д.,
где: Xi*- символ, полученный в результате декодирования сообщения.

Если последний декодированный символ Xn* сообщения совпадает с переданным Xn, то блок передан без искажений. При условии Xn*≠ Xn делается вывод о наличии ошибки и применяется процедура обнаружения места ошибки, заключающаяся в декодировании информационного блока в обратном направлении (реверсный режим):

Xn -1*=(Xn* + Yn -1)/ Yn;

Xn -2*=(Xn -1*+ Yn -2)/ Yn -1;

и т.д.

 

Процесс декодирования информационного блока в виде алгоритма представлен на рис. 2.


Рис.2. Схема алгоритма декодирования информационного блока

 

 

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

Кодер (7,4) циклического кода по регистрам.

#include <iostream>

using namespace std;

int app_coder(int x, int y)

{

int a[4];

int g[4];

int c[3];

for (int i = 0; i < 4; i++)

{

a[3 - i] = x % 10;

g[3 - i] = y % 10;

x = x / 10;

y = y / 10;

}

for (int i = 0; i < 3; i++)

c[i] = 0;

for (int i = 0; i < 4; i++)

{

int k = (c[2] + a[i]) % 2;

if (k==0)

{

c[2] = c[1];

c[1] = c[0];

}

else

{

c[2] = (c[1] + g[2]+1) % 2;

c[1] = (c[0] + g[1]+1) % 2;

}

c[0] = k;

cout << a[i] << " ";

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

cout << c[j];

cout << endl;

}

int j = 0;

if (a[0] + a[1] + a[2] + a[3] == 0)

cout << "000000";

else

{

while (a[j] == 0)

{

cout <<a[j];

j++;

}

}

 

int k = a[0];

for (int i = 1; i < 4; i++)

k = k * 10 + a[i];

for (int i = 0; i < 3; i++)

k = k * 10 + c[2 - i];

return k;

}

int main()

{

const int gpolinom = 1011;

char letter;

int x;

do

{

cout << "input code message:" << endl;

cin >> x;

cout << app_coder(x, gpolinom)<<endl;

cout << "One more? (y/n)\n";

cin >> (letter);

}

while (letter == 'y');

return 0;

}

Декодер циклического кода (7,4) по регистрам и весу остатка w<=t.

int app_decoder(int x, int y)

{

char letter;

int a[7];

int b[7];

int g[4];

int c[3];

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

{

a[6 - i] = x % 10;

x = x / 10;

b[6 - i] = a[i];

}

for (int i = 0; i < 4; i++)

{

g[3 - i] = y % 10;

y = y / 10;

}

for (int i = 0; i < 3; i++)

c[i] = 0;

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

{

if (c[2] == 0)

{

c[2] = c[1];

c[1] = c[0];

c[0] = a[i];

}

else

{

c[2] = (c[1] + g[2] + 1) % 2;

c[1] = (c[0] + g[1] + 1) % 2;

c[0] = (a[i] + 1) % 2;

}

cout << a[i] << " ";

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

cout << c[j];

cout << endl;

}

int w = c[0] + c[1] + c[2];

cout << "w="<< w << endl;

 

int count = 0;

if (w == 0)

{

if (a[0] + a[1] + a[2] + a[3] == 0)

cout << "000";

else

{

int j = 0;

while (a[j] == 0)

{

cout << a[j];

j++;

}

}

int k = a[0];

for (int i = 1; i < 4; i++)

k = k * 10 + a[i];

return k;

}

else

{

if (w==1)

for (int i = 4; i < 7; i++)

a[i] = (a[i] + c[6 - i]) % 2;

else

{

while (w > 1)

{

cin >> letter;

count++;

int p = a[0];

for (int i = 0; i < 6; i++)

a[i] = a[i + 1];

a[6] = p;

for (int i = 0; i < 3; i++)

c[i] = 0;

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

{

if (c[2] == 0)

{

c[2] = c[1];

c[1] = c[0];

c[0] = a[i];

}

else

{

c[2] = (c[1] + g[2] + 1) % 2;

c[1] = (c[0] + g[1] + 1) % 2;

c[0] = (a[i] + 1) % 2;

}

cout << a[i] << " ";

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

cout << c[j];

cout << endl;

}

w = c[0] + c[1] + c[2];

cout << "w=" << w << endl;

}

for (int i = 4; i < 7; i++)

a[i] = (a[i] + c[6 - i]) % 2;

for (int i = 0; i < count; i++)

{

int p = a[6];

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

a[6 - j] = a[5 - j];

a[0] = p;

}

}

 

if (a[0] + a[1] + a[2] + a[3] == 0)

cout << "000";

else

{

int j = 0;

while (a[j] == 0)

{

cout << a[j];

j++;

}

}

}

int k = a[0];

for (int i = 1; i < 4; i++)

k = k * 10 + a[i];

return k;

}

 

int main()

{

const int gpolinom = 1011;

char letter;

int x;

do

{

cin >> x;

cout << app_decoder(x, gpolinom) << endl;

cout << "One more? (y/n)\n";

cin >> letter;

}

while (letter == 'y');

return 0;

}

 

 

Вывод по курсовой работе.

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

Позже появились уже циклически избыточные коды(англ. Cyclic redundancy check, CRC) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных. CRC является практическим приложением помехоустойчивого кодирования, основанном на определённых математических свойствах циклического кода. В, частности,

в данном алгоритме используются стандартизованные полиномы.

К примеру

CRC-5-USB (USB token packets)

 

 

Список литературы

1. Дмитриев В.И. «Прикладная теория информации»,М. 1989.

2. Гаранин М.В. и др. Системы и сети передачи информации:Радио и связь,2001-336c.:ил.

3. А.А. Духин «Теория информации»-М.:Гелиос АРВ,2007-248 c.,ил.

4. Глухов М. M., Елизаров В. П., Нечаев А. А. Алгебра: Учебник В 2-х т.Т.II.—М.:Гелиос АРВ,2003.—416с,ил.

5. Коды, исправляющие ошибки. (1972) Авторы: У. Питерсон, Э. Уэлдон. Перевод с английского. Под редакцией Р.Л. Добрушина и С.И. Самойленко.

6. Колесник В.Д., Полтырев Г.Ш. Курс теории информации. М.: Наука, 2006.

7. Вычислительные системы, сети и телекоммуникации. 4-е издание. Авторы – Владимир Бройдо, Ольга Ильина, Питер,2011.

8. Системы и сети передачи данных Авторы:Мельников Д.А. РадиоСофт,2015

 

9. Таненбаум Э. С.Компьютерные сети. 4-е изд СПб Питер, 2011

 

 

Date: 2015-07-24; view: 1382; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию