КП «Система сбора данных с подвижных объектов»

ЧАСТЬ IV

П.Б. Никишкин


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

Технология SDR традиционно используется в специальных областях телекоммуникаций. Технология SDR использует комбинацию методов, затрагивающих аппаратную и программную части. Аппаратная часть включает многодиапазонные антенны и радиочастотные преобразователи; широкополосные ЦАП и АЦП; а обработка сигналов ПЧ, демодулированных сигналов и результирующего цифрового потока происходит с помощью программируемых процессоров общего назначения. Традиционный аналоговый приемник, где АЦП преобразует сигнал с выхода аналоговых квадратурных каналов, имеет следующие недостатки: необходимость точной настройки; чувствительность к температуре и разбросу параметров компонентов; нелинейные искажения; сложность построения перестраиваемых фильтров и фильтров с подавлением более 60 дБ. Но благодаря развитию современной полупроводниковой элементной базы, в первую очередь – АЦП и ЦАП, теперь можно преобразовывать сигнал непосредственно с выхода промежуточной частоты. Достоинства SDR-приемника: не требует настройки; низкая чувствительность к температуре и разбросу параметров компонентов; простота реализации перестраиваемых фильтров с подавлением более 80 дБ [1].

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

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


Рисунок 1. Передающая часть. 

На приемной части выполняются обратные операции:

  • Демодуляция – модулированный сигнал преобразуется в битовый поток.
  • Деперемежение – обратная операция перемежения.
  • Помехоустойчивый декодер – осуществляет исправление ошибок.
  • Устройство управления – анализ принятого пакета [4].

 


Рисунок 2. Приемная часть.

Разработаем в пакете MATLAB модель системы. Разработанная программа передает сообщения по каналу с AWGN, принимает сообщения, и анализирует информацию на достоверность.

Рассмотрим на примере, как формируется сообщение канала BCCH на передающей и приемной стороне (рис.3 и рис.4).


Рисунок 3. Структура передающей части.

 

Рисунок 4. Структура приемной части.

Разрабатываемая система работает по следующему сценарию.


Рисунок 5. Сценарий работы реализуемой модели.

Разрабатываемая модель системы имеет следующий вид:

% ///////////////////////// ТОЧКА ДОСТУПА /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% //////////// ПЕРЕДАЧА ШИРОКОВЕЩАТЕЛЬНОГО СООБЩЕНИЯ. НАЧАЛО \\\\\\\\\\\\\\

SNR = 10;

Type_channel = 1; % поле типа канала;

Number_cicle_tr = 1; % номер цикла передачи;

Profil_func = 1; % профиль настройки ФУ: 1 для QPSK; 0 для 16-QAM;

%%% Инизиализация параметров %%%

IG = 0;

P_adress = 56;

P_TD = 185;

FCCH = 0;

SCH = 0;

Zero_bits = 0;

Proof_of_Delivery = 1;

inquiry_add_serv = [0 0 0 0 0];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[IQ_signal, msg_Lev1, inquiry_add_serv] = tramsmitter( IG, P_adress, ...

    Type_channel, P_TD, Number_cicle_tr, Profil_func, FCCH, SCH, ...

    Zero_bits, Proof_of_Delivery, inquiry_add_serv );

% /////////////////////////////////////////////////////////////////////////

% //////////////////////////// НАЛОЖЕНИЕ AWGN /////////////////////////////

IQ_signal = awgn(IQ_signal, SNR);

figure(2); plot(IQ_signal,'.');title('СКС после канала связи');

% /////////// ПЕРЕДАЧА ШИРОКОВЕЩАТЕЛЬНОГО СООБЩЕНИЯ. ОКОНЧАНИЕ \\\\\\\\\\\\

% /////////////////////////////////////////////////////////////////////////

% ////////////////////////////// ТЕРМИНАЛ /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% /////////// ПРИЕМ ТЕРМИНАЛОМ ШИРОКОВЕЩАТЕЛЬНОГО СООБЩЕНИЯ \\\\\\\\\\\\\\\

[ r_msg_L2, r_IG, r_P_adress, r_Type_channel, r_P_TD, r_Number_cicle_tr,...

    r_Profil_func, r_Proof_of_Delivery, r_inquiry_add_serv, r_data,...

    r_FCCH, r_SCH, r_CRC, r ] = receiver( Profil_func, IQ_signal );

