1.5. Построение результирующих иерархических моделей терминала и выделенных узлов сети (в соответствии с концепцией OSI) с отражением путей доставки служебных, так и информационных сообщений.
 
    Модель OSI описывает схему взаимодействия сетевых объектов, определяет перечень задач и правила передачи данных. Эталонная модель OSI включает в себя семь уровней:
  • физический (Physical);канальный (Data-Link);
  • сетевой (Network);
  • транспортный (Transport);
  • сеансовый (Session);
  • представления данных (Presentation);
  • прикладной (Application).

 

Рис. 1 – Иерархическая модель системы на примере двух терминалов и точки доступа

 

    Для выполнения задач поставленных перед разрабатываемой сетью, на основе эталонной модели синтезирована иерархическая модель узлов сети (рис. 1), включающая в себя следующие уровни:

  • физический уровень; 
  • канальный уровень с двумя подуровнями: подуровень управления доступом к среде МАС и подуровень управления доступом к каналу САС;
  • верхний уровень (уровень принятия решений).
    Физический уровень – это самый нижний уровень системы, который отвечает за непосредственный передачу (прием) сигнала в (из) радиоканал(а). Здесь же определяются требования к соединениям, разъёмам, электрическому согласованию, заземлению, защите от помех. 
    Канальный уровень отвечает за формирование пакетов стандартного вида, адресную доставку сообщений и контроль правильности приема. Здесь производится управление доступом к сети, обнаруживаются ошибки передачи. 
    МАС-подуровень реализует набор протоколов, которые обеспечивают безопасность, маршрутизацию, энергосберегающие функции и обмен данными с протоколами вышележащих уровней. САС-подуровень описывает процедуру доступа к общему каналу связи. 
    Сначала МАС-уровень формирует и передает  пакет L1 уровню САС. Уровень CAC начинает процедуру конкурентной борьбы и получения доступа к физическому каналу связи. В разрабатываемой сети доступ к КС осуществляется на основе протокола CSMA (см. пункт 1.3.2).
    Уровень принятия решений является управляющим ядром узла сети. Он обрабатывает  данные полученные с нижних уровней и принимает решения на основе анализа этих данных. Например, он обрабатывает данные радиоизмерений и передает на физический уровень команды о выборе профиля передачи и регулировки мощности. А так же, на ряду с пользовательским устройством, он может являться источником служебных сообщений.
 

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

 

Сообщение трафика

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

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

Когда от терминала-получателя придет запрос на передачу адресованного ему сообщения, от канального уровня точки доступа на физический уровень поступит пакет L2 который, пройдя через описанные выше преобразования, передастся по средствам радиоканала физическому уровню терминала. Физический уровень терминала выделив из принятого сообщения пакет L2 передаст его своему канальному уровню, который в ответ передаст служебное сообщение (либо запрос на повтор передачи, либо подтверждение приема). Затем, выделив из пакета информацию, канальный уровень направит ее физическому уровню для передачи пользовательскому устройству. Физический уровень пользовательского устройства перенаправляет полученную информацию на вышестоящие уровни.

На этом участие физического уровня системы в передачи сообщения заканчивается.

 

Служебное сообщение

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

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

 

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

 

Описание алгоритма (рис. 2) представлено в виде соответствующих комментариев к коду в п. 2.2.


 

Рис. 2 – Блок-схема алгоритма модели

 

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

 

Программный модуль состоит из Matlab-функций имитирующих работу ФУ и КУ, функции предназначенной для непосредственного формирования OFDM-символов, а так же скрипта отражающего часть сценария работы сети, а именно - передача псевдослучайного сообщения трафика (состоящего из одного пакета) от терминала к точке доступа.

  • start.m – часть сценария работы сети, частично затрагивает работу канального уровня сети;
  • l2_func.m – функция отражающая работу канального уровеня системы;
  • phy_lvl.m функция отражающая работу физического уровня системы;
  • makeOfdmFrame.m функция для формирования OFDM-символа.
    Программный модуль формирует пакеты L2 и сообщение физического уровня согласно структурам (рис. 3-6) из предыдущих частей КР.
 Рис. 3 – Пакет сообщения трафика канального уровня
 
 
  Рис. 4 – Пакет служебного сообщения канального уровня
 
  
Рис. 5 – Сообщение физического уровня
 
 
Рис. 6 – Структура поднесущих
 
