Лабораторный практикум
В основу лабораторного практикума положены материалы из источников [13; 29].
Лабораторная работа 1 Методы кодирования и модуляция сигналов
Цели работы
Изучение методов кодирования и модуляции сигналов с помощью высо-коуровнего языка программирования Octave. Определение спектра и параметров сигнала. Демонстрация принципов модуляции сигнала на примере аналоговой амплитудной модуляции. Исследование свойства самосинхронизации сигнала.
Теоретические сведения
Основы работы в Octave. Octave — высокоуровневый интерпретируемый язык программирования, предназначенный для решения задач вычислительной математики. Интерпретатор Octave запускается из терминала операционной системы с помощью команды octave для работы с помощью консоли или qtoctave для работы с оконным интерфейсом.
В окне интерпретатора Octave пользователь может вводить как отдельные команды языка Octave, так и группы команд, объединяемые в программы. Если строка заканчивается символом «;», то результаты на экран не выводятся. Если в конце строки символ «;» отсутствует, то результатыВ работы выводятся на экран. Текст в строке, который идет после символаВ %, является строкой комментария и интерпретатором не обрабатывается.
Octave имеет два режима работы: терминальный и программный. В терминальном режиме отдельные команды последовательно вводятсяВ в окне интерпретатора. В программном режиме создается текстовый файлВ (с расширением . ш), в котором хранятся последовательно выполняемыеВ команды, впоследствии запускаемые на выполнение в среде Octave.В Простейшие арифметические операции в Octave;
+ — сложение;
- — вычитание;
* — умножение;
/ — деление;
— возведение в степень.
Для определения переменной необходимо набрать имя переменной, символ «=» и значение переменной, где знак равенства — это операторВ присваивания:
имя переменной = значение выражения
Система различает большие и малые буквы в именах переменных. Выражение в правой части оператора присваивания может быть числом,В арифметическим выражением, строкой символов или символьным выражением. Если речь идет о символьной или строковой переменной, то выражение в правой части оператора присваивания следует брать в одинарныеВ кавычки.
Если команда не содержит знака присваивания, то по умолчанию вычисленное значение присваивается специальной системной переменной ans. Причем полученное значение можно использовать в последующих вычислениях, но важно помнить, что значение ans изменяется после каждогоВ вызова команды без оператора присваивания.
Системные переменные:
- - ans — результат последней операции без знака присваивания;
- — i, j — мнимая единица (V—Т);
- — pi — число л (3,141592653589793);
- — е — число е (экспонента 2,71828183);
- — inf — машинный символ бесконечности (°°);
- — NaN — неопределенный результат.
Все перечисленные переменные можно использовать в математических выражениях.
Команда clear предназначена для уничтожения определения одной или нескольких переменных
clear имя переменной
В общем виде обращение к функции в Octave имеет вид
имя переменной = имя функции(аргумент) или
имя функции(аргумент)
Если имя переменной указано, то ей будет присвоен результат работы функции. Если же оно отсутствует, то значение вычисленного функциейВ результата присваивается системной переменной ans.
Примеры работы с тригонометрическими функциями
Здесь »> — знак приглашения Octave для ввода команд. Некоторые встроенные функции Octave:
- • sin(x) — синус числа х
- • cos (х) — косинус числа х;
- • tan (x) — тангенс числа x
- • exp (x) — экспонента числа x
- • log (x) — натуральный логарифм числа x;
- • round (x) — обычное округление числа x до ближайшего целого;
- • rem (х, у) — вычисление остатка от деления х на у
- • sign (х) — сигнум-функция числа х, выдает 0, если = 0, -1 — при х < ОВ и 1 при х > 0;
- • sqrt (х) — корень квадратный из числа х;
- • abs (х) — модуль числа х.
Операции отношения выполняют сравнение двух операндов и определяют, истинно выражение или ложно:
< — меньше;
> — больше;
= = — равно;
— не равно;
<= — меньше или равно;
>= — больше или равно.
Синтаксис функции, определяемой пользователем:
Здесь namel [, name2, . . . ] — список выходных параметров, т.е.
переменных, которым будет присвоен конечный результат вычислений, fun — имя функции, varl [, var2, . . . ] — входные параметры.
Все имена переменных внутри функции, а также имена из списка входных и выходных параметров воспринимаются системой как локальные, т.е. эти переменные считаются определенными только внутри функции. Программы и функции в Octave могут быть созданы при помощи текстовогоВ редактора и сохранены в виде файла с расширением . m или . М. Но при создании и сохранении функции следует помнить, что ее имя должно совпадать с именем файла. Программу можно запустить на выполнение, указавВ имя файла, в котором она сохранена. Обращение к функции осуществляется так же, как и к любой другой встроенной функции системы, т.е.В с указанием входных и выходных параметров. Вызвать функцию можноВ из командной строки или использовать ее как один из операторов программы.
Массив — множественный тип данных, состоящий из фиксированного числа элементов одного типа. Как и любой другой переменной, массивуВ должно быть присвоено имя.
Самый простой способ задать одномерный массив в Octave имеет вид
Здесь Хп — значение первого элемента массива, Хк — значение последнего элемента массива, dX — шаг, с помощью которого формируется каждый следующий элемент массива, т.е. значение второго элемента составит Xn+dX, третьего Xn+dX+dX и т.д. до Хк. Примеры создания массивов:
299
Обратиться к элементу вектора можно, указав имя массива и порядковый номер элемента в круглых скобках:
Ввод элементов матрицы также осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой,В а строки разделяются между собой точкой с запятой. Обратиться к элемент}' матрицы можно, указав после имени матрицы, в круглых скобках,В через запятую, номер строки и номер столбца, на пересечении которых элемент расположен:
Построение графиков в Octave. Для того чтобы построить двумерный график функции f(x), необходимо сформировать два массива х и у одинаковой размерности, а затем обратиться к функции plot.
Синтаксис функции plot:
Здесь х1, х2, . .., хп — массивы абсцисс графиков; у1, у2, . . ., уп — массивы ординат графиков; si, s2, . . ., sn — строка форматов, определяющая параметры линии и, при необходимости, позволяющая вывестиВ легенду.
В строке форматов могут участвовать символы, отвечающие за тип линии, маркер и его размер, цвет линии и вывод легенды. За сплошную линию отвечает символ «-». Цвет линии определяется буквой латинского алфавита: у — желтый, ш — розовый, с — голубой, г — красный, g — зеленый, b — синий, w — белый. Некоторые символы маркера: . — точка, * -звездочка, х — крестик, + — плюс, о — незакрашенный круг, р — незакрашенный квадрат.
Например, для построения графика функции у = sin .г + (1/3) sin Зх + + (l/5)sin 5х на интервале [-10; 10] (рис. Л.1) можно использовать следующий листинг:В

