Скачиваний:
13
Добавлен:
10.05.2015
Размер:
249.34 Кб
Скачать

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. Ц Е Л Ь И С С Л Е Д О В А Н И Я.

Таковой целью является исследование эффективности работы трех разных систем.

  • системы цифровой передачи непрерывного сигнала;

  • системы цифровой передачи дискретных сообщений;

  • систем передачи кодовых слов.

    Эффективность работы системы цифровой передачи непрерывного сигнала любым кодом оценивается точностью передачи формы сигнала или ошибкой от искажений формы сигнала, что можно количественно измерить путем сравнения форм переданного и принятого сигналов. Такая операция возможна только при проведении испытаний данной системы. В рабочем режиме приемнику неизвестна форма переданного сигнала.

    Эффективность работы системы цифровой передачи дискретного сигнала и знаковых последовательностей оценивается вероятностью правильной или ошибочной передачи дискретных сообщений во время испытаний данной системы.

    Эффективность работы системы, передающей кодовые слова, можно оценить средним числом искаженных разрядов в слове (средним кодовым расстоянием между переданным и принятым словами).

    Имитационное моделирование позволяет исследовать в одном цикле одновременно эффективность работы всех перечисленных систем цифровой передачи.

    Эффективность работы любой системы в конкретных условиях зависит от характера внешних воздействий и способностей самой системы.

    В данной работе внешнее воздействие представлено для всех систем двумя факторами.

    Во-первых, случайной помехой, искажающей в канале связи или ЗУ величину уровней нулей и единиц разрядрв кодового слова, что может приводить к искажению их содержимого. При этом характер помехи имитируется аддитивным свойством и нормальным (гауссовым) законом распределения ее амплитуд,который определяется двумя параметрами:

  • математическим ожиданием (Мо);

  • средним квадратическим отклонением (СКО).

    Во вторых, внешнее воздействие представлено:

  • для первой системы - непрерывным сигналом определенной формы;

  • для второй системы - последовательностью дискретных сообщений;

  • для третьей системы - последовательностью двоичных кодовых слов.

    Способности данных цифровой передачи сообщений представлены следующими параметрами:

  • объемом кода (числом разных кодируемых сообщений, числом уровней квантованных сообщений, мощностью алфавита);

  • корректирующей способностью группового кода (максимальной кратностью некоррелированных ошибок, исправляемых кодом);

  • порогом квантования квантователя и уровнями ²1² и ²0² сигнала, передающего в канале связи или ЗУ двоичное (помехоустойчивое) кодовое слово; эти параметры могут рассчитываться по заданной вероятности искажения содержимого любого разряда двоичного слова и предполагаемым параметрам распределения гауссовой помехи.

VI. П О Р Я Д О К В Ы П О Л Н Е Н И Я Р А Б О Т Ы.

1. Построение кода:

Построение таблицы опознавателей однократных ошибок для кода, исправляющего однократные и двукратные ошибки, производится подпрограммой OPD. Подпрограмма MTAB осуществляет построение правил кодирования корректирующего группового кода в виде кодирующей таблицы.

2. Построение имитационной модели системы, осуществляющей надежную передачу непрерывного сигнала в цифровом виде:

Функция источника непрерывного сигнала может имитироваться подпрограммами GKLF,GF и др. С помощью подпрограммы SAG осуществляется настройка "квантователя" непрерывного сигнала с учетом точности его отображения квантованной по уровню функции.

Рассчитать минимальное и максимальное значения функции предварительно необходимо с помощью подпрограмм MIN и MAX соответственно.

Подпрограмма RPT рассчитывает порог квантования и уровень единицы для кодовых слов, передаваемых по каналу связи.

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

  1. источник сообщений, который формирует непрерывный сигнал;

  2. аналого - цифровой преобразователь (АЦП), отображающий отдельные значения непрерывного сигнала двоичными числами;

  3. кодер (шифратор), формирующий помехоустойчивые кодовые слова.

На выходе кодера двоичный сигнал усиливается до уровня нуля или единицы, соответствующих данному каналу связи.

В канале связи форма двоичного сигнала искажается по следующим причинам:

  1. рассеивание энергии сигнала (²затухания² сигнала );

  2. фильтрующих свойств канала;

  3. действия помех.

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

  1. на выходе канала связи искаженный по форме двоичный сигнал квантуется до заданных уровней нуля и единицы;

  2. с помощью декодера (дешифратора) помехоустойчивое кодовое слово преобразуется в безызбыточное k - разрядное слово;

  3. цифро-аналоговый преобразователь (ЦАП) восстанавливает из двоичных слов непрерывный (квантованный по уровню) сигнал;

  4. приемник сообщений воспринимает непрерывный сигнал.

Последовательность перечисленных событий данной информационной системы имитируется в цикле, в теле

которого для каждого значения исходной непрерывной функции необходимо организовать

следующие действия:

1 - проквантовать очередное отсчетное значение сигнала с помощью подпрограммы KVN;

2 - полученный номер уровня квантования преобразовать в двоичное кодовое слово с помощью подпрограммы DVK;

1-е и 2-е действия имитируют функцию аналого-цифрового преобразователя (АЦП).

3 - произвести помехоустойчивое кодирование с помощью подпрограммы KDR в соответствии с правилами построения кода;

4 - имитировать искажение случайной помехой, созданной функцией GAUSS, содержимого разрядов помехоустойчивого кодового слова и сформировать вектор ошибки с помощью подпрограммы KAN;

5 - вычислить опознаватель ошибки и исправить ее если она кратности 1 или 2 с помощью подпрограммы ISP;

6 - декодировать исправленное кодовое слово в безызбыточное с помощью подпрограммы PVB;

7 - преобразовать это кодовое слово в номер уровня квантования и вычислить соответствующее ему квантованное значение с помощью подпрограммы BVUK;

Подпрограмма DEMO вычисляет некоторые показатели эффективности работы системы помехоустойчивого кодирования: количество "потерянных" сообщений, частоту потери и частоту правильной передачи сообщений.

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

  1. Исследование систем цифровой передачи сообщений.

Для проведения исследований данных систем осуществляются статистические эксперименты по передаче сообщений (разной природы). При этом варьируются характеристики внешних воздействий (параметры Мо и СКО нормально - распределенной помехи) и способности (параметры) систем (уровней ²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

Соседние файлы в папке doc