Тема Т4-N7 -
"Передача данных с уведомлением о доставке".
Выполнил: студент группы № 1110 Соколов Н.А.
2. Экспериментальная часть. Разработка
и экспериментальное исследование программной модели канала передачи данных.
2.3. Исследование процедуры тактовой (символьной) синхронизации физического
уровня.
2.4.
Исследование качества приема
сообщений в условиях действия в канале белого шума.
2.3.
Исследование процедуры тактовой (символьной) синхронизации физического уровня.
Перед
тем как проводить исследование процедуры тактовой (символьной) синхронизации
физического уровня сначала изменим программный модуль, где введем процедуры формирования ФУ.
В начале
программы задаем исходные данные с помощью функции function set = init().
В исходных данных для
ТСН увеличиваем амплитуду сигнала Баркера и добавляем мнимую часть, для того
чтобы соответствовать кам-модуляции: set.seq_TCCH=[3+3*1i 3+3*1i 3+3*1i -3-3*1i -3-3*1i -3-3*1i 3+3*1i -3-3*1i -3-3*1i 3+3*1i -3-3*1i].
%инициализация
параметров
st
= init();
В начале программы вводим значение Eb_N0_dB – это
параметр энергия/шум Eb/N0, представляющий собой отношение битовой энергии Eb к спектральной плотности шума N0. Использование
этих характеристик позволяет находить зависимости вероятности ошибки от Eb/No в
цифровых каналах связи.
Примем его значение равное 20.
Eb_N0_dB=20;
Далее
рассчитываем отношение сигнал/шум с вводом параметров помехоустойчивого
кодирования SNR1 – для передачи сообщения трафика, SNR2 – для передачи сообщения подтверждения.
SNR1=Eb_N0_dB+10*log10(st.k2/st.n2*log2(st.mPos));
SNR2=Eb_N0_dB+10*log10(st.k1/st.n1*st.mPos);
% чтение wav файла
media=wavread(st.FileNameRead,'native');
%
выделение моноканала
media=media(:,1)';
%
адреса мастера и слейва
Add_rec_m
= [1 0 0 0 1];
Add_rec_s
= [0 1 1 1 0];
%
переdод типа данных int16 в двоичный
data_double=int16_2_double(media(1:10000)); %участок медиа
%data_double=int16_2_double(media);% весь медиа
%
инициализация параметров необходимых для работы алгоритма
media_rx=[];
% количество передаваемых сообщений
N=floor(length(data_double)/st.Len_traf);
for i=1:N
ARQ_cont_rx=1;
%
последовательность управления мощностью передачи слейва
Contr_pow
= ones (1,16);
%
выделение сообщения трафика из мультимедиа потока
L3_traf=data_double((i-1)*st.Len_traf+1:i*st.Len_traf);
%
формирование сообщения уровня управления
mes_L3=[Contr_pow
L3_traf];
while
(ARQ_cont_rx==1)
disp('шаг:')
disp(i)
disp('из')
disp(N)
% определения номера пакета
Number_packet=my_de2bi( mod(i-1,16),'left_msb',4);
Далее происходит формирование мастером сообщений сначала КУ, а затем ФУ с помощью функции: function IQ_signal = My_transmiter_master_FL (Add_rec,
Number_packet, mes_L3)
% формирование мастером сообщения ФУ
IQ_signal = My_transmiter_master_FL(Add_rec_m,
Number_packet, mes_L3);
Затем
происходит наложение АБГШ
%
наложение АБГШ
IQ_signal_r=awgn(IQ_signal,SNR1,'measured');
figure(1)
hold on
plot(IQ_signal_r,'r.')
%%
Далее происходит расформирование слейвом сообщений сначала КУ, а затем ФУ с помощью функции: function [Add_rec_rx,
Number_packet_rx, rx_mes_L3, detect] =
My_receiver_slave_FL (IQ_signal_r)
% расформирование слейвом сообщения ФУ
[Add_rec_m_rx, Number_packet_rx, rx_mes_L3,
error_slave] = My_receiver_slave_FL (IQ_signal_r);
%
формирование подтверждения/запроса на повторную передачу
disp('получено
сообщение траффика номер')
disp(Number_packet_rx)
if (error_slave == 0)
ARQ_cont = 0;
disp('в нем нет ошибок')
% извлечение сообщения управления мощностью
передачи слейва
Contr_pow_rx = rx_mes_L3(1:16);
% выделение собщения трафика
rx_L3_traf=rx_mes_L3(17:st.Len_traf+16);
else
ARQ_cont = 1;
disp('в нем есть ошибки: запрос на
повторную передачу')
end
%
последовательность управления мощностью передачи мастера
Contr_pow_s
= ones (1,16);
%
формирование сообщения уровня управления
mes_L3_s= [Contr_pow_s zeros(1,50)];%%%%
Далее происходит формирование слейвом сообщений сначала КУ, а затем ФУ с помощью функции: function IQ_signal = My_transmiter_slave_FL (Add_rec,
Number_packet, ARQ_m, mes_L3)
% формирование слейвом сообщения ФУ
IQ_signal_2 = My_transmiter_slave_FL (Add_rec_s,
Number_packet_rx, ARQ_cont, mes_L3_s);
Затем
происходит наложение АБГШ
%
наложение АБГШ
IQ_signal_2_r=awgn(IQ_signal_2,SNR2,'measured');
figure(2)
hold on
plot(IQ_signal_2_r,'k.')
Далее происходит расформирование мастером сообщений сначала КУ, а затем ФУ с помощью функции: function [Add_rec_rx,
Number_packet_rx, ARQ_m, rx_mes_L3, detect] = My_receiver_master_FL
(IQ_signal_r)
% расформирование мастером сообщения ФУ
[Add_rec_rx_s,
Number_packet_rx_s, ARQ_cont_rx, rx_mes_L3_s, error_master] =
My_receiver_master_FL (IQ_signal_2_r);
%
формирование подтверждения/запроса на повторную передачу
if
(error_master == 0)
disp('в сообщении управления нет ошибок')
% извлечение сообщения управления мощностью
передачи слейва
Contr_pow_rx = rx_mes_L3_s(1:16);
else
disp('в сообщении управления есть ошибки')
error('прекращение сеанса передачи данных')
end
%pause
end
%
формирование потока трафика
media_rx=[media_rx rx_L3_traf];
end
%перевод
из двоичного в int16
media_int16=double_2_int16(media_rx);
% запись wav файла
wavwrite(media_int16,st.Fs,st.FileNameWrite)
Теперь
приступаем к описанию процедуры тактовой (символьной) синхронизации физического
уровня. Эта процедура осуществляется при расформировании слейвом сообщения
трафика ФУ при помощи функции: function START_DATA = find_TCCH (IQ_signal_r).
function START_DATA = find_TCCH (IQ_signal_r)
st = init();
Происходит
нахождение ВКФ (временно-корреляционной функции), сравнение входного сигнала IQ_signal_r с опорным сигналом st.seq_TCCH, у которого увеличена амплитуда сигнала Баркера и добавлена мнимая
часть, для того чтобы соответствовать кам-модуляции: set.seq_TCCH=[3+3*1i 3+3*1i 3+3*1i -3-3*1i -3-3*1i -3-3*1i 3+3*1i -3-3*1i -3-3*1i 3+3*1i -3-3*1i].
%
нахождение ВКФ
cor=abs(xcorr(IQ_signal_r,st.seq_TCCH));
figure(3)
plot
(cor)
Далее находится
максимум ВКФ и фиксирование номера отсчета, соответствующего максимуму.
Максимум мы сравниваем с произвольным числом 150. Если Мах > 150, то
находится номер отсчета, соответствующий окончанию ТСН.
%
поиск максимума ВКФ, фиксирование номера отсчета, соответствующего
%
максимуму
[MAX,Index_max]=max(cor);
if
MAX > 150
% номер отсчета, соответствующий окончанию
ТССН
START_DATA =
Index_max-round(length(cor)/2)+11;
else
disp('ТССН не найдена')
disp('сбой тактовой синнхронизации')
end
end
Рис.10. Пример ВКФ между входным
сигналом и опорной последовательностью.
2.4.
Исследование
качества приема сообщений в условиях действия в канале белого шума.
Примеры исследования качества приема
сообщений в условиях действия в канале белого
шума на участке медиа 1:10000.
2.4.1. При ОСШ равном 20
Рис.2.4.1.1. Сигнально-кодовое созвездие QAM-16 сигнала от мастера к слейву
Рис.2.4.1.2.
Сигнально-кодовое созвездие QAM-16 сигнала от
слейва к мастеру
Рис.2.4.1.3.
ВКФ между входным сигналом и опорной последовательностью.
2.4.2. При ОСШ равном 15
Рис.2.4.2.1.
Сигнально-кодовое созвездие QAM-16 сигнала от
мастера к слейву
Рис.2.4.2.2.
Сигнально-кодовое созвездие QAM-16 сигнала от
слейва к мастеру
Рис.2.4.2.3.
ВКФ между входным сигналом и опорной последовательностью.
2.4.3. При ОСШ равном 10
Рис.2.4.3.1.
Сигнально-кодовое созвездие QAM-16 сигнала от
мастера к слейву
Рис.2.4.3.2.
Сигнально-кодовое созвездие QAM-16 сигнала от
слейва к мастеру
Рис.2.4.3.3.
ВКФ между входным сигналом и опорной последовательностью.
2.4.4. При ОСШ равном 5
Рис.2.4.4.1.
Сигнально-кодовое созвездие QAM-16 сигнала от
мастера к слейву
Рис.2.4.4.2.
Сигнально-кодовое созвездие QAM-16 сигнала от
слейва к мастеру
Рис.2.4.4.3.
ВКФ между входным сигналом и опорной последовательностью.
Рассмотрим
ошибки, которые могут возникнуть при передаче данных.
1. При ОСШ
равном 5 при передаче пакета трафика, когда слейв производит расформирование
сигнала возникают ошибки. Я рассмотрел это на участке медиа 1:1000.
Здесь
работает ARQ-запрос с остановкой и ожиданием до тех пор пока
пакет не передастся правильно.
шаг:
1
из
17
получено
сообщение трафика номер
0
0 0 0
в
нем есть ошибки: запрос на повторную передачу
в
сообщении управления нет ошибок
шаг:
1
из
17
получено
сообщение трафика номер
0
0 0 0
в нем нет ошибок
в
сообщении управления нет ошибок
шаг:
2
из
17
получено
сообщение трафика номер
0
0 0 1
в
нем есть ошибки: запрос на повторную передачу
в
сообщении управления нет ошибок
Второй
шаг также будет выполняться до тех пор пока пакет не передастся правильно.
И
так будет продолжаться 17 шагов.
Когда
2. При ОСШ
равном (-5) при передаче пакета трафика,
когда мастер производит расформирование сообщения от слейва о запросе на
повторную передачу возникают ошибки. Я рассмотрел это на участке медиа 1:1000.
шаг:
1
из
17
получено
сообщение траффика номер
0
0 0 0
в
нем есть ошибки: запрос на повторную передачу
в
сообщении управления есть ошибки
Error
using sokolov_L1 (line 107)
прекращение
сеанса передачи данных