% определение "своя" точка доступа или "чужая"

if my_bi2de(r_P_TD,'left_msb') >= 155

    disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

    disp(['В зоне обслуживания данной точки доступа разрешена передача']);

    disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

end

% Осуществление радиоизмерений

Radio_determine = norm(IQ_signal)^2;

if Radio_determine > 100

    Profil_func = 0;

else

    Profil_func = 1;

end

% Подсчет количества ошибок:

error = biterr(msg_Lev1, r_msg_L2);

% -------------------------------------------------------------------------

% ---------------------------- ВЫВОД РЕЗУЛЬТАТОВ --------------------------

% -------------------------------------------------------------------------

if r == zeros(1,length(r_msg_L2));

    %{

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

    %}

else

    disp(['%%%%% данные полученные терминалом %%%%%']);

    disp(['Информационная часть принята ошибочно! Количество ошибок: ',int2str(error)]);

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

% ///////////////////////// ТОЧКА ДОСТУПА /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% /// ПЕРЕДАЧА АДРЕСНОГО СООБЩЕНИЯ НА ТЕРМИНАЛ С ЗАПРОСОМ ДОП. УСЛУГИ \\\

Type_channel = 3; % поле типа канала;

Proof_of_Delivery = 0;

[IQ_signal, msg_Lev1, inquiry_add_serv] = tramsmitter( IG, P_adress, ...

    Type_channel, P_TD, Number_cicle_tr, Profil_func, FCCH, SCH, ...

    Zero_bits, Proof_of_Delivery, inquiry_add_serv );

% /////////////////////////////////////////////////////////////////////////

% //////////////////////////// НАЛОЖЕНИЕ AWGN /////////////////////////////

IQ_signal = awgn(IQ_signal, SNR);

figure(2); plot(IQ_signal,'.');title('СКС после канала связи');

% /////////////////////////////////////////////////////////////////////////

% ////////////////////////////// ТЕРМИНАЛ /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% ////// ПРИЕМ ТЕРМИНАЛОМ АДРЕСНОГО СООБЩЕНИЯ ОТ ТОЧКИ ДОСТУПА \\\\\\\\\\\\

[ r_msg_L2, r_IG, r_P_adress, r_Type_channel, r_P_TD, r_Number_cicle_tr,...

    r_Profil_func, r_Proof_of_Delivery, r_inquiry_add_serv, r_data,...

    r_FCCH, r_SCH, r_CRC, r ] = receiver( Profil_func, IQ_signal );

% Осуществление радиоизмерений

Radio_determine = norm(IQ_signal)^2;

if Radio_determine > 100

    Profil_func = 0;

else

    Profil_func = 1;

end

% Подсчет количества ошибок:

error = biterr(msg_Lev1, r_msg_L2);

% -------------------------------------------------------------------------

% ---------------------------- ВЫВОД РЕЗУЛЬТАТОВ --------------------------

% -------------------------------------------------------------------------

if r == zeros(1,length(r_msg_L2));

    %{

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

    %}

else

    disp(['%%%%% данные полученные терминалом %%%%%']);

    disp(['Информационная часть принята ошибочно! Количество ошибок: ',int2str(error)]);

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

% ////////////////////////////// ТЕРМИНАЛ /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% //// ОТПРАВКА НА ТОЧКУ ДОСТУПА ПОДГОТОВЛЕННОГО ТЕКУЩЕГО СООБЩЕНИЯ \\\\\\\

Type_channel = 2; % поле типа канала;

[IQ_signal, msg_Lev1, inquiry_add_serv] = tramsmitter( IG, P_adress, ...

    Type_channel, P_TD, Number_cicle_tr, Profil_func, FCCH, SCH, ...

    Zero_bits, Proof_of_Delivery, r_inquiry_add_serv );

% /////////////////////////////////////////////////////////////////////////

% //////////////////////////// НАЛОЖЕНИЕ AWGN /////////////////////////////

IQ_signal = awgn(IQ_signal, SNR);

figure(2); plot(IQ_signal,'.');title('СКС после канала связи');

% /////////////////////////////////////////////////////////////////////////

