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 - Блок схема приемной части модели.
Передающая часть модели.
В первую очередь определяются параметры профиля передачи, таких как: мощность передачи, тип модуляции и др., затем выбирается вид модуляции в зависимости от помеховой обстановки. После этого начинается цикл канального кодирования каждого L2 пакета и их накопление для последующих преобразований.
Далее определяется требуемое количество OFDM-символов. Затем происходит квадратурная модуляция, которая выбирается в зависимости от флага (если флаг равен нулю, то QPSK модуляция, если нет - QAM16), и цикл сборки OFDM символов. Информация о количестве OFDM-символов передается с первым символом.
Дальше формируется преамбула и происходит сборка сообщения L1 уровня.
Приемная часть модели.
При приеме сообщения сначала происходит определение конца преамбулы и выделение полей преамбулы.
Далее начинается цикл чтения OFDM-символов и извлечение из них пилот сигналов, настройка фильтра эквалайзера и формирование потока данных из поднесущих. Сформировав поток данных осуществляется квадратурная демодуляция ( если значение флага: 0- QPSK , 1- QAM-16), определение СКО и декодирование пакета L2.
Листинг
Главная программа
%%Моделирование физического
уровня
clear; clc;
%====================================================================%
%%ПАРАМЕТРЫ МОДЕЛИ
v_mod=2; %вид
модуляции (1-PSK, 2-QAM)
mPos=16; %позиционность
модуляции
SNR=20; %Отношение
Сигнал/Шум
Ngr = 0; %количество
неиспользуемых поднесущих и приходящихся на защитные интервалы
% номера пилотных
поднесущих в OFDM-символе
pilotIndexes = [1 2 8 9 16 23 24
30 31 32];
%Размерность OFDM-символа
Nc=32 ;
%В качестве примера задан
большой блок битов, для передачи которого
%потребуется несколько
OFDM-символов
msg_leng = 120;% длина
передаваемого сообщения, битов
n=100; %Количество
передаваемых кадров
%====================================================================%
graf1=[];
graf2=[];
mes_sum=[];
rx_sum=[];
for i=1:n
mes = randint(1,msg_leng); %формируется
блок битов, моделирующий сообщение с канального уровня
mes_sum=[mes_sum;mes']; %накопление
передаваемого сообщения
%функция передатчика
[Tx,tx_mod]=Transmitter(mes,msg_leng,v_mod,mPos,SNR);
graf1=[graf1;tx_mod]; %накопление
сигнала передатчика для построения СКС
%функция приемника
[Rx,rx_mod]=Receiver(Tx,v_mod,mPos,msg_leng);
rx_sum=[rx_sum;Rx'];
graf2=[graf2;rx_mod']; %накопление
сигнала приемника для построения СКС
end
%Построение СКС
передаваемого сообщения
figure(1); plot(graf1,'.');
title('СКС сигнала, сформированного в
передатчике')
ylim([-5.5 5.5]);
xlim([-5.5 5.5]);
%Построение СКС
принимаемого сообщения
figure(2);
plot(graf2,'.');
title('СКС сигнала,
сформированного в приемнике')
ylim([-5.5 5.5]);
xlim([-5.5 5.5]);
%Расчет количества ошибок с
помощью функц. biterr и вывод результатов
err=biterr(mes_sum,rx_sum,'overall');
disp('Количество
передаваемых кадров :');
disp(n);
disp('Количество
передаваемых пакетов :');
disp(n*msg_leng);
disp('Количество
обнаруженных ошибок :');
disp(err);
disp('Вероятность
ошибки :');
pb=err/(msg_leng*n); %Расчет
вероятности ошибки
disp(pb);
Функция передатчика
%%Передатчик
function
[chan_fr,IQ_signal]=Transmitter(mes,msg_leng1,v_mod1,mPos1,SNR1)
%clear;
%clc;
global pilotIndexes;
global Nc;
%Входные данные функции:
data_l2=mes;
msg_l=msg_leng1;
v_mod=v_mod1;
mPos=mPos1;
SNR=SNR1;
% В примере ниже рассматривается
построение пакета OFDM-символов, способных
% передавать msg_length битов. Размерность OFDM-символа
Nc=32, 4
% поднесущих резервируется
под пилотные каналы, 5 защитных интервалов
%=======================================================================%
%%ПАРАМЕТРЫ ПЕРЕДАТЧИКА
Ngr = 0; %количество
неиспользуемых поднесущих и приходящихся на защитные интервалы
% номера пилотных
поднесущих в OFDM-символе
pilotIndexes = [1 2 8 9 16 23 24
30 31 32];
%Размерность OFDM-символа
Nc=32;
%=======================================================================%
%Сверточное кодирование
trellis = poly2trellis(7,[171 133]);
data = convenc(data_l2,trellis);
%Длина сообщения на выходе
сверточного кодера
msg_lenght=msg_l*2;
% количество поднесущих с
данными
Ndata = Nc-length(pilotIndexes); % 22
поднесущие для передачи данных
% количество битов,
передаваемых в одном OFDM-символе
s_length = Ndata * log2(mPos); %
44 бита с учетом QPSK
ns = floor(msg_lenght/s_length)+1; % сколько потребуется OFDM-символов
% сколько потребуется
добавить незначащих битов - как разница между тем
% количеством битов, что
обеспечивает расчетное количество OFDM-символов, и
% количеством блоком в
передаваемом сообщении
fil_zero = zeros(1, ns*s_length -
msg_lenght);
% Параметры квадратурной
модуляции
if v_mod==1 %PSK
h = modem.pskmod(mPos);
h.inputtype = 'bit';
h.SymbolOrder = 'gray';
h.PhaseOffset = pi/4;
elseif v_mod==2 %QAM
h = modem.qammod(mPos);
h.inputtype = 'bit';
h.SymbolOrder = 'gray';
h.PhaseOffset = 0;
end
%Дополнение блока битов сообщения
нулями до той величины, которую
%способны транспортировать
рассчитанное выше количество OFDM-символов.
%В практическом случае параметры
физ. уровня надо рассчитать таким образом,
%чтобы подобых "хвостов"
не было.
data = [data
fil_zero]';
%Квадратурная модуляция
IQ_signal = modulate(h, data);
%формирование OFDM-символов
ofdmFrame =
makeOfdmFrame(IQ_signal, ns);
%формирование символов
преамбулы
%Идея построения заимствована из
802.11а (модуль tx_gen_preamble
%соответствующей лабораторной
работы)
%Короткие символы - для подстройки
частоты (синхронизация по частоте)
ShortTrainingSymbols
= sqrt(13/6)*[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=[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(32-2*16+1:32) long_symbol long_symbol];
%Пакет физического уровня
(символы преамбулы и OFDM-символы)
phy_frame = [short_trs long_trs ofdmFrame];
% figure(2);
% plot(abs(phy_frame)), title('Сформированный OFDM кадр');
%Имитация канала связи.
chan_fr=awgn(phy_frame,SNR,'measured');
end
Функция формирования OFDM-символов
function ofdmFrame =
makeOfdmFrame(dataMod, Numfdm)
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:Numfdm
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/8
%Может также принимать значения 1/4, 1/16, 1/32
cp = ofdmSymbol(Nc-Nc/8+1:Nc);
% добавление ЦП в начало OFDM-символа (32
IQ-символа)
ofdmSymbol=[cp ofdmSymbol];
% Сборка информационных OFDM-символов пакета физического уровня
ofdmFrame=[ofdmFrame
ofdmSymbol];
ofdmSymbol=[];
end
end
Сформированный OFDM кадр показан на Рис.
6, Рис. 7.
Рис.6. - Сформированный OFDM кадр (QPSK профиль).
Рис. 7 - Сформированный OFDM кадр (QAM-16 профиль).
Функция приемника
%%Приемник
function
[L2_msg_out,IQ_signal_rcv]=Receiver(in_msg,v_mod1,mPos1,msg_l)
%Входные данные функции:
v_mod=v_mod1;
mPos=mPos1;
msg_lenght=msg_l;
ofdmFrame_rcv = in_msg(321:end); %выделение
OFDM символов из общего потока
%Подготовка необходимых
массивов
OSr = [];
OSpr = [];
IQ_signal_rcv = [];
% вектор, необходимый для
устранения пилот сигналов
nopilotIndexes = [3:7 10:15 17:22
25:29];
% Выделение
промодулированных данных из принятого OFDM сигнала
% Удаление циклического
префикса из OFDM символов
for i = 0 : (length(ofdmFrame_rcv)/32)-1
% Убираем циклический префикс
IQ_sig = ofdmFrame_rcv((5:36)+
i*36);
OSr = [OSr; IQ_sig];
% Переход в частотную область
IQ_sign =
fft(IQ_sig);
OSpr = [OSpr; IQ_sign];
% Убираем пилот сигналы и
Формируем поток данных
IQ_signal_rcv
= [IQ_signal_rcv IQ_sign(nopilotIndexes)];
end;
if v_mod==1 %PSK
h1 = modem.pskdemod(mPos);
h1.OutputType = 'bit';
h1.SymbolOrder = 'gray';
h1.PhaseOffset = pi/4;
elseif v_mod==2
%QAM-16
h1 = modem.qamdemod(mPos);
h1.OutputType = 'bit';
h1.SymbolOrder = 'gray';
h1.PhaseOffset = 0;
end
% Демодуляция
L2_msg = demodulate(h1,IQ_signal_rcv');
%Убираем добавочные нули
ind_null=msg_lenght*2;
L2_msg=L2_msg(1:ind_null);
L2_msg_out=L2_msg';
% Декодирование по Витерби
trellis = poly2trellis(7,[171
133]);
L2_msg_out=vitdec(L2_msg_out,trellis,34,'cont','hard');
end
2.4. Исследование качества приема сообщений по различным каналам связи.
Продемонстрируем сигнально-кодовые созвездия сигнала в передатчике на выходе модулятора (QPSK и QAM-16), а так же в приемнике на входе демодулятора (QPSK и QAM-16) при SNR=20 дБ.
Риc. 8 - СКС сигнала в передатчике на выходе модулятора QPSK.
Рис. 9. СКС сигнала в приемнике на входе демодулятора QPSK.
Риc. 10 - СКС сигнала в передатчике на выходе модулятора QAM-16.
Рис. 9. СКС сигнала в приемнике на входе демодулятора QPSK.
Выполнил: ст. гр. 319 Арефьев Д.В.
Список литературы.
Бакке А. В. "Лекции по курсу: Системы и сети связи с подвижными объектами"
http://omoled.ru/publications/view/1069
http://omoled.ru/publications/view/1049
http://omoled.ru/publications/view/340
http://omoled.ru/publications/view/348
http://omoled.ru/publications/view/454