Добавил:
svokna.by Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_6. Выполнение

.pdf
Скачиваний:
40
Добавлен:
28.02.2018
Размер:
613.49 Кб
Скачать

Процесс продолжается до тех пор, пока каждый двоичный набор длины n не появится в таблице. Это стандартное расположение, с одной стороны, в точности совпадает с таблицей декодирования.[10]

Листинг 2.10 – Построение стандартного расположения c помощью смежных классов

er:= Matrix(9,8);

for j by 1 from 2 to 9 do er[j,j-1]:=1;

end do; M:=vector(9): M[1]:=V:

for l by 1 from 2 to 9 do m:=Matrix(8,8);

for j by 1 from 1 to 8 do for k by 1 from 1 to 8 do

if er[l,k]=1 then if V[j,k]=1 then m[j,k]:=0; else m[j,k]:=1;

end if;

else m[j,k]:=V[j,k]; end if;

end do: end do: M[l]:=m; end do: print(M);

Результат выше изложенного кода:

2.1.8 Построить таблицу синдромов.

Рассмотрим стандартное расположение для (n,k) - кода V

Любые два вектора из одного смежного класса имеют одинаковый синдром.

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

1.По принятому вектору u вычисляем синдром s = uH T вектора u.

2.В таблице образующих смежных классов находим образующий g с синдромом s.

Этот образующий является вектором ошибки для принятого вектора. Таким образом, мы исправим ошибку, сложив принятый вектор u с образующим g смежного класса, и получим кодовое слово v = u + g.

Листинг 2.11 – Построение таблицы синдромов

S:=vector(9):

Ht:=transpose(H);

For j by 1 from 1 to 9 do S:=multiply(M[j][1],Ht); print(M[j][1],S);

end do:

Вывод транспонированной проверочной матрицы:

Принятый вектор u:

Таблица(вектор) синдромов:

2.1.9 Построить таблицу кодировок(закодировать сообщение).

Требуется сопоставить каждой букве информационное слово. Таблица 2.1 – Кодирование сообщения

Буква

Информационное слово

пробел

000

а

001

е

010

к

011

л

100

р101

с110

о111

2.1.10 Выполнить кодирование сообщения длиной в 10-15 символов.

Для кодировки сообщения было выбрано предложение “лес река роса”. Требуется записать это сообщение в виде последовательности информационных слов, используя таблицу кодировки.

Листинг 2.12 – Кодирование сообщения

0],

message := Matrix([[1, 0, 0], [0, 1, 0],

[1,

1,

[0,

0,

0],

[1,

0,

1],

[0,

1,

0],

[1,

0,

1],

[1,

1,

1],

[0,

1,

1],

[0,

0,

1],

[0,

0,

0],

[1,

1,

0],

[0,

0,

1]])

 

 

 

 

 

 

 

 

 

 

 

Получим следующую матрицу закодированного сообщения:

2.1.11 Создать модель передачи этого сообщения через канал с помехами.

Сопоставляем каждому информационному слову из закодированного сообщения кодовое слово. Для это пользуемся кодом полученном в пункте

2.1.3.

Листинг 2.13– Сопоставление кодовых слов информационным словам закодированного сообщения:

for j by 1 from 1 to 13 do for k by 1 from 1 to 8 do

messOut[j,k]:= messOut[j,k]mod 2 end do:

end do: print(messOut);

Получим следующее:

Допустим при помощи генератора случайных чисел ошибку в каждом

слове.

Листинг 2.14 – Генерация ошибок в кодовых словах

messIN:=messOut: r:=rand(1..100):

for j by 1 from 1 to 13 do

if r()<100 then num:=ceil ;

if messOut[j,num]=1 then messIN[j,num]:=0;else messIN[j,num]:=1;

end if; end if; end do:

print(messIN);

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

2.1.12 Выполнить декодирование сообщения.

Листинг 2.15 – Получение синдромов матрицы с ошибками

SMess:=vector(13):

for j by 1 from 1 to 13 do SMess[j]:=multiply(messIN[j],Ht); for k by 1 from 1 to 5 do

if SMess[j][k]=2 or SMess[j][k]=4 then SMess[j][k]:=0;

end if;

if SMess[j][k]=3 or SMess[j][k]=5 then SMess[j][k]:=1;

end if; end do: end do:

print(SMess);

Листинг 2.17 – Декодирование сообщения

DMess:=messIN:

for j by 1 from 1 to 13 do for k by 1 from 2 to 9 do

if SMess[j][1]=S[k][1]and SMess[j][2]=S[k][2]and SMess[j][3]=S[k][3]and SMess[j][4]=S[k][4]and SMess[j][5]=S[k][5]then

if DMess[j,k-1]=1 then DMess[j,k-1]:=0;

else DMess[j,k-1]:=1; end if;

end if; end do: end do:

print(DMess)

Получаем декодированное сообщение:

Сопоставим каждому кодовому слову соответствующие информационное, чтобы получить исходное сообщение, поданное на вход.

Листинг 2.18 – Сопоставление кодовым словам информационных

messC:=Matrix(13,3):

for j by 1 from 1 to 13 do for k by 1 from 1 to 8 do

if DMess[j][1]-V[k][1] and DMess[j][2]-V[k][2] and DMess[j][3]-V[k][3] and DMess[j][4]-V[k][4] and DMess[j][5]-V[k][5] and DMess[j][6]-V[k][6]and DMess[j][7]-V[k][7] and DMess[j][8]-V[k][8] then

for z by 1 from 1 to 3 do messC[j,z]:=INF[k,z];

end do: end if; end do: end do:

print(messC)

Получаем вектор информационных слов сообщения:

Для наглядности сопоставим каждой букве сообщения информационное слово:

Листинг 2.19 – Сопоставление буквам информационных слов

print:( messC[1], -л, messC[2], -е, messC[3], -с, messC[4], -пробел, messC[5], -р, messC[6], -е, messC[7], -к, messC[8], -а, messC[9], -пробел, messC[10], -р, messC[11], -о, messC[12], -с, messC[13], -а, "лес река роса")

Получим следующее:

,

,

,

,

,

,

,

,

,

,

,

,

Декодированное сообщение: “лес река роса”

Таким образом, в данном разделе было показано, как кодировать и декодировать сообщение при помощи кодов Хэмминга. Также были выявлены некоторые характеристики кода Хэмминга V(8,3). Приведены методические указания, которые помогут студентам в процессе выполнение лабораторной работы по помехоустойчивому кодированию.

Соседние файлы в предмете Специальные главы высшей математики