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

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

Для реализации высокоскоростного радиомоста необходимо наличие трёх уровней – уровень принятия решений, физический уровень, канальный уровень.Рисунок 1 – Иерархическая модель системы.

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

Канальный уровень – отвечает за формирование пакетов. Здесь осуществляется управление доступом к сети и происходит обнаружение ошибок в принятых пакетах.

Физический уровень – организует формирование пакетов физического уровня и передачу их по радиоканалу.

 

 

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

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

               

Основная информация передаётся по каналу MCH. По этому каналу происходит обмен пакетами сообщений между терминалами.

 

Рассмотрим алгоритм сборки сообщения канала MCH на физическом уровне :


Рисунок 2 – Блок-схема сборки пакета физического уровня.


Рисунок 3 – Алгоритм передачи.

Сначала поток битов с L2 уровня подвергается помехоустойчивому кодированию. Далее происходит сборка пакетов: служебные данные соединяются с пользовательской информацией. Затем пакеты проходят через квадратурный модулятор, а после OFDM модулятор, где происходит формирование преамбулы и преобразование пакетов в OFDM-символы. Полученный радиосигнал проходит через канал связи.   

Фрагмент программы, которая реализует передачу:

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

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

mPos=4;

Ngr = 0; % количество неиспользуемых поднесущих и приходящихся на защитные интервалы  


% номера пилотных поднесущих в OFDM-символе

pilotIndexes = [1 2 3 14 25 36 47 48 49];


%Размерность OFDM-символа

Nc=49 ;


%В качестве примера задан большой блок битов, для передачи которого 

%потребуется несколько OFDM-символов  

msg_length = 256;% длина передаваемого сообщения, битов


% количество поднесущих с данными

Ndata = Nc - length(pilotIndexes); % 40 поднесущих для передачи 58 QPSK символов


% количество битов, передаваемых в одном OFDM-символе

s_length = Ndata * log2(mPos); % 116 битов с учетом QPSK


ns = floor(msg_length/s_length)+1; % сколько потребуется OFDM-символов


% сколько потребуется добавить незначащих битов - как разница между тем

% количеством битов, что обеспечивает расчетное количество OFDM-символов, и 

% количеством блоком в передаваемом сообщении 

fil_zero = zeros(1, ns*s_length - msg_length);


% формируются блок битов, моделирующий сообщение с канального уровня

data = randint(1,msg_length); % для теста


   %% Квадратурная модуляция, QPSK-profiles  

   h = modem.pskmod(mPos);

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

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

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

   h.inputtype = 'bit';

   h.SymbolOrder = 'gray';

   h.PhaseOffset = pi/4;

   

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

   % способны транспортировать рассчитанное выше количество OFDM-символов

    data = [data fil_zero]';

   

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

   IQ_signal = modulate(h, data);

 

 %формирование OFDM-символов 

   ofdmFrame = makeOfdmFrame(IQ_signal, ns);

 

 %формирование символов преамбулы

 %Короткие символы - для подстройки частоты (синхронизация по частоте)

 ShortTrainingSymbols = sqrt(13/6)*[0 0 1+j 0 0 0 -1-j 0 0 0 1+j 0 0 0 -1-j 0 0 0 -1-j 0 0 0 1+j 0 0 0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 ...

      1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 1+j 0 0];


 short_symbols = ifft(ShortTrainingSymbols);

 % выделение первых 16 отсчетов

 Strs = short_symbols(1:16);

 % Формирование 10 коротких символов преамбулы на основе выбранного набора

 short_trs=[Strs Strs Strs Strs Strs Strs Strs Strs Strs Strs];

 

 %длинный символ преамбулы

 LongTrainingSymbols=[0 0 0 0 0 0 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...

      1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1 0 0 0 0 0 0];

 long_symbol = ifft(LongTrainingSymbols);

 long_trs = [long_symbol(49-2*16+1:49) long_symbol long_symbol];


 

 % Пакет физического уровня (символы преамбулы и OFDM-символы)

phy_frame = [short_trs long_trs ofdmFrame];

plot(abs(phy_frame)); 


Рисунок -  4 Диаграмма OFDM кадра.

                                                  

Рисунок 4 – Алгоритм приёма.

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

Фрагмент программы, которая реализует приём сообщения:

% Выполняем выделение OFDM символов из общего потока

phy_frame = [];

% Список поднесущих с информацией

infSub = [ 4 5 6 7 8 9 10 11 12 13:15 16 17 18 19 20 21 22 23 24 25: 37 38 39 40 41 42 43 44 45 46];

pilotSub = [ 14 25 36  ];

% Выделение промодулированных данных из принятого OFDM сигнала

% Удаление циклического префикса из OFDM символов

OSr = [];

OSpr = [];

IQ_signalr = [];

 for i = 0 : (length(ofdmFrame_rcv)/64)-1

    % Убираем циклический префикс  

    IQ_sig = ofdmFrame_rcv((3:49)+ i*49);

    OSr = [OSr; IQ_sig];  

    % Переход в частотную область

    IQ_sign = fft(IQ_sig);

    OSpr = [OSpr; IQ_sign];

    % Убираем пилот сигналы и Формируем поток данных

    phy_frame = [IQ_signalr IQ_sign(infSub)];

end;

 

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

h = modem.qamdemod(st.mPos);

h.SymbolOrder = 'gray';

h.PhaseOffset = 0;

h.OutputType = 'bit';

  

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

code_word = demodulate(h,IQ_signal_rcv);

 

% Декодирование по Витерби

trell = poly2trellis( 7, [ 160 64 ] );

L2_msg_rcv = vitdec( L2_msg_rcv, trell, 7, 'cont', 'hard' );

 Вывод: при проведении эксперимента удалось организовать сборку пакета ,принимаемого с L2 уровня, и "разнести" его по OFDM несущим при этом используя модуляцию QPSK, как одну из заявленных. На приёмной стороне физический уровень организует OFDM-демодуляцию и разборку пакета, которая позволяет обнаружить и передать на L2 уровень пакет канального уровня. 

Литература

1Лекции А. В. Бакке по курсу Системы и сети связи с подвижными объектами.
2
http://omoled.ru/publications/view/841

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

http://radiolay.ru/viewtopic.php?f=27&t=419