% ///////////////////////// ТОЧКА ДОСТУПА /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% ////// ПРИЕМ ТОЧКОЙ ДОСТУПА ТЕКУЩЕЙ ИНФОРМАЦИИ ОТ ТЕРМИНАЛА \\\\\\\\\\\\\

[ r_msg_L2, r_IG, r_P_adress, r_Type_channel, r_P_TD, r_Number_cicle_tr,...

    r_Profil_func, r_Proof_of_Delivery, r_inquiry_add_serv, r_data, ...

    r_FCCH, r_SCH, r_CRC, r ] = receiver( Profil_func, IQ_signal );

% Осуществление радиоизмерений

Radio_determine = norm(IQ_signal)^2;

if Radio_determine > 100

    Profil_func = 0;

else

    Profil_func = 1;

end

% Подсчет количества ошибок:

error = biterr(msg_Lev1, r_msg_L2);

% -------------------------------------------------------------------------

% ---------------------------- ВЫВОД РЕЗУЛЬТАТОВ --------------------------

% -------------------------------------------------------------------------

if r == zeros(1,length(r_msg_L2));

    %{

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

    %}

else

    disp(['%%%%% данные полученные точкой доступа %%%%%']);

    disp(['Информационная часть принята ошибочно! Количество ошибок: ',int2str(error)]);

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

% ///////////////////////// ТОЧКА ДОСТУПА /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% /////////// ОТПРАВЛЕНИЕ НА ТЕРМИНАЛ ПАКЕТА ПОДТВЕРЖДЕНИЯ \\\\\\\\\\\\\\\\

Type_channel = 3; % поле типа канала;

Proof_of_Delivery = 1;

[IQ_signal, msg_Lev1, inquiry_add_serv] = tramsmitter( IG, P_adress, ...

    Type_channel, P_TD, Number_cicle_tr, Profil_func, FCCH, SCH, ...

    Zero_bits, Proof_of_Delivery, r_inquiry_add_serv );

% /////////////////////////////////////////////////////////////////////////

% //////////////////////////// НАЛОЖЕНИЕ AWGN /////////////////////////////

IQ_signal = awgn(IQ_signal, SNR);

figure(2); plot(IQ_signal,'.');title('СКС после канала связи');

% /////////////////////////////////////////////////////////////////////////

% ////////////////////////////// ТЕРМИНАЛ /////////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% ////// ПРИЕМ ТЕРМИНАЛОМ СООБЩЕНИЯ ПОДТВЕРЖДЕНИЯ ОТ ТОЧКИ ДОСТУПА \\\\\\\\

[ r_msg_L2, r_IG, r_P_adress, r_Type_channel, r_P_TD, r_Number_cicle_tr,...

    r_Profil_func, r_Proof_of_Delivery, r_inquiry_add_serv, r_data,...

    r_FCCH, r_SCH, r_CRC, r ] = receiver( Profil_func, IQ_signal );

% Осуществление радиоизмерений

Radio_determine = norm(IQ_signal)^2;

if Radio_determine > 100

    Profil_func = 0;

else

    Profil_func = 1;

end

% Подсчет количества ошибок:

error = biterr(msg_Lev1, r_msg_L2);

% -------------------------------------------------------------------------

% ---------------------------- ВЫВОД РЕЗУЛЬТАТОВ --------------------------

% -------------------------------------------------------------------------

if r == zeros(1,length(r_msg_L2));

    %{

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

    %}

else

    disp(['%%%%% данные полученные терминалом %%%%%']);

    disp(['Информационная часть принята ошибочно! Количество ошибок: ',int2str(error)]);

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['Терминал передал сообщение успешно, переход в режим "СОН"']);


Для оценки влияния шума на передаваемый сигнал, были построены сигнально-кодовые созвездия (СКС). На рисунке 6 – СКС модулированного QPSK сигнала на выходе модулятора. На рисунке 7 – СКС того же сигнала под влиянием АБГШ при отношении сигнал/шум 10 дБ.

 

Передающее устройство имеет следующий вид: 

function [ IQ_signal, msg_Lev1, inquiry_add_serv ] = tramsmitter( IG, P_adress, ... Type_channel, P_TD, Number_cicle_tr, Profil_func, FCCH, SCH, Zero_bits, Proof_of_Delivery, add_serv )