Листинг функции физического уровня

function [ L2_msg_rcv ] = phy_lvl( L2_msg, msgType, mProfile, SN, img )
% L2_msg - сам пакет L2
% msgType - тип пакета L2 0 - траффик 1 - служебный (широковещательный)
% mProfile - профидь передачи 0 - QAM-16 1 - QAM-64
% SN - ОСШ в КС, SN = 0 - моделирование прохождения через КС отключено
% img - показ графиков, 0 - выкл. 1 - вкл.

%== Физический уровень передатчика ==%

    global noninfSubcarriers;
    global Nc;
    global ampPilot;
   
%% Канальное кодирование
% Помехоустойчивое кодирование

    trell = poly2trellis( 7, [ 171 133 ] );
    L2_msg_c = convenc( L2_msg, trell );
% Перемежение
    L2_msg_cai = randintrlv( L2_msg_c, 534 );
%% Модуляция (квадратурная и OFDM) 
% Выбор модуляции

    if mProfile == 0
        mPos = 16;
        ampPreamb = 3; % КУ усиления для выравнивания уровня преамбулы к данным
        ampPilot = 4; % КУ для пилот сигнала
        guardForModType = [ 0 1 0 ];
    else
        mPos = 64;
        ampPreamb = 6; % КУ усиления для выравнивания уровня преамбулы к данным
        ampPilot = 8; % КУ для пилот сигнала
        guardForModType = [ 0 0 0 ];
    end;
% Список не информационных поднесущих в OFDM-символе
    noninfSubcarriers = [ 1 2 3 4 5 12 26 39 53 60 61 62 63 64 ];
% Размерность OFDM-символа
    Nc = 64;
% Размер передаваемого сообщения
    L2_msg_length = length( L2_msg_cai );
% Количество поднесущих с информацией
    Nc_data = Nc - length( noninfSubcarriers ); % 50 поднесущая
% Количество бит на OFDM-символ
    symbolLength = Nc_data * log2( mPos );
% Требуемое количество OFDM-символов
    symbolCounter = ceil( L2_msg_length / symbolLength );
% Формирование блока незначащих битов
    symbolGarbage = zeros( 1, symbolCounter * symbolLength - L2_msg_length );
% Выбор типа модуляции для служебного символа (всегда QAM-16)
    mParam = modem.qammod( 16 );
    mParam.inputtype = 'bit';
    mParam.SymbolOrder = 'gray';
    mParam.PhaseOffset = 0;
% Формирование служебного символа
    serviceMsg = zeros( 1, Nc );
% Информация о виде модуляции
    serviceMsg( 1 ) = mProfile;
    serviceMsg( 2:4 ) = guardForModType;
% Информация о типе сообщения

    serviceMsg( 5 ) = msgType;        
    serviceMsg( 6:8 ) = guardForModType;
% Кол-во пакетов в сообщении
    msgLength = [ 0 0 0 0 0 1 ];
    serviceMsg( 9:14 ) = msgLength;
% Квадратурная модуляция
    IQ_service = modulate( mParam, serviceMsg' );
% Формирование OFDM символа
    symbol = ifft( IQ_service );
% Cообщение канального уровня
    data = L2_msg_cai;
% Выбор модуляции
    mParam = modem.qammod( mPos );
    mParam.inputtype = 'bit';
    mParam.SymbolOrder = 'gray';
    mParam.PhaseOffset = 0;
% Добавление незначащих битов
    if ( symbolCounter - L2_msg_length / symbolLength ) == 0
        data = [ data ]';
    else
        symbolGarbage = zeros( 1, symbolCounter * symbolLength - L2_msg_length );
        data = [ data symbolGarbage ]';
    end
% Квадратурная модуляция
    IQ_signal = modulate( mParam, data );
% Формирование OFDM-символов и добавление служебного символа
    [ mof, OS, OSf, OSp ] = makeOfdmFrame( IQ_signal, symbolCounter );
    ofdmFrame = [ symbol' mof ];

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

% Короткие символы - для подстройки частоты (синхронизация по частоте)
    Preamb_shortline = 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 ];  
    Preamb_shortSymb = ifft( Preamb_shortline );
% Выделение первых 16 отсчетов
    short = Preamb_shortSymb( 1:16 );
% Формирование 10 коротких символов преамбулы на основе выбранного набора
    Preamb_shortComplete = [ short short short short short short short short short short ];
% Длинный символ преамбулы для подстройки времени (синхронизация по времени)
    Preamb_longline = [ 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 ];
    Preamb_longSymb = ifft( Preamb_longline );
    Preamb_longComplete = [ Preamb_longSymb( 64 - 2 * 16 + 1:64 ) Preamb_longSymb Preamb_longSymb ];
   
 %% Сборка сообщения физического уровня (усиление преамбулы чтобы выровнить ее уровень к уровню данных)
    l1Frame = [ ampPreamb * Preamb_shortComplete (ampPreamb + 1) * Preamb_longComplete ofdmFrame ];

    if img == 1
        figure( 1 );
        plot( abs( l1Frame ) );
        grid on
        title( 'Временная реализация сообщения физического уровня' )
    end

%% AWGN-канал
    if SN ~= 0
        l1Frame_rcv = awgn( l1Frame, SN, 'measured' );
    else
        l1Frame_rcv = l1Frame;
    end
   
%== Физический уровень приемника ==%
%% Выделение полей
% Выделение преамбулы, сервисного поля и поля данных

    Preamb_longComplete = l1Frame_rcv( 1:320 );
    symbol_rcv = l1Frame_rcv( 321:( 321 + 15 ) );
    ofdmFrame_rcv =  l1Frame_rcv( ( 321 + 16 ):end );
    IQ_service_rcv = fft( symbol_rcv' );

%% Демодуляция
% Настройка вида модуляции сервисного поля (всегда QAM-16)

    mParam = modem.qamdemod( 16 );
    mParam.SymbolOrder = 'gray';
    mParam.PhaseOffset = 0;
    mParam.OutputType = 'bit';
% Демодуляция сервисного поля
    serviceMsg_rcv = demodulate( mParam, IQ_service_rcv );
    mProfile_rcv = serviceMsg_rcv( 1 );
    msgType_rcv = serviceMsg_rcv( 5 );
% Определение вида модуляции поля данных
    if mProfile_rcv == 0
        mParam = modem.qamdemod( 16 );
    else
        mParam = modem.qamdemod( 64 );
    end;
    mParam.SymbolOrder = 'gray';
    mParam.PhaseOffset = 0;
    mParam.OutputType = 'bit';
   
% Выполняем выделение OFDM символов из общего потока
    IQ_signal_rcv = [];
% Список поднесущих с информацией
    infSubcarriers = [ 6:11 13:25 27:38 40:52 54:59 ];
    pilotSubcarriers = [ 1 5 12 26 39 53 60 64 ];
    equSubcarrLine = 1:64;
    OSr = [];
    OSpr = [];
    for i = 0:( length( ofdmFrame_rcv ) / 68 ) - 1   
        IQ_sig = ofdmFrame_rcv( ( 5:68 ) + i * 68 ); % Удаление префикса
        OSr = [ OSr; IQ_sig ];  
        IQ_sign = fft( IQ_sig ); % Переход к частотной области
        pilot_rcv = IQ_sign( pilotSubcarriers ); % Выделение пилот-сигналов
        pilot_rcv( 1 ) = pilot_rcv( 2 ); % Дублирование крайних пилот сигналов на "концы" символа
        pilot_rcv( 8 ) = pilot_rcv( 7 );
        equInterpol = interp1( pilotSubcarriers, abs( pilot_rcv ), equSubcarrLine, 'pchip' ); % Интерполяция АЧХ канала
        OSpr = [ OSpr; IQ_sign ];
        IQ_sign_equalazied = IQ_sign ./ ( equInterpol ./ ampPilot ); % Непосредственно Эквалайзинг
        IQ_signal_rcv = [ IQ_signal_rcv IQ_sign_equalazied( infSubcarriers ) ]; % Формирование потока данных
    end;
% Квадратурная демодуляция закодированного и перемеженного пакета L2
    data_rcv = demodulate( mParam, IQ_signal_rcv );


    if img == 1
 %% Отображение интерполированной АЧХ КС
        figure( 2 );
        plot( equInterpol ./ ampPilot, 'r' );
        grid on
        title( 'Интерполированная АЧХ канала связи (в номерах поднесущих)' )
   
%% Отображение СКС
        figure( 3 );
        plot( IQ_signal_rcv, 'x' );
        grid on
        title( 'Сигнально-кодовое созвездие принятого сигнала' )
    end
   
%% Канальное декодирование
% Выделение кодированного и перемеженного пакета L2

    if msgType_rcv == 0    
        L2_msg_cai_rcv = data_rcv( 1:end );
    else
        L2_msg_cai_rcv = data_rcv( 1:end - length( symbolGarbage ) );
    end;
% Деперемежение

    L2_msg_c_rcv = randdeintrlv( L2_msg_cai_rcv, 534 );
%Декодирование по Витерби
    L2_msg_rcv = vitdec( L2_msg_c_rcv, trell, 7, 'cont', 'hard' );

В ходе выполнения программного модуля были получены некоторые иллюстраций (рис. 7-9).
 

Рис. 7 – Временная реализация сообщения физического уровня для QAM-16

Рис. 8 – Временная реализация сообщения физического уровня для QAM-64


Рис. 9 – Интерполированная АЧХ канала связи (по оси абсцисс отложены номера поднесущих)
 

2.3. Исследование процедуры тактовой (символьной) синхронизации физического уровня.

 

    Процесс синхронизации узлов связи по времени и частоту ложится на преамбулу сообщения физического уровня (по аналогии с IEE 802.11a) которая состоит из 12 символов, 10 из  которых — «короткие», а два - «длинные». В коротких последовательностях OFDM-символы формируются на основе лишь 12 поднесущих, при этом отсутствуют защитные интервалы между символами. Короткие настроечные  последовательности  используются  для выполнения следующих задач:
  • обнаружение OFDM сигнала;
  • настройка АРУ;   
  • частотная синхронизация.
    Две  длинные  настроечные  последовательности  следуют  за  короткими с промежутком в два защитных интервала. Основная задача, выполняемая с помощью длинных последовательностей – временная синхронизация.
    Реализация процедуры синхронизации в коде опущена. 
 
2.4. Исследование качества приема сообщений по различным каналам связи.
 
    Для исследования прохождения сообщения по каналу связи в программном модуле присутствует возможность включения моделирования AWGN-канала. 

    Пронаблюдаем прохождения сообщения по каналу связи для различных условий в канале. При ОСШ = 20 дБ (рис. 10 и 11) CRC принятых сообщений совпадают – сообщения приняты правильно при обоих профилях передачи.  
 
 
Рис. 10 – СКС принятого сигнала при ОСШ = 20 дБ и модуляции QAM-16

 
Рис. 11 – СКС принятого сигнала при ОСШ = 20 дБ и модуляции QAM-64

    Исследование работы модуля при различных ОСШ показало, что контрольная сумма начинает не совпадать при ОСШ = 13 дБ для QAM-16 (рис. 12) и при ОСШ = 16 дБ для QAM-64 (рис. 13).
 
 
Рис. 12 – СКС принятого сигнала при ОСШ = 13 дБ и модуляции QAM-16
 
 
Рис. 13 – СКС принятого сигнала при ОСШ = 16 дБ и модуляции QAM-64

Выигрыш профиля QAM-16 по-сравнению с профилем QAM-64 составляет 3 дБ. Теоретически полученные значения (п. 1.4.7) минимального ОСШ составляют: для QAM-16 - 11,3 дБ и 15,2 дБ для QAM-64.

 

Используемая литература:
  1. Исправленная часть 1. Локальная радиосеть;
  2. Исправленнаячасть 2. Локальная радиосеть (канальный уровень);
  3. Исправленная часть 2. Локальная радиосеть (физический уровень);
  4. Подкопаева С.А. «Курсовой проект: Локальная радиосеть»;
  5. Генеральский Д.Д. «Курсовой проект: Радиосеть передачи данных. Часть 4»;
  6. Бакке А.В. «Уровни взаимодействия открытых систем. Базовая эталонная модель OSI», 2014;
  7. Бакке А.В. «Лекции по курсу: Системы и сети связи с подвижными объектами»;
  8. Бакке А.В. «Основы построения беспроводных сетей стандарта 802.11» – Рязань: РГРТУ, 2008;
  9. Functional specification «HIPERLAN Type 1» ETSI ETS 300 652;
  10. Лукашин И.В. «Радиосистемадистанционного видеоконтроля (Часть 4. Доработанная)».