Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Помехоустойчивое кодирование в телекоммуникационных системах. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
41
Создайте функцию модулятора: Файл – Создать – Создать функцию. Назовите функцию modulator. Функция должна иметь входы bits, M и выход
symbols. Это можно реализовать, написав в первой строке
function symbols = modulator (bits, M)
Далее, если (условие реализуется с помощью оператора if) индекс M равен 2, должна выполняться BPSK модуляция, которую можно математически реализовать следующим образом:
symbols = bits*2-1;
Иначе (else) вызывается встроенная (библиотечная) функция:
symbols = qammod(bits,M);
После этого закрывается оператор else-if с помощью
end
и завершается работа функции
endfunction.
Сохраните функцию в отдельный файл и назовите его modulator.
Далее в файле main следует вызвать функцию модулятора:
qam_sym = modulator(bits, M);
После этого моделируется АБГШ канал связи с помощью функции
chan_sym = awgn(qam_sym,SNR,'measured');
где 'measured' обозначает измерение мощности сигнала при наложении на него шума. Если оставить функцию без этого аргумента, мощность сигнала будет считаться равной 1 Вт.
Алгоритм демодуляции следует реализовать в отдельной функции demodulator с входами r_sym, M и выходом r_bits по аналогии с модуляцией. Если M=2 (BPSK) демодуляция может быть реализована как простое пороговое устройство:
r_bits = r_sym>0;
В случае, если элемент вектора r_sym больше нуля, в соответствующий ему элемент вектора r_bits будет записана логическая единица, в противном случае, логический ноль.
Вызовите функцию demodulator
r_bits = demodulator(chan_sym, M);
Биты на выходе демодулятора поступают на блок расчета контрольной суммы в приемнике (для этого используется тот же алгоритм и та же функция, как и в передатчике):
crc_r = crc_gen (r_bits_crc);
После этого проверяется, равна ли контрольная сумма нулю, если нет, то к счетчику ошибок пакетов добавляется 1:
if sum(crc_r) ~= 0
err = err+1;
endif
На этом итерация по передаче одного пакета заканчивается.
После выполнения N итераций необходимо рассчитать значение BLER(k):
BLER(k) = err/N;
42
end
На этом итерация глобального цикла snr_i заканчивается. Последним этапом является построение в логарифмическом масштабе зависимостей BLER от SNR:
semilogy(SNR(1):SNR(2), BLER)
Оси графиков можно подписать следующим образом.
xlabel('SNR');
ylabel('BLER');
Для построения двух графиков в одном графическом окне нужно между
соответствующими функциями построения записать команду
hold on
Следующим этапом работы скрипта является расчет количества ошибок, который можно реализовать следующим образом
length(find(de2bi(bits) – de2bi(r_bits))),
функция de2bi переводит символы в двоичный вид (биты), find ищет ненулевые элементы (различающиеся биты при вычитании не будут равны нулю), а length считает их количество. Если после вызываемой функции не ставить символ «;», то результат выполнения функции будет выводиться в командную строку.
Последним этапом работы скрипта будет вывод сигнального созвездия на входе приемника (после канала)
scatterplot(chan_sym).
Запустить скрипт можно нажав на кнопку «Сохранить и выполнить/продолжить» на панели инструментов выше текстового редактора, либо нажав F5 на клавиатуре.
Рисунок 5.3 – Запуск скрипта
Результатом работы всей модели будет график зависимости BLER от
SNR.
Количество ошибок будет выведено в командную строку. Изменяйте индекс модуляции, отношение сигнал-шум, чтобы пронаблюдать сигнальное созвездие для разных модуляций и количество битовых ошибок при различных сценариях работы (добейтесь появления большого числе ошибок). Определите связь между разбросом точек на сигнальное созвездие и появлением ошибок.
4 Дополнительное задание для самостоятельной работы
1. Сделайте функцию универсального генератора CRC, на входы которой
будут подаваться биты сообщения и значение полинома G(x) в виде вектора из 0 и 1.
43
5 Контрольные вопросы
1. Как рассчитать значение BLER?
2. Каково может быть максимальное значение BLER?
3. Чем CRC отличается от классической контрольной суммы?
4. Как приемник может проверить наличие ошибок в пакете?
Листинг основной работы:
Файл main.m
clc clear all close all
M = 2;
N = 100;
L = 100;
SNR = [0 20];
k = 0;
for snr_i = SNR(1):SNR(2) k = k+1
err = 0;
for n = 1:N
bits = randi([0 M-1],L,1); crc_t = crc_gen (bits); bits_crc = [bits;crc_t];
qam_sym = modulator(bits_crc, M);
chan_sym = awgn(qam_sym,snr_i,'measured'); r_bits_crc= demodulator(chan_sym, M);
crc_r = crc_gen (r_bits_crc);
r_bits = r_bits_crc(1:end-5); if sum(crc_r) ~= 0
err = err+1; endif
end
BLER(k) = err/N; end
semilogy(SNR(1):SNR(2), BLER)
xlabel('SNR');
ylabel('BER'); hold on
Файл crc_gen.m
function crc = crc_gen (bits) N_G = 5;
bits = [bits; zeros(N_G,1)]; sh_reg = zeros (N_G); sh_reg = bits(N_G:-1:1);
for i = N_G+1:length(bits) x_bit = sh_reg(5); sh_reg(5) = sh_reg(4);
sh_reg(4) = xor(x_bit,sh_reg(3)); sh_reg(3:-1:2) = sh_reg(2:-1:1); sh_reg(1) = xor(x_bit,bits(i));
end
crc = sh_reg(end:-1:1); endfunction
44
Файл modulator.m
function symbols = modulator (bits, M) if M==2
symbols = bits*2-1; else
symbols = qammod(bits,M); end
endfunction
Файл demodulator.m
function r_bits = demodulator (r_sym, M) if M==2
r_bits = r_sym>0; else
r_bits = qamdemod(r_sym,M); end
endfunction
Лабораторная работа №6 Исследование помехоустойчивости системы передачи информации при применении сверточного кода и декодера Витерби на автоматизированном рабочем месте СПИ
1 Цель работы
Экспериментальное исследование помехоустойчивости системы
передачи информации при применении сверточного кода и декодера Витерби.
2. Литература
Основная литература 1 Макаров А.А., Прибылов В.П. Помехоустойчивое кодирование в
системах телекоммуникаций: учебное пособие/ СибГУТИ, Новосибирск,
2004. – 141 с.
2 Макаров А.А. АРМ исследования и проектирования систем передачи
информации: учебное пособие/ СибГУТИ, Новосибирск, 2001. – 78 с.
Дополнительная литература 3 Кларк Дж., Кейн Дж. Кодирование с исправлением ошибок в системах
цифровой связи: Пер. с англ./ Под ред. Б.С. Цыбакова. – М.: Радио и связь,
1987. – 392 с.
4 Блейхут Р. Теория и практика кодов, контролирующих ошибки: Пер. с
англ./ Под ред. К.Ш. Зигангирова. – М.: Мир, 1986. – 576 с.
5 Макаров А.А., Чиненков Л.А. Основы теории помехоустойчивости
дискретных сигналов: учебное пособие/ СибГУТИ, Новосибирск, 1997. – 41 с.
6 Бронштейн И.Н., Семендяев К.А. Справочник по математике для
инженеров и уч-ся втузов. – М.: Наука, Гл. ред. физ.-мат. лит., 1986. – 544 с.
3 Лабораторное задание
1. Ознакомиться с лабораторной установкой.
2. Исследовать распределение кратностей ошибок на входе и выходе
декодера Витерби для сверточного кода (24,12) для заданной вероятности ошибки в канале связи.
3. Исследовать зависимость выигрыша от кодирования при изменении
отношения сигнал/шум в системе передачи информации (СПИ).
4 Порядок выполнения лабораторной работы
Работа выполняется экспериментально с помощью
автоматизированного рабочего места (АРМ) проектирования и исследования системы передачи информации.
46
1. Выбрать программу Arm_СПИ.exe .
2. Работа с программой АРМ начинается с выбора вариантов
исследуемой СПИ – раздел структура модели СПИ. Выбрать модель дискретного канала (кнопка ДК). В блоке «Непрерывный канал» задать режим модуляции – ЧМ, когерентный прием сигналов.
3. Необходимо сделать правильный выбор объема статистических
испытаний
В
N
. С одной стороны, это позволяет экономно использовать
машинное время ЭВМ, а с другой – обеспечить заданную в массиве исходных параметров точность определения оцениваемых величин.
Минимальное количество кодовых слов (или блоков) NВ для
статистических исследований дискретного канала (ДК) или устройства защиты от ошибок (УЗО, кодека) в зависимости от средней вероятности ошибки P (на выходе канала или на выходе УЗО) определяется выражением
[1]
2
2
(1 )
В
P
PP
Nz
n
−
=
,
где n – длина кодового слова;
P
– погрешность оценки в долях
оцениваемой вероятности P; например, если
P
= (0,1÷0,15)P, то точность
оценки вероятности составляет (10÷15) % ;
z
определяется из двухсторонней
статистики с нормированным нормальным распределением
(1-) = Ф(z) ,
(1-) – мера надежности оценки, или вероятность того, что истинное
значение определяемого среднего отстоит от его оценки не более, чем на величину
P
.
Например, если  выбрать достаточно малым, так что (1-)= 0,997, то
значение
z
= 2,95 (приложение 5.1).
Для доверительной оценки измеряемой величины необходимо найти
доверительный интервал d, который накрывает измеренную величину с заданной вероятностью (1-)
В
nNPPzd /)1( −=
.
4. Методом статистических испытаний получить и построить (или вывести на принтер ЭВМ) экспериментальное распределение кратностей ошибок на входе и выходе декодера для сверточного кода (24,12) для заданного варианта вероятности ошибки в канале связи p.
Вероятность ошибки в канале равна p указана в таблице 6.1.
Таблица 6.1 Варианты вероятностей ошибок в канале
Вариант
0 1 2 3 4 5 6 7 8 9 Р
0,02
0,018
0,016
0,014
0,012
0,001
0,008
0,006
0,004
0,002
47
5. Методом статистических испытаний получить и построить по экспериментальным данным зависимость выигрыша от кодирования при изменении отношения сигнал/шум в таких пределах, чтобы вероятность ошибки изменялась в пределах от 0,1 до 0,001.
Выполнить статистические испытания СПИ с заданным
корректирующим кодом не менее, чем для пяти значений отношения сигнал/шум.
Выигрыш от кодирования можно определить по формуле
( ) ,
вх
ис p
вых
p
k f H
p
==
где pвх и p
вых
– вероятности ошибок в кодовых символах на входе и
выходе декодера (в таблицах результатов испытаний АРМ этим вероятностям соответствуют эквивалентные вероятности на входе и выходе УЗО).
6. Построить (или вывести на принтер ЭВМ) таблицу экспериментальных результатов для одной точки статистических испытаний. Для этой же точки построить (или вывести на принтер ЭВМ) распределение кратностей ошибок на входе и выходе декодера.
5 Содержание отчета
Отчет должен содержать:
- результаты измерений в виде таблиц, графиков с соответствующими заголовками и пояснениями;
- оценку погрешности измерений;
- выводы.
48
Приложение А
ЗНАЧЕНИЯ ФУНКЦИЙ
w x e
x
( ) =
−
1
2
2
2
;
V x x e dt
t
x
( ) [ ( )]= − =
−
1
2
1
1
2
2
2
Таблица А.1
x
w(x)
V(x)
x
w(x)
V(x)
0,00
0,39894
0,50000
2,75
0,009094
0,002980
0,10
0,39695
0,46017
2,80
0,007915
0,002555
0,20
0,39104
0,42074
2,85
0,006873
0,002186
0,30
0,38139
0,38209
2,90
0,005953
0,001866
0,40
0,36827
0,34458
2,95
0,005143
0,001589
0,50
0,35207
0,30854
3,00
0,004432
0,001350
0,60
0,33322
0,27425
3,05
0,003810
0,001144
0,70
0,31225
0,24196
3,10
0,003267
0,000968
0,80
0,28969
0,21186
3,15
0,002794
0,000816
0,90
0,26609
0,18406
3,20
0,002384
0,000687
1,00
0,24197
0,15866
3,25
0,002029
0,000577
1,10
0,21785
0,13567
3,30
0,001723
0,000483
1,20
0,19419
0,11507
3,35
0,001459
0,000404
1,30
0,17137
0,09680
3,40
0,001232
0,000337
1,40
0,14973
0,08076
3,45
0,001038
0,000280
1,50
0,12952
0,06681
3,50
0,000873
0,000233
1,60
0,11092
0,05480
3,55
0,000732
0,000193
1,70
0,09405
0,04457
3,60
0,000612
0,000159
1,80
0,07895
0,03593
3,65
0,000510
0,000131
1,90
0,06562
0,02872
3,70
0,000425
0,000108
2,00
0,05399
0,02275
3,75
0,000353
0,000088
2,05
0,04879
0,02018
3,80
0,000292
0,000072
2,10
0,04398
0,01786
3,85
0,000241
0,000059
2,15
0,03955
0,01578
3,90
0,000199
0,000048
2,20
0,03547
0,01390
3,95
0,000163
0,000039
2,25
0,03174
0,01222
4,00
0,0001338
0,000032
2,30
0,02833
0,01072
4,10
0,00008926
0,0000207
2,35
0,02522
0,00939
4,20
0,00005894
0,0000133
2,40
0,02239
0,00820
4,30
0,00003854
0,0000085
2,45
0,01984
0,00714
4,40
0,00002494
0,0000054
2,50
0,01753
0,00621
4,50
0,00001598
0,0000034
2,50
0,017528
0,006210
4,60
0,00001014
0,0000022
2,55
0,015449
0,005386
4,70
0,00000637
0,0000
2,60
0,013583
0,004661
4,80
0,00000396
0,0000
2,65
0,011912
0,004025
4,90
0,00000244
0,00000
2,70
0,010421
0,003467
5,00
0,00000151
0,0000003
49
Лабораторная работа №7 ИССЛЕДОВАНИЕ ПРИНЦИПА РАБОТЫ ДЕКОДЕРА ВИТЕРБИ С ИСПОЛЬЗОВАНИЕМ ПО OCTAVE
1 Цель работы
Реализация алгоритма сверточного декодирования.
2 Лабораторное задание
1. Изучение теории декодера Витерби.
2. Реализация декодера Витерби.
3.Построение имитационной модели системы связи со сверточным кодеком.
4. Изучение помехоустойчивости системы связи со сверточным кодеком.
3 Порядок выполнения лабораторной работы
Работа выполняется экспериментально с программным обеспечением
Octave.
Рисунок 7.1 – Схема реализуемой в текущей работе модели
Для работы в Octave с телекоммуникационными функциями нужно загрузить специальную библиотеку, для этого нужно написать в командной строке команду:
pkg load communications
и нажать Enter. При этом выполнится соответствующая команда и загрузится библиотека.
Программы в Octave пишутся в двух типах файлов – скриптах (сценариях) и функциях. Скрипты являются исполняемыми файлами (файлами верхнего уровня), а функции подключаются в скрипты, или другие функции.
50
Для того чтобы создать скрипт, нужно выбрать меню Файл – Создать – Создать сценарий.
Создайте отдельную папку (рекомендуем каждый новый проект создавать в отдельной папке). Создайте скрипт и назовите его main. В начале файла напишите следующие команды (каждую в отдельной строке):
clc
(стирает все сообщения из адресной строки);
clear all
(стирает все переменные из рабочей области);
close all
(закрывает все окна графиков).
Далее объявите переменные
M = 2;
(индекс модуляции, возможные значения 2, 4, 16, …);
N = 10000;
(количество передаваемых символов (количество пакетов));
Основные алгоритмы выполняются в глобальном цикле, с изменением переменной snr_i в диапазоне SNR (1): SNR (2) (минимальное и максимальное значение SNR, для которых планируется проводить моделирование) при помощи оператора for.
SNR = [0 20];
(отношение сигнал-шум).
Кроме того, необходимо объявить индекс итерации, например, k. В каждой следующей итерации k будет увеличиваться на 1.
k = 0;
for snr_i = SNR(1):SNR(2)
k = k+1
Затем необходимо создать вектор символов (битов) командой:
bits= randi([0 M-1],N,1);
Эта команда формирует вектор случайных целых чисел со значениями от 0 до M-1 (они соответствуют значениям битов, которые можно получить, переведя символы в двоичный вид).
Создайте функцию модулятора: Файл – Создать – Создать функцию. Назовите функцию modulator. Функция должна иметь входы bits, M и выход
symbols. Это можно реализовать, написав в первой строке
function symbols = modulator (bits, M)
Далее, если (условие реализуется с помощью оператора if) индекс M равен 2, должна выполняться BPSK модуляция, которую можно математически реализовать следующим образом:
symbols = bits*2-1;
Иначе (else) вызывается встроенная (библиотечная) функция:
symbols = qammod(bits,M);
После этого закрывается оператор else-if с помощью
end
и завершается работа функции
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]