Основная задача- разработка и экспериментальное исследование модели. Необходимо будет продемонстрировать процесс выполнения одного или нескольких этапов сценария п.1. В нашей модели за основу возьмем передачу сообщения от терминала к терминалу, составление таблиц маршрутизации и качество принятой информации. Рассмотрим передачу сообщения от терминала Т9 до Т11. Исходными данными для этого являются:

Вид модуляции -  QPSK (Quadrature Phase Shift Keying-квадратурная фазовая манипуляция) 

Тип помехоустойчивого кодирования - код БЧХ (Код Боуза—Чоудхури—Хоквингема)

Тип CRC (контрольная сумма) - CRC-8

При квадратурной фазовой манипуляции (англ. QPSK — Quadrature  Phase  Shift  Keying или 4-PSK) используется созвездие из четырёх точек, размещённых на равных расстояниях на окружности. Используя 4 фазы, в QPSK на символ приходится два бита. Анализ показывает, что скорость может быть увеличена в два раза относительно BPSK при той же полосе сигнала, либо оставить скорость прежней, но уменьшить полосу вдвое. В зависимости от отношения сигнал-шум QPSK имеет выигрыш (данный график представлен ниже)


Рис.1. Зависимость вероятности ошибки от отношения сигнал-шум

Коды Боуза-Чоудхури-Хоквингема (БЧХ) являются подклассом двоичных циклических кодов. Их отличительное свойство — возможность построения кода БЧХ с минимальным расстоянием не меньше заданного. Это важно, потому что, вообще говоря, определение минимального расстояния кода есть очень сложная задача. Математически построение кодов БЧХ и их декодирование используют разложение порождающего полинома на множители в поле Галуа.Перед тем, как представить программную реализацию, рассмотрим составляющие сообщений на физическом и канальном уровне .

Отправителем и получателем может быть любой из терминалов (максимально 10) . Следовательно, необходимо иметь в системе 11 уникальных адресов. Сообщение канального уровня – это пакет, состоящий из двоичных данных. Следовательно, адресное поле должно содержать 11 различных комбинаций бит. Поэтому длина каждого адресного поля равна 4 бит (2^4 = 16 комбинаций). 

Идентификация сообщения осуществляется добавлением в сообщение канального уровня поля TYPE, в котором указан тип сообщения (сообщение маршрутизации (route), сообщения речевого трафика (traffic) и сообщения управления (manage)). Исходя из того, что используется три типа сообщений, то длина этого поля равна 2 бита (2^2 = 4 комбинации).


Рис.2. Сообщение канального уровня : Т9-терминал отправитель, Т11-терминал получатель, Type-идентификация сообщение, CRC- контрольная сумма

Сообщение маршрутизации имеет следующий вид


Рис.3. Сообщение маршрутизации: Length_T-количество элементов , записанных в таблицу маршрутизации, ID-адрес, S-флаг успешной передачи сообщения, Table-ввод в таблицу маршрутизации адреса отправителя, Step-шаг поиска

Сообщение физического уровня :


Рис.4. Сообщение физического уровня : FCH-подстройка частоты, SCH-псевдослучайная последовательность, FEC-избыточность,0-нулевой бит

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ПЕРЕДАЮЩЕЕ УСТРОЙСТВО %%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%% msg_type %%%

route = [0 0]; % сообщение маршрутизации

manage = [0 1]; % сообщение управления

traffic = [1 0]; % сообщение трафика


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%Передача сообщения маршрутизации%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%Сборка сообщения L3 уровня%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Length_R = [0 0 0 0 1]; % число элементов, записанных в таблицу 

% маршрутизации

ID = [0 0 0 0]; % идентификатор сообщения

S = 0; % флаг успешного достижения адресата

T9 = [1 0 1 1]; % адрес отправителя 

T11 = [0 0 0 1]; % адрес получателя 1

Lgth_T9 = 4; % длина адреса, бит

TABLE = [T9 zeros(1,(155 - Lgth_T9))]; % в таблицу маршрутизации 

%записывается адрес отправителя

STEP = [0 0 0 1]; % шаг поиска равен 1

msg_L3 = [Length_R ID S TABLE STEP]; % сообщение уровня управления


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%Сборка сообщения L2 уровня%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



TYPE = route; 

msg_L2_no_crc = [T9 T11 TYPE msg_L3];


% Полином CRC кода: CRC-8

poly=[1 1 1 0 1 0 1 0 1]; 

[x y] = size(poly);

m=[msg_L2_no_crc zeros(1,y-1)]; % вставка нулей в поле CRC;

[q r] = deconv(m,poly); % поиск частного и остатка от деления;

r = mod(abs(r),2);

CRC = r(length(msg_L2_no_crc) + 1:end); % расчет CRC;

msg_L2 = [0 msg_L2_no_crc CRC]; % сообщение канального уровня


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%Сборка сообщения L1 уровня%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


N = 255; % длина кодового слова

K =185; % длина сообщения L2 уровня 


% Помехоустойчивое кодирование:

 code_word = encode(msg_L2,N,K,'bch/fmt');%%% msg_L2 + FEC

code_word_0 = [code_word 0]';


% Блочное перемежение:

inter_code_word = matintrlv(code_word_0,32,8);


FCH = zeros(1,16); % подстройка частоты (16 нулевых бит)


SCH = [1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1];%псевдослучайная 

% последовательность 


msg_L1 = [FCH SCH inter_code_word']; % сообщение физического уровня



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%Модуляция%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


mPos = 4; % позиционность модуляции QPSK

h = modem.pskmod(mPos);

h.inputtype = 'bit';

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/4;

mod_SCH = modulate(h,SCH'); % символы QPSK для SCH

IQ_signal_tr = modulate(h, msg_L1');

figure(1); plot(IQ_signal_tr,'.');title('СКС модулированного сигнала');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%Канал связи%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


SNR = 20; % ОСШ

IQ_signal_rv = awgn(IQ_signal_tr, SNR, 'measured');

figure(2); plot(IQ_signal_rv,'.');title('СКС после канала связи');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%Прием сигнала%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%Демодуляция%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

h = modem.pskdemod(mPos);

h.outputtype = 'bit';

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/4;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%Временная синхронизация%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Вычисляет вкф пришедшего сигнала с QPSK символами последовательности 

% SCH. Размер окна 8 символов

k = 0;

vkf = 0;

for i = 1:14

    for j = i:(i+7) 

        k =  k + 1;

        vkf = vkf + IQ_signal_rv(j) * mod_SCH(k);

    end;

    k = 0;

    maxvkf(j)=abs(vkf);

    vkf =0;

end;


[maxvkff,number] = max(maxvkf); % возвращает максимум вкф и 

% соответствующий номер QPSK символа


%демодуляция сообщения после синхронизации

IQ_signal_sync = IQ_signal_rv(number+1:144);

demod_IQ_signal = demodulate(h,IQ_signal_sync);



% Блочное деперемежение:

deinter_code_word = matdeintrlv(demod_IQ_signal, 32, 8);


% Помехоустойчивое декодирование:

decode_word = decode(deinter_code_word(1:255),N,K,'bch/fmt');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%Извлечение сообщения%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% rv_CRC = [decode_word(192:199)]'; % из принятого сообщения

% % извлекается поле CRC

% % По принятому сообщению (кроме поля CRC) вычисляется контрольная сумма 

% % по тому же полиному, что и на передающей стороне

% [x_rv y_rv] = size(poly);

% m_rv=[decode_word(1:191)' zeros(1,y_rv-1)]; % вставка нулей в поле CRC;

% [q_rv r_rv] = deconv(m_rv,poly); % поиск частного и остатка от деления;

% r_rv = mod(abs(r_rv),2);

% CRC_rv = r_rv(length(decode_word(1:191)) + 1:end); % расчет CRC;


decode_word=decode_word(2:end)';

% ================== Канальный  уровень ================================

%% декодирование L2-сообщения 


errs = 0;


% Подготовка к проверке CRC

[q r]=deconv(decode_word(1:end),poly);

%проверка остатка 

   r=mod(abs(r),2);

   if r == zeros(1,length(decode_word))

        detect=0;% ошибок нет

   else

        errs = errs + 1; 

        detect=1;% обнаружены ошибки

   end;


% Собственно принятое сообщение

decode_word = decode_word(1:178);



    

% Адрес отправителя

T9_rv = [decode_word(1:4)];

% Адрес получателя

T11_rv = [decode_word(5:8)];

% Тип сообщения

TYPE = [decode_word(9:10)];



% адрес принимающего терминала

T_rv = [0 0 0 1]; 


% Если адрес получателя равен адресу принимающего терминала, то 

% происходит распаковка пакета L3 

if T11_rv == T_rv

  disp('Сообщение предназначается данному терминалу. Разборка пакета L3');


% Сообщение уровня L3

msg_L3_rv = [decode_word(11:end)];


% число элементов, записанных в таблицу маршрутизации

Length_R_rv = msg_L3_rv(1:4);

% идентификационный номер сообщения 

ID_rv = msg_L3_rv(5:8);

% флаг успешной доставки до адресата

S_rv = msg_L3_rv(9);

% данные маршрутизации

TABLE_rv = msg_L3_rv(10:164);

% шаг поиска

STEP_rv = msg_L3_rv(165:end);


Lgth_R = my_bi2de(Length_R_rv,'left_msb');

disp(['Идентификационный номер сообщения: ',int2str(my_bi2de(ID_rv,...

    'left_msb'))]);

disp(['Флаг успешной доставки до адресата: ',int2str(my_bi2de(S_rv,...

    'left_msb'))]);

disp(['Данные маршрутизации: ',int2str(my_bi2de(TABLE_rv(1:4*Lgth_R),...

    'left_msb'))]);

disp(['Шаг поиска: ',int2str(my_bi2de(STEP_rv,'left_msb'))]);



else

   disp('Сообщение предназначается другому терминалу');

end

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




Рис.5. Результаты моделирования


Список используемой литературы:

1.http://omoled.ru/publications/view/449

2.http://omoled.ru/publications/view/458

3.http://radiolay.ru/viewtopic.php?f=42&t=258&start=10%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5