length_L2 = 88; % длина пакета L2 - уровня;

Type_channel = my_de2bi(Type_channel,'left_msb',2); % перевод

if Type_channel == [0,1]

IG = 1; % поле типа сообщений;

P_adress = [1 1 1 1 1 1 1 1]; % поле адреса;

%P_TD = 179; % номер (идентификатор) точки доступа;

FCCH = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; % подстройка частоты

SCH = [0 1 1 0 1 1 1 0 1 0 0 0 0 0 1 0]; % и времени;

Zero_bits = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; % нулевые биты;

P_TD = my_de2bi(P_TD,'left_msb',8); % из десяточной системы счисление

len = length(de2bi(length_L2)); % в двоичную систему счисления с указанием

Number_cicle_tr = my_de2bi(Number_cicle_tr,'left_msb',7); % разрядности числа;

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные передаваемые точкой доступа %%%%%']);

disp(['Тип канала - № ', int2str(Type_channel)]);

disp(['Идентификатор точки доступа - № ', int2str(P_TD)]);

disp(['Номер цикла передачи - ', int2str(Number_cicle_tr)]);

disp(['Профиль функционирования - ', int2str(Profil_func)]);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

data = []; % поле данных;

Proof_of_Delivery = [];

inquiry_add_serv = [];

end

if Type_channel == [1,0]

IG = 0;

P_adress = my_de2bi(P_adress,'left_msb',8);

P_TD = my_de2bi(P_TD,'left_msb',8);

Number_cicle_tr = [];

FCCH = [];

SCH = [];

%%% Начало сборки поля данных %%%

data = [];

speed = 125;

speed = my_de2bi(speed,'left_msb',8);

[pulse, temp, engine, tire_pressure, fuel] = additional_service(add_serv);

data = [speed, pulse, temp, engine, tire_pressure, fuel];   

%%%%%%% Окончание сборки %%%%%%%%

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные передаваемые терминалом %%%%%']);

disp(['Тип канала - № ', int2str(Type_channel)]);

disp(['Идентификатор точки доступа - № ', int2str(my_bi2de(P_TD,'left_msb'))]);

disp(['Идентификатор терминала - № ', int2str(my_bi2de(P_adress,'left_msb'))]);

disp(['Скорость движения участника(терминала) [км/ч] - ', int2str(my_bi2de(speed,'left_msb'))]);

disp(['Пульс водителя [уд/сек] - ', int2str(my_bi2de(pulse,'left_msb'))]);

disp(['Темпиратура тела водителя [C] - ', int2str(my_bi2de(temp,'left_msb'))]);

disp(['Темпиратура двигателя автомобиля [C] - ', int2str(my_bi2de(engine,'left_msb'))]);

disp(['Давление в шинах [атм] - ', int2str(my_bi2de(tire_pressure,'left_msb'))]);

disp(['Количество топлива [%] - ', int2str(my_bi2de(fuel,'left_msb'))]);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

Proof_of_Delivery = [];

inquiry_add_serv = [];

end

if Type_channel == [1,1]

IG = 0;

P_adress = my_de2bi(P_adress,'left_msb',8);

P_TD = my_de2bi(P_TD,'left_msb',8);

Number_cicle_tr = [];

FCCH = [];

SCH = [];

if Proof_of_Delivery == 0

inquiry_add_serv = my_de2bi(fix(rand*32),'left_msb',5);

else

inquiry_add_serv = [0 0 0 0 0];

end

Zero_bits = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные передаваемые точкой доступа %%%%%']);

disp(['Тип канала - № ', int2str(Type_channel)]);

disp(['Идентификатор точки доступа - № ', int2str(my_bi2de(P_TD,'left_msb'))]);

disp(['Идентификатор терминала - № ', int2str(my_bi2de(P_adress,'left_msb'))]);

if Proof_of_Delivery == 1 disp(['Сообщение от терминала № ',int2str(my_bi2de(P_adress,'left_msb')),' передано']); else

if inquiry_add_serv(1) == 1

disp(['Используется дополнительная услуга: информация о пульсе водителя']);

end

if inquiry_add_serv(2) == 1

disp(['Используется дополнительная услуга: информация о темпиратуре тела водителя']);

end

if inquiry_add_serv(3) == 1

