В данной статье рассмотрены следующие пункты задания к курсовой работе:
    3.1. Разработка и описание блок-схемы алгоритма передачи сообщений L2 уровня по каналу связи в одном направлении
    3.2. Разработка программной модели по блок-схеме п.3.1
    3.3. Исследование качества работы модели на предмет соответствия п.2.7, 2.8.

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

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

Разработанный программный модуль иллюстрирует процесс передачи базовой станцией одного пакета мультимедийного трафика по каналу TCH 2, и процесс приема и декодирования этого пакета на стороне терминала.

На канальном уровне сообщение трафика дополняется полем размерностью 2 бита, содержащим информацию о номере канала. Так как у терминала отсутствует возможность запросить повторную передачу пакета мультимедийного трафика, поле CRC к пакету не добавляется.

На физическом уровне производятся операции сверточного кодирования по Витерби, сверточного перемежения битов, модуляции QPSK и формирования OFDM символов. Диаграмма, иллюстрирующая работу передающей части БС представлена на рис. 3. 1.


Рис. 3. 1. Диаграмма передачи сообщения трафика БС. 

Код функции настройки параметров модели:

function set = initSettings()

% параметры модели


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

set.mPos = 4;


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

set.lenght_traffic=96;

end


Код функции передатчика:

function [phy_frame] = Transmitter (message_traffic);

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

st=initSettings();

global Nc

global pilotIndexes

global ns;

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

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

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


bit_number = 1;

symbol_number = 1;

DATA_2 = double(message_traffic); 

DATA = dec2bin(DATA_2);

f = numel(DATA);

for i = 1:f

       if bit_number == 8

        bit_number = 1;

        symbol_number = symbol_number + 1;

       end;

   DATA_1 (i) = str2num(DATA(symbol_number,bit_number));

   bit_number = bit_number + 1;

end


%DATA_3 = bin2dec(DATA_1); 

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

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

DATA_4 = DATA_1(1:126);

% DATA_1 = message_traffic;

channel_num = [0 1]; %для примера возьмем номер мультимедийного канала - 2

msg_Lev2 = [channel_num DATA_4];  


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

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

%Сверточное кодирование

trellis = poly2trellis(7,[171 133]);

code = convenc(msg_Lev2,trellis);


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

msg_lenght = length (code);


%сверточное перемежение

code = convintrlv(code, 4, 3);

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

pilotIndexes = [10 20];


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

Ngr = 0;

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

Nc = 36;

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

Ndata = Nc - (length(pilotIndexes));

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

s_length = Ndata * log2(st.mPos);

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

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


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

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

h = modem.pskmod(st.mPos);

h.inputtype = 'bit';

IQ_signal = modulate(h, code');


% построение СКС

plot(IQ_signal,'xr');

ylim([-3.1 3.1]);

xlim([-3.1 3.1]);

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


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

ofdmFrame = makeOfdmFrame(IQ_signal, ns);


% Дополнение пакета синхросимволом - преамбулой.

% Преамбула состоит из 2-х идентичных частей, 

% представляющих собой последовательности CAZAC.

   seq_blk = cazac_seq(48,1);

   sync = [seq_blk seq_blk];

 

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

 phy_frame = [sync ofdmFrame];


 figure;

plot(abs(phy_frame));

end

В передатчике осуществляется формирование OFDM символов. Код функции формирования OFDM символов:

function ofdmFrame = makeOfdmFrame(dataMod, Nofdm)

global pilotIndexes;

global Nc;

global len_cp;

global len_ofdmSymbol;

global len_ofdmFrame;


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

%примера, код Баркера), как результат - 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;

            if indexOfPilot == 3

                indexOfPilot = 1;

            end;

        else

            ofdmSymbol(j) = dataMod(indexOfData);

            indexOfData=indexOfData+1;

        end

    end

    indexOfPilot=1;

    ofdmSymbol = ifft(ofdmSymbol);


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

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


    cp = ofdmSymbol(Nc-floor(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

    len_ofdmFrame = length (ofdmFrame);

end

На приемной стороне осуществляются процессы, обратные происходящим на передающей стороне. Соответственно производится выделение полезной информации из OFDM символов, демодуляция QPSK сигнала, деперемежение и декодирование по Витерби, после чего на канальном уровне осуществляется выделение номера канала трафика и информационной части сообщения. Диаграмма, иллюстрирующая процесс приема пакета трафика по каналу TCH 2 приведена на рис. 3.2.


Рис. 3. 2. Диаграмма приема пакета мультимедийного трафика.

Код функции приемника:

function [addr, message] = Receiver ( phy_frame );

global pilotIndexes

global Nc

global ns;

global len_cp;

global len_ofdmSymbol;

global len_ofdmFrame;


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

st=initSettings();


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


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


ofdmFrame_Rec = phy_frame(97:length(phy_frame));

ofdmFrame_Rec =  ofdmFrame_Rec(1:end);

figure;

hold on;


%for i=1:4

%ofdmFrame_R((i-1)*Nc:(i-1)*Nc+Nc)=ofdmFrame_Rec(1+(i-1)*len_ofdmSymbol:len_ofdmSymbol*i);

%end;


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

% OFDM сигнала

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

n=1;

%ofdmFrame_R = ofdmFrame_Rec(1+(i-1)*len_ofdmSymbol:len_ofdmSymbol*i);

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

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

    ofdmSymbol(b:b+Nc-1) = ofdmFrame_Rec(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;                  

            if indexOfPilot == 3

                indexOfPilot = 1;

            end;

        else

           Q_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.pskdemod(st.mPos);

   h.OutputType = 'bit';

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

  data_r = demodulate(h,IQ_signalr);


  deintrlved_bits = reshape(data_r,numel(data_r),1);

  deintrlved_bits = deintrlved_bits';


  % Сверточное деперемежение

  deintrlved_bits = convdeintrlv(deintrlved_bits, 4, 3);


  %Устранение задержки, полученной при сверточном деперемежении

   d = 4*(4-1)*3;

   received_L1=deintrlved_bits(d+1:end);


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

% Декодирование по Витерби

  trellis = poly2trellis(7,[171 133]);

  decode_word = vitdec(received_L1,trellis,34,'cont','hard');


received_mes_L1 = decode_word';

received_mes_L1 = received_mes_L1(34:length(received_mes_L1));


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

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

 

addr = received_mes_L1(1:2);


% выделение полезной информации

message_1 = received_mes_L1(3:length(received_mes_L1));

message = dec2bin(message_1);

symbol_number=1;

for i=1:7:(length(message)-7)

    for bit_number=0:6

        signal_ascii_bin(symbol_number,bit_number+1)=message(i+bit_number);

    end;

    symbol_number=symbol_number+1;

end;

signal_ascii=bin2dec(signal_ascii_bin);

message_final=char(signal_ascii);


%end;

%вывод результатов

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

    disp('номер канала:'); disp(addr);

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

end


Функции приемника и передатчика вызываются из главной части программного стенда. Код главной части программного стенда Main.m:

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

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


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

st=initSettings();


%message_traffic = randint(1,96);

message_traffic = ('radiostation 2 chan');


%% Передатчик БС

phy_frame_1 = Transmitter (message_traffic);


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

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

SNR=randi(16);

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


%% Приемник Т

[address, message] = Receiver (phy_frame_R_1);


3.2. Исследование качества работы модели на предмет соответствия п.2.7, 2.8.

В качестве примера сообщения мультимедийного трафика используем сообщение «radiostation 2 chan». При передаче этого сообщения в передатчике БС будет сформировано сигнально-кодовое созвездие, представленное на   рис. 3.3.


Рис. 3. 3. СКС передатчика базовой станции.

         В результате формирования OFDM символов посредством добавления циклического префикса, равного ¼ передаваемого символа, получим следующий вид OFDM символов во временной области (рис. 3.4):


Рис. 3. 4. OFDM символы.

         В результате приема сообщения терминалом получим сигнально-кодовое созвездие, представленное на рис. 3.5.


Рис. 3. 5. СКС приемника терминала.

         Итоговый результат выполнения программного модуля (рис. 3.6):


Рис. 3. 6. Результат работы программного модуля.

         Как видно по результатам выполнения, алгоритм работы программного модуля реализован верно, и причина неправильного приема информационной части связана со сложными шумовыми условиями в канале (ОСШ = 3дБ), при этом номер канала мультимедийного трафика был принят верно.


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

1) Бакке А.В. - лекции по курсу «Системы и сети связи с подвижными объектами».

2) Wikipedia. Статья "OFDM".

3) Wikipedia. Статья "Сверточный код".

4) Wikipedia. Статья "Алгоритм сверточного кодирования Витерби".

5) Wikipedia. Статья "Многолучевое распространение".

6) Статья "OFDM модуляция".

7) http://www.techeducator.ru/dexius-1216-1.html

8) КР "Высокоскоростной радиомост". Часть 2. Физический уровень.

9) Методические указания к лабораторной работе №4: "Исследование методов обработки сигналов в приемнике стандарта GSM"

10) Методические указания к лабораторной работе №1: "Исследование принципов организации канала передачи данных"

11) Радиосистема дистанционного видеоконтроля (Часть 4).

Ссылки на предыдущие публикации и соответствующий раздел форума:

1) http://radiolay.ru/viewtopic.php?f=83&t=457

2) Интерактивная радиосеть мультимедийного вещания. Часть 1.

3) Интерактивная радиосеть мультимедийного вещания. Часть 2. Проектирование радиосети. Канальный уровень.

4) Интерактивная радиосеть мультимедийного вещания. Часть 1. Исправленная.

5) Интерактивная радиосеть мультимедийного вещания. Часть 2. Проектирование радиосети. Канальный уровень. Исправленная.

6) Интерактивная радиосеть мультимедийного вещания. Часть 3. Проработка задач физического уровня.

7) Интерактивная радиосеть мультимедийного вещания. Часть 2. Проектирование радиосети. Канальный уровень. Исправленная еще раз.

8) Интерактивная радиосеть мультимедийного вещания. Часть 3. Проработка задач физического уровня. Исправленная.