2. Экспериментальная часть
2.1. Разработка модели системы в
среде Matlab, демонстрирующей пример передачи сообщений между объектами
верхнего уровня.
В данной статье предложено описание разработанной в среде
Matlab модели системы, демонстрирующей пример передачи служебного сообщения по
каналу разрешенного доступа AGCH, необходимое для
уведомления терминала о том, что ему необходимо приготовится к приему информации.
Рис. 27. Структура передаваемого пакета.
Передающая часть
%%%
-----Передатчик----- %%%
% Выбор профиля осуществляется на основе результатов
работы блока оперативных радиоизмерений
mod_type = 0; % 0 -> BPSK , 1-> QAM-16
Формирование поля DATA (рис. 2).
% Формирование пакета канального уровня
% Заполнение поля DATA
ADD_RECEVIER = [1 1 0 1 1 0]; % 6 бит
ADD_TRANSMITTER = [1 0 1 0 1 0]; % 6 бит
PTYPE
= [1 1 1 1]; % 4
бит
NOMBER
=[0 0 0 0 0 0]; % 6 бит
USRDATA =[strtobin('ТЕРМИНАЛ №.. ПРИГОТОВЬТЕСЬ
К ПРИЕМУ!')']; % 256
бит
Формирование пакета физического уровня.
% Формирование окончательного пакета
FL = [1 0 1 0 1]; % 5 бит
DATA = [ADD_RECEVIER ADD_TRANSMITTER PTYPE NOMBER USRDATA] % 278 бит
CRC = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; % 16 бит
TAIL = [0 0 0 0 0 0 0]; % 7 бит
% Заполнение поля CRC
[q,r] =
deconv([DATA CRC],poly);
r
= mod(abs(r),2);
CRC =
r(end-length(CRC)+1:end);
% Формирование пакета физического уровня
MSGL2 = [FL DATA CRC TAIL]; % 306 бит
Блок помехоустойчивого кодирования.
% Помехоустойчивое кодирование
t = poly2trellis(7, [171 133]);
codMSGL2ni = convenc(MSGL2,t);
Перемежение.
% Перемежение
codMSGL2 =
randintrlv(codMSGL2ni, 534);
Выбор модуляции
if mod_type == 0 % BPSK
mPos = 2; % позиционность модуляции
else % QAM-16
mPos = 16;
end;
Инициализация OFDM
Ngr = 0; % количество неиспользуемых поднесущих и
приходящихся на защитные интервалы
% номера пилотных поднесущих в OFDM-символе
pilotIndexes = [1 14 26 39 51 64];
%Размерность OFDM-символа
Nc=64;
%В качестве примера задан большой блок битов, для
передачи которого
%потребуется несколько OFDM-символов
msg_length = length(codMSGL2);% длина передаваемого сообщения, битов
% количество поднесущих с данными
Ndata = Nc - length(pilotIndexes); % 58 поднесущих
% количество битов, передаваемых в одном OFDM-символе
s_length = Ndata *
log2(mPos); %
ns =
floor(msg_length/s_length)+1; % сколько потребуетсяOFDM-символов
% сколько потребуется добавить незначащих битов - как
разница между тем
% количеством битов, что обеспечивает расчетное
количество OFDM-символов, и
% количеством блоком в передаваемом сообщении
fil_zero = zeros(1, ns*s_length - msg_length);
% формирование символа, перносящего служебную
информацию
% Информация о применяемом профиле модулированна BPSK
Формирование сервисного OFDM символа.
В начале
каждого сформированного OFDM-символа находится циклический
префикс. Размер циклического префикса составляет 1/16 часть длины символа. Один OFDM-символ будет передаваться с
использованием 58 поднесущих.
h = modem.pskmod(mPos); % BPSK профиль
h.inputtype
= 'bit';
h.SymbolOrder
= 'gray';
h.PhaseOffset =
pi/2;
seqBarker = [0 0 0
1 1 1];
SERVMSG =
zeros(1,Nc);
SERVMSG(pilotIndexes)
= seqBarker;
SERVMSG(2) = mod_type; % Информация о виде модуляции
IQ_SERV =
modulate(h, SERVMSG');
% Формирование OFDM символа
serv = ifft(IQ_SERV);
% Cообщение канального уровня
data = codMSGL2;
Инициализация модулятора.
%
выбор вида модуляции
if mPos == 16
h = modem.qammod(mPos); % QAM-16 профиль
else
h = modem.pskmod(mPos); % BPSK профиль
end;
% Параметры модуляции
h.inputtype = 'bit';
h.SymbolOrder = 'gray';
h.PhaseOffset = 0;
% дополнение блока битов сообщения нулями
до той величины, которую
% способны транспортировать рассчитанное выше
количество OFDM-символов
data = [data
fil_zero]';
Модуляция сигнала.
% собственно квадратурная модуляция
IQ_signal = modulate(h, data);
%формирование OFDM-символов и добавление
символа, переносящего служебную
%информацию
Формирование OFDM символов.
[mof,OS,OSf,OSp] = makeOfdmFrame(IQ_signal, ns);
ofdmFrame =[serv' mof];
Формирование символов преамбулы.
%формирование символов преамбулы
%Короткие символы - для подстройки частоты
(синхронизация по частоте)
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(64-2*16+1:64) long_symbol long_symbol];
% Пакет физического уровня (символы преамбулы и
OFDM-символы)
phy_frame =
[short_trs long_trs ofdmFrame];
plot(abs(phy_frame));
% Канал связи
figure(1);
plot(abs(phy_frame));
Рисунок 28. Временные реализации пакетов физического уровня BPSK
Рисунок 29. Временные
реализации пакетов физического уровня QAM-16
Добавление белого гауссовского шума
phy_framer =awgn(phy_frame,25);
Приемная часть.
Выделение преамбулы,
служебной информации и пакета канального уровня из принятого сообщения.
%%%
Приемник %%%
%
Выделение преамбулы, служебной информации и поля данных + FEC
long_trs = phy_framer(1:320);
servr = phy_framer(321:384);
OfdmFramer = phy_framer(385:end);
Демодуляция служебного символа.
%
Обработка служебного сообщения с целью определения вида модуляции (BPSK,
QAM-16)
IQ_SERVr = fft(servr');
h = modem.pskdemod(2);
h.SymbolOrder = 'gray';
h.PhaseOffset = 0;
h.OutputType = 'bit';
SERVMSGr= demodulate(h,IQ_SERVr);
mod_typer
= SERVMSGr(2);
Принятие решения об использовании необходимого профиля.
if mod_typer == 1
h = modem.qamdemod(16); % QAM-16 профиль
else
h = modem.pskdemod(2); % BPSK профиль
end;
Инициализация демодулятора.
h.SymbolOrder = 'gray';
h.PhaseOffset = 0;
h.OutputType = 'bit';
%
Выполняем выделение OFDM символов из общего потока
IQ_signalr
= [];
%
вектор, необходимый для устранения пилот сигналов
nopilotIndexes = [2:13 15:25 27:38 40:50 52:63];
OSr = [];
OSpr = [];
Обратное OFDM преобразование.
for i = 0 : (length(OfdmFramer)/68)-1
% убираем префикс
IQ_sig = OfdmFramer((5:68)+ i*68);
OSr
= [OSr; IQ_sig];
% переход к частотной области
IQ_sign = fft(IQ_sig);
OSpr = [OSpr; IQ_sign];
%
убираем пилот сигналы и Формируем поток данных
IQ_signalr = [IQ_signalr IQ_sign(nopilotIndexes)];
end;
figure(3);
plot(IQ_signalr,'x');
Демодуляция сигнала.
datar = demodulate(h,IQ_signalr);
codMSGL2r = datar(1:end - length(fil_zero));
Рис.30. Созвездие BPSK сигнала после обратного преобразования OFDM при ОСШ=25 дБ .
Рис.31. Созвездие QAM-16 сигнала
после обратного преобразования OFDM при ОСШ=25 дБ.
При построении
сигнально-кодовых созвездий (рис.3) были выбраны минимальные значения ОСШ, при
которых не возникают ошибки.
Деперемежение.
codMSGL2nir =
randdeintrlv(codMSGL2r,534);
Помехоустойчивое декодирование.
MSGL2r = vitdec(codMSGL2nir,t,7,'cont','hard');
Выделение полей FL, DATA,
CRC.
MSGL2r = MSGL2r(8:end);
FLr = MSGL2r(1:length(FL));
DATAr =
MSGL2r(length(FL)+(1:length(DATA)));
CRCr = MSGL2r(length(FL)+length(DATA)+(1:length(CRC)));
Проверка целостности принятого сообщения.
% ПРоверка пакета на
наличие ошибок
[q
r]=deconv([DATAr CRCr], poly);
% Проверка остатка
r=mod(abs(r),2);
if r ==
zeros(1,length([DATAr CRCr]))
detect=0;% ошибок
нет
'Без ошибок!'
else
detect=1;% обнаружены ошибки
'Обнаружены ошибки!'
end;
Выделение полей ADD_RECEVIER, ADD_TRANSMITTER,
TYPE, NUMBER, MAINDATA.
ADD_RECEVIERr =
DATAr(1:length(ADD_RECEVIER));
ADD_TRANSMITTERr =
DATAr(1:length(ADD_TRANSMITTER));
PTYPEr =
DATAr(length(ADD_RECEVIER)+length(ADD_TRANSMITTER)+(1:length(PTYPE)));
NOMBERr =
DATAr(length(ADD_RECEVIER)+length(ADD_TRANSMITTER)+length(PTYPE)+(1:length(NOMBER)));
USRDATAr=
DATAr(length(ADD_RECEVIER)+length(ADD_TRANSMITTER)+length(PTYPE)+length(NOMBER)+(1:length(USRDATA)));
'ТЕРМИНАЛ №.. ПРИГОТОВЬТЕСЬ К
ПРИЕМУ!!'
Продемонстрируем результаты работы модели. После
запуска программы в командном окне среды MATLAB, появится сообщение, которое передается по каналу
разрешенного доступа AGCH терминалу.
Модуляция BPSK, ОСШ = 25 дБ:
ans =
Битовые ошибки отсутствуют!
ans =
ТЕРМИНАЛ №.. ПРИГОТОВЬТЕСЬ К ПРИЕМУ!!
Модуляция QAM-16, ОСШ = 25 дБ:
ans =
Битовые ошибки отсутствуют!
ans =
ТЕРМИНАЛ №.. ПРИГОТОВЬТЕСЬ К ПРИЕМУ!!
Список используемой литературы:
1.А.В. Бакке. «Лекции по курсу ССПО»
2.Скляр Б. «Цифровая связь. Теоретические основы и практическое применение».- М.: Вильямс, 2003г.
3.Феер К. «Беспроводная цифровая связь», пер. с англ./под ред. В.И. Журавлева, М.: Радио и связь, 2000 г.
4Локальная радиосеть. Часть 1.1-1.5 Савко В.В.
5 КП "Локальная радиосеть". Часть 2 Савко В.В.
6.КП "Локальная радиосеть".Часть 3 Савко В.В.
7.КП "Локальная радиосеть". Часть 4. Калинкин В.В.
8.КП на тему "Локальная радиосеть" п. 2 - п.3 (часть №4) Ночная Анна