Часть 3
1.4. Построение итоговой иерархической модели узлов сети (в соответствии с концепцией OSI). В модели должны быть обязательно учтены задачи доставки как служебных, так и информационных сообщений
В Системе радиоуправление светодиодным модулем Kemper LED нужен канальный и физический уровень.
рис.1 Модель OSI
Модель OSI описывает схему взаимодействия сетевых объектов, определяет перечень задач и правила передачи данных. В эталонной модели OSI отдельные уровни взаимодействуют друг с другом посредством четко определенных интерфейсов. На каждом уровне реализуется определенное количество базовых функций при помощи набора функций, определенных в эталонной модели OSI нижележащего уровня. Каждый уровень предоставляет набор услуг находящемуся над ним уровню, причем на вышележащем уровне неизвестны детали реализации услуг, предоставляемых нижележащим уровнем.
Физический уровень:
- организация физических каналов;
- радиоизмерения;
- безошибочный приём/передача сообщений;
- синхронизация терминалов.
L3
- закладываются сценарии взаимодействия терминалов с точкой доступа, анализируются принятые сообщения, выполняются команды, принимаются решения повышение уровня мощности и решение довести до пользователя информацию о неисправности диода
MAC
- службы, отвечающие за организацию сообщений канального уровня. На этом уровне, пакет поступивший с L3 уровня и поток битов с физического уровня преобразуются в кадры.
2. Экспериментальная часть. Разработка и экспериментальное исследование программной модели канала передачи данных.
рис.2 Схема канала передатчика
На канальном уровне сообщение перегруппировывается, создавая пакет канального уровня, здесь также происходит вычисление и добавлениеCRC. Затем оно переходит на физический уровень, где кодируется с помощью БЧХ кода(127), который, вводя избыточность, расширяет его до 127 бит, для приведения сообщения к величине, кратной log2 позиционности модуляции BFSK, происходит модуляцияcообщения и переход его в канал связи, где появляется шум
рис.3 Схема канала приемника
На стороне приема обратная последовательность действий.
2.2. Разработка программных модулей передачи и приема сообщений канального уровня.
Основная задача состоит в том, чтобы мы успешно передали сообщение радиомодулем и приняли сообщение светодиодным модулем Kemper LED.
Приступим к выполнению поставленной задачи :
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
сообщение было передано и раскодировано
Вывод: сообщение успешно передано, и успешно раскодировано и принято
Используемая литература:
. 1.Бакке А.В. «Лекции по курсу ССПО»