disp(['Используется дополнительная услуга: информация о темпиратуре двигателя автомобиля']);

end

if inquiry_add_serv(4) == 1

disp(['Используется дополнительная услуга: информация о давлении в шинах']);

end

if inquiry_add_serv(5) == 1

disp(['Используется дополнительная услуга: информация о количестве топлива в баке автомобиля']);

end

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

data = [];

end

% Сборка пакета канального уровня:

msg_L2 = [IG P_adress Type_channel P_TD Number_cicle_tr Profil_func ...

    Proof_of_Delivery inquiry_add_serv data FCCH SCH];

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

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

[x y] = size(poly);

m=[msg_L2 zeros(1,y-1)]; % вставка нулей в поле CRC;

[q r] = deconv(m,poly); % поиск частного и остатка от деления;

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

CRC = r(length(msg_L2) + 1:end); % расчет CRC;

msg_Lev1 = [msg_L2 CRC]; % Сборка пакета канального уровня;

trx = [msg_Lev1 Zero_bits]; % добавление нулевых бит;

% Профиль настройки физического уровня:

if Profil_func == 1

    n = 127;

    k = 92;

    mPos = 4;

else

    n = 127;

    k = 99;

    mPos = 16;

end

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

code_word = encode(trx,n,k,'bch/binary');

code_word = [code_word 0]';

% Блочное перемежение:

inter_code_word = matintrlv(code_word,4,32);

% Сборка пакета физического уровня:

fl = [1 1 1 0 0 0 1 1];

equalize = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];

