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

Выполнила студентка группы 9110 Жарко Н.С.

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

- Модуль управления – отвечает за управление устройством и формирование сообщение канального уровня;

- Помехоустойчивый кодер – вносит избыточность в информационные данные;

- Модулятор – модуляция битового потока;

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

- Демодуляция – модулированный сигнал преобразуется в битовый поток;

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

- Модуль управления – анализ принятого пакета;

С помощью программы  MATLAB была реализована часть сценария взаимодействия Т и ТД:

ТД  рассылает широковещательную информацию. Эта информация содержит в себе ID ТД. Т, получив данную информацию, определяет требуется ли передача данных  этой ТД. Затем Т отправляет ТД запрос на передачу данных. В этом запросе Т передает свой идентификатор ID T


Рис. 1. Часть сценария взаимодействия Т и ТД.

На рисунке 2 представлено формирование пакета канального уровня, передаваемого ТД.


Рис 2. Сборка пакета канального уровня ТД.

На рисунке 3 представлена сборка пакета  передаваемого Т на канальном уровне:



Рис.3. Сборка пакета канального уровня Т.
 

Длина пакета канального уровня составляет 92 бита, после помехоустойчевого кодирования и добавления 1 бита четности длина пакета возрастает до 128 бит. Сборка пакета физического уровня представлена на рисунке 4.


Рис.4. Сборка пакета физического уровня ТД.

Разработанная программа:

script

clc;

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

SNR = 11;

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

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

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

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]; % нулевые биты;

 

[IQ_signal, msg_Lev1] = tramsmitter( ID_T, Type_channel, ID_TD, FCCH, SCH, Zero_bits ); 


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

IQ_signal = awgn(IQ_signal, SNR);

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

 

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

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

[ r_msg_L2, r_ID_T, r_Type_channel, r_ID_TD, ...

    r_FCCH, r_SCH, r_CRC, r ] = ...

    receiver( IQ_signal );

 

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

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

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

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

    disp([' Количество ошибок: ',int2str(error)]);

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


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

if my_bi2de(r_ID_TD,'left_msb') <= 20

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

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


    %%%%%%%%%%%%% ОТПРАВКА ТЕРМИНАЛОМ ЗАПРОСА НА РЕГИСТРАЦИЮ %%%%%%%%%%%%%%%%%%


    %подготовка пакета RACH

    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]; % нулевые биты;

    %ID_T2 = 86; % адресс передающего терминала

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

    Address_TD = my_bi2de(r_ID_TD,'left_msb'); % адрес точки доступа

    if Type_channel == 2

        FCCH = [];

        SCH = [];

    end

   

    [IQ_signal_t, msg_Lev1_t] = tramsmitter( ID_T2, Type_channel, Address_TD, ...

        FCCH, SCH, Zero_bits );

   

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

 IQ_signal = awgn(IQ_signal_t, SNR);

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

 

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

[ r_msg_L2, r_ID_T, r_Type_channel, r_ID_TD, ...

    r_FCCH, r_SCH, r_CRC, r ] = ...

    receiver( IQ_signal_t );

 

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

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

disp(['идентификатор терминала - ',int2str(r_ID_T)]);

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

    disp(['Количество ошибок: ',int2str(error)]);

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

else

    disp(['Данная точка доступа является "чужой", данные не передаются']);

end

 

Передатчик:

function [ IQ_signal, msg_Lev1 ] = tramsmitter( ID_T, ...

    Type_channel, ID_TD, FCCH, SCH, Zero_bits )

 

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

 

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

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

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

 

if Type_channel == [0,0]

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

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

 

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

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

else

ID_T = my_de2bi(ID_T,'left_msb',10);

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

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

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

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

end

 

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

msg_L2 = [ID_T Type_channel ID_TD 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]; % добавление нулевых бит;

 

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

n = 127;

k = 92;

mPos = 4;

 

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

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 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_ID_T, r_Type_channel, r_ID_TD, ...

    r_FCCH, r_SCH, r_CRC, r ] = ...

    receiver( IQ_signal )

 

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

n = 127;

k = 92;

mPos = 4;

 

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

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

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(9:137,1);

 

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

%deinter_code_word = matdeintrlv(r_inter_code_word, 4, 32);

 

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

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

 

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

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

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

 

 

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

r_ID_T = [decode_word(1:10)]';

% Тип канала:

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

if r_Type_channel == [0,0]

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

r_ID_TD = [decode_word(13:20)]';

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

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

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

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

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

else

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

r_ID_TD = [decode_word(13:20)]';

r_FCCH = [];

r_SCH = [];

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

r_CRC = [decode_word(21:32)]';

end

 

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

r_msg_L2 = [r_ID_T r_Type_channel r_ID_TD ...

    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


Рис.5. СКС до канала связи.


Рис. 6. СКС после канала связи.

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

 

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

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

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

 

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

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

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

 Количество ошибок: 0

 

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

 

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

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

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

 

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

Идентификатор терминала - 0  0  0  1  0  1  0  1  1  0

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

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

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

 


Список литературы:

1. КП "Система сбора данных с подвижными объектами". Часть 3 (переделанная). Жарко Н.С. URL: 

http://omoled.ru/publications/view/462

2. КП "Система сбора данных с подвижных станций". Часть 4. П.Б. Никишкин. URL: 

http://omoled.ru/publications/view/451