Рис. Л.1. График функции у = sin х + (1/3) sin Зх + (1/5) sin 5х на интервале [-10; 10]
Если повторно обратиться к функции plot, то в этом же окне будет стерт первый график и нарисован второй. Для построения нескольких графиков в одной системе координат можно поступить одним ив следующихВ способов:
1) обратиться к функции plot следующим образом:
где xl, у1 — массивы абсцисс и ординат первого графика, х2, у2 — массивы абсцисс и ординат второго графика, ... , хп, уп — массивы абсцисс и ординат п-го графика;
2) каждый график изображать с помощью функции plot (х, у), но перед
обращением к функциям plot (х2, у2) , plot(x3,y3) ,В ...В ,
plot (xn,yn) вызвать команду hold on, которая блокирует режим очистки окна.
Порядок выполнения работы
- 1. Ознакомиться с теоретическим материалом гл. 3.
- 2. Выполнить задания пунктов лабораторной работы 1. Получить соответствующие графики.
- 3. Составить отчет о выполненной работе, включив в него листингиВ программ и полученные графики.
Разложение импульсного сигнала в частичный ряд Фурье. В цифровой технике основным типом сигналов является импульсный сигнал. Импульсный сигнал можно описать математически в синусоидальной форме. ТакойВ тип сигнала называется меандром.
Меандр — бесконечный, периодический сигнал прямоугольной формы (импульсный сигнал), широко используемый в радиотехнике. Длительность импульса и длительность паузы в периоде такого сигнала равны.
Спектр меандра имеет вид
Гармоники, образующие меандр, имеют амплитуду, обратно пропорциональную номеру соответствующей гармоники.
Задание для выполнения
Разработать код wz-файла, результатом выполнения которого являются графики меандра (рис. Л.2), реализованные с различным количеством гармоник.
Листинг программы в Octave:
Здесь функция repmat (А,М,1 формирует массив из частей; имеет три входных аргумента: массив А, количество строк М и столбцов NВ для вновь создаваемого массива; сишзиш — суммирование элементов массива с накоплением.

Рис. Л.2. Графики меандра, содержащего различное число гармоник:
на всех графиках вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, деленное на период сигнала
Определение спектра и параметров сигнала. Определить спектр двух отдельных сигналов и их суммы. Частота дискретизации (количествоВ отсчетов) выбирается на основе теоремы Котельникова как удвоеннаяВ ширина спектра исходного сигнала (таким образом, в следующем примереВ достаточно было взять частоту дискретизации 80 Гц).
Попробуйте выполнить задание с другой частотой дискретизации. Что будет, если взять частоту дискретизации меньше 80 Гц?
Для двух синусоидальных сигналов (рис. Л.З) требуется определить их спектр. В файле хресСгелп задаем параметры сигналов:В

Рис. Л.З. Два синусоидальных сигнала разной частоты:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
С помощью быстрого преобразования Фурье найдем спектры сигналов (рис. Л.4), добавив в файл spectre .m следующий код:В
% Амплитуды преобразования Фурье сигнала 2

Рис. Л.4. График спектров синусоидальных сигналов:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
Учитывая реализацию преобразования Фурье, скорректируем график спектра (рис. Л.5): отбрасываются дублирующие отрицательные частоты,В а также учитывается то, что на каждом шаге вычисления быстрого преобразования Фурье происходит суммирование амплитуд сигналов. ДобавляемВ в файл эреctre.ni следующий код.В

Рис. Л.5. Исправленный график спектров синусоидальных сигналов:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
Аналогично найдем спектр суммы рассмотренных сигналов (рис. Л.6), создав файл зрес±ге_зит.т со следующим кодом.
)