tch = [fl equalize inter_code_word' fl];

% Подготовка и отправка сообщения:

% --- Параметры модуляции ---

h = modem.pskmod(mPos);

h.inputtype = 'bit';

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/4;

% --- Модуляция ---

IQ_signal = modulate(h, tch');

figure(1); plot(IQ_signal,'.');title('СКС модулированного сигнала');

end


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

function [ r_msg_L2, r_IG, r_P_adress, r_Type_channel, r_P_TD, ...

    r_Number_cicle_tr, r_Profil_func, r_Proof_of_Delivery, r_inquiry_add_serv, r_data, r_FCCH, r_SCH, r_CRC, r ] = ...

    receiver( Profil_func, IQ_signal )

% Профиль настройки физического уровня:

if Profil_func == 1

    n = 127;

    k = 92;

    mPos = 4;

else

    n = 127;

    k = 99;

    mPos = 16;

end

% Подготовка  и демодуляция сообщения:

% --- Параметры демодуляции ---

h = modem.pskdemod(mPos);

h.outputtype = 'bit';

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/4;

% --- Демодуляция ---

demod_IQ_signal = demodulate(h,IQ_signal);

% выделение пакета L2 - уровня;

r_inter_code_word = demod_IQ_signal(25:152,1);

% Блочное деперемежение:

deinter_code_word = matdeintrlv(r_inter_code_word, 4, 32);

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

decode_word = decode(deinter_code_word(1:127),n,k,'bch/binary');

% /////////////////////////////////////////////////////////////////////////

% /////////////////////// Принятые результаты /////////////////////////////

% /////////////////////////////////////////////////////////////////////////

% Тип отправленного сообщения:

r_IG = [decode_word(1)]';

% Поле адреса:

r_P_adress = [decode_word(2:9)]';

% Тип канала:

r_Type_channel = [decode_word(10:11)]';

% /// Создание сообщения канала BCCH \\\

if r_Type_channel == [0,1]

% Идентификатор точки доступа:

r_P_TD = [decode_word(12:19)]';

% Номер цикла передачи:

r_Number_cicle_tr = [decode_word(20:26)]';

% Профиль функционрования:

r_Profil_func = [decode_word(27)]';

% Подстроечная последовательность:

r_FCCH = [decode_word(28:43)]';

r_SCH = [decode_word(44:59)]';

% Проверка целостности сообщения

r_CRC = [decode_word(60:71)]';

r_data = [];

r_Proof_of_Delivery = [];

r_inquiry_add_serv = [];

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные полученные терминалом %%%%%']);

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

end

% /// Создание сообщения канала RACH \\\

if r_Type_channel == [1,0]

% Идентификатор точки доступа:

r_P_TD = [decode_word(12:19)]';

% Профиль функционрования:

r_Profil_func = [decode_word(20)]';

%%% Распаковка передаваемых текущих данных терминалом %%%

% Информация о скорости движения терминала(участника сети)

r_speed = [decode_word(21:28)]';

% Информация о пульсе водителя

r_pulse = [decode_word(29:44)]';

% Информация о температуре водителя

r_temp = [decode_word(45:52)]';

% Информация о температуре двигателя

r_engine = [decode_word(53:60)]';

% Информация о давлении в шинах

r_tire_pressure = [decode_word(61:68)]';

% Информация о количестве топлива в баке

r_fuel = [decode_word(69:76)]';

r_data = [r_speed, r_pulse, r_temp, r_engine, r_tire_pressure, r_fuel];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

r_Number_cicle_tr = [];

r_FCCH = [];

r_SCH = [];

r_Proof_of_Delivery = [];

r_inquiry_add_serv = [];

% Проверка целостности сообщения

r_CRC = [decode_word(77:88)]';

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные полученные точкой доступа %%%%%']);

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

disp(['Тип канала - № ', int2str(r_Type_channel)]);

disp(['Идентификатор точки доступа - № ', int2str(my_bi2de(r_P_TD,'left_msb'))]);

disp(['Идентификатор терминала - № ', int2str(my_bi2de(r_P_adress,'left_msb'))]);

disp(['Скорость движения участника(терминала) [км/ч] - ', int2str(my_bi2de(r_speed,'left_msb'))]);

disp(['Пульс водителя [уд/сек] - ', int2str(my_bi2de(r_pulse,'left_msb'))]);

disp(['Темпиратура тела водителя [C] - ', int2str(my_bi2de(r_temp,'left_msb'))]);

disp(['Темпиратура двигателя автомобиля [C] - ', int2str(my_bi2de(r_engine,'left_msb'))]);

disp(['Давление в шинах [атм] - ', int2str(my_bi2de(r_tire_pressure,'left_msb'))]);

disp(['Количество топлива [%] - ', int2str(my_bi2de(r_fuel,'left_msb'))]);

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

end

% /// Создание сообщения канала DCCH \\\

if r_Type_channel == [1,1]

% Идентификатор точки доступа:

r_P_TD = [decode_word(12:19)]';

% Профиль функционрования:

r_Profil_func = [decode_word(20)]';

% Подтверждение данных

r_Proof_of_Delivery = [decode_word(21)]';

%

if r_Proof_of_Delivery == 0

r_inquiry_add_serv = [decode_word(22:26)]';

else

r_inquiry_add_serv = [decode_word(22:26)]';

end

% Проверка целостности сообщения

r_CRC = [decode_word(27:38)]';

r_Number_cicle_tr = [];

r_FCCH = [];

r_SCH = [];

r_data = [];

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

disp(['%%%%% данные полученные терминалом %%%%%']);

    if r_IG == 1

        disp(['Тип передаваемого сообщения - широковещательное']);

    else

        disp(['Тип передаваемого сообщения - адресное']);

    end

    disp(['Поле адреса - ',int2str(r_P_adress)]);

    disp(['Тип канала - № ',int2str(my_bi2de(r_Type_channel,'left_msb'))]);

    disp(['Идентификатор точки доступа - № ',int2str(my_bi2de(r_P_TD,'left_msb'))]);

    disp(['Номер цикла передачи - ',int2str(my_bi2de(r_Number_cicle_tr,'left_msb'))]);

    disp(['Профиль функционирования - № ',int2str(my_bi2de(r_Profil_func,'left_msb'))]);

if r_Proof_of_Delivery == 1 disp(['Сообщение от терминала № ',int2str(my_bi2de(r_P_adress,'left_msb')),' принято успешно']); else

if r_inquiry_add_serv(1) == 1

disp(['Используется дополнительная услуга: информация о пульсе водителя']);

end

if r_inquiry_add_serv(2) == 1

disp(['Используется дополнительная услуга: информация о темпиратуре тела водителя']);

end

if r_inquiry_add_serv(3) == 1

disp(['Используется дополнительная услуга: информация о темпиратуре двигателя автомобиля']);

end

if r_inquiry_add_serv(4) == 1

disp(['Используется дополнительная услуга: информация о давлении в шинах']);

end

if r_inquiry_add_serv(5) == 1

disp(['Используется дополнительная услуга: информация о количестве топлива в баке автомобиля']);

end

end

disp(['%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%']);

end

% Создание пакета L2 - уровня

r_msg_L2 = [r_IG r_P_adress r_Type_channel r_P_TD ...

    r_Number_cicle_tr r_Profil_func r_Proof_of_Delivery r_inquiry_add_serv r_data r_FCCH r_SCH r_CRC];

% Подготовка и проверке CRC:

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

[q r] = deconv(r_msg_L2,poly);

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

end

 

В программе используется функция additional_service, основное назначение которой состоит в имитации запросов дополнительных услуг от ЦСИ.

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные передаваемые точкой доступа %%%%%

Тип канала - № 0  1

Идентификатор точки доступа - № 1  0  1  1  1  0  0  1

Номер цикла передачи - 0  0  0  0  0  0  1

Профиль функционирования - 1

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные полученные терминалом %%%%%

Тип передаваемого сообщения - широковещательное

Поле адреса - 1  1  1  1  1  1  1  1

Тип канала - № 1

Идентификатор точки доступа - № 185

Номер цикла передачи - 1

Профиль функционирования - № 1

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

В зоне обслуживания данной точки доступа разрешена передача

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные передаваемые точкой доступа %%%%%

Тип канала - № 1  1

Идентификатор точки доступа - № 185

Идентификатор терминала - № 56

Используется дополнительная услуга: информация о пульсе водителя

Используется дополнительная услуга: информация о темпиратуре тела водителя

Используется дополнительная услуга: информация о количестве топлива в баке автомобиля

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные полученные терминалом %%%%%

Тип передаваемого сообщения - адресное

Поле адреса - 0  0  1  1  1  0  0  0

Тип канала - № 3

Идентификатор точки доступа - № 185

Номер цикла передачи -

Профиль функционирования - № 1

Используется дополнительная услуга: информация о пульсе водителя

Используется дополнительная услуга: информация о темпиратуре тела водителя

Используется дополнительная услуга: информация о количестве топлива в баке автомобиля

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные передаваемые терминалом %%%%%

Тип канала - № 1  0

Идентификатор точки доступа - № 185

Идентификатор терминала - № 56

Скорость движения участника(терминала) [км/ч] - 125

Пульс водителя [уд/сек] - 47

Темпиратура тела водителя [C] - 49

Темпиратура двигателя автомобиля [C] - 0

Давление в шинах [атм] - 0

Количество топлива [%] - 61

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные полученные точкой доступа %%%%%

Тип передаваемого сообщения - адресное

Тип канала - № 1  0

Идентификатор точки доступа - № 185

Идентификатор терминала - № 56

Скорость движения участника(терминала) [км/ч] - 125

Пульс водителя [уд/сек] - 47

Темпиратура тела водителя [C] - 49

Темпиратура двигателя автомобиля [C] - 0

Давление в шинах [атм] - 0

Количество топлива [%] - 61

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные передаваемые точкой доступа %%%%%

Тип канала - № 1  1

Идентификатор точки доступа - № 185

Идентификатор терминала - № 56

Сообщение от терминала № 56 передано

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% данные полученные терминалом %%%%%

Тип передаваемого сообщения - адресное

Поле адреса - 0  0  1  1  1  0  0  0

Тип канала - № 3

Идентификатор точки доступа - № 185

Номер цикла передачи -

Профиль функционирования - № 1

Сообщение от терминала № 56 принято успешно

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Терминал передал сообщение успешно, переход в режим "СОН"


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

1. Технология SDR. Электронный ресурс // URL:

http://nano-e.ucoz.ru/publ/domashnie_zadanija_po_setjam/tekhnologija_sdr/10-1-0-129

2. С.А. Милованов – Система сбора данных с подвижных станций (часть 4). Электронный ресурс // URL:http://omoled.ru/publications/view/348

3. Система сбора данных с подвижных станций. Часть 4. Электронный ресурс // URL:http://omoled.ru/publications/view/347

4. КП на тему «Локальная радиосеть» п. 2 – п.3 (часть № 4). Электронный ресурс // URL:http://omoled.ru/publications/view/340