4.2 Выходные величины
MT1 - двумерный массив опознавателей однократных ошибок для кода,
исправляющего однократные ошибки, размером (NRS,NRS);
MT2 - двумерный массив опознавателей двукратных ошибок размером (NRS,N1);
MOP - двумерный массив опознавателей однократных ошибок для кода, исправляющего однократные и двукратные ошибки, размером (NRS,NRS);
MAT - кодирующая таблица размером (MJ,KJ);
X - вещественный одномерный массив длиной N, содержащий все значения
аргумента функции;
Y - вещественный одномерный массив длиной N, содержащий все значения
сгенерированной "непрерывной" функции;
YK - вещественный одномерный массив длиной N, содержащий значения
квантованной функции;
KP - одномерный массив длиной NRS, содержащий значения разрядов
помехоустойчивого кодового слова;
KI - одномерный массив длиной NRS, содержащий значения разрядов
помехоустойчивого кодового слова, искаженного помехой или
исправленного;
MVO - одномерный массив длиной NRS, содержащий значения разрядов вектора
ошибки;
OPZ - одномерный массив длиной NPR, содержащий значения разрядов опознавателя ошибки;
TOP - одномерный массив длиной NPR, содержащий значения разрядов сформированного опознавателя двукратной ошибки;
YKout - вещественный одномерный массив длиной N, содержащий значения
искаженной квантованной функции;
NPS - количество столбцов в построенной таблице опознавателей;
KU - количество уровней квантования;
Q - полушаг квантования;
PK - порог квантования;
T1 - значение уровня единицы;
NUK - номер очередного уровня квантования;
IR - счетчик числа искаженных разрядов;
KC1 - счетчик потерянных сообщений.
5. Список процедур комплекса
1. FUNCTION GAUSS
Назначение
Генерация псевдослучайных чисел с нормальным (гауссовым) распределением.
Математическое описание
Функция генерирует вещественное псевдослучайное число с нормальным
распределением с математическим ожиданием M и среднеквадратическим
отклонением S.
Глобальные переменные
M - математическое ожидание случайной величины;
S - среднее квадратичное отклонение случайной величины.
Текст функции
FUNCTION GAUSS;
VAR A,B,R,SQ:real;
BEGIN
REPEAT
A:=2*RANDOM-1;
B:=2*RANDOM-1;
R:=SQR(A)+SQR(B)
UNTIL R<1;
SQ:=SQRT((-2)*LN(R)/R);
GAUSS:=M+S*A*SQ
END;
2. FUNCTION MIN
Назначение
Определение минимального значения функции.
Математическое описание
Подпрограмма определяет минимальное значение функции путем простого
перебора всех ее значений.
Глобальные переменные
Y - одномерный массив, содержащий значения функции.
Текст функции
FUNCTION Min(var Mas:array of real):real;
VAR
i:word;
m:real;
BEGIN
m:=Mas[0];
for i:=1 to High(Mas) do if Mas[i]<m then m:=Mas[i];
Min:=m
END;
3. FUNCTION MAX
Назначение
Определение максимального значения функции.
Математическое описание
Подпрограмма определяет максимальное значение функции путем простого
перебора всех ее значений.
Глобальные переменные
Y - одномерный массив, содержащий значения функции.
Текст функции
FUNCTION Max(var Mas:array of real):real;
VAR
i:word;
m:real;
BEGIN
m:=Mas[0];
for i:=1 to High(Mas) do if Mas[i]<m then m:=Mas[i];
Min:=m
END;
4.PROCEDURE OPD4.
Procedure OPD4 (var mas:Masarray;var MOP:Intarray;var NRS,NPR:word;Param:byte);
Назначение
Построение опознавателей однократных ошибок для кода, исправляющего одно- двух- трех- и четырехкратные ошибки.
Математическое описание
Вектор двукратной ошибки может быть рассмотрен как результат воздействия двух векторов однократных ошибок, следовательно, ему может быть поставлен в соответствие опознаватель, представляющий собой сумму по модулю 2 двух опознавателей однократных ошибок. Аналогично вектор трех- или четырехкратной ошибки можно рассматривать как результат воздействия нескольких (трех или четырех соответственно) однократных ошибок. Поэтому для построения группового кода соответствующим образом подбираются такие опознаватели однократных ошибок (с минимальным числом значащих разрядов), сумма которых по модулю 2 дает неодинаковые опознаватели двух- трех- и четырехкратных ошибок. Выбор осуществляется полным перебором всех возможных вариантов.
Параметры:
MAS - массив для опознавателей однократных ошибок в двоичном виде
рекомендуемый размер - [1..19, 1..15] of byte;
MOP - массив для опознавателей однократных ошибок
рекомендуемый размер - [1..19] of integer;
NRS - число разрядов помехоустойчивого кодового слова;
NPS - количество cтолбцов в таблице опознавателей;
K - максимальная кратность исправляемой ошибки
Текст процедуры:
var
number,temp: byte;
i,j,chislo : integer;
Function check_one(digit : integer; number : byte) : byte;
var i : byte;
begin
check_one := 0;
for i := 0 to number do
if MOP[i] = digit then
begin
check_one := 1;
exit;
end;
end;
Function check_two(digit : integer; number : byte) : byte;
var i,j : byte;
begin
check_two := 0;
if Param = 1 then exit;
for i := 0 to number - 2 do
for j := i+1 to number - 1 do
if (MOP[i] xor MOP[j]) = digit then
begin
check_two := 1;
exit;
end;
end;
Function check_three(digit : integer; number : byte) : byte;
var i,j,k : byte;
begin
check_three := 0;
if Param < 3 then exit;
for i := 0 to number - 3 do
for j := i+1 to number - 2 do
for k := j+1 to number - 1 do
if (MOP[i] xor MOP[j] xor MOP[k]) = digit then
begin
check_three := 1;
exit;
end;
end;
Function check_four(digit : integer; number : byte) : byte;
var i,j,k,n : byte;
begin
check_four := 0;
if Param < 4 then exit;
for i := 0 to number - 4 do
for j := i+1 to number - 3 do
for k := j+1 to number - 2 do
for n := k+1 to number - 1 do
if (MOP[i] xor MOP[j] xor MOP[k] xor MOP[n]) = digit then
begin
check_four := 1;
exit;
end;
end;
Function verify( digit : integer;number : byte) : byte;
var tmp,i,j,k : integer;
begin
verify := 0;
if Param =1 then exit;
for i := 0 to number-1 do
begin
tmp := MOP[i] xor digit;
if (check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
if Param < 3 then exit;
for i := 0 to number - 2 do
for j := i + 1 to number-1 do
begin
tmp := MOP[i] xor MOP[j] xor digit;
if (check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
if Param < 4 then exit;
for i := 0 to number - 3 do
for j := i + 1 to number - 2 do
for k := j + 1 to number-1 do
begin
tmp := MOP[i] xor MOP[j] xor MOP[k] xor digit;
if(check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
end;
begin
{ KJ:=5;
MJ:=flag1[Param]+1;
}
NRS:=flag1[Param]+4; { число разрядов помехоустойчивого кодового слова}
NPR:=flag1[Param]; { число избыточных разрядов}
{
N1 - количество опознавателей двукратных ошибок;
MJ - количество строк в кодирующей таблице;
KJ - количество столбцов в кодирующей таблице;
}
number := 2;
for i:=0 to 18 do MOP[i] :=0;
MOP[0] := 1;
MOP[1] := 2;
if Param >2 then
begin
MOP[2] := 4;
number:=3;
end;
if Param >3 then
begin
MOP[3] := 8;
number:=4;
end;
if Param=4 then
begin
MOP[4]:=16;
MOP[5]:=32;
MOP[6]:=64;
MOP[7]:=128;
MOP[8]:=255;
MOP[9]:=256;
MOP[10]:=512;
MOP[11]:=1024;
MOP[12]:=2048;
MOP[13]:=3855;
MOP[14]:=4096;
MOP[15]:=8192;
MOP[16]:=13107;
MOP[17]:=16384;
MOP[18]:=21845;
end
else
begin
for i := 3 to 32767 do
begin
if not ((check_one(i,number)=1) or (check_two(i,number)=1) or
(check_three(i,number)=1) or (check_four(i,number)=1)) then
if not (verify(i,number)=1) then
begin
MOP[number] := i;
inc(number);
write('*');
end;
if number = flag[Param] then i:=32767;
end;
end;
writeln;
for i:=1 to flag[Param] do
for j:=1 to flag1[Param] do mas[i,j]:=0;
for i:=1 to flag[Param] do
begin
j:=1;
chislo:=MOP[i-1];
if chislo > 1 then
repeat
mas[i,j]:=chislo mod 2;
chislo:=chislo div 2;
j:=j+1;
until (chislo < 2);
mas[i,j]:=1;
end;
for i:=1 to flag[Param] do
begin
for j:=1 to flag1[Param] do write(mas[i,j]);
writeln;
end;
end;
5. PROCEDURE MTAB4.
Procedure MTAB4 (MKO:word;mas:masarray;NRS,NPS,MJ,KJ:word;MOP:INTARRAY;var MAT:Binarray;param:byte);
Назначение
Построение правил кодирования корректирующего группового кода в виде кодирующей таблицы.
Математическое описание
В кодирующей таблице записаны правила построения кода. Она представляет собой двумерный массив MAT(MJ,KJ),в первой строке которого, начиная со второго столбца, находятся номера информационных разрядов.А в первом столбце, начиная со второй строки, - номера избыточных разрядов.
Формирование этого массива осуществляется следующим образом: единица ставится на пересечении строк и столбцов соответствующих информационных и избыточных разрядов, если содержимое данного информационного разряда влияет на содержимое соответствующего избыточного разряда.
Информация о таком влиянии имеется в таблице опознавателей однократных ошибок.
Параметры:
MAS - массив для опознавателей однократных ошибок в двоичном виде
рекомендуемый размер - [1..19, 1..15] of byte;
NRS - число разрядов помехоустойчивого кодового слова;
NPS - количество cтолбцов в таблице опознавателей;
MJ - количество строк в кодирующей таблицы,равное (NPR+1);
KJ - количество столбцов в кодирующей таблицы,равное (INF+1);
MOP - массив для опознавателей однократных ошибок
рекомендуемый размер - [1..19] of integer;
MAT - кодирующая таблица размером (MJ,KJ);
Текст процедуры:
var i,j : integer;
tmp : byte;
begin
for i:=1 to flag1[param]+1 do for j:=1 to 5 do MAT[i,j]:=0;
if param=4 then
begin
if MKO<5 then begin
MAT[1,2]:=9;
MAT[1,3]:=14;
MAT[1,4]:=17;
MAT[1,5]:=19;
end
else begin MAT[1,2]:=19;
MAT[1,3]:=17;
MAT[1,4]:=14;
MAT[1,5]:=9;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=5;
MAT[7,1]:=6;
MAT[8,1]:=7;
MAT[9,1]:=8;
MAT[10,1]:=10;
MAT[11,1]:=11;
MAT[12,1]:=12;
MAT[13,1]:=13;
MAT[14,1]:=15;
MAT[15,1]:=16;
MAT[16,1]:=18;
end;
if param=3 then
begin
if MKO<4 then begin
MAT[1,2]:=7;
MAT[1,3]:=11;
MAT[1,4]:=13;
MAT[1,5]:=14;
end
else begin MAT[1,2]:=14;
MAT[1,3]:=13;
MAT[1,4]:=11;
MAT[1,5]:=7;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=5;
MAT[7,1]:=6;
MAT[8,1]:=8;
MAT[9,1]:=9;
MAT[10,1]:=10;
MAT[11,1]:=12;
end;
if param=2 then
begin
if MKO<3 then begin
MAT[1,2]:=5;
MAT[1,3]:=8;
MAT[1,4]:=10;
MAT[1,5]:=11;
end
else begin MAT[1,2]:=11;
MAT[1,3]:=10;
MAT[1,4]:=8;
MAT[1,5]:=5;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=6;
MAT[7,1]:=7;
MAT[8,1]:=9;
end;
if param=1 then
begin
if MKO<2 then begin
MAT[1,2]:=3;
MAT[1,3]:=5;
MAT[1,4]:=6;
MAT[1,5]:=7;
end
else begin MAT[1,2]:=7;
MAT[1,3]:=6;
MAT[1,4]:=5;
MAT[1,5]:=3;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=4;
end;
for i:=1 to flag1[param] do for j:=4 downto 1 do
begin
if mas[flag2[param,j],i]=1 then MAT[i+1,j+1]:=1;
end;
{ for i := 1 to MJ do for j := 1 to KJ do MAT[i,j]:=MAT[i,j];}
{ for i := 1 to mj do
for j := 2 to 3 do
begin
tmp:=MAT[i,j];
MAT[i,j]:=MAT[i,7-j];
MAT[i,7-j]:=tmp;
end;}
end;
6.PROCEDURE GKLF
Назначение
Генерация кусочно-линейной функции.
Математическое описание
Процедура генерирует периодическую кусочно-линейную функцию Yo. Для этого
по формуле y=k*x+b вычисляется значения линейных участков функции на
интервале от Ax[1] до Ax[1]+T с шагом T/(N-1).Для определения коэффициентов
k и b линейных участков используются координаты Na точек перегиба
(в массиве Ax) и значения функции в этих точках (в массиве Ay).
Глобальные переменные
T - период функции;
Ax - вещественный одномерный массив длинной Na, содержащий координаты
точек перегиба;
Ay - вещественный одномерный массив длинной Na, содержащий значения
функции в точках перегиба;
X - вещественный одномерный массив длиной N, содержащий значения
аргумента функции;
Y - вещественный одномерный массив длиной N, содержащий значения
сгенерированной кусочно-линейной функции.
Локальные переменные
i - номер очередного отсчета;
j - номер очередной точки перегиба кусочно-линейной функции;
k - коэффициент наклона очередного участка кусочно-линейной функции;
b - постоянный коэффициент очередного участка кусочно-линейной функции;
dx - интервал между соседними отсчетами аргумента.
Текст процедуры
PROCEDURE GKLF(T:real;var Ax,Ay,X,Yo:array of real);
VAR
i,j:word;
k,b,dx:real;
BEGIN
dx:=T/High(X);
X[0]:=Ax[0];
Yo[0]:=Ay[0];
j:=0;
for i:=1 to High(X) do
begin
X[i]:=X[i-1]+dx;
if (j<High(Ax)) and (X[i]>=Ax[j+1]) then inc(j);
if j<High(Ax)
then k:=(Ay[j+1]-Ay[j])/(Ax[j+1]-Ax[j])
else k:=(Ay[0]-Ay[j])/(Ax[0]+T-Ax[j]);
b:=Ay[j]-k*Ax[j];
Yo[i]:=k*X[i]+b
end
END;
7.PROCEDURE SAG
Назначение
Определение количества уровней квантования и полушага квантования
сообщений по уровню.
Математическое описание
Процедура выполняет операции в зависимости от значения ключа K3:
K3=0 - полушаг квантования определяется с помощью подпрограммы OERFC,
количество уровней квантования определяется делением
разности между максимальным и минимальным значениями
функции на шаг квантования;
K3<>0 - полушаг квантования определяется делением разности между
максимальным и минимальным значениями функции на
количество уровней квантования.
Глобальные переменные
K3 - ключ, определяющий способ вычисления полушага квантования;
V - предполагаемая вероятность правильной передачи сообщения при
"гауссовых" случайных помехах в канале связи;
M - предполагаемое математическое ожидание амплитуды "гауссовой"
помехи;
S - предполагаемое среднее квадратичное отклонение амплитуды
"гауссовой" помехи;
Ymin - минимальное значение функции;
Ymax - максимальное значение функции;
KU - количество уровней квантования;
Q - полушаг квантования.
Текст процедуры
PROCEDURE SAG(KS:word;V1,M,S,Ymin,Ymax:real;var KU:word;var Q:real);
BEGIN
if KS=0
then begin
Q:=OERFC(V1,M,S);
KU:=round((Ymax-Ymin)/(2*Q))
end
else if KU=0 then Q:=0 else Q:=((Ymax-Ymin)/KU)/2
END;
8.PROCEDURE RPT
Назначение
Определение порога квантования и значения уровня единицы сигналов в канале
связи с учетом интенсивности помех.
Математическое описание:
Порог квантования определяется с помощью подпрограммы AVER. Значение уровня
единицы рассчитывается как сумма значений уровня нуля и удвоенного порога
квантования.
Глобальные переменные
T0 - значение уровня нуля;
V - предполагаемая вероятность правильной передачи сообщения при
"гауссовых" случайных помехах в канале связи;
M - предполагаемое математическое ожидание амплитуды "гауссовой"
помехи;
S - предполагаемое среднее квадратичное отклонение амплитуды
"гауссовой" помехи;
PK - порог квантования;
T1 - значение уровня единицы.
Текст процедуры
PROCEDURE RPT(T0,V,M,S:real;var PK,T1:real);
BEGIN
PK:=AVER(V,M,S);
PK:=PK+T0;
T1:=PK*2+T0
END;
9.PROCEDURE KVN
Назначение
Квантование сообщений по уровню.
Математическое описание
Процедура осуществляет квантование сообщений по уровню. Значение очередного уровня квантования вычисляется как сумма минимального значения функции, полушага квантования и произведения шага квантования
на номер уровня. «Верхний" порог данного уровня определяется как сумма значений уровня квантования и полушага квантования (при равномерном квантовании путем соотнесения исходного сигнала с ближайшим значением уровня "нижний" порог данного уровня совпадает с "верхним" порогом ближайшего "снизу" уровня).
Глобальные переменные
KU - количество уровней квантования;
Q - полушаг квантования;
Ymin - минимальное значение функции;
Yi - квантуемое значение функции;
NUK - номер уровня квантования;
YK - проквантованное значение функции.
Текст процедуры
PROCEDURE KVN(KU:word;Q,Ymin,Yi:real;var NUK:word;var YK:real);
VAR
k:word;
BEGIN
k:=0;
repeat
YK:=Ymin+Q+2*Q*k;
k:=k+1
until (Yi<=YK+Q) or (k>=KU);
NUK:=k-1
END;
10.PROCEDURE DVK
Назначение
Кодирование номера уровня квантования сообщения двоичной кодовой комбинацией.
Математическое описание
Процедура кодирует номер уровня квантования значения функции (сообщения), представленного целым десятичным числом, двоичным безызбыточным кодовым словом. В основе лежит стандартная процедура перевода числа из десятичной системы счисления в двоичную - пошаговое деление числа на 2, нахождение остатков от деления и затем получение двоичной комбинации из этих остатков в обратном порядке.
Глобальные переменные
NUK - номер уровня квантования;
INF - число информационных разрядов;
MDV - одномерный массив длиной INF, содержащий значения двоичных
разрядов безизбыточной кодовой комбинации.
Текст процедуры
PROCEDURE DVK(NUK,INF:word;var MDV);
VAR I:word;
BEGIN
FOR i:=1 TO INF DO MDV[i]:=0;
i:=INF;
WHILE (NUK>1) and (i>1) DO
BEGIN
MDV[i]:=NUK mod 2;
NUK:=NUK div 2;
i:=i-1
END;
MDV[i]:=NUK
END;
11.PROCEDURE KDR
Назначение
Преобразование безизбыточной кодовой комбинации в помехоустойчивое кодовое слово.
Математическое описание
С помощью первой строки кодирующей таблицы MAT, в которой содержатся номера информационных разрядов, происходит заполнение информационных разрядов помехоустойчивого кодового слова.
Помехоустойчивое кодирование осуществляется следующим образом: значение проверочного разряда определяется как сумма по модулю 2 тех информационных разрядов, номера которых отмечены единицами в таблице МAТ.
Глобальные переменные
MAT - кодирующая таблица размером (MJ,KJ);
MDV - одномерный массив длиной INF, содержащий значения двоичных разрядов безизбыточной кодовой комбинации.
KP - одномерный массив длиной NRS, содержащий значения разрядов помехоустойчивого кодового слова;
MJ - количество строк в кодирующей таблицы, равное (NPR+1);
KJ - количество столбцов в кодирующей таблицы, равное (INF+1);
NRS - число разрядов помехоустойчивого кодового слова;
INF - число информационных разрядов.
Текст процедуры
PROCEDURE KDR(var MAT,MDV,KP; MJ,KJ,NRS,INF:word);
VAR IL,L,S,I,J:word;
BEGIN
L:=1;
FOR i:=1 TO NRS DO KP[i]:=0;
FOR j:=2 TO KJ DO
BEGIN
IL:=MAT[1,j];
KP[IL]:=MDV[L];
L:=L+1
END;
FOR i:=2 TO MJ DO
BEGIN
S:=0;
FOR j:=2 TO KJ DO
IF MAT[i,j]=1 THEN
BEGIN
IL:=MAT[1,j];
S:=S xor KP[IL]
END;
IL:=MAT[i,1];
KP[IL]:=S
END
END;
12.PROCEDURE KAN
Назначение
Имитация искажений случайной помехой разрядов помехоустойчивого кодового слова и формирование вектора ошибки.
Математическое описание
В реальной системе сообщение представлено не комбинацией нулей и единиц, а некоторыми величинами напряжения или тока, которые под воздействием помех могут искажаться.
Величина помехи, действующий на содержимое разряда кодового слова, формируется датчиком псевдослучайных чисел GAUSS. Величина сигнала данного разряда на выходе канала связи образуется суммой соответствующего уровня данного двоичного разряда и амплитудой помехи.(Полагается, что в канале действуют аддитивные помехи.)
Примечание : данная процедура обрабатывает только одно кодовое слово, поэтому для имитации передачи последовательности кодовых слов по зашумленному каналу ее необходимо включать в соответствующий цикл.
Глобальные переменные
KP - одномерный массив длиной NRS, содержащий значения разрядов
помехоустойчивого кодового слова;
KI - одномерный массив длиной NRS, содержащий значения разрядов
помехоустойчивого кодового слова, искаженного помехой или
исправленного;
MVO - одномерный массив длиной NRS, содержащий значения разрядов вектора
ошибки;
NRS - число разрядов помехоустойчивого кодового слова;
MKO - максимальная кратность ошибки;
T0 - значение уровня нуля;
T1 - значение уровня единицы;
PK - порог квантования;
M - математическое ожидание случайной величины;
S - среднее квадратичное отклонение случайной величины;
IR - счетчик числа искаженных разрядов.
Текст процедуры
PROCEDURE KAN(var KP,KI,MVO;NRS,MKO:word;T0,T1,PK,S,M:real;var IR:word);
VAR
R,US:real;
J:word;
BEGIN
IR:=0;
FOR j:=1 TO NRS DO
BEGIN
R:=GAUSS(S,M);
IF KP[j]=1 THEN US:=T1 ELSE US:=T0;
US:=US+R;
{-----------}
IF US>PK THEN
IF KP[j]=0 THEN KI[j]:=1;
{----------}
IF US<PK THEN
IF KP[j]=1 THEN KI[j]:=0;
{----------}
IF KI[j]=KP[j] THEN MVO[j]:=0
ELSE
IF IR<MKO THEN
BEGIN
IR:=IR+1;
MVO[j]:=1
END
ELSE KI[j]:=KP[j]
END
END;
13. PROCEDURE ISP4
Procedure ISP4 (OPZ:BinArray1; KI:BinArray2;MAT:Binarray;MJ,KJ:integer;MOP:IntArray;var KC1:word;var Kk:BinArray2);
Назначение
Вычисление опознавателя ошибки и исправление однократных, двукратных,
трехкратных и четырехкратных ошибок.
Математическое описание
Процедура вычисляет опознаватель ошибки с помощью кодирующей таблицы MAT.
Для определения очередного разряда опознавателя необходимо просуммировать
по модулю 2 значения определенных информационных разрядов и соответствую-
щего им проверочного разряда.
Вычисленный декодером опознаватель сравнивается с таблицей опознавателей
однократных ошибок.При совпадении опознавателей ошибка исправляется.
Если совпадения не произошло,то полученный опознаватель сравнивается с
опознавателями двухкратных ошибок.Возможные опознаватели двухкратных
ошибок формируются путем суммирования по модулю 2 опознавателей
однократных ошибок в различных сочетаниях по 2.
Если совпадения не произошло,то полученный опознаватель сравнивается с
опознавателями трехкратных и четырехкратных ошибок. Возможные опознаватели
трех- и четырехкратных ошибок формируются путем суммирования по модулю 2
опознавателей однократных ошибок в различных сочетаниях по 3 или 4.
Если совпадения снова не произошло,то сообщение считается потерянным и
происходит инкремент счетчика потерянных сообщений.
Параметры:
OPZ - одномерный массив длиной NPR,содержащий значения разрядов опознава-
теля ошибки;
KI - одномерный массив длиной NRS,содержащий значения разрядов
помехоустойчивого кодового слова,искаженного помехой или
исправленного;
MAT - кодирующая таблица размером (MJ,KJ);
MJ - количество строк в кодирующей таблицы,равное (NPR+1);
KJ - количество столбцов в кодирующей таблице,равное(INF+1);
MOP - массив для опознавателей однократных ошибок
рекомендуемый размер - [1..19] of integer;
KC1 - счетчик потерянных сообщений.
KW - массив, содержащий исправленное кодовое слово
Текст процедуры:
var
i,j,k,n : integer;
temp : word;
tmp : byte;
begin
for i := 2 to MJ do
begin
tmp:=0;
for j := 2 to KJ do
if MAT[i,j]=1 then tmp:=tmp xor KI[MAT[1,j]];
OPZ[i-1]:=tmp xor KI[MAT[i,1]];
end;
temp:=0;
for i := MJ-1 downto 1 do
if OPZ[i]=1 then temp:=temp + trunc( exp((i-1)*ln(2)) );
tmp:=0;
for i := 0 to MJ+KJ-3 do
begin
if MOP[i] = temp then
begin
KI[i+1]:=1-KI[i+1];
tmp:=1;
end;
end;
if MJ>4 then
for i := 0 to MJ+KJ-4 do
for j := i+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
end;
if MJ > 8 then
for i := 0 to MJ+KJ-5 do
for j := i+1 to MJ+KJ-4 do
for k := j+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j] xor MOP[k]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
KI[k+1]:=1-KI[k+1];
end;
if MJ > 11 then
for i := 0 to MJ+KJ-6 do
for j := i+1 to MJ+KJ-5 do
for k := j+1 to MJ+KJ-4 do
for n := k+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j] xor MOP[k] xor MOP[n]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
KI[k+1]:=1-KI[k+1];
KI[n+1]:=1-KI[n+1];
end;
if (tmp=0) and (temp <> 0) then KC1:=KC1+1;
for i:=1 to 19 do kk[i]:=ki[i];
end;
14.PROCEDURE PVB
Назначение
Декодирование помехоустойчивого кодового слова в безызбыточную двоичную
комбинацию.
Математическое описание
Процесс декодирования помехоустойчивого кодового слова осуществляется
с помощью первой строки кодирующей таблицы, содержащей номера
информационных разрядов.
Глобальные переменные
MAT - кодирующая таблица размером (MJ,KJ);
KI - одномерный массив длиной NRS, содержащий значения разрядов
помехоустойчивого кодового слова, искаженного помехой или
исправленного;
MDV - одномерный массив длиной INF, содержащий значения двоичных
разрядов безизбыточной кодовой комбинации.
KJ - количество столбцов в кодирующей таблицы, равное (INF+1).
Текст процедуры
PROCEDURE PVB(var MAT,KI,MDV,KJ:word);
VAR J,IL:word;
BEGIN
FOR j:=2 TO KJ DO
BEGIN
IL:=MAT[1,j];
MDV[j-1]:=KI[IL]
END;
END;
15.PROCEDURE BVUK
Назначение
Преобразование безызбыточного кодового слова в номер уровня квантованного
сообщения и вычисление квантованного значения функции.
Математическое описание
Перевод безизбыточного кодового слова в номер уровня квантования осуществляется путем последовательного суммирования произведений значений J-го
разряда кодовой комбинации MDV(INF) на 2^(J-1).
Восстановленное квантованное значение функции вычисляется как сумма
минимального значения функции и произведения шага квантования на номер
уровня.
Глобальные переменные
MDV - одномерный массив длиной INF, содержащий значения двоичных
разрядов безизбыточной кодовой комбинации.
YKout - вещественный одномерный массив длиной N, содержащий значения
искаженной квантованной функции;
INF - число информационных разрядов;
k - номер сообщения;
Q - полушаг квантования;
Ymin - минимальное значение функции.
Текст процедуры
PROCEDURE BVUK(var MDV,YKout;INF,k:word;Q,Ymin:real);
VAR I,J,NUKV:word;
BEGIN
NUKV:=0;
j:=INF;
FOR i:=1 TO INF DO
BEGIN
NUKV:=NUKV+MDV[j]*TRUNC(EXP((i-1)*LN(2)));
j:=j-1
END;
YKout[k]:=Ymin+Q+2*Q*NUKV;
END;
16.PROCEDURE DEMO
Назначение
Определение частоты потери сообщений и частоты правильной передачи сообщений.
Глобальные переменные
N - число всех отсчетов аргумента на интервале определения функции;
KC1 - счетчик потерянных сообщений.
Текст процедуры
PROCEDURE DEMO(N,KC1:word);
VAR tx:char;
BEGIN
WRITELN('Всего точек :',N,' Искажено :',KC1);
WRITELN('Частота потери сообщений :',KC1/N:5:3);
WRITELN('Частота правильной передачи сообщений :',1-KC1/N:5:3);
WRITELN;
WRITELN;
WRITELN('Для продолжения работы нажмите любую клавишу');
while keypressed do tx:=readkey;tx:=readkey
END;
17.PROCEDURE GRA
Назначение
Графическое отображения графиков функций.
Математическое описание
Процедура устанавливает графический режим работы и с помощью
процедуры ShowGra выводит на дисплей графики функций. Перед
завершением своей работы процедура закрывает графический режим.
Глобальные переменные
K - ключ, определяющий режим вывода графиков функций:
K=1 - F1 и F2 выводятся как "непрерывные" функции;
K=2 - функции выводятся в виде F1-"непрерывная",F2-"решетчатая";
K=3 - функции выводятся в виде F1-"непрерывная",F2-"квантованная";
K=4 - F1 и F2 выводятся как "решетчатые" функции;
K=5 - функции выводятся в виде F1-"непрерывная",F2-"квантованная";
K=6 - F1 и F2 выводятся как "квантованные" функции;
E - ключ, определяющий необходимость вывода графика разности функций F2-F1
(только в режимах K=1,K=3,K=6):
E=0 - график разности функций F2-F1 не выводится;
E<>0 - график разности функций F2-F1 выводится;
T1 - массив аргументов функции F1;
F1 - массив значений первой функции;
S1 - название первой функции;
T2 - массив аргументов функции F2;
F2 - массив значений второй функции;
S2 - название второй функции;
S3 - название разности функций F2-F1;
Текст процедуры
TYPE S_60 =string[60];
PROCEDURE GRA(K,E:word;var T1,F1,T2,F2:array of real;S1,S2,S3:S_60);
VAR
Xo,Yo:word;
dT,dF:real;
Gd,Gm:integer;
BEGIN
Gd:=0;InitGraph(Gd,Gm,F_bgi);
ShowGra(K,E,T1,F1,T2,F2,S1,S2,S3);
CloseGraph
END.
IV. Ц Е Л Ь Л А Б О Р А Т О Р Н О Й Р А Б О Т Ы.
Цифровое моделирование системы помехоустойчивого кодирования сообщений , а именно:
построение модели аналогичной данной системе;
исследование системы помехоустойчивого кодирования.
Ц Е Л Ь И С С Л Е Д О В А Н И Я.
Таковой целью является исследование эффективности работы трех разных систем.
системы цифровой передачи непрерывного сигнала;
системы цифровой передачи дискретных сообщений;
систем передачи кодовых слов.
Эффективность работы системы цифровой передачи непрерывного сигнала любым кодом оценивается точностью передачи формы сигнала или ошибкой от искажений формы сигнала, что можно количественно измерить путем сравнения форм переданного и принятого сигналов. Такая операция возможна только при проведении испытаний данной системы. В рабочем режиме приемнику неизвестна форма переданного сигнала.
Эффективность работы системы цифровой передачи дискретного сигнала и знаковых последовательностей оценивается вероятностью правильной или ошибочной передачи дискретных сообщений во время испытаний данной системы.
Эффективность работы системы, передающей кодовые слова, можно оценить средним числом искаженных разрядов в слове (средним кодовым расстоянием между переданным и принятым словами).
Имитационное моделирование позволяет исследовать в одном цикле одновременно эффективность работы всех перечисленных систем цифровой передачи.
Эффективность работы любой системы в конкретных условиях зависит от характера внешних воздействий и способностей самой системы.
В данной работе внешнее воздействие представлено для всех систем двумя факторами.
Во-первых, случайной помехой, искажающей в канале связи или ЗУ величину уровней нулей и единиц разрядрв кодового слова, что может приводить к искажению их содержимого. При этом характер помехи имитируется аддитивным свойством и нормальным (гауссовым) законом распределения ее амплитуд,который определяется двумя параметрами:
математическим ожиданием (Мо);
средним квадратическим отклонением (СКО).
Во вторых, внешнее воздействие представлено:
для первой системы - непрерывным сигналом определенной формы;
для второй системы - последовательностью дискретных сообщений;
для третьей системы - последовательностью двоичных кодовых слов.
Способности данных цифровой передачи сообщений представлены следующими параметрами:
объемом кода (числом разных кодируемых сообщений, числом уровней квантованных сообщений, мощностью алфавита);
корректирующей способностью группового кода (максимальной кратностью некоррелированных ошибок, исправляемых кодом);
порогом квантования квантователя и уровнями ²1² и ²0² сигнала, передающего в канале связи или ЗУ двоичное (помехоустойчивое) кодовое слово; эти параметры могут рассчитываться по заданной вероятности искажения содержимого любого разряда двоичного слова и предполагаемым параметрам распределения гауссовой помехи.
VI. П О Р Я Д О К В Ы П О Л Н Е Н И Я Р А Б О Т Ы.
1. Построение кода:
Построение таблицы опознавателей однократных ошибок для кода, исправляющего однократные и двукратные ошибки, производится подпрограммой OPD. Подпрограмма MTAB осуществляет построение правил кодирования корректирующего группового кода в виде кодирующей таблицы.
2. Построение имитационной модели системы, осуществляющей надежную передачу непрерывного сигнала в цифровом виде:
Функция источника непрерывного сигнала может имитироваться подпрограммами GKLF,GF и др. С помощью подпрограммы SAG осуществляется настройка "квантователя" непрерывного сигнала с учетом точности его отображения квантованной по уровню функции.
Рассчитать минимальное и максимальное значения функции предварительно необходимо с помощью подпрограмм MIN и MAX соответственно.
Подпрограмма RPT рассчитывает порог квантования и уровень единицы для кодовых слов, передаваемых по каналу связи.
Работа данной информационной системы представлена событиями на передающей стороне, в канале связи и на приемной стороне. На передающей стороне функционируют следующие устройства:
источник сообщений, который формирует непрерывный сигнал;
аналого - цифровой преобразователь (АЦП), отображающий отдельные значения непрерывного сигнала двоичными числами;
кодер (шифратор), формирующий помехоустойчивые кодовые слова.
На выходе кодера двоичный сигнал усиливается до уровня нуля или единицы, соответствующих данному каналу связи.
В канале связи форма двоичного сигнала искажается по следующим причинам:
рассеивание энергии сигнала (²затухания² сигнала );
фильтрующих свойств канала;
действия помех.
На приемной стороне данной системы осуществляются следующие преобразования сообщений:
на выходе канала связи искаженный по форме двоичный сигнал квантуется до заданных уровней нуля и единицы;
с помощью декодера (дешифратора) помехоустойчивое кодовое слово преобразуется в безызбыточное k - разрядное слово;
цифро-аналоговый преобразователь (ЦАП) восстанавливает из двоичных слов непрерывный (квантованный по уровню) сигнал;
приемник сообщений воспринимает непрерывный сигнал.
Последовательность перечисленных событий данной информационной системы имитируется в цикле, в теле
которого для каждого значения исходной непрерывной функции необходимо организовать
следующие действия:
1 - проквантовать очередное отсчетное значение сигнала с помощью подпрограммы KVN;
2 - полученный номер уровня квантования преобразовать в двоичное кодовое слово с помощью подпрограммы DVK;
1-е и 2-е действия имитируют функцию аналого-цифрового преобразователя (АЦП).
3 - произвести помехоустойчивое кодирование с помощью подпрограммы KDR в соответствии с правилами построения кода;
4 - имитировать искажение случайной помехой, созданной функцией GAUSS, содержимого разрядов помехоустойчивого кодового слова и сформировать вектор ошибки с помощью подпрограммы KAN;
5 - вычислить опознаватель ошибки и исправить ее если она кратности 1 или 2 с помощью подпрограммы ISP;
6 - декодировать исправленное кодовое слово в безызбыточное с помощью подпрограммы PVB;
7 - преобразовать это кодовое слово в номер уровня квантования и вычислить соответствующее ему квантованное значение с помощью подпрограммы BVUK;
Подпрограмма DEMO вычисляет некоторые показатели эффективности работы системы помехоустойчивого кодирования: количество "потерянных" сообщений, частоту потери и частоту правильной передачи сообщений.
Для наглядности восприятия преобразований сигнала можно построить графики исходной, квантованной, полученной квантованной функций вместе с функциями ошибок и шумов квантования с помощью процедуры GRA.
Исследование систем цифровой передачи сообщений.
Для проведения исследований данных систем осуществляются статистические эксперименты по передаче сообщений (разной природы). При этом варьируются характеристики внешних воздействий (параметры Мо и СКО нормально - распределенной помехи) и способности (параметры) систем (уровней ²0² и ²1² сигнала в канале и порог квантования квантователя.
Структура таблицы, представляющей результаты экспериментов и порядок проведения исследований данных систем помехоустойчивой цифровой передачи сообщений, имеет следующую форму.
Внешнее
воздействие Результаты
(параметры норм. Способности систем цифровой передачи сообщений
распределения эксперимента
помех )
предполагаемые
параметры предполагаемая
нормального
распределения вероятность
Мо
|
СКО |
Корректирующая способность кода; MAX кратность исправления ошибок |
уров нуля |
уров един. |
величина порога квантов. |
Мо1 |
СКО1 |
искажения
разряда
|
срелняя ошибка искажен формы сигнала |
вероят. правиль ной передачи сообщен. |
Среднее число искаженных разрядов
|
0 |
V |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
V |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
0 |
0 |
V |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
V |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
0 |
0 |
0 |
V |
V |
V |
V |
V |
V |
|
|
|
0 - постоянный в данном эксперименте параметр;
V- варьируемый в данном исследовании параметр.
Блок-схема моделируемой системы:
Блоки системы Форма сигналов Подпрограммы, имитирующие
на выходе блоков функции блоков системы
источник
непрерывного GKLF,GF
сигнала
квантователь KVN
дискретизатор DIS
АЦП
°
двоичный
кодер DVK
кодер KDR
источник
канал связи помех
KAN
двухуровневый
квантователь
декодер ISP,PVB
ЦАП BVUK