В
данном разделе КП предложено описание разработанной системы в среде MATLAB
Терминалы, прошедшие регистрацию, будут последовательно
опрашиваться АР, чтобы точка доступа знала каким терминалам выделить канал.
Опрос терминалов осуществляется по каналу AGCH.
В ответ на сообщение
канала AGCH, терминал формирует одно из сообщений:
% 1 - активен (1)(канал не требуется, пассивный режим)
% 2 - характер трафика пульсирующий(если да, то 1)
% 3 - характер трафика постоянный(если да, то 1)
Передающая часть включает в себя: сборку сообщения
канального уровня, кодирование сообщения, перемежение, модуляция, формирование OFDM символа, сборка пакета физического
уровня.
Функция параметров модели:
function set =
initSettings()
% параметры модели
% Идентификаторы сообщений
set.bcch =
0;
set.ach =
1;
set.tch =
2;
set.agch =
3;
set.rach =
4;
%
....
%Параметры помехоустойчивого кодека
%Для примера используется код БЧХ
:
%Длина кодового слова
set.n=127;
set.k=85;
% Параметры CRC
% CRC-12
set.poly=[1 1 0 0 0 0 0 0 0 1 1 1 1];
[set.x set.y]=size(set.poly); %размерность
полинома
%размер сообщения каналького
уровня без учета CRC
set.lenght_info=73;
% ОСШ в канале связи
set.SNR=25;
Рассмотрим
функцию, которая отражает передатчик АР.
function [phy_frame] = transmitter_AP( TypeMSG
,ID_T, DATA, NUMBER_PROFILE )
% TYPE - Тип сообщения
% DATA - Поле DATA содержит код
запрашиваемой услуги
% ID_Term - Идентификатор
терминала
% NUMBER_PROFILE - профиль
функционирования
% 1 - QPSK
% 2 - QAM-16
% Установка параметров модели
st=initSettings();
global Nc
global pilotIndexes
global ns;
% определение
кода типа сообщения (3-х битовое поле)
% Предусмотрены 5 возможных типов сообщений
% BCCH - широковещательное сообщение
% АСН - соообщение ответ
% ТСН - соообщение трафика
% AGCH - соообщение опрос
% RACH - cообщение заявка
tps =
my_de2bi(TypeMSG,'left_msb',3);
%
FILL - битs заполнения
FILL=zeros(1,59);
% сборка части L2-сообщения
msg_Lev2 = [tps ID_T DATA FILL];
% получение CRC кода
m = [msg_Lev2 zeros(1,st.y-1)]; %вставка
нулей в поле CRC
[q r] = deconv(m,st.poly); %
поиск частного и остатка от деления
%информационной части на
порождающий полином CRC кода
r =
mod(abs(r),2);
%расчет CRC
CRC =
r(length(msg_Lev2) + 1:end);
% Cборка сообщения
msg_Lev1 =
[msg_Lev2 CRC];
% ================== Физический
уровень ================================
%
Кодирование сообщения кодом БЧХ (127, 85)
code = encode(msg_Lev1,st.n,st.k,'bch/binary');
%добавление
дополнительныхо бита для приведения размера сообщения к числу
%кратному
2 или 4 (следует из определения позиционности QPSK и QAM-16 модуляции
code_word = [0 code];
%Блочное перемежение
alternation_bits = matintrlv(code_word, 16,
8);
% Выбор профиля функционирования
if
NUMBER_PROFILE==1
% Параметры модуляции
% h - модем QPSK
mPos=4;
elseif NUMBER_PROFILE==2
% Параметры модуляции
% h - модем QАМ-16
% h - модем QPSK
mPos=16;
end
% номера пилотных поднесущих в
OFDM-символе
pilotIndexes = [1 6 11 16 25 30 35 40
0];
% количество неиспользуемых
поднесущих и приходящихся на защитные интервалы
Ngr = 0;
% Размерность OFDM-символа
Nc=40;
% количество поднесущих с данными
Ndata = Nc - (length(pilotIndexes)-1);
% количество битов, передаваемых в
одном OFDM-символе
s_length =
Ndata * log2(mPos);
% Количество OFDM-символов
ns =
floor(length(alternation_bits)/s_length);
% Параметры модуляции
% h - модем QAM с позиционностью
mPos
h =
modem.qammod(mPos);
h.inputtype
= 'bit';
IQ_signal =
modulate(h, alternation_bits');
figure;
plot(IQ_signal,'xr');
%формирование OFDM-символов
ofdmFrame =
makeOfdmFrame(IQ_signal, ns);
%Формирование символов преамбулы
%Короткие символы - для подстройки
частоты (синхронизация по частоте)
ShortTrainingSymbols
= 2*[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);
% выделение первых 15 отсчетов
Strs = short_symbols(2:11);
% Формирование 3 кототких символов
преамбулы на основе выбранного набора
short_trs= [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(7:26));
long_trs = [long_symbol];
% Пакет физического уровня
(символы преамбулы и OFDM-символы)
phy_frame =
[short_trs long_trs ofdmFrame];
figure;
plot(abs(phy_frame));
end
Приемная часть включает
в себя: обработку принятого сообщения, выделение преамбулы и поля данных,
выделение промодулированых данных из принятого OFDM символа,
деперемежение, проверка целостности, вывод результата.
Передающая часть терминала
включает в себя: сборка сообщений канального уровня, кодирование, перемежение,
модуляция, формирование OFDM
символов, сборка пакетов физического уровня, наложение шума.
Функция передатчика терминала
function [phy_frame] =
transmitter_T( TYPE ,ID_T, DATA, NUMBER_PROFILE )
% TYPE - Тип сообщения
% DATA - Поле DATA содержит код запрашиваемой услуги
% ID_Term - Идентификатор терминала
% NUMBER_PROFILE - профиль функционирования
% 1 - QPSK
% 2 - QAM-16
% Установка параметров модели
st=initSettings();
global Nc
global pilotIndexes
global ns;
% Прием сообщения AP
[Power_T,
TYPE_R_2, ID_Tr, DATA_R_2, detect] = receiver_AP (phy_frame_R_2, profile);
disp('----------------------------------');
disp('Сообщение, полученное AP');
disp('----------------------------------');
disp('Мощность принятого сигнала');
disp(Power_T);
if detect == 0
disp('Битовые ошибки: не присутствую' );
disp('сообщение от Т с ID'); disp(ID_Tr);
disp('TYPE'); disp(st.ach);
if [0 1 0 0]==DATA_R_2
disp('выделение подканала для передачи
пульсирующего трафика для Т с ID' );
disp(ID_Tr);
% ========================== Канальный уровень
==================================
% FILL - биты заполнения
FILL=zeros(1,59);
% сборка части L2-сообщения
msg_Lev2 = [TYPE ID_T DATA FILL];
% получение CRC кода
m = [msg_Lev2 zeros(1,st.y-1)]; %вставка нулей в поле CRC
[q r] = deconv(m,st.poly); % поиск частного и остатка от деления
%информационной части на порождающий полином CRC кода
r = mod(abs(r),2);
%расчет CRC
CRC =
r(length(msg_Lev2) + 1:end);
% Cборка сообщения
msg_Lev1 = [msg_Lev2
CRC];
% ================== Физический уровень
================================
% Кодирование сообщения кодом БЧХ (127, 85)
code =
encode(msg_Lev1,st.n,st.k,'bch/binary');
%добавление дополнительныхо бита для приведения
размера сообщения к числу
%кратному 2 или 4 (следует из определения
позиционности QPSK и QAM-16 модуляции
code_word = [0 code];
%Блочное перемежение
alternation_bits =
matintrlv(code_word, 16, 8);
% Выбор профиля функционирования
if NUMBER_PROFILE==1
% Параметры модуляции
% h - модем QPSK
mPos=4;
elseif NUMBER_PROFILE==2
% Параметры модуляции
% h - модем QАМ-16
% h - модем QPSK
mPos=16;
end
% номера пилотных поднесущих в OFDM-символе
pilotIndexes = [1 6 11 16 25 30 35 40 0];
% количество неиспользуемых поднесущих и приходящихся
на защитные интервалы
Ngr = 0;
% Размерность OFDM-символа
Nc=40;
% количество поднесущих с данными
Ndata = Nc - (length(pilotIndexes)-1);
% количество битов, передаваемых в одном OFDM-символе
s_length = Ndata *
log2(mPos);
% Количество OFDM-символов
ns =
floor(length(alternation_bits)/s_length);
% Параметры модуляции
% h - модем QAM с позиционностью mPos
h =
modem.qammod(mPos);
h.inputtype = 'bit';
IQ_signal =
modulate(h, alternation_bits');
figure(1);
plot(IQ_signal,'xr');
%формирование OFDM-символов
ofdmFrame =
makeOfdmFrame(IQ_signal, ns);
%Формирование символов преамбулы
%Короткие символы - для подстройки частоты
(синхронизация по частоте)
ShortTrainingSymbols
= [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);
% выделение первых 15 отсчетов
Strs = short_symbols(2:11);
% Формирование 3 кототких символов преамбулы на основе
выбранного набора
short_trs= [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(7:26));
long_trs = [long_symbol];
% Пакет физического уровня (символы преамбулы и
OFDM-символы)
phy_frame =
[short_trs long_trs ofdmFrame];
figure(2);
plot(abs(phy_frame));
end
Приемная часть AP включает
в себя: обработку принятого сообщения, выделение преамбулы и поля данных,
выделение промодулированых данных из принятого OFDM символа,
деперемежение, проверка целостности, вывод результата.
function [Power, TYPE_R,
ID_Tr, DATA_R, detect] = receiver_AP ( msgIQ, NUMBER_PROFILE)% TYPE - Тип сообщения
% DATA - Поле DATA содержит код запрашиваемой услуги
% ID_Term - Идентификатор терминала
% detect - отражает отсутствие/наличие ошибок
%% Установка параметров модели
st=initSettings();
global pilotIndexes
global Nc
global ns;
global len_cp;
global len_ofdmSymbol;
% ================== Физический уровень
================================
% Выделение преамбулы, и поля данных
% Оценим мощность сигнала
A=mean((msgIQ)); % средняя амплитуда сигнала
Power=abs(A).^2; %средняя мощность сигнала
phy_frame_R =
msgIQ(41:length(msgIQ));
ofdmFrame_R = phy_frame_R(1:end);
%Выделение промодулированных данных из принятого
% OFDM сигнала
% Удаление циклического префикса из OFDM символов
n=1;
for i=1:Nc:ns*Nc-Nc+1
ofdmSymbol(i:i+Nc-1) =
ofdmFrame_R(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;
else
IQ_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;
figure;
plot(IQ_signalr,'x');
% Параметры демодуляции
if NUMBER_PROFILE==1
% Параметры модуляции
% h - модем QPSK
mPos=4;
elseif NUMBER_PROFILE==2
% Параметры модуляции
% h - модем QАМ-16
% h - модем QPSK
mPos=16;
end
h =
modem.qamdemod(mPos);
h.OutputType = 'bit';
% собственно демодуляция
data_r =
demodulate(h,IQ_signalr);
deintrlved_bits =
reshape(data_r,128,1);
% Блочное деперемежение
deintrlved_bits =
matdeintrlv(deintrlved_bits,16,8);
%Устранение лишнего нулевого бита
received_L1=deintrlved_bits(2:end);
% Помехоустойчивое декодирование
%Декодирование сообщения кодом БЧХ (127,85)
decode_word=decode(received_L1,st.n,st.k,'bch/binary');
received_mes_L1 =
decode_word';
%% ================== Канальный уровень
================================
% Подготовка к проверке CRC
[q
r]=deconv(received_mes_L1,st.poly);
%проверка остатка
r=mod(abs(r),2);
if r ==
zeros(1,length(received_mes_L1))
detect=0;% ошибок нет
else
detect=1;% обнаружены ошибки
end;
% Собственно принятое сообщение
received_mes_L2 =
received_mes_L1(1:st.lenght_info);
% выделение поля TYPE_R
TYPE_R=my_bi2de(received_mes_L2(1:3), 'left_msb');
% выделение поля ID_Tr
ID_Tr=received_mes_L2(4:10);
% выделение поля DATA_R
DATA_R=received_mes_L2(11:14);
end
Продемонстрируем результаты работы Модели:
----------------------------------
Сообщение,
полученное T
----------------------------------
Битовые ошибки:
не присутствую
Принятое
сообщение
TYPE
3
получатель:
терминал c ID
0
0 1 0
1 1 1
DATA
0
0 0 0
Рис.1
скс QPSK сформированное АР
Рис.2 OFDM-символы во временной области, соответствующие передачи сообщения каналаAGCH
Рис.3
Сигнально-кодовое созвездие после демодуляции OFDM-символов
После извлечения
информации из сообщения, переданного АР, Т формирует сообщение «ответ»
----------------------------------
Сообщение,
полученное AP
----------------------------------
Мощность
принятого сигнала
1.4373e-004
Битовые ошибки:
отсутствуют
сообщение от Т с
ID
0
0 1 0
1 1 1
TYPE
1
выделение
подканала для передачи пульсирующего трафика для Т с ID
0 0 1 0 1 1 1
Рис.4 OFDM-символы во
временной области сообщения канала АСН.
Далее, сформированное сообщение будет проходить через канал с
АБГШ и поступает на приемник АР.
Рис.5 Сигнально-кодовое созвездие после демодуляции OFDM-символов(ОСШ=25)
Рассмотрим другой профиль функционирования модели QAM 16
Рис.6
CKC QAM16
сформированное АР
Рис.7 OFDM-символы во
временной области, соответствующие передачи сообщения каналаAGCH.
Рис.8 Сигнально-кодовое созвездие после демодуляции OFDM-символов(ОСШ=25)
Список использованной
литературы:
1.А.В. Бакке. «Лекции по курсу ССПО»
2.Скляр Б. «Цифровая связь. Теоретические
основы и практическое применение».- М.: Вильямс, 2003г.
3.Феер К. «Беспроводная цифровая связь»,
пер. с англ./под ред. В.И. Журавлева, М.: Радио и связь, 2000 г.
4. Мария Саутина «Радиосеть передачи данных. Часть1»
5. Мария Саутина «Радиосеть
передачи данных. часть2»
6. Мария Саутина
«Радиосеть передачи данных. Часть 3»
7. КП «Локальная
радиосеть» Часть2 Калинкин В.В.
8. КП «Локальная радиосеть» Часть3 Калинкин В.В.
9.КП "Локальная радиосеть" Часть 2 Svetlana
10.КП "Локальная радиосеть" Часть 3 Svetlana,
11 .Решение ГКРЧ от 6 декабря
2004 г. № 04-03-04-003
12.Дряхлов
А.А. «Радиосеть передачи данных» Часть1
13 Дряхлов
А.А. «Радиосеть передачи данных» Часть2
14 Дряхлов
А.А. «Радиосеть передачи данных» Часть3