В данном разделе КП предложено описание разработанной системы в среде 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