Разработка
функциональных схем передающего и приемного трактов физического уровня – на
основе концепции SDR (Software Defined Radio). Пояснение назначения модулей схемы.
В данной статье описывается
разработанная в среде Matlab модель системы. Разработанная программа реализует формирование от терминала
сообщения к точке доступа, передачу данного сообщения по каналу с АБГШ, прием сообщения
точкой доступа, анализ принятой информации на предмет достоверности.
При разработке программы за основу была
взята версия примера PSK-модема.
Текст программы
разделяется на 2 части: передающую и приёмную.
передающее устройство
включает в себя следующие блоки:
·
устройство
управления – осуществляет управление устройством и формируем сообщение
канального уровня.
·
помехоустойчивый
кодер – предназначается для того, чтобы вносить избыточность в информационный
поток.
·
перемежитель
– для борьбы с пакетными ошибками осуществляет перестановку бит.

Текст программы отображающий передающую
часть:
SNR = 10; % значение ОСШ, дБ
len_L2 = 71; % длина пакета уровня L2
t=1; % номер типа пакета
i=3; % номер терминала
%/////////////////////////////////////////////////
%////// СБОРКА ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ///////
%/////////////////////////////////////////////////
type = de2biMy(t,'left_msb',3); % Определение типа пакета №2 (RACH) - поле "TYPE"
id_t = de2biMy(i,'left_msb',5); % Определение ID терминала №4 - поле "ID_T"
len = de2biMy(12,'left_msb',8); % Определение длины инф. части - поле "LEN"
disp(['Тип передаваемого пакета - №',int2str(t)]);
disp(['Передаваемый номер терминала - №',int2str(i)]);
disp('------------------------------------');
%============= Вычисление CRC
==================================
forcrc = [type len id_t]; % Создание поля, для кот.вычисл. CRC
poly = [1 1 0 0 1]; % Создание полинома
[x y] = size(poly); % Размерность полинома
m = [forcrc zeros(1,y-1)]; % Добавление нулей в поле CRC
[q r] = deconv(m,poly); % Поиск частного и остатка от деления
r = mod(abs(r),2); информационной части на порождающий полином CRC кода
CRC =
r(length(forcrc) + 1:end); % расчет поля CRC
%==============================================================
inf_L2 = [forcrc CRC]; % создание информационной части L2
fill = zeros(1,len_L2-length(inf_L2)); % создание массива битов заполнения
data_L2 = [inf_L2 fill]; % сборка пакета L2
%/////////////////////////////////////////////////
%//// КОДИРОВАНИЕ ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ////
%/////////////////////////////////////////////////
enc = fec.bchenc(127,71); % создание объекта BCH encoder
code_data =
encode(enc,data_L2'); % кодирование
code_data_null = [code_data' 0]'; % добавляем к пакету один бит для приведения к
степени двойки
%/////////////////////////////////////////////////
%//// ПЕРЕМЕЖЕНИЕ ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ////
%/////////////////////////////////////////////////
intr_code_data_null
= matintrlv(code_data_null, 4, 32);
%/////////////////////////////////////////////////
%//// СБОРКА ПАКЕТА ФИЗИЧЕСКОГО УРОВНЯ L1 ////////
%/////////////////////////////////////////////////
fl = [1 1 1 0 0 0 1 1]; % формирование флагов
eq = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0]; % настроечная послед. эквалайзера
tch = [fl eq intr_code_data_null' fl]'; % сборка пакета L1
%/////////////////////////////////////////////////
%//////////////// МОДУЛЯЦИЯ //////////////////////
%/////////////////////////////////////////////////
h = modem.pskmod(4); % QPSK модем
% ---- Параметры модуляции ---
h.inputtype = 'bit';
h.SymbolOrder = 'gray';
h.PhaseOffset =
pi/4;
% ----------------------------
modul_signal =
modulate(h, tch); % собственномодуляция
figure(1);
plot(modul_signal,'.'),title('СКС модулированного сигнала'); % построение СКС
%/////////////////////////////////////////////////
%/////////////// НАЛОЖЕНИЕ AWGN //////////////////
%/////////////////////////////////////////////////
modul_signal =
awgn(modul_signal,SNR);
figure(2);
plot(modul_signal,'.'),title('СКС зашумленного сигнала'); ; % построение СКС
Рисунок 2. СКС модулированного QPSK сигнала на выходе модулятора
Рисунок 3. СКС сигнала под влиянием АБГШ (ОСШ=10 дБ)
На приемной части выполняются обратные операции:
·
Демодуляция
– модулированный сигнал преобразуется в битовый поток.
·
Деперемежение
– обратная операция перемежения.
·
Помехоустойчивый
декодер – осуществляет исправление ошибок.
·
Устройство
управления – анализ принятого пакета .
Рисунок 4. Приемная часть.
Фрагмент
программы, реализующий приемную часть.
%/////////////////////////////////////////////////
%//////////////// ДЕМОДУЛЯЦИЯ ////////////////////
%/////////////////////////////////////////////////
h = modem.pskdemod(4); % QPSK демод
% ---- Параметры демодуляции ---
h.OutputType = 'bit';
h.SymbolOrder = 'gray';
h.PhaseOffset =
pi/4;
%
----------------------------
demod_signal =
demodulate(h,modul_signal); % собственно демодуляция
%/////////////////////////////////////////////////
%//// РАЗБОРКА ПАКЕТА ФИЗИЧЕСКОГО УРОВНЯ L1 //////
%/////////////////////////////////////////////////
res_intr_code_data_null
= demod_signal(25:152,1); % выделение пакета L2
%/////////////////////////////////////////////////
%/// ДЕПЕРЕМЕЖЕНИЕ ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ///
%/////////////////////////////////////////////////
deintr_code_data_null
= matdeintrlv(res_intr_code_data_null,4,32);
deintr_code_data =
deintr_code_data_null(1:127,1); % удаление дополнительногонулевого
бита
%/////////////////////////////////////////////////
%/// ДЕКОДИРОВАНИЕ ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ///
%/////////////////////////////////////////////////
decoder =
fec.bchdec(enc); % Construct decoder from encoder
decode_data = decode(decoder,deintr_code_data)'; % декодирование
%/////////////////////////////////////////////////
%//// РАЗБОРКА ПАКЕТА КАНАЛЬНОГО УРОВНЯ L2 ///////
%/////////////////////////////////////////////////
re_type_b = decode_data(1,1:3); % Вычисление номера типа пакета - поле
"TYPE"
re_id_t_b = decode_data(1,12:16); % Вычисление ID терминала - поле "ID_T"
re_len_b = decode_data(1,4:11); % Вычисление длины инф. части - поле "LEN"
re_CRC = decode_data(1,17:20); % Вычисление поля CRC
%============= Проверка CRC
==================================
inf_part = [re_type_b re_len_b re_id_t_b]; % создание информационной части
пакета L2
re_forcrc = [re_type_b re_len_b re_id_t_b re_CRC]; % Создание поля, для кот.вычисл.
CRC
[q r]=deconv(re_forcrc,poly); % подготовка к проверке CRC
r=mod(abs(r),2); % проверка остатка
%==============================================================
%============= Вывод результатов ==============================
err_count = biterr(forcrc,inf_part); %
подсчет количества ошибок
if r ==
zeros(1,length(re_forcrc));
disp(['Тип принятого пакета - №',int2str(bi2deMy(re_type_b,'left_msb'))]);
disp(['Принятый номер терминала - №',int2str(bi2deMy(re_id_t_b,'left_msb'))]);
else
disp(['Информационная часть принята ошибочно! Количество
ошибок: ',int2str(err_count)]);
end
%==============================================================
После работы механизма CRC по проверке принятого
сообщения на ошибки, в случае отсутствия таковых, программа выводит сообщение
типа:
================================
Тип передаваемого
пакета - №1
Передаваемый номер
терминала - №3
------------------------------------
Тип принятого пакета -
№1
Принятый номер
терминала - №3
================================
Если механизм CRC выявил ошибки в
принятых данных, то программа выводит сообщение типа:
================================
Тип передаваемого
пакета - №1
Передаваемый номер
терминала - №3
------------------------------------
Информационная
часть принята ошибочно! Количество битовых ошибок: 1
Точка сбора должна
сравнить полученный идентификатор терминала с записанным в своей памяти, и на
основании этого сравнения определить дальнейший сценарий взаимодействия с
терминалом. Минимально необходимое значения ОСШ, при котором передача
сообщения происходит безошибочно, равно 6 дБ.
Список литературы:
1.http://omoled.ru/publications/view/348
2.Куликов А.А.– Система сбора данных с подвижных станций. Часть 2;
3.Куликов А.А.– Система сбора данных с подвижных станций. Часть 3;
4.Основы построения беспроводных сетей стандарта 802.11: А.В. Бакке. -Рязань, 2008.
5.А.В. Бакке. «Лекции по курсу ССПО», Рязань, РГРТУ 2012.