Рис. Л.6. Суммарный сигнал:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
В результате получим аналогичный предыдущему результат (рис. Л.7), т.е. спектр суммы сигналов равен сумме спектров сигналов, что вытекаетВ из свойств преобразования Фурье.

Рис. Л.7. Спектр суммарного сигнала:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
Демонстрация принципов модуляции сигнала на примере аналоговой амплитудной модуляции. Следующий код в файле аш. т демонстрируетВ принципы модуляции сигнала на примере аналоговой амплитудной модуляции (рис. Л.8).
В результате получаем, что спектр произведения есть свертка спектров (рис. Л.9).
Кодирование сигнала. Исследование свойства самосинхронизации сигнала. По заданной выходной битовой последовательности требуется
получить кодированный сигнал для нескольких кодов, проверить свойства самосинхронизуемости кода.

Рис. Л.8. Сигнал и огибающая при амплитудной модуляции:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)

Рис. Л.9. Спектр сигнала при амплитудной модуляции:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)
Создаем файл main .m:

Следующая функция (в отдельном файле maptowave.m) по входному битовому потоку строит график сигнала:
Каждая функция преобразования кодовой последовательности находится в отдельном файле. Например, униполярное кодирование реализуется с помощью следующей функции:
Кодирование AMI реализуется с помощью следующей функции:
Кодирование NRZ реализуется с помощью следующей функции:
Кодирование RZ реализуется с помощью следующей функции:
Манчестерское кодирование реализуется с помощью следующей функции:
Дифференциальное манчестерское кодирование реализуется с помощью следующей функции:
Для построения спектра сигнала реализуем следующую функцию (в отдельном файле calcspectre.m):
и в файл main .ш добавляем следующий код:
Запускаем главный скрипт main .m. В каталоге signal получаем поведение кодированного сигнала (рис. Л.10—Л.15).
Рис. Л.10. Униполярное кодирование:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах


Рис. Л.12. Кодирование N117:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах

Рис. Л. 13. Кодирование КТ:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах

Рис. Л.14. Манчестерское кодирование:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах

Рис. Л. 15. Дифференциальное манчестерское кодирование:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах
В каталоге sync иллюстрируются свойства самосинхронизации (рис. Л.16—Л.21).
Рис. Л.16. Униполярное кодирование: нет самосинхронизации:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах

Рис. Л.18. Кодирование N112: нет самосинхронизации:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах
Рис. Л. 19. Кодирование есть самосинхронизация:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах
Рис. Л.20. Манчестерское кодирование: есть самосинхронизация:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах
Рис. Л.21. Дифференциальное манчестерское кодирование: есть самосинхронизация:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — время, измеряемое в условных единицах
В каталоге spectre получаем спектр сигнала (рис. Л.22—Л.27).

Рис. Л.22. Униполярное кодирование: спектр сигнала:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)


Рис. Л.24. Кодирование N112: спектр сигнала:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)

Рис. Л.25. Кодирование КТ: спектр сигнала:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)


Рис. Л.27. Дифференциальное манчестерское кодирование: спектр сигнала:
вертикальная ось имеет смысл амплитуды, измеряемой в условных единицах; горизонтальная ось — частота, измеряемая в герцах (Гц)