Курсовой проект по дисциплине

«Системы и сети связи с подвижными объектами»

Радиосистема управления освещением

Часть 4.

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

Структура пакетов L1-L3 уровней приведена на рис. 1.


Рис. 1. Рис. 1. Структура передаваемого сообщения.

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

Поле «Type» - адресная передача сообщения. (2 бита).

Поле «Report» - необходимость отчета о доставке. (1 бит).

Поле «CRC» - поле контрольной суммы: [1 1 1 0 1 0 1 0 1]. (8 бит).

Поле «Адрес» - сообщение предназначено пятому терминалу. (7 бит).

Поле «DATA» -  поле, в котором содержится команда управления – увеличить яркость. (18 бит).

Соответственно весь пакет канального уровня будет состоять из 2+1+8+7+18=36 бит.

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

 Программа начинается с функции initSettings, устанавливающей параметры модели.

 

Инициализация основных параметров модели. 

Параметры полей пакета канального уровня

set.type = 1; % тип передаваемого сообщения - адресное

set.add = 5;        % адрес получателя

set.rs = 1;       % нужна доставка(0) или нет (1)

set.data = 5;         % команда

Позиционность модуляции - BPSK

set.mPos = 2;

Параметры БЧХ кода

set.n = 127; % размер после кодирования

set.k = 36; % размер до кодирования

 Параметры CRC

set.poly=[1 1 0 1 0 1 0 1];

[set.x set.y]=size(set.poly); %размерность полинома 

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

set.length_msg_Lev2 = 28;

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

Установка параметров модели

st=initSettings(); 

Открытие файлов на запись и получение их идентификаторов

[fidw, message] = fopen(st.SignalFileName, 'wb');

[fidw2, message] = fopen(st.SignalFileName2, 'wb');

 ================== Канальный  уровень ================================

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

 Перевод параметров, передаваемых в сообщении в двоичную систему счисления

type = my_de2bi(st.type,'left_msb',2); % тип передаваемого сообщения

add = my_de2bi(st.add,'left_msb',7);   % адрес светильника

rs = my_de2bi(st.rs,'left_msb',1);     % тип доставки сообщения – с отчетом или без

data = my_de2bi(st.data,'left_msb',18);% команда управления светом

 Сборка сообщения канального уровня

msg_Lev2 = [type add rs data];    

 Получение CRC кода

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

 Поиск частного и остатка от деления информационной части на порождающий полином CRC кода

[q r] = deconv(m,st.poly);

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

CRC = r(st.length_msg_Lev2 + 1:end);%расчет CRC  

 Сборка сообщения

msg_Lev1 = [type add rs data CRC];

trx = msg_Lev1;

 ================== Физический уровень =============================== 

Пакет данных, полученный на канальном уровне, необходимо подвергнуть кодированию с помощью блочного кода БЧХ с параметрами (127, 36), которые задаются в файле initSettings.m. 

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

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

После этих операций длина сообщения увеличится до 127 битов.

 Добавление к сообщению нулевого бита с целью приведения длины сообщения к величине, кратной степени 2 (до 128)

code_word = [code_word 0]';

Здесь происходит модуляция сообщения, после чего это сообщение передается в канал. 

 Модуляция

h = modem.pskmod(st.mPos); % h - модем PSK с позиционностью mPos

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

h.inputtype = 'bit';

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/3;

 Собственно модуляция

IQ_signal = modulate(h, code_word);  

 Наложение шума на сигнал

noise_sgn = awgn(IQ_signal,50);

 Запись действительной и мнимой частей сигнала в соответствующие двоичные файлы

fwrite(fidw,real(noise_sgn),'double');

fwrite(fidw2,imag(noise_sgn),'double');   

 Отображение сигнально-кодового созвездия

figure(10);

plot(noise_sgn,'.');


Рис. 2. СКС после КС при ОСШ = 5 дБ.


Рис. 3. СКС после КС при ОСШ = 10 дБ.

 Закрытие файлов

fclose (fidw);

fclose (fidw2);

Далее следует функция Receiver, отражающая работу приемника в системе.

 ================== Физический уровень ================================

 Установка параметров модели

st = initSettings();

 Инициализация переменной, в которой будет сохраняться принимаемаемая информация

R_message = '';

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

h = modem.pskdemod(st.mPos);

h.SymbolOrder = 'gray';

h.PhaseOffset = pi/3;

h.OutputType = 'bit';

 Открытие файлов на чтение и получение их идентификаторов

[fid, message] = fopen(st.SignalFileName, 'rb');

[fid2, message] = fopen(st.SignalFileName2, 'rb');

Чтение действительной и мнимой частей сигнала

signal_real = fread(fid,'double')';

signal_image = fread(fid2,'double')';     

Представление сигнала в комплексной форме  

noise_sgn = complex(signal_real, signal_image);

 Демодуляция

code_word = demodulate(h,noise_sgn);

Устранение лишнего нулевого бита

code_word = code_word(1:127);

 Декодирование

received_mes_L1 = decode(code_word,st.n,st.k,'bch/binary',st.errocorr);

В результате этих операций мы получаем сообщение канального уровня на приемной стороне. Размер данного сообщения и содержание совпадают с параметрами сообщения, которое было передано.

================== Канальный  уровень ================================

received_mes_L1k = received_mes_L1(1:2);

received_mes_L1s = received_mes_L1(3:9);

received_mes_L1h = received_mes_L1(10:10);

received_mes_L1f = received_mes_L1(11:28);

received_mes_L1d = [received_mes_L1k received_mes_L1s received_mes_L1h received_mes_L1f];

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

[q r]=deconv(received_mes_L1d,st.poly);

 Проверка остатка

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

if r == zeros(1,length(received_mes_L1d))

     detect=0;% ошибок нет

else

     detect=1;% обнаружены ошибки

end;

 Принятое сообщение

received_mes_L2 = received_mes_L1d;

 Преобразование принятых параметров в десятичную систему счисления

type = my_bi2de(received_mes_L2(1:2),'left_msb');

add = my_bi2de(received_mes_L2(3:9),'left_msb');

rs = my_bi2de(received_mes_L2(10:10),'left_msb');

data = my_bi2de(received_mes_L2(11:28),'left_msb');

Вывод информации на экран

R_message = [type add rs data];

Закрытие файлов

fclose (fid);

fclose (fid2);

В результате завершения работы модели на экран выводятся сведения, принятые в сообщении:

1.     Поле «Type» - адресная передача сообщения. (2 бита).

2.     Поле «Адрес» - сообщение предназначено пятому терминалу. (7 бит).

3.     Поле «Report» - необходимость отчета о доставке. (1 бит).

4.     Поле «DATA» - команда управления светом.



Список использованных источников:

1. http://omoled.ru/publications/view/357  Радиосистема управления освещением. Часть_4.

2.  http://omoled.ru/publications/view/355  Тема 5. Радиосистема управления освещением.4 часть

3.  http://omoled.ru/publications/view/350 КП “Радиосистема управления освещением” Часть 4

4. Бакке А.В. "Лекции по курсу ССПО".

5. http://omoled.ru/publications/view/461 КП "Радиосистема управления освещением". Часть 1 (Доработанная). Белова Т.

6. http://omoled.ru/publications/view/468  КП "Радиосистема управления освещением". Часть 2 (Доработанная). Белова Т.

7. http://omoled.ru/publications/view/471  КП "Радиосистема управления освещением". Часть 3. (Доработанная). Белова Т.