В данной статье рассмотрены следующие пункты задания к курсовой работе:

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

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

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

Созданный программный модуль демонстрирует процесс передачи от одного терминала другому терминалу сообщения в виде аудио трафика  TCH

Вместе с этим демонстрируется процесс приема и декодирования передаваемого пакета на стороне второго терминала.

На канальном уровне наше сообщение дополняется полями:

Type – тип передаваемого пакета: 4 бита

На физическом уровне осуществляется:

- операция сверточного кодирования

- операция сверточного перемежения битов

- модуляция QPSK и формирование OFDM-символов

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

Диаграмма изображенная на рисунке 1 демонстрирует работу передающей части первого терминала ( передающего терминала).


Рисунок 1 Диаграмма передачи сообщения

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

function frame_L1 = Transmitter(message_L3_add, pack_number)

    global ns;

    global mes_len;

    global mPos;

    global pilotIndexes;

    global Nc;

    global s_length;

frame_L1 = [];

for i = 1:(pack_number-1)

%На канальном уровне добавим служебное поле для сброса сверточного кодера

    type = [0 0 0 1];

    message_L2(i,1:mes_len+4) = [type message_L3_add(i,1:mes_len-4) 0 0 0 0];

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

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

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

    [j, t]=istrellis(trellis);

    message_L1_FEC(i,1:2*mes_len) = convenc(message_L2(i, 1:mes_len), trellis);

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

    %message_L1_FEC = convintrlv(message_L1_FEC, 4, 3);

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

    ns = floor(length(message_L1_FEC(i,1:2*mes_len))/s_length);

    %Модуляция QPSK

    param = modem.pskmod(mPos);

    param.InputType = 'bit';

    param.PhaseOffset = pi/4;

    IQ_signal(1:mes_len, i) = modulate(param, message_L1_FEC(i, 1:2*mes_len)');

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

    ofdmFrame = makeOfdmFrame(IQ_signal(1:mes_len, i), ns);

    %Дополнение последовательности OFDM символов служебным символом

    %ofdmFrame_s = makeOfdmFrame(IQ_signal(1:96, 1), 1);

    %ofdmFrame = [ofdmFrame_s ofdmFrame];

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

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

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

    seq_blk = cazac_seq(48,1);

    sync = [seq_blk seq_blk];

    %Дополнение каждого пакета преамбулой.

    %Формирование пакета физического уровня.

    frame_L1 = [sync ofdmFrame frame_L1];

end;

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

    plot(IQ_signal,'xb');

    ylim([-3.1 3.1]);

    xlim([-3.1 3.1]);

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

    %Построение OFDM символов во временной области

    figure;

    plot(abs(ofdmFrame));

end


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

Осуществляется:

- синтез полезной информации из OFDM символов

- демодуляция QPSK сигнала

- деперемежение

- декодирование

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

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



Рисунок 2 Диаграмма приема пакета сообщения

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

function [message_traffic_Rx] = Receiver(frame_L1_Noise)

    global ns;

    global mes_len;

    global mPos;

    global pilotIndexes;

    global Nc;

    global s_length;

    global len_cp;

    global pack_number;

    global len_ofdmSymbol;

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

p = 1;

g = 1;

len_OFDM_frame = len_ofdmSymbol*ns;

frame_L1_Rx_FFT = [];

for a = 0:616:(length(frame_L1_Noise)-616)

%Обнаружение и устранение преамбулы 

    frame_L1_Noise_noPreamb(p:p+len_OFDM_frame-1) = frame_L1_Noise((a+97):(a+96+len_OFDM_frame));

    frame_OFDM = frame_L1_Noise_noPreamb(p:p+len_OFDM_frame-1);

    p = p+len_OFDM_frame;

    k = 1;

    for i = 1:ns

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

%frame_OFDM_Rx(k:(k+Nc-1)) = frame_L1_Noise_noPreamb(i*(Nc+len_cp)-Nc+1:i*(Nc+len_cp));

        frame_OFDM_Rx(k:(k+Nc-1)) = frame_OFDM(i*(Nc+len_cp)-Nc+1:i*(Nc+len_cp));

        k=k+Nc;

        %Переход в частотную область

        frame_OFDM_Rx_FFT(i*Nc-Nc+1:i*Nc) = fft(frame_OFDM_Rx(i*Nc-Nc+1:i*Nc));

        len_frame_OFDM_Rx_FFT = length(frame_OFDM_Rx_FFT);

    end;

    frame_L1_Rx_FFT = [frame_L1_Rx_FFT frame_OFDM_Rx_FFT];

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

indexOfPilot = 1;

k = 1;

    %frame_OFDM_Rx_FFT_ = frame_OFDM_Rx_FFT

    for i = 1:ns

        temp = frame_OFDM_Rx_FFT(i*Nc-Nc+1:(i*Nc));

        for j = 1:Nc

            if (j == pilotIndexes(indexOfPilot))

                indexOfPilot = indexOfPilot+1;

                if indexOfPilot == (length(pilotIndexes)+1)

                    indexOfPilot = 1;

                end;

            else

                IQ_signal_1(k,1) = temp(j);

                k = k+1;

            end;

        end;

    end;

    %IQ_signal_1 = IQ_signal_1';

    IQ_signal(1:mes_len,g) = IQ_signal_1;

    g = g+1;

    k = 1;

end;

%Построение СКС терминала

plot(IQ_signal(1:end, 1:end),'x');

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

%Демодуляция QPSK

for i = 1:(pack_number-1)

    param = modem.pskdemod(mPos);

    param.outputtype = 'bit';

    param.PhaseOffset = pi/4;

    message_L1_FEC_Rx(i, 1:2*mes_len) = demodulate(param, IQ_signal(1:mes_len, i));

end;

%end;

%message_L1_FEC_Rx = message_L1_FEC_Rx';

for u = 1:(pack_number-1)

    temp1 = message_L1_FEC_Rx(u, 1:2*mes_len);

    message_L1_FEC_Rx_trans(pack_number-u, 1:2*mes_len) = temp1;

end;

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

%message_L1_FEC_Rx = convdeintrlv(message_L1_FEC_Rx, 4, 3);

%Перед декодированием добавим к пакетам нули для сброса декодера

for i = (1:pack_number-1)

     message_L1_FEC_Rx(i, 1:2*mes_len+8) = [message_L1_FEC_Rx(i, 1:2*mes_len) 0 0 0 0 0 0 0 0];

end;

for i = (1:pack_number-1)

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

    tblen = 4;

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

    message_L1_Rx(i,1:mes_len+tblen) = vitdec(message_L1_FEC_Rx(i, 1:2*mes_len+2*tblen), trellis, tblen, 'cont', 'hard');

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

% %Устраним внесенную декодером Витерби задержку на tblen битов

     message_L2_Rx(i,1:mes_len) = message_L1_Rx(i,(tblen+1):end);

     %message_L2_Rx(i,1:mes_len) = message_L1_Rx(i,1:mes_len);

end;

 for u = 1:(pack_number-1)

    temp1 = message_L2_Rx(u, 1:mes_len);

    message_L2_Rx_trans(pack_number-u, 1:mes_len) = temp1;

end;

%Сообщение канального уровня передается на уровень L3

%после извлечения поля типа сообщения

for i = 1:(pack_number-1)

    message_L3_add(i,1:mes_len-4) = message_L2_Rx_trans(i,5:end);

end;

%L3 уровень. Операция извлечения дополнительных полей L3.В данном случае дополнительные

%поля не требуются пакету аудио трафика, функция возвращает тот

%же массив, что подается на вход. Введение данной функции позволит

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

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

%сообщению L3 уровня

message_L3_Rx = de_add_L3(message_L3_add);

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

for i = 1:(pack_number-1)

    message_traffic_Rx((i*(mes_len-4)-(mes_len-4)+1):i*(mes_len-4)) = message_L3_Rx(i,1:mes_len-4);

end;

end

текст скрипта Main.m:

clear all;

clc;

%Размерность пакета

global mes_len;

mes_len = 384;

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

global mPos;

mPos = 4;

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

global pilotIndexes;

pilotIndexes = [10 20 30 40];

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

global Nc;

Nc = 52;

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

Ndata = Nc - (length(pilotIndexes));

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

global s_length;

s_length = Ndata * log2(mPos);

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

global ns;

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

global len_cp;

%Количество пакетов L2 уровня

global pack_number;

%Отношение сигнал/шум

SNR = 30;

%Передаваемое сообщение. В качестве примера рассмотрим бинарное сообщение,

%сформированное случайным образом.

message_traffic = randint(1,3800);

%фрагментация на L3 уровне

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

pack_number = 1;  for i = 1:mes_len-4:length(message_traffic)

    message_L3(pack_number,1:mes_len-4) = message_traffic(i:i+mes_len-4-1);

    pack_number = pack_number+1;

end;

%L3 уровень. Добавление необходимых полей. В данном случае дополнительные

%поля не требуются пакету аудио трафика, функция возвращает тот

%же массив, что подается на вход. Введение данной функции позволит

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

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

%сообщению L3 уровня

message_L3_add = add_L3(message_L3);

%Функция передатчика Т1

frame_L1 = Transmitter(message_L3_add, pack_number);

%Имитация передачи сообщения по каналу с АБГШ

frame_L1_Noise = awgn(frame_L1, SNR);

%Функция приемника Т2

message_traffic_Rx = Receiver(frame_L1_Noise);

%Вычисление вероятности битовой ошибки

[number, ratio] = biterr(message_traffic, message_traffic_Rx);

disp('Количество переданных битов:');

disp(length(message_traffic));

disp('Количество принятых ошибочно битов:');

disp(number);

disp('Вероятность ошибки');

disp(ratio);

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

Напомним, что в данном программном модуле используется случайная бинарная последовательность длиной 3800, иллюстрирующая фрагмент аудиофайла, представленного в бинарном формате, соответственно, в качестве примера сообщения канала TCHaudio,  мы используем данную последовательность. После процесса данного сообщения в передатчике Т1 будет сформировано сигнально-кодовое созвездие. Данное созвездие изображено на рисунке 3.


Рисунок 3. СКС передатчика терминала Т1

На рисунке 4 изображены OFDM символы во временной области, полученных в результате добавления циклического префикса равного ¼ передаваемого символа. Данное СКС точно отображает вид выбранной для передаваемого сигнала модуляции.


Рисунок 4. OFDM символы

На рисунке 5 изображено СКС в результате приема сообщения терминалом.


Рисунок 5. СКС приемника терминала Т2.

Окончательный результат выполнения программного модуля представлен на рисунке 6.


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

Изучив представленные иллюстрации, можно сделать вывод о том, что:

-алгоритм работы программного модуля реализован верно и верно функционирует, относительно описанных в пунктах 2.2.1 – 2.2.2 принципов.

При осуществлении процесса моделирования, параметр отношение сигнал-шум был равен 35дБ. Данное отношение весьма благоприятное для передачи данных по каналу связи. Но стоит отметить, что главная задача программного модуля – отображение всех процессов, которые происходят в передатчике и приемнике в процессе передачи сообщения информационного трафика, в данном случае при передаче аудио трафика. Зная параметр ОСШ, который был использован в нашей модели,  можно сделать вывод о том, что ошибки могут возникнуть лишь в процессе выполнения алгоритма обработки. Смотря ни рисунок 6, можно сказать, что алгоритм обработки сообщения реализован верно, о чем свидетельствует число в строке *Количество принятых ошибочно битов*. В соответствии с чем, можно говорить о том, что представленный алгоритм достаточно точно отражает процесс, происходящий в передатчике и приемнике при передаче сообщения аудио трафика.

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

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

2)http://omoled.ru/publications/view/811

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

4)http://omoled.ru/publications/view/467

5)http://siblec.ru/index.php?dn=html&way=bW9kL2h0bWwvY29udGVudC84c2VtLzA3NS8yLTQtMy5odG0%3D

6)http://omoled.ru/publications/view/1201

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

1)http://omoled.ru/publications/view/1160

2)http://omoled.ru/publications/view/1174

3)http://omoled.ru/publications/view/1189

4)http://omoled.ru/publications/view/1196

5)http://radiolay.ru/viewtopic.php?f=83&t=452

6) http://omoled.ru/publications/view/1197     

7) http://omoled.ru/publications/view/1198