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

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

Физический уровень:

- организация физических каналов;

- радиоизмерения;

- безошибочный приём/передача сообщений;

- синхронизация терминалов.

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

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


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

схема канала приемника

На  стороне приема обратная последовательность действий.


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

function set = initSettings()

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

 

set.SignalFileName = 'signal.bin';% Выбор файлов для сохранения действительной и мнимой частей сигнала

set.SignalFileName2 = 'signal2.bin';

 

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

 

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

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

 

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

set.Led = 100; % значение мощности для светодиодов модуля kemper светодиода; 

set.mPos = 2;% Позиционность модуляции - BFSK

 

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

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:
переведем входные данные в двоичную систему

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

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

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

вычислим 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 Led];сборка сообщения канального уровня

msg = [msg CRC];% окончательная сборка сообщения канального уровня

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

[q r]=deconv(msg,st.poly);% Подготовка к проверке CRC

 

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

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');

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


вывод полученного сообщения:

 

R_message = [adres Led];

ans =


     2    100    

сообщение было передано и раскодировано