Радиосеть: доставка сообщений. Часть 3.

Выполнили: ст.гр. 9110 Медведев С.А.., Колесник Н.Ю..

 

Задача: разработать программу передачи мультимедийного файла от терминала Т1 к терминалу Т2, через точку доступа АР (рисунок 1).

 

Рисунок 1. Постановка задачи.

Терминалы и точка доступа взаимодействуют по сценарию, описанному в первой статье http://omoled.ru/publications/view/416

 

Рисунок 2. Сценарий взаимодействия терминалов с точкой доступа.

 

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

 

Рисунок 3. Структура пакетов.

 

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

Передающая сторона:

1) Открытие файла

 fid = fopen('zc.wav','r');

 

2) Считывание первых 8 байт:

 for m=1:26

    x=fread(fid,1)';

    bi_x = de2bi(x,8);

    biX = [biX bi_x];

 end

 


3) Формирование поля Data L3 уровня:

DATA = bin_msg;

disp(['Поле DATA: ', num2str(length(DATA))]);

msg_L3  = [bi_x DATA];

 

4) Добавление CRC:

set.poly=[1 1 0 1 0 1 0 1]; % CRC-8

 

5) Определение типа сообщения:

if  strcmp(TypeMSG, 'service')

       TYPE = my_de2bi(st.service,'left_msb',1);

   elseif strcmp(TypeMSG, 'traffic')

       TYPE = my_de2bi(st.traffic,'left_msb',1);

   end;

6) Сборка сообщения L2 уровня:

% сборка части L2-сообщения

   msg_L20 = [TYPE msgL3];

     

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

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

   [q r] = deconv(m,st.poly); % поиск частного и остатка от деления

   %информационной части на порождающий полином CRC кода

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

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

   % сборка сообщения

   msg_L2 = [msg_L20 CRC];

   disp(['Поле Сообщение_L2: ', num2str(length(msg_L2))]);

  

   trx = msg_L2;

 

7) Помехоустойчивое кодирование, был выбран код (255.231) , который исправляет 3 ошибки:

   code_word = encode(trx,st.n,st.k,'bch/binary');

   code_word = [code_word]';

   disp(['Поле "Кодовое слово": ', num2str(length(code_word))]);

 

8) Модуляция:

   h = modem.pskmod(st.mPos);

   h.inputtype = ‘bit’;

   h.SymbolOrder = ‘gray’;

   h.PhaseOffset = 0;

 

   % собственно модуляция

   IQ_signal = modulate(h, code_word);

 

9) Наложение шума на блок символов:

   noise_sgn = awgn(trxIQ,15);

 

Приемная сторона:

10) Демодуляция:

h = modem.pskdemod(st.mPos);

h.SymbolOrder = 'gray';

h.PhaseOffset = 0;

h.OutputType = 'bit';

  

% собственно демодуляция

s = demodulate(h,rxIQ);

 

11) Декодирование:

received_mes_L1 = decode(s(1:st.n),st.n,st.k,'bch/binary');

 

12) Проверка подлинности СRC:

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

 

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

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

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

   if r == zeros(1,length(received_mes_L1))'

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

   else

        errs = errs + 1;

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

   end;

 

13) Принятое сообщение:

 % Собственно принятое сообщение

received_mes_L2 = received_mes_L1(1:st.length_msg_Lev2);

 


 

14) Извлечение принятого сообщения в двоичном виде:

%    % Извлечение принимаемого сообщения (в двоичном виде)

   length_data = my_bi2de(received_mes_L2(2:8)','left_msb' );

      msgL3 = received_mes_L2(9:8+16*length_data)';

 

В качестве примера передадим файл zc.wav при различных ОСШ.

 

При ОСШ = 30дБ


 


При ОСШ = 20 дБ

В ходе выполнения работы были решены задачи, поставленные в задании –спроектирована система передачи сообщения, использующая модуляцию 8-PSK, с помехоустойчивым кодом, исправляющим 3 ошибrки. В проделанной самостоятельной работе был разработан сценарий передачи данных от терминала 1 к терминалу 2, и часть его реализована программно.


Список использованных источников:

1. http://omoled.ru/publications/view/416

2. "О построении программной модели сети"

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