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