1.     Техническая часть .

1.1 Разработка функциональных схем передающего и приемного трактов физического уровня – на основе концепции SDR. Назначение модулей схемы.

Суть технологии Software Defined Radio заключается в том, что базовые параметры приёмопередающего устройства определяются именно программным обеспечением, а не аппаратной конфигурацией

В разрабатываемой системе передатчик включает в себя следующие блоки:

Модуль управления. Осуществляет управление схемой и формирует сообщение канального уровня.

Помехоустойчивый кодер. Вносит избыточность в информационный поток.

Перемежитель. Осуществляет перестановку бит для борьбы с пакетными ошибками.

Модулятор. Осуществляет модуляцию битового потока.

 OFDM. Формирует многочастотный сигнал.

Преамбула. Осуществляет формирование сигнала для синхронизации приемника, а также формирует служебный символ.

 

Приемник включает в себя следующие блоки (рис.1.):

Синхронизация. Модуль необходимый для определения границ OFDMсимволов.

 OFDM. Осуществляет обратное преобразование многочастотного сигнала.

Демодулятор. Преобразует модулированный сигнал в последовательность бит.

Деперемежитель. Осуществляет операцию обратную перемежителю передатчика.

Помехоустойчивый декодер. Осуществляет исправление ошибок.

Модуль управления. Осуществляет анализ принятого пакета и управление модулями приемника.

 

Рассмотрим основные модули программы (рис. 1).


Рисунок 1. Функциональная схема основных модулей

 

2. Экспериментальная часть.

 

2.1. Разработка модели в среде Matlab, демонстрирующей пример передачи сообщений между объектами верхнего уровня.


Рисунок 2. Структура передаваемого пакета

В представленной ниже модели осуществляется передача служебного сообщения по каналу разрешенного доступа AGCH, необходимое для уведомления терминала о том, что ему необходимо приготовится к приему информации.

Передающая сторона

- Выбор профиля на основании результатов работы блока проведения измерений.

 

%%% Передатчик %%%

% Выбор профиля осуществляется на основе результатов работы блока

% проведения измерений

mod_type = 0; % 0 -> BPSK , 1-> QAM-16

 

- Формируется  поле DATA, включающее: поле адреса, тип пакета, номер пакета и поле данных(рис. 23).

 

% Формирование пакета канального уровня

% Заполнение поля DATA

ADR_ OTPR    = [1 1 0 1 1 0]; % 6 бит

ADR_POL  =[1 0 1 0 1 0]; % 6 бит

PTYPE  = [1 1 1 1 1 1]; % 6 бит

USRDATA =[strtobin('Терминал №... Приготовьтесь к приему.')']; % 256 бит

 

- Заполняются поля: FL, DATA,CRC, ZER.

 

% Формирование окончательного пакета

FL   = [1 0 1 0 1];% 5 бит

DATA = [ADR_ OTPR ADR_POL PTYPE NOMBER USRDATA] % 274 бита

CRC  = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; % 16 бит

ZER =  [0 0 0 0 0 0 0]; % 7 бит

% Заполение поля CRC

[q,r] = deconv([DATA CRC],poly);

r     = mod(abs(r),2);

% Полином CRC кода

poly=[1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];

CRC   = r(end-length(CRC)+1:end);

% Формирование пакета физического уровня

MSGL2 = [FL DATA CRC ZER]; % 302 бита

 

- Блок помехоустойчивого кодирования.

 

% Помехоустойчивое кодирование

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 символа.

 

   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));

%%% Канал передачи данных %%%


Рис. 3 Временные реализации пакетов физического уровня QPSK  


Рис. 4 Временные реализации пакетов физического уровня 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;

plot(IQ_signalr,'x');

 

- Демодуляция сигнала.

 

datar = demodulate(h,IQ_signalr);

codMSGL2r = datar(1:end - length(fil_zero));



- Выполнение деперемежения.

 

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;

 

- Выделение полей: ADR, PTYPE, NUMBER, USRDATA.

 

ADRr    = DATAr(1:length(ADR));

PTYPEr  = DATAr(length(ADR)+(1:length(PTYPE)));

NOMBERr = DATAr(length(ADR)+length(PTYPE)+(1:length(NOMBER)));

USRDATAr= DATAr(length(ADR)+length(PTYPE)+length(NOMBER)+(1:length(USRDATA)));

'Терминал №... Для вас есть данные. Приготовьтесь к приему.'

 

- В результате выполнения разработанной модели были получены следующие результаты при ОСШ равном 25 дБ:

 

ans = Без ошибок!

ans = Терминал №... Для вас есть данные. Приготовьтесь к приему.

 

 

Результат выполнения программы

  В результате выполнения программы были получены следующие результаты.

 Модуляция QPSK, ОСШ = 25 дБ:

ans = 

Без ошибок!

 ans = 

Приготовиться к приему сообщения терминалу №...

Модуляция QAM-16, ОСШ = 22 дБ:

ans

Без ошибок!

 ans = 

Приготовиться к приему сообщения терминалу №...

 

Список используемой литературы:

 

1.                А.В. Бакке. «Лекции по курсу ССПО».

2.                А.А. Зайцев. «Лекции по курсу ОТССПО».

3.                Скляр Б. «Цифровая связь. Теоретические основы и практическое применение». - М.: Вильямс, 2003 г.

4.                Феер К. «Беспроводная цифровая связь», пер. с англ./под ред. В.И. Журавлева, М.: Радио и связь, 2000 г.

 5.   Анна Ночная КП на тему "Локальная радиосеть" п. 1.6-1.7 (часть №3) http://omoled.ru/publications/view/332

6. Анна Ночная КП на тему "Локальная радиосеть" п. 1.6-1.7 (часть №4) http://omoled.ru/publications/view/340

7.Андрей Городничев КП «Локальная радиосеть» часть 1 http://omoled.ru/publications/view/427

8. Андрей Городничев КП «Локальная радиосеть» часть 2 http://omoled.ru/publications/view/474

9. Андрей Городничев КП «Локальная радиосеть» часть 3 http://omoled.ru/publications/view/478