Радиосистема дистанционного видеоконтроля.

Часть 4

2.1. Разработка модели системы в среде Matlab, демонстрирующей пример передачи сообщений между объектами верхнего уровня.

 Продемонстрируем активный режим [1, п.1.5.6].

После проведения процедуры регистрации ТД осуществляет передачу команд управления видеокамерой и передачу сообщений сигнализации (сообщение о смене профиля функционирования системы или сообщение  об изменении мощности передачи терминала) по каналу ССH. На канальном уровне сообщение этого канала состоит из полей:

- DATA, в этом поле содержится код выполняемой команды управления, размерностью 182 бит;

- TYPE, поле которое необходимо Т для того чтобы знать это новое сообщение или повторно передаваемое. Для этого поля достаточно 1 бита;

- CRC, размерность поля – 4 бит.

На физическом уровне это сообщение подвергается перемежению, канальному кодированию, модуляции и формирование OFDM символов [см. 4].

  Отметим, что для команд управления видеокамерой и для сообщений сигнализации требуется гарантированная доставка. Для этого в системе используется ARQ с остановками. ТД перед началом очередной передачи ожидает подтверждения об успешном приеме предыдущей. Если передаваемое сообщение принято с ошибкой, то Т передает отрицательное подтверждение приема; ТД повторяет передачу ошибочно принятого сообщения и только после этого передает следующий по очередности сообщение. Для передачи сообщений подтверждения о доставке в сообщении канала DTCH, о котором будет сказано ниже, необходимо предусмотреть специальный флаг, в котором будет отмечаться нужна повторная передача или нет. [3]


Рис.1. Активный режим

            На канальном уровне сообщение  канала DTCH состоит из полей:

- DATA, в этом поле содержащее фрагмент видеопотока, размерностью 182 бит;

- FL_ARQ, в котором содержатся сведения о подтверждении/не подтверждении безошибочного приема. Для этого поля достаточно 1 бита;

- CRC, размерность поля – 4 бит.

          На физическом уровне это сообщение подвергается процедурам описанным выше. Отличительной особенностью является то, что сообщения этого канала передаются группой. Эта группа объединяет 5 сообщений канала DTCH. [3]

Алгоритм передачи сообщения от ТД до терминала представлен на рисунке 2.


Рис. 2. Блок-схема передающей части ТД

Рассмотрим параметры модели

unction set = initSettings()

 

% позиционность модуляции - QAM

set.mPos = 4;

%Параметры помехоустойчивого кодека 

%Для примера используется код БЧХ :

%Длина кодового слова

set.n=255;

%Размер кодируемого блока

set.k=187;

% Параметры CRC

%CRC-8

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

[set.x8 set.y8]=size(set.poly8); %размерность полинома

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

%CRC-8

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

%CRC-8

[set.x4 set.y4]=size(set.poly4);

%размер сообщения каналького уровня канала CСН  без учета CRC

set.lenght_info=183;

%размер сообщения каналького уровня канала DTCH  без учета CRC и FL_ARQ

set.lenght_video=182;

end

 

В командном окне получим :


Рис.3. Параметры модели

Рассмотрим функции ТД в среде MATLAB

function [phy_frame] = transmitter_AP( TYPE, DATA_COM, i )

% TYPE - поле,которое необходимо Т для того,чтобы знать

% это новое сообщение или повторно передаваемое.

% DATA_COM - Поле DATA_COM содержит код запрашиваемой услуги

 

% Установка параметров модели

st=initSettings();

%global fil_zero

global Nc

global pilotIndexes

global ns;

 

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

% и реализация повторной передачи (ARQ)

if TYPE == 0

           DATA=DATA_COM(i);

           tps='new_message';

elseif TYPE == 1

           DATA=DATA_COM(i-1);

           tps='repeat_message';

end;

 

disp('===============================================');

disp('сообщение передаваемое ТД');

disp('сообщение типа:'); disp(tps);

disp('передаваемая команда:'); disp(DATA);

DATA= my_de2bi(DATA,'left_msb',178);

disp('===============================================');

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

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

 

msg_Lev2 = [TYPE DATA];  

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

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

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

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

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

%расчет CRC

CRC = r(length(msg_Lev2) + 1:end);

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

msg_Lev1 = [msg_Lev2 CRC];

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

%% Помехоустойчивое кодирование

% Кодирование сообщения кодом БЧХ (255, 187)

code = encode(msg_Lev1,st.n,st.k,'bch/binary');

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

%кратному 2 или 4 (следует из определения позиционности QPSK и QAM-16 модуляции

code_word = [0 code];

%Блочное перемежение

alternation_bits = matintrlv(code_word, 32, 8);

% номера пилотных поднесущих в OFDM-символе

pilotIndexes = [9 26 0];

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

Ngr = 0;

% Размерность OFDM-символа

Nc=34;

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

Ndata = Nc - (length(pilotIndexes)-1);

% количество битов, передаваемых в одном OFDM-символе

s_length = Ndata * log2(st.mPos);

% Количество OFDM-символов

ns = floor(length(alternation_bits)/s_length);

% Параметры модуляции

% h - модем QAM с позиционностью mPos

h = modem.qammod(st.mPos);

h.inputtype = 'bit';

IQ_signal = modulate(h, alternation_bits');

figure;

plot(IQ_signal,'xr');

ylim([-3.1 3.1]);

xlim([-3.1 3.1]);

title('Сигнально-кодовое созвездие, полученное в передатчике точки доступа')

 

%формирование OFDM-символов

ofdmFrame = makeOfdmFrame(IQ_signal, ns);

%Формирование символов преамбулы

%Короткие символы - для подстройки частоты (синхронизация по частоте)

ShortTrainingSymbols = 3*[0 0 1+j 0 0 0 -1-j 0 0 0 1+j 0 0 0 -1-j 0 0 0 ...

    -1-j 0 0 0 1+j 0 0 0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 ...

      1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 1+j 0 0];

  short_symbols = ifft(ShortTrainingSymbols);

% выделение первых 16 отсчетов

Strs = short_symbols(17:37);

% Формирование 10 коротких символов преамбулы на основе выбранного набора

short_trs= [Strs Strs];

%длинный символ преамбулы

LongTrainingSymbols=2*[0 0 0 0 0 0 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...

 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1 0 0 0 0 0 0];

long_symbol = ifft(LongTrainingSymbols);

long_trs = long_symbol(7:48);

% Пакет физического уровня (символы преамбулы и OFDM-символы)

phy_frame = [short_trs long_trs ofdmFrame];

figure;

plot(abs(phy_frame));

end

Передача одного OFDM символа будет осуществляться с использованием 48 поднесущих: 32 поднесущие для передачи данных, 2 – для пилот сигнала, 6 и 7 – для использования защитных интервалов и 1 нулевая поднесущая для идентификации нулевой частоты OFDM сигнала. Структура поднесущих изображена на Рис. 4.[4]


Рис.4. Структура поднесущих (OFDM символов)

В начало каждого сформированного символа OFDM необходимо добавить циклический префикс. Размер циклического префикса составит ¼ часть  длины символа. Таким образом один OFDM символ будет передаваться с использованием 32 поднесущих.[3]

 С помощью функции  function ofdmFrame = makeOfdmFrame(dataMod, Nofdm) реализуется формирование OFDM символов

function ofdmFrame = makeOfdmFrame(dataMod, Nofdm)

 

global pilotIndexes;

global Nc;

global len_cp;

global len_ofdmSymbol;

 

%символы пилотных поднесущих промодулированы псевдослучайным кодом (для

%примера, код Баркера), как результат - BPSK

seqBarker = [-1 -1 -1 1 1 1 -1 1 1 -1 1]*4/3;

ofdmSymbol = [];

ofdmFrame = [];

indexOfPilot = 1;

indexOfData = 1;

for i=1:Nofdm

    for j=1:Nc % собираются IQ-символы будущего OFDM-символа

        if (j==pilotIndexes(indexOfPilot))

            ofdmSymbol(j)=seqBarker(indexOfPilot);

            indexOfPilot=indexOfPilot+1;

        else

            ofdmSymbol(j) = dataMod(indexOfData);

            indexOfData=indexOfData+1;

        end

    end

    indexOfPilot=1;

    ofdmSymbol = ifft(ofdmSymbol);

    %формирование циклического префикса, как часть OFDM-символа,

    %используется 1/4 часть символа

    cp = ofdmSymbol(Nc-Nc/4+1:Nc);

    %длина циклического префикса

    len_cp=length(cp);

    % добавление ЦП в начало OFDM-символа (64 IQ-символа)

    ofdmSymbol=[cp ofdmSymbol];

    %длина OFDM-символа

    len_ofdmSymbol=length(ofdmSymbol);

    % Сборка информационных OFDM-символов пакета физического уровня

    ofdmFrame=[ofdmFrame ofdmSymbol];

    ofdmSymbol=[];

end

end

 

Далее, происходит формирование преамбулы.

 

%Формирование символов преамбулы

%Короткие символы - для подстройки частоты (синхронизация по частоте)

ShortTrainingSymbols = 3*[0 0 1+j 0 0 0 -1-j 0 0 0 1+j 0 0 0 -1-j 0 0 0 ...

    -1-j 0 0 0 1+j 0 0 0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 ...

      1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 1+j 0 0];

  short_symbols = ifft(ShortTrainingSymbols);

% выделение первых 16 отсчетов

Strs = short_symbols(17:37);

% Формирование 10 кототких символов преамбулы на основе выбранного набора

short_trs= [Strs Strs];

%длинный символ преамбулы

LongTrainingSymbols=2*[0 0 0 0 0 0 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...

 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1 0 0 0 0 0 0];

long_symbol = ifft(LongTrainingSymbols);

long_trs = long_symbol(7:48);

% Пакет физического уровня (символы преамбулы и OFDM-символы)

phy_frame = [short_trs long_trs ofdmFrame];

figure;

plot(abs(phy_frame));

end

 

Переданное ТД сообщение канала управления ССH должно быть принято и обработано Т. Алгоритм приема сообщения терминалом представлено на рисунке 5.

Рис.5. Блок-схема приемной части Т

  Рассмотрим функцию, отражающую функции выполняемые передатчиком терминала.

function [phy_frame, Video_data] = transmitter_T( FL_ARQ )

 

% FL_ARQ - поле которое необходимо ТД для того чтобы знать

% Т принял это сообщение с ошибками или безошибочно

% FL_ARQ=0 - если ошибки не обнаружены

% FL_ARQ=1 - запрос на повторную передачу

% Video_data - передаваемое сообщение видеотрафика

% phy_frame - сформированные OFDM-символы

 

% Установка параметров модели

st=initSettings();

%global fil_zero

global Nc

global pilotIndexes

global ns;

global ofdmFrame;

% "видеопоток"

Video_data='video traffic video traffic video traffic video traffic!';

[binVector, N]= strtobin(Video_data);

fill=zeros(1,5*(st.lenght_video)-N);

disp('===============================================');

disp('сообщение передаваемое Т');

if FL_ARQ == 1

       disp('запрос на повторную передачу');

     

else

       disp('потверждение верного приема');

      

end

 

 

 

disp('передаваемое сообщение'); disp(Video_data);

disp('===============================================');

DATA=[binVector' fill] ;

figure;

hold on

ofdmFrame_1=[];

 

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

for i=1:5

 

data_video=DATA(1+(i-1)*st.lenght_video:st.lenght_video*i);

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

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

msg_Lev2 = [FL_ARQ data_video];  

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

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

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

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

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

%расчет CRC

CRC = r(length(msg_Lev2) + 1:end);

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

msg_Lev1 = [msg_Lev2 CRC];

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

%% Помехоустойчивое кодирование

% Кодирование сообщения кодом БЧХ (255, 187)

code = encode(msg_Lev1,st.n,st.k,'bch/binary');

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

%кратному 2 или 4 (следует из определения позиционности QPSK и QAM-16 модуляции

code_word = [0 code];

%Блочное перемежение

alternation_bits = matintrlv(code_word, 32, 8);

% номера пилотных поднесущих в OFDM-символе

pilotIndexes = [9 26 0];

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

Ngr = 0;

% Размерность OFDM-символа

Nc=34;

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

Ndata = Nc - (length(pilotIndexes)-1);

% количество битов, передаваемых в одном OFDM-символе

s_length = Ndata * log2(st.mPos);

% Количество OFDM-символов

ns = floor(length(alternation_bits)/s_length);

% Параметры модуляции

% h - модем QAM с позиционностью mPos

h = modem.qammod(st.mPos);

h.inputtype = 'bit';

IQ_signal = modulate(h, alternation_bits');

plot(IQ_signal,'xr');

ylim([-3.1 3.1]);

xlim([-3.1 3.1]);

title('Сигнально-кодовое созвездие, полученное в передатчике терминала')

%формирование OFDM-символов

ofdmFrame = makeOfdmFrame(IQ_signal, ns);

ofdmFrame_1=[ofdmFrame_1 ofdmFrame];

end

hold off

 

%Формирование символов преамбулы

%Короткие символы - для подстройки частоты (синхронизация по частоте)

ShortTrainingSymbols = 3*[0 0 1+j 0 0 0 -1-j 0 0 0 1+j 0 0 0 -1-j 0 0 0 ...

    -1-j 0 0 0 1+j 0 0 0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 ...

      1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 1+j 0 0];

  short_symbols = ifft(ShortTrainingSymbols);

% выделение первых 16 отсчетов

Strs = short_symbols(17:37);

% Формирование 10 кототких символов преамбулы на основе выбранного набора

short_trs= [Strs Strs];

%длинный символ преамбулы

LongTrainingSymbols=2*[0 0 0 0 0 0 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...

 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1 0 0 0 0 0 0];

long_symbol = ifft(LongTrainingSymbols);

long_trs = long_symbol(7:48);

% Пакет физического уровня (символы преамбулы и OFDM-символы)

phy_frame = [short_trs long_trs ofdmFrame_1];

figure;

plot(abs(phy_frame));

end

 

Рассмотрим функцию, отражающую функции выполняемые приемником ТД

function [ TYPE, Video_data_r] = Receiver_AP ( msgIQ )

 

%Поле DATA_R содержит код принятой команды управления

%Поле TYPE необходимо для реализации процедуры ARQ

% это поле необходимо Т для того, чтобы знать

% это новое сообщение или повторно передаваемое

global pilotIndexes

global Nc

global ns;

global len_cp;

global len_ofdmSymbol;

global ofdmFrame;

 

%% Установка параметров модели

st=initSettings();

Video_data=[];

FL_ARQ=[];

result_det=[];

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

% Выделение преамбулы, и поля данных 

ofdmFrame_Rec = msgIQ(85:length(msgIQ));

ofdmFrame_Rec =  ofdmFrame_Rec(1:end);

figure;

hold on

for i=1:5

 

ofdmFrame_R=ofdmFrame_Rec(1+(i-1)*length(ofdmFrame):length(ofdmFrame)*i);

%Выделение промодулированных данных из принятого

% OFDM сигнала

% Удаление циклического префикса из OFDM символов

 

n=1;

 for i=1:Nc:ns*Nc-Nc+1

    ofdmSymbol(i:i+Nc-1) = ofdmFrame_R(n+len_cp:n+len_ofdmSymbol-1);

    n=n+len_ofdmSymbol;

 end

 

 %БПФ,перевод сигнала в частотную область

 

 for i=1:Nc:ns*Nc-Nc+1

     ofdmSymbol_ifft = ofdmSymbol(i:i+Nc-1);

     ofdmSymbol(i:i+Nc-1) = fft(ofdmSymbol_ifft);

  end

 

% Удаление пилот сигналов

indexOfPilot=1;

k=0;

for i=1:Nc:ns*Nc-Nc+1

    IQ_signal = ofdmSymbol(i:i+Nc-1);

    for j = 1:Nc

        if j == (pilotIndexes(indexOfPilot));

            indexOfPilot = indexOfPilot+1;                  

        else

        IQ_signal_2 =  IQ_signal(j);

            k=k+1;

        IQ_signal_3(k) = IQ_signal_2;

        end

    end

          indexOfPilot=1;

end

 

IQ_signalr = IQ_signal_3;

 

 

 

plot(IQ_signalr,'x');

title('Сигнально-кодовое созвездие, полученное в приемнике точки доступа');

 

% % Параметры демодуляции

   h = modem.qamdemod(st.mPos);

   h.OutputType = 'bit';

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

  data_r = demodulate(h,IQ_signalr);

  

  deintrlved_bits = reshape(data_r,256,1);

  % Блочное деперемежение

  deintrlved_bits = matdeintrlv(deintrlved_bits,32,8);

  %Устранение лишнего нулевого бита

  received_L1=deintrlved_bits(2:end);

 

% Помехоустойчивое декодирование

%Декодирование сообщения кодом БЧХ (255,187)

decode_word=decode(received_L1,st.n,st.k,'bch/binary');

received_mes_L1 = decode_word';

%%

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

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

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

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

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

   Video_data_r=received_mes_L1(2:(st.lenght_video+1));

   FL_ARQ_r=received_mes_L1(1);

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

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

   else

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

   end

Video_data=[Video_data Video_data_r];

FL_ARQ=[FL_ARQ FL_ARQ_r];

result_det=[result_det detect];

 

end

hold off

% Усреднение значения, содержащегося в полях FL_ARQ и result_det

   

    disp('===============================================');

    disp('сообщение принятое ТД содержит:');

    FL_ARQ=mean(FL_ARQ');

   

    if FL_ARQ >=0.5

       inf= 'запрос на повторную передачу';

       disp(inf);

       FL_ARQ=1;

       TYPE=1;

    else

        inf= 'потверждение верного приема';

        disp(inf);

        FL_ARQ=0;

        TYPE=0;

    end

   

       

    disp('Наличие ошибок:')

    result_det=mean(result_det);

    if result_det >=0.5

       result_det=1;

       disp('в принятом пакете есть ошибки');

    else

       result_det=0;

       disp('в принятом пакете нет ошибок');

    end

   

    Video_data=Video_data(1:length(Video_data)-14)';

    Video_data_r = bintostr(Video_data);

  

  

    disp('принято сообщение:'); disp(Video_data_r);

    disp('===============================================');

 

 

end

 

        Программа реализующий алгоритм, описанный выше (см. Рис. 1) выглядит следующим образом. Передача сообщений осуществлялась по каналу с АБГШ, причем значение ОСШ, которое использовалось в ходе выполнения программы было случайным. Это позволяет приблизиться к более реальным условиям приема данных.

function [ TYPE, Video_data_r] = Receiver_AP ( msgIQ )

 

%Поле DATA_R содержит код принятой команды управления

%Поле TYPE необходимо для реализации процедуры ARQ

% это поле необходимо Т для того чтобы знать

% это новое сообщение или повторно передаваемое

global pilotIndexes

global Nc

global ns;

global len_cp;

global len_ofdmSymbol;

global ofdmFrame;

 

%% Установка параметров модели

st=initSettings();

Video_data=[];

FL_ARQ=[];

result_det=[];

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

% Выделение преамбулы, и поля данных 

ofdmFrame_Rec = msgIQ(85:length(msgIQ));

ofdmFrame_Rec =  ofdmFrame_Rec(1:end);

figure;

hold on

for i=1:5

 

ofdmFrame_R=ofdmFrame_Rec(1+(i-1)*length(ofdmFrame):length(ofdmFrame)*i);

%Выделение промодулированных данных из принятого

% OFDM сигнала

% Удаление циклического префикса из OFDM символов

 

n=1;

 for i=1:Nc:ns*Nc-Nc+1

    ofdmSymbol(i:i+Nc-1) = ofdmFrame_R(n+len_cp:n+len_ofdmSymbol-1);

    n=n+len_ofdmSymbol;

 end

 

 %БПФ,перевод сигнала в частотную область

 

 for i=1:Nc:ns*Nc-Nc+1

     ofdmSymbol_ifft = ofdmSymbol(i:i+Nc-1);

     ofdmSymbol(i:i+Nc-1) = fft(ofdmSymbol_ifft);

  end

 

% Удаление пилот сигналов

indexOfPilot=1;

k=0;

for i=1:Nc:ns*Nc-Nc+1

    IQ_signal = ofdmSymbol(i:i+Nc-1);

    for j = 1:Nc

        if j == (pilotIndexes(indexOfPilot));

            indexOfPilot = indexOfPilot+1;                  

        else

        IQ_signal_2 =  IQ_signal(j);

            k=k+1;

        IQ_signal_3(k) = IQ_signal_2;

        end

    end

          indexOfPilot=1;

end

 

IQ_signalr = IQ_signal_3;

 

 

 

plot(IQ_signalr,'x');

title('Сигнально-кодовое созвездие, полученное в приемнике точки доступа');

 

% % Параметры демодуляции

   h = modem.qamdemod(st.mPos);

   h.OutputType = 'bit';

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

  data_r = demodulate(h,IQ_signalr);

  

  deintrlved_bits = reshape(data_r,256,1);

  % Блочное деперемежение

  deintrlved_bits = matdeintrlv(deintrlved_bits,32,8);

  %Устранение лишнего нулевого бита

  received_L1=deintrlved_bits(2:end);

 

% Помехоустойчивое декодирование

%Декодирование сообщения кодом БЧХ (255,187)

decode_word=decode(received_L1,st.n,st.k,'bch/binary');

received_mes_L1 = decode_word';

%%

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

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

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

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

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

   Video_data_r=received_mes_L1(2:(st.lenght_video+1));

   FL_ARQ_r=received_mes_L1(1);

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

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

   else

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

   end

Video_data=[Video_data Video_data_r];

FL_ARQ=[FL_ARQ FL_ARQ_r];

result_det=[result_det detect];

 

end

hold off

 

% Усреднение значения, содержащегося в полях FL_ARQ и result_det

   

    disp('===============================================');

    disp('сообщение принятое ТД содержит:');

    FL_ARQ=mean(FL_ARQ');

   

    if FL_ARQ >=0.5

       inf= 'запрос на повторную передачу';

       disp(inf);

       FL_ARQ=1;

       TYPE=1;

    else

        inf= 'потверждение верного приема';

        disp(inf);

        FL_ARQ=0;

        TYPE=0;

    end

   

    disp('Наличие ошибок:')

    result_det=mean(result_det);

    if result_det >=0.5

       result_det=1;

       disp('в принятом пакете есть ошибки');

    else

       result_det=0;

       disp('в принятом пакете нет ошибок');

    end

   

    Video_data=Video_data(1:length(Video_data)-14)';

    Video_data_r = bintostr(Video_data);

  

  

    disp('принято сообщение:'); disp(Video_data_r);

    disp('===============================================');

 

 

end

 

            Программа реализующий алгоритм, описанный выше (см. Рис. 1) выглядит следующим образом. Передача сообщений осуществлялась по каналу с АБГШ, причем значение ОСШ которое использовалось в ходе выполнения программы было случайным. Это позволяет приблизиться к более реальным условиям приема данных.

 

clear;%очистка рабочей области

clc; %очистка командного окна

% Установка параметров модели

st=initSettings();

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

 

%параметр необходимый для инициализации приемника ТД

start=0;% отключение приемника ТД

TYPE=0;

 

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

% выступает генератор команд

 

%генератор команд

command= randi(1000000000,10,1)';

 

%организация циклов приема-передачи

 

for i=1:10

%% инициализация приемника ТД

if start==0

% передатчик ТД   

phy_frame_1 = transmitter_AP( TYPE, command, i );

else

%приемник ТД

[TYPE, Video_data_r ] = Receiver_AP ( phy_frame_R_2 );

% передатчик ТД 

phy_frame_1 = transmitter_AP( TYPE, command, i );   

end

 

%% Наложение шума на сигнал

% В роли ОСШ выступает случайная величина

SNR=randi(16);

phy_frame_R_1=awgn(phy_frame_1,SNR,'measured');

 

%% приемник Т

[ DATA_R, FL_ARQ ] = receiver_T ( phy_frame_R_1 );

% передатчик Т

[phy_frame_2, Video_data_tr]= transmitter_T(FL_ARQ) ;

%% Наложение шума на сигнал

SNR=randi(16);

phy_frame_R_2=awgn(phy_frame_2,SNR,'measured');

%%

 

start=1;% включение приемника ТД

 

end

 

Проведем некоторый анализ модели. Для проведения анализа модели процесса приема-передачи сообщений канала ССН и DTCH необходимо в модуле prog.m поставить точки остановки в строках 26, 29, 37,39. После запуска программы выполнение прекратиться на 37 строчке.  В командном окне появится сообщение, которое передает ТД терминалу (Рис. 6), а также появятся сигнально-кодовое созвездие (СКС) сформированное ТД (Рис.7) и OFDM символы во временной области, соответствующие передачи сообщения канала ССН (Рис.8).

Рис.6. Информация, содержащаяся в сообщении передаваемом точкой доступа


Рис. 7. СКС, сформированное ТД


Рис. 8. OFDM символы во временной области, соответствующие передачи сообщения канала ССН.

Далее, сформированное сообщение проходит через канал с АБГШ и поступает на приемник Т. СКС после демодуляции OFDM символов показано на рисунке 9. В результате демодуляции полученных IQ символов и дальнейших функции, выполняемых приемником Т, Т была получено сообщение, и результатом обработки этого сообщения является запрос на повторную передачу ( Рис. 10)


Рис. 9. СКС после демодуляции OFDM символов


Рис. 10. Сообщение, принятое терминалом

После этого формируется передатчиком Т сообщения канала DCTH, также в этих сообщения будет содержаться запрос на повторную передачу (Рис. 11). OFDM символы передаваемой группы сообщений канала DTCH во временной области имеют вид, показанный на Рис. 12


Рис. 11. Сообщение, передаваемое терминалом


Рис. 12. OFDM символы во временной области, соответствующие передачи сообщений канала DTCH.

Далее, сформированное сообщение проходит через канал с АБГШ и поступает на приемник ТД. СКС после демодуляции OFDM символов показано на Рис.13. В результате демодуляции полученных IQ символов и дальнейших функции, выполняемых приемником ТД, ТД была получено сообщение, и результатом обработки этого сообщения является повторная передача ранее передаваемого сообщения канала ССН (Рис. 14).


Рис. 13. СКС после демодуляции OFDM символов.


Рис. 14. Сообщение принятое ТД

И далее, процесс формирования сообщения канала ССН и его обработка, передача сообщения канала DTCH и его обработка повторяются столько раз сколько организованно циклов приема-передачи. Сообщения. формируемые в следующем цикле приема-передачи показаны на Рис. 15.


Рис. 15. Сообщения, формируемые в следующем цикле приема передачи


Список использованной литературы

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

2. http://omoled.ru/publications/view/622

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

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