Тема Т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)

прекращение сеанса передачи данных