Тема Т3-N7 - "Передача данных с уведомлением о доставке".

 

Выполнил: студент группы № 1110 Соколов Н.А.

 

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

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

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

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

 

1.4. Построение итоговой иерархической модели узлов сети (в соответствии с концепцией OSI).


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

 

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

Рассмотрим данную модель применимо к разрабатываемой радиосистеме и решаемым ею задач (Рис.8). 

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

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

        Далее в структуре OSI следует сетевой уровень. Но в разрабатываемой модели он отсутствует, поскольку нет соединения с другими сетями.

Моя модель узлов сети будет состоять из трёх уровней: физического, канального и уровня управления.

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

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

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

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

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

 

Канальный уровень:

- адресная доставка сообщений;

- контроль за наличием ошибок (ARQ, CRC-16);

- доступ к физическим каналам (CSMA/CA);

- формирование/расформирование сообщений.

 

Уровень управления:

- управление мощностью передачи;

- формирование временной структуры работы терминалов.

 


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

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




            Рис.9. Блок-схема алгоритма передачи данных с уведомлением.

 

Программа начинает работу с того, что передается трафик сообщения.

Т1- передатчик (Master), Т2 – приемник (Slave).

На 1-ой части блок-схемы (Рис.9) до пунктирной линии описана работа Т1 – как передатчика, а после пунктирной линии Т2 – как приемника.

На 2-ой части блок-схемы (Рис.9) до пунктирной линии описана работа Т1 – как приемника, а после пунктирной линии Т2 – как передатчика.

 

1)      Т1 формирует сообщение УУ (здесь содержится поле для управления мощностью);

2)      Т1 формирует сообщение  КУ (определяются адреса мастера и слейва, определяется количество передаваемых сообщений);

3)      Т1 формирует сообщение ФУ (здесь содержится частотная и тактовая синхронизация)

4)      Затем Т1 отправляет сообщение по КС.

5)      Т2, получив сообщение от Т1, проводит радиоизмерение и передает Т2 корректировку мощности (на блок-схеме ссылка (1)).

После радиоизмерений Т2 осуществляет синхронизацию.

Если синхронизация прошла не успешно, происходит прекращение передачи информации.

Если синхронизация прошла успешно, Т2 производит демодуляцию/декодирование сообщения.

6)      Затем при помощи ARQ – запроса происходит обнаружение ошибок  Т2 (слейвом).

Если есть ошибки, то осуществляется запрос на повторную передачу (на блок-схеме ссылка (2)).

Если нет ошибок, то терминалом Т2 извлекается информация об адресе получателя,

производится извлечение мультимедиа и формируется сообщение об успешном приеме (на блок-схеме ссылка (3)).

 

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

 

В начале программы происходит инициализация параметров, которая осуществляется функцией: finction set = init(). Здесь описывается файлы для чтения и записи, частота дискретизации, длина сообщения УУ трафика и управления мощностью, длина сообщения КУ трафика и управления мощностью без учета поля CRC, задаются параметры CRC.

%инициализация параметров

st = init();

 

Далее считывается мультимедийный файл, выделяется моноканал и присваиваются адреса мастеру и слейву.

% чтение wav файла

media=wavread(st.FileNameRead,'native');

% выделение моноканала

media=media(:,1)';

 % адреса мастера и слейва

Add_rec_m = [1 0 0 0 1];

Add_rec_s = [0 1 1 1 0];

 

Затем мультимедийный фрагмент (или его часть) переводится из шестнадцатиричного - int16 в десятичный - double (function data_double=int16_2_double(data_int16)).

А затем из десятичного - double в  двоичный – binary (function b= my_de2bi(d, msbflag, n)).

 

% перевод типа данных int16 в двоичный

data_double=int16_2_double(media(1:100000)); %участок медиа

%data_double=int16_2_double(media);% весь медиа

% задается массив, куда будет записываться сообщение на выходе

media_rx=[];

 

Далее определяется количество передаваемых кадров сообщения и начинает работать цикл, до тех пор, пока все кадры не будут успешно переданы.

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

N=floor(length(data_double)/st.Len_traf);

for i=1:N

ARQ_cont_rx=1;

 

Для формирования сообщения УУ мастером заполняем поле управления мощностью передачи слейва.

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

Contr_pow = ones (1,16);  

 

Для формирования сообщения УУ мастером выделяем сообщение трафика (пакет)

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

L3_traf=data_double((i-1)*st.Len_traf+1:i*st.Len_traf);

 

И формируем сообщение УУ мастера

% формирование сообщения уровня управления мастера

mes_L3=[Contr_pow L3_traf];

 

Далее начинается работа ARQ-запроса и начинает формироваться пакет трафика.

while  (ARQ_cont_rx==1)

 

disp('шаг:')

disp(i)

disp('из')

disp(N)

 

Для формирования мастером сообщения канального уровня определяем номер пакета трафика

 % определения номера пакета (перевод из десятичной в двоичную (function b= my_de2bi(d, msbflag, n)

Number_packet=my_de2bi( mod(i-1,16),'left_msb',4);

 

Далее мастер формирует сообщение КУ (function  msg_Lev2 = My_transmiter_master (Add_rec, Number_packet, mes_L3), которое включает в себя: адрес получателя, номер пакета и сообщение УУ, также добавляется циклический избыточный код CRC-16.

% формирование мастером сообщения КУ   

msg_Lev2 = My_transmiter_master(Add_rec_m, Number_packet, mes_L3);

 

Теперь производим наложение случайной ошибки (помехи) для проверки работы ARQ.

% наложение случайной ошибки для проверки работы ARQ

pom=rand>0.5;%pom = 0 нет ошибок,

rx_mes_L2=msg_Lev2+[zeros(1,972) pom];

 

Далее слейв производит расформирование сообщения КУ (function [Add_rec_rx, Number_packet_rx, rx_mes_L3,  detect] = My_receiver_slave (rx_mes_L2))

% расформирование слейвом сообщения КУ

[Add_rec_m_rx, Number_packet_rx, rx_mes_L3, error_slave] = My_receiver_slave (rx_mes_L2);

% формирование подтверждения/запроса на повторную передачу

disp('получено сообщение номер')

disp(Number_packet_rx)

 

if (error_slave == 0)

    ARQ_cont = 0;

      disp('в нем нет ошибок')

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

    Contr_pow_rx = rx_mes_L3(1:16);

    % выделение собщения трафика

    rx_L3_traf=rx_mes_L3(17:st.Len_traf+16);

else

    ARQ_cont = 1;

    disp('в нем есть ошибки: запрос на повторную передачу')

 

end

 

Теперь слейв формирует сообщение УУ управления мощностью передачи мастера

% последовательность управления мощностью передачи мастера   

Contr_pow_s = ones (1,16);

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

 mes_L3_s= [Contr_pow_s zeros(1,50)];%%%%

 

Далее слейв формирует сообщение КУ управления мощностью передачи мастера

% формирование слейвом сообщения КУ (function  msg_Lev2 = My_transmiter_slave (Add_rec, Number_packet, ARQ_m, mes_L3)). Сюда входит: адрес слейва, номер пакета, признак ARQ (1-естьошибки, 0-нет ошибок), сообщение УУ, также добавляется циклический избыточный код CRC-16.   

msg_Lev2_s = My_transmiter_slave (Add_rec_s, Number_packet_rx, ARQ_cont, mes_L3_s);

 

Далее производится наложение случайной ошибки для проверки работы ARQ. Возьмем случай, когда ошибок нет.

% наложение случайной ошибки для проверки работы ARQ

pom=0;%rand>0.5;

 rx_mes_L2_s=msg_Lev2_s+[zeros(1,91) 0];

 

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

 (function [Add_rec_rx, Number_packet_rx, ARQ_m, rx_mes_L3, detect] = My_receiver_master (rx_mes_L2))

 

% расформирование мастером сообщения КУ

[Add_rec_rx_s, Number_packet_rx_s, ARQ_cont_rx, rx_mes_L3_s, error_master] = My_receiver_master (rx_mes_L2_s);

% формирование подтверждения/запроса на повторную передачу

if (error_master == 0)

    disp('в сообщении управления нет ошибок')

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

    Contr_pow_rx = rx_mes_L3_s(1:16);

else

    disp('в сообщении управления есть ошибки')

    error('прекращение сеанса передачи данных')

end

end

 

Далее формируется поток трафика

% формирование потока трафика

media_rx=[media_rx rx_L3_traf];

 end

 

Потом происходит перевод сообщения трафика из двоичного в int16(function data_int16=double_2_int16(data_double)

 

%перевод из двоичного в int16

media_int16=double_2_int16(media_rx);

 

И трафик записывается в выходной файл: fraza1_add_noise.wav

% запись wav файла   

wavwrite(media_int16,st.Fs,st.FileNameWrite).

 

 

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

1. Скляр Б. Цифровая связь. Теоретические основы и практическое применение. М.: Вильямс, 2003г.

2. Бакке А.В.   «Лекции по курсу ССПО»

3. Основы построения беспроводных сетей стандарта 802.11: методические указания к лабораторной работе / Рязан. гос. радиотехн. ун-т; сост.: А.В. Бакке. -Рязань, 2008. -52 с.

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