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

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

 

                                                 Рис.1 модель  OSI.

  Помимо канального и физического уровня, как показано на рисунке, в системе присутствует уровень L3 - мозг системы. На этом уровне закладываются сценарии взаимодействия терминалов с точкой доступа, анализируются принятые сообщения, выполняются команды, принимаются решения такие как: повышение уровня мощности и    решение довести до пользователя информацию о неисправности светильника(часть 2).     

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

Канальный уровень делится на 2 подуровня:

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

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

  Следует отметить, что RLC подуровень способен передать сообщение на физический уровень, обойдя подуровень MAC. Это  будет использоваться в радиоизмерениях, для повышения уровня мощности, если сообщение до терминала при исходных данных не доходит.

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

    Рассмотрим передачу команды от ТД к терминалу с точки зрения программной части. Разрабатываемая модель будет содержать в себе только канальный и физический уровни, уровень L3 задействован в программе не будет. С L3 уровня точки доступа команда передается на L3 уровень терминала, проходя через канальный и физический уровни.  Рассмотрим, какие операции необходимо выполнить для успешной передачи:

  Поступая на канальный уровень сообщение перегруппировывается ,создавая пакет канального уровня, здесь также происходит вычисление и добавление CRC(1).  Затем оно переходит на физический уровень, где кодируется  с помощью БЧХ кода(127), который, вводя избыточность, расширяет его до 127 бит(2), происходит добавление дополнительного бита(3), для приведения сообщения к величине, кратной log2  позиционности модуляции BFSK, происходит модуляция cообщения(4) и переход его в канал связи, где появляется шум(5).

  

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

  На приемной стороне, последовательность действий противоположная:

Поступая из канала связи(1), происходит выделение сообщения, демодуляция(2), избавление от дополнительного бита(3), декодирование БЧХ кода(4), переход сообщения на канальный уровень(5), где оно снова разбивается на блоки и поступает на уровень L3.

 

;

      Рис. 3. Блок-схема приемника .   

 

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

Реализуем разработанную выше блок схему.

Начнем с задания входных параметров, необходимых для построения приемо-передающего тракта:

function set = initSettings()

%% Инициализация основных параметров модели

 

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

set.SignalFileName = 'signal.bin';

set.SignalFileName2 = 'signal2.bin';

 

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

set.sym_size = 2;

 

% Данные, входящие в состав сообщения канального уровня:

set.adres = 2; % адресная доставка сообщения

set.number_of_lighter = 5; %номер светильника

 

% Информационная часть, передаваемой команды:

set.yar = 50; % яркость, которую необходимо установить;

set.red = 100; % значение мощности для красного светодиода;

set.green = 59; % значение мощности для зеленого светодиода;

set.blue = 43; % значение мощности для синего светодиода;

set.dop = 6; % номер слота для ответа и запрос телеметрии.

 

% Позиционность модуляции - BFSK

set.mPos = 2;

 

% Параметры БЧХ кода

set.n = 127; % размер после кодирования

set.k = 57; % размер до кодирования

 

% Определение матрицы оптимальных параметров

params = bchpoly(set.n);

 

% Определение параметров кодирования

set.errocorr = params(3,3);

 

% Параметры CRC-12

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

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

 

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

% поля контрольной суммы

set.length_msg_Lev2 = 45;

 

Настроим передатчик в модуле Transmitter:

Соберем пакет канального уровня системы.

Во-первых, переведем входные данные в двоичную систему в соответствии с заданным в П2 размером полей:

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

adres = my_de2bi(st.adres,'left_msb',2);

number_of_lighter = my_de2bi(st.number_of_lighter,'left_msb',8);

yar = my_de2bi(st.yar,'left_msb',8);

red = my_de2bi(st.red,'left_msb',7);

green = my_de2bi(st.green,'left_msb',7);

blue = my_de2bi(st.blue,'left_msb',7);

dop = my_de2bi(st.dop,'left_msb',6);

 

Во-вторых вычислим CRC:

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

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

% Поиск частного и остатка от деления информационной части

% на порождающий полином CRC кода

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

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

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

 

И наконец, соберем пакет канального уровня:

% сборка сообщения канального уровня

msg = [adres number_of_lighter yar red green blue dop];

% окончательная сборка сообщения канального уровня

msg = [msg CRC];

 

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

 

Перейдем к канальному уровню приемника в модуле Receiver:

                                                                    

Сообщение поступает с физического уровня на канальный, где происходят следующие действия:

 

Сначала осуществляется вычисление контрольной суммы и проверка целостности сообщения с помощью ее:

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

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

 

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

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

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

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

else

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

end;

 

После этой операции сообщение канального уровня уже без СRC выглядит следующим образом:

 

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

msg = msg(1:st.length_msg_Lev2);

 

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

 

% Преобразование принятых параметров в десятичную систему счисления

adres = my_bi2de(msg(1:2),'left_msb');

number_of_lighter = my_bi2de(msg(3:10),'left_msb');

yar = my_bi2de(msg(10:18),'left_msb');

red = my_bi2de(msg(19:25),'left_msb');

green = my_bi2de(msg(25:32),'left_msb');

blue = my_bi2de(msg(33:39),'left_msb');

dop = my_bi2de(msg(40:45),'left_msb');

 

И наконец происходит вывод полученного сообщения на монитор:

 

% Вывод информации на экран

R_message = [adres number_of_lighter yar red green blue dop];

ans =


     2     5    50   100    59    43     6

Как можно увидеть из этого ответа: сообщение было передано и раскодировано верно.

 

Используемая литература: 

1. "Лекции по курсу ССПО" Бакке А.В.

2. Методическое пособие к лабораторной работе "Исследование принципов организации 

канала передачи данных "

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

4. http://omoled.ru/publications/view/467

5. http://omoled.ru/publications/view/623

6.http://omoled.ru/publications/view/581