1.7. Построение результирующих
иерархических моделей терминала и выделенных узлов сети (в соответствии с
концепцией OSI) с отражением путей доставки служебных, так и информационных
сообщений.
Модель OSI описывает схему взаимодействия
сетевых объектов, определяет перечень задач и правила передачи данных. Ее можно
представить следующим образом (рисунок 1):
Рис.1 - Модель OSI
Подробно рассмотрим физический уровень
модели OSI. Это нижний уровень модели, необходимый для непосредственной
передачи потока данных.
Физический уровень – нижний уровень
модели OSI. Обеспечивает установление и управление физическим
каналом. Реализует механические, электрические, функциональные и процедурные
аспекты взаимодействия двух сетевых устройств. Основной задачей ФУ является
надежная передача потока битов, поступающего с верхнего (канального уровня). На
физическом уровне могут быть реализованы любые технические решения,
направленные на повышение достоверности приема битов. Для эффективной
реализации поставленных задач необходимо оптимальным образом подобрать
параметры функционирования системы связи на физическом уровне.
Канальный уровень определяет
функции, отвечающие за организацию канала передачи данных. Канальный уровень
необходим для осуществления надежной доставки пакетов между узлами сети. На
канальном уровне решаются следующие задачи: формирование пакетов, выделение
пакетов из потока бит, организация доступа к физическому каналу связи, проверка
целостности пакетов, адресация сообщений, пакетная синхронизация.
Уровень принятия
решений является
управляющим ядром узла сети. Он обрабатывает данные полученные с нижних
уровней и принимает решения на основе анализа этих данных. Например, он
обрабатывает данные радиоизмерений и передает на физический уровень команды о
выборе профиля передачи и регулировки мощности. А так же, на ряду с
пользовательским устройством, он может являться источником служебных сообщений.
С уровня принятия решений на физический
уровень поступают результаты радиоизмерений (профиль передачи и мощность
излучения) и информация о том, по какому каналу будет происходить
передача. От канального уровня на физический поступают пакеты L2. Пакеты L2
проходят через следующие процедуры: канальное кодирование, квадратурная
модуляция, OFDM-модуляция и образуется информационное поле сообщения
физического уровня.
На основе профиля передачи, типа
сообщения, извлеченного из первого пакета L2, формируется служебное поле.
Служебное и информационное поля объединяются с заранее сформированной (а так же
записанной в память, поскольку она всегда имеет одинаковый вид) преамбулой и
образуют полное сообщение физического уровня. Оно усиливается до необходимого
уровня и излучается в радиоканал.
На Рис. 2
представлена блок-схема передающей части.
Рис. 2. Блок-схема передающей части.
На приемной стороне происходят аналогичные
преобразования, которые так же отображены на Рис. 2.
Рис. 3. Блок-схема
приемной части.
Для физического уровня разделения на
служебные сообщения и сообщения трафика не существует, принятые сообщения будут
подвергаться одинаковым преобразованиям.
2.
Экспериментальная часть. Разработка и экспериментальное исследование
программной модели канала передачи данных
2.1. Разработка
и описание блок-схемы алгоритма модели
На Рис. 4, Рис. 5
отображены блок схемы алгоритмов передающей и приемной части системы, на
основании алгоритмов, проработанных во второй части курсовой работы (http://omoled.ru/publications/view/1064).
Рис.4 - Блок схема передающей части модели.
Рис.5 - Блок схема приемной части модели.
Передающая часть модели.
В первую очередь определяются параметры
профиля передачи, таких как: мощность передачи, тип модуляции и др. затем
формируется служебное поле, выбирается вид модуляции в зависимости от помеховой
обстановки и кодирование служебного поля. Служебное поле всегда модулируется BPSK в пользу защищенности.
После того как служебное поле закодировано
начинается цикл канального кодирования каждого L2
пакета и их накопление для последующих преобразований.
Далее символы OFDM проверяется на полноту и если символы не
полные, то они дополняются случайными битами (вариант с заполнением нулями
или единицами повлияет на работу и эффективность FEC не с
лучшей стороны) .
После этого происходит квадратурная модуляция, которая выбирается в
зависимости от флага (если флаг равен нулю, то BPSK модуляция, если нет - QAM16), и цикл сборки OFDM символов. Информация о количестве OFDMсимволов передается с первым символом.
Дальше служебное и информационное поля
объединяются, формируется преамбула и происходит сборка сообщения L1 уровня.
Приемная часть модели.
При приеме сообщения сначала происходят
определение преамбулы, первичные радиоизмерения и выделение полей сообщения и
преамбулы.
Затем происходит квадратурная демодуляция
и канальное декодирование служебного поля и извлечение из него информации
о профиле передачи и типе сообщения.
Потом начинается цикл чтения OFDM- символов и извлечение из них пилот сигналов,
настройка фильтра эквалайзера и формирование потока данных из поднесущих.
Сформировав поток данных осуществляется
квадратурная демодуляция ( если значение флага: 0- BPSK , 1- QAM-16), определение СКО и, наконец,
происходит сравнение длины информационного поля на передающей и приемной стороне
(FEC). Возможны несколько исходов: если длина поля
больше - лишние биты убираются, если длина поля меньше - устанавливается флаг
об ошибке, если длина соответствует - начинается дальнейшая обработка
сообщения.
При обнаружении ошибки - происходит
оповещение КУ, если же ошибки не обнаружены - начинается цикл чтения
пакетов L2 и их декодирование.
Листинг
функции №1 физического уровня
Передающая
часть
Рассмотрим
функцию, устанавливающую параметры модели
set = initSettings()
% параметры модели
% позиционность модуляции – (для QPSK=4)
set.mPos = 4;
%Параметры помехоустойчивого кодека
%Для примера используется код БЧХ :
%Длина кодового слова
set.n=255;
%Размер кодируемого блока
set.k=187;
% Параметры CRC
%CRC-16
set.poly=[ 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1
0];
[set.x set.y]=size(set.poly); %размерность полинома
%размер сообщения каналького уровня без учета CRC
set.lenght_info=182;
% ОСШ в канале связи
set.SNR=20;
Входными
параметрами является тип сообщения (необходимо для
реализации процедуры ARQ) и информационное поле DATA .
%Поле DATA содержит код команды управления
DATA=3052;
% Поле TYPE необходимо для реализации процедуры ARQ
% это поле необходимо Т для того чтобы знать
% это новое сообщение или повторно передаваемое
TYPE='new_message';
Рассмотрим
функцию, реализующую передающую часть.
phy_frame =
transmitter( TYPE , DATA )
% TYPE - поле которое необходимо Т для того чтобы
знать
% это новое сообщение или повторно передаваемое.
% DATA - Поле DATA содержит код запрашиваемой услуги
% Установка параметров модели
st=initSettings();
global fil_zero
global Nc
global pilotIndexes
if TYPE == 'new_message'
tps=0;
elseif TYPE =='repeat_message'
tps=1;
end;
DATA=
my_de2bi(DATA,'left_msb',178);
% ================== Физический уровень ================================
%% Помехоустойчивое кодирование
% Кодирование сообщения кодом БЧХ (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 символа будет осуществляться с
использованием 32 поднесущих: 22 поднесущие дл передачи данных, 4 – для пилот
сигнала, 5 – для использования защитных интервалов и 1 нулевая поднесущая для
идентификации нулевой частоты OFDM сигнала. Структура поднесущих изображена на Рис. 2.
Рис. 6. Структура поднесущих (OFDM символов).
% номера пилотных поднесущих в OFDM-символе
pilotIndexes = [1 2 8 9 16 23 24 30 31 32];
% количество неиспользуемых поднесущих и приходящихся
на защитные интервалы
Ngr = 0;
% Размерность OFDM-символа
Nc=32;
% количество поднесущих с данными
Ndata = Nc - (length(pilotIndexes));
% количество битов, передаваемых в одном OFDM-символе
s_length = Ndata *
log2(st.mPos);
% Количество OFDM-символов
ns =
floor(length(alternation_bits)/s_length)+1;
% размер передаваемого сообщения, после выхода с
перемежителя
msg_length =
length(alternation_bits);
% fil_zero - незначащие биты, это разница между тем
% количеством битов, что обеспечивает расчетное
количество OFDM-символов, и
% количеством блоком в передаваемом сообщении
fil_zero = zeros(1, ns*s_length - msg_length);
% дополнение блока битов сообщения незначащими битами,
% это обеспечивает расчетное количество OFDM-символов
data =
[alternation_bits fil_zero];
% Параметры модуляции
% h - модем QAM с позиционностью mPos
h =
modem.qammod(st.mPos);
h.inputtype = 'bit';
IQ_signal =
modulate(h, data');
figure(1);
plot(IQ_signal,'xr');
ylim([-3.1 3.1]);
xlim([-3.1 3.1]);
title('Сигнально-кодовое созвездие, полученное в
передатчике')
%формирование OFDM-символов
ofdmFrame =
makeOfdmFrame(IQ_signal, ns);
В
начало каждого сформированного символа OFDM необходимо добавить циклический
префикс. Размер циклического префикса составит ¼ часть длины символа. Таким
образом один OFDM символ будет передаваться с использованием 22 поднесущих.
function ofdmFrame = makeOfdmFrame(dataMod, Nofdm)
global pilotIndexes;
global Nc;
%символы пилотных поднесущих промодулированы
псевдослучайным кодом (для
%примера, код Баркера), как результат - 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);
% добавление ЦП в начало OFDM-символа (64 IQ-символа)
ofdmSymbol=[cp ofdmSymbol];
% Сборка информационных OFDM-символов пакета
физического уровня
ofdmFrame=[ofdmFrame
ofdmSymbol];
ofdmSymbol=[];
end
end
Далее,
происходит формирование преамбулы.
%Формирование символов преамбулы
%Короткие символы - для подстройки частоты
(синхронизация по частоте)
ShortTrainingSymbols
= 5*[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(1:16);
% Формирование 10 кототких символов преамбулы на
основе выбранного набора
short_trs= [Strs
Strs Strs Strs Strs Strs Strs Strs Strs Strs];
%длинный символ преамбулы
LongTrainingSymbols=3*[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(64-2*16+1:64) long_symbol long_symbol];
% Пакет физического уровня (символы преамбулы и
OFDM-символы)
phy_frame =
[short_trs long_trs ofdmFrame];
figure(2);
plot(abs(phy_frame));
end
Сформированный OFDM кадр показан на Рис.
7.
Рис.7. Сформированный OFDM кадр.
Моделирование
передачи сигнала по каналу связи, осуществим с помощью функции phy_frame_R=awgn(phy_frame,st.SNR,'measured').
Приемная
часть
Рассмотрим
функцию, реализующую приемную часть. Входным параметром является сигнал с выхода
канала связи
[ TYPE_R, DATA_R ] = receiver (
phy_frame_R ).
function [ TYPE_R, DATA_R ] = receiver (
msgIQ )
%Поле DATA_R содержит код принятой команды управления
%Поле TYPE_R необходимо для реализации процедуры ARQ
% это поле необходимо Т для того чтобы знать
% это новое сообщение или повторно передаваемое
%% Установка параметров модели
st=initSettings();
global fil_zero;
global pilotIndexes;
global Nc;
% ================== Физический уровень
================================
% Выделение преамбулы, и поля данных
phy_frame_R =
msgIQ(321:length(msgIQ));
ofdmFrame_R = phy_frame_R(1:end);
%Выделение промодулированных данных из принятого OFDM
сигнала
%удаление циклического префикса из OFDM символов
OSr = [];
OSpr = [];
IQ_signalr = [];
% вектор, необходимый для устранения пилот сигналов
%pilotIndexes = [1
2 8 9 16 23 24 30 31 32];
nopilotIndexes =
[3:7 10:15 17:22 25:29];
for i = 0 :
(length(ofdmFrame_R)/40)-1
% убираем циклический префикс
% 8 - length(cp)
% 40 - length(ofdmSymbol)
% смотри функцию makeOfdmFrame
IQ_sig = ofdmFrame_R((8:40)+
i*40);
OSr = [OSr; IQ_sig];
% переход d частотную область
IQ_sign =
fft(IQ_sig);
OSpr = [OSpr; IQ_sign];
% убираем пилот сигналы и Формируем поток данных
IQ_signalr =
[IQ_signalr IQ_sign(nopilotIndexes)];
end;
figure(3);
plot(IQ_signalr,'x');
title('Сигнально-кодовое созвездие, полученное в приемнике');
После
выделения промодулированных данных из принятого OFDM сигнала происходит
процедура демодуляции, деперемежения, декодирование.
% % Параметры демодуляции
h = modem.qamdemod(st.mPos);
h.OutputType = 'bit';
% собственно демодуляция
s = demodulate(h,IQ_signalr);
data_r = s(1:end -
length(fil_zero));
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';
%%
2.4. Исследование качества приема сообщений по различным каналам связи.
На рис. 8 продемонстрировано
сигнально-кодовое созвездие на выходе QPSK модулятора (в передающей части)
Риc. 8. СКС модулированного QPSK
сигнала на выходе модулятора
На Рис.9 продемонстрировано сигнально-кодовое созвездие на входе QPSK демодулятора (в приемной части) при ОСШ=20дБ.
Рис.
9. СКС модулированного QPSK сигнала на входе демодулятора при ОСШ=20 дБ.
В результате
моделирования было установлено, что безошибочная доставка сообщения при выборе QPSK модуляции возможна при ОСШ не менее 7.5 дБ. Полученные результаты несколько
отличаются от теоретических
результатов, полученных при расчете в п.
(http://omoled.ru/publications/view/1064). Для определения более точных результатов необходимо повторить
цикл передачи приема порядка 100 000 раз.
Выполнил: ст.
гр. 319 Арефьев Д.В.
Список литературы.
Бакке А. В. "Лекции по курсу: Системы и сети связи с подвижными
объектами"