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

В разрабатываемой сети используются три нижних уровня взаимодействия модели OSI: физический, канальный и сетевой.

 

Канальный уровень, согласно спецификации  IEEE 802, делится на 2 подуровня:  

1.      RLC – уровень, отвечающий за взаимодействие с уровнем L3.  

2.      MAC – службы, отвечающие за сообщения канального уровня. Он оформляет пакеты в кадры в соответствующем формате. Пакеты как трафика, так и служебных сообщений.  


Рис.1 Модель OSI на примере взаимодействия терминала с ТД.

 Канальные уровни имеют лишь косвенное взаимодействие, в отличие от физических. Подуровень RLC может взаимодействовать с физическим, минуя MAC, при проведении радиоизмерений.


                 Рис. 2 - Иерархическая модель системы OSI. 

     Канальный уровень – второй уровень сетевой модели OSI, предназначенный для обеспечения взаимодействия  сетей на физическом уровне и для контроля  за ошибками, которые могут возникнуть. Полученные с физического уровня данные, представленные в битах, предназначены для упаковки в кадры, проверки их на целостность и формирование повторных запросов в случае повреждения кадров. Канальный уровень отвечает за доставку кадров между устройствами, подключенными к одному сетевому сегменту.  Он может взаимодействовать с одним или несколькими физическими уровнями, контролируя и управляя взаимодействием. Функции межсетевой маршрутизации и глобальной адресации осуществляются на более высоких уровнях модели OSI, что позволяет протоколам канального уровня сосредоточиться на локальной доставке и адресации. Многие протоколы канального уровня не имеют подтверждения о приёме кадра, некоторые протоколы даже не имеют контрольной суммы для проверки целостности кадра. В таких случаях протоколы более высокого уровня должны обеспечивать управление потоком данных, контроль ошибок, подтверждение доставки и ретрансляции утерянных данных.

Уровень принятия решений является управляющим ядром узла сети. Он обрабатывает  данные полученные с нижних уровней и принимает решения на основе анализа этих данных. Например, он обрабатывает данные радиоизмерений и передает на физический уровень команды о выборе профиля передачи и регулировки мощности. А так же, на ряду с пользовательским устройством, он может являться источником служебных сообщений.

 

            С уровня принятия решений на физический уровень поступают результаты радиоизмерений (профиль передачи и мощность излучения). От канального уровня на физический поступают пакеты L2 и информация об их количестве. Пакеты L2 проходят через следующие процедуры: канальное кодирование, квадратурная модуляция. Далее образуется информационное поле сообщения физического уровня. 

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

             На основе профиля передачи, типа сообщения, извлеченного из первого пакета L2 и значения количества пакетов в сообщении ФУ, поступившего от L2, формируется служебное поле. Служебное и информационное поля объединяются с заранее сформированной (а так же записанной в память, поскольку она всегда имеет одинаковый вид) преамбулой и образуют полное сообщение физического уровня. Оно усиливается до необходимого уровня и излучается в радиоканал.


2. Экспериментальная часть. Разработка и экспериментальное исследование программной модели канала передачи данных.

2.1. Разработка и описание блок-схемы алгоритма модели.

На рисунке 2 и рисунке 3 представлены блок схемы алгоритмов передающей и приемной части системы, основанные на алгоритмах , проработанных во второй части (канальный уровень).            


Рис. 3 Блок-схема передающей части модели.


Рис. Блок-схема приемной части модели.

2.2. Разработка программных модулей передачи и приема сообщений канального уровня.

          Элемент сценария описываемый в модели представляет собой передачу сообщения трафика между терминалом и точкой доступа.

% Выбор файла для сохранения сформированного сигнала

set.SignalFileName = 'signal.bin';

 

% Кодировка символа текста: 2 байта на символ

set.sym_size = 2;

% Длина однократно считываемого текстового сообщения

set.Str_size = 14;

% Смещение указателя чтения символа из файла на заданную величину

set.byte_off = 0;

 

% параметры модели

% позиционность модуляции - QPSK

set.mPos = 4;

 

% Параметры помехоустойчивого кодека кодека

% Для примера используется линейный блоковый код Хэмминга:

% Длина кодового слова n = 2^m-1 = 255 при m = 8

% Размер кодируемого блока k = n-m = 247

 

set.m = 8;

set.n = 2^set.m-1; % Codeword length = 255

set.k = 247; % Message length = 247

% размер блока символов, формируемых в модуляторе из одного пакета

% 256 - количество битов в пакете,log2(mPos) - количество битов,

% приходящихся на символ

set.mod_size = 276/log2(set.mPos);

 

% Параметры CRC

set.poly=[1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];

[set.x set.y]=size(set.poly); %размерность полинома

 

% переменная, равная длине передаваемого сообщения 2 уровня

set.length_msg_Lev2 = 134;% сообщение состоит из 134 битов

 

   Transmitter


% установка параметров модели

st=initSettings();

 

% Открытие файла на запись и получение его идентификатора

% В этот файл будет записываться сигнал с выхода канала связи

[fidw, message] = fopen(st.SignalFileName, 'wb');

 

%формирование msg

msg=randi(2,1,128)-1;

 

% Подготовка к передаче сообщения

% сообщение переводится в двоичный вид

str_bin = msg;

 

% получение адреса терминала в двоичном 3-х разрядном виде (Address=5)

% получение кода услуги в двоичном 3-х разрядном виде

addr_bin = my_de2bi(5,'left_msb',3);

cod_bin = my_de2bi(1,'left_msb',3);

% сборка части L2-сообщения

msg_Lev2 = [ cod_bin addr_bin str_bin];

 

% получение CRC кода

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

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

%информационной части на порождающий полином CRC кода

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

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

 

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

msg_Lev1 = [msg_Lev2 CRC];

 

%формирование trx

trx = [msg_Lev1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ………0];

 

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

code_word = encode(trx,st.n,st.k,'hamming/binary');

 

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

code_word = code_word;

 

% добавление дополнительного бита с целью приведения итогового блока к

% величине, кратной степени 2

code_word = [0 code_word];

 

%формирование эквалайзера

eqlz=[randi(2,1,10)-1];

 

%формирование флагов начала и конца сообщения

fls = [ 1 1 1 1 1 ];

 

%сборка code_word

code_word = [fls code_word eqlz fls]';

 

% Модуляция

   h = modem.pskmod(st.mPos);

   % h - модем PSK с позиционностью mPos

   % Требуется настроить остальные его параметры:

   % Параметры модуляции

   h.inputtype = 'bit';

   h.SymbolOrder = 'gray';

   h.PhaseOffset = pi/4;

   % собственно модуляция

   IQ_signal = modulate(h, code_word);

  

   % Наложение шума на сигнал

   noise_sgn = awgn(IQ_signal,40);

 

   % здесь сигнал noise_sgn должен быть записан в файл

   fwrite(fidw,[real(noise_sgn) imag(noise_sgn)],'double');

  

    % отображение сигнально-кодового созвездия

   figure(10);

   plot(noise_sgn,'.');

   % закрытие файла

 fclose (fidw);

 

Receiver

 % установка параметров модели

st = initSettings();

 

% Параметры демодуляции

h = modem.pskdemod(st.mPos); %modem.qamdemod(st.mPos)

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/4;

h.OutputType = 'bit';

 

% Открытие файла на чтение и получение его идентификатора

[fid, message] = fopen(st.SignalFileName, 'rb');

 

t = fread(fid, [2, Inf], 'double'); % чтение данных в формате IQ в буфер приема t

% закрытие файла

fclose (fid);

 

% собственно демодуляция

s = demodulate(h,noise_sgn);

 

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

 

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

   [q r]=deconv(received_mes_L1,st.poly);

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

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

   if r == zeros(1,length(received_mes_L1))'

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

   else

        error = error + 1;

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

   end;

 

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

   received_mes_L2 = received_mes_L1(1:st.length_msg_Lev2);

 

 

% адрес получателя (1-4 биты)

addr =  my_bi2de(received_mes_L2(1:4)','left_msb');

Np =  my_bi2de(received_mes_L2(5:6)','left_msb');

PType =  received_mes_L2(7);

 

   % В 1 пакете сессии доставки передается служебная информация (количество передаваемых блоков данных)

   if k==1

       packet_count = my_bi2de(received_mes_L2(8:23)','left_msb');

       % если сообщение принято с ошибкой, то доверия к выделенному блоку

       % битов нет: вероятнее всего блок битов received_mes_L2(8:23)

       % недостоверный

       if detect ==1

           packet_count = rx_packet;

       end;    

2.4. Исследование качества приема сообщений по различным каналам связи.

Для проверки правильности выполнения модуляции в модуле transmitter.m предусмотрено построение сигнльно-кодового созвездия. Полученный результат удовлетворяет тем данным, которые были заданы в файле инициализации.

 % отображение сигнально-кодового созвездия

   figure(10);

   plot(noise_sgn,'.');


                           Рис.8 СКС принятого сигнала.

Результатом выполнения программы является переданное сообщение. Количество переданных битов - 128, как и было заявлено в сообщении msg.

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

1. Бакке А. В. "Лекции по курсу: Системы и сети связи с подвижными объектами".

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

3. http://omoled.ru/publications/view/354