Лаб_6. Выполнение
.pdfПроцесс продолжается до тех пор, пока каждый двоичный набор длины 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). Приведены методические указания, которые помогут студентам в процессе выполнение лабораторной работы по помехоустойчивому кодированию.