/
Lab2-octave.tex
353 lines (269 loc) · 12.1 KB
/
Lab2-octave.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
\documentclass[a4paper,12pt]{article}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage{hyperref}
\usepackage{mathtext}
\usepackage[T2A]{fontenc}
\usepackage{array}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage[justification=centering,labelsep=period]{caption}
\usepackage{indentfirst}
\usepackage[pdftex]{graphicx,color}
\usepackage{textcomp}
\usepackage{gnuplot-lua-tikz}
\usepackage{tikz}
\usepackage{amssymb}
\usepackage{amsmath}
% \usepackage{fontogr}
% \usepackage{pscyr}
\usepackage[top=20mm,bottom=20mm,left=20mm,right=20mm]{geometry}
% \renewcommand{\captionlabeldelim} {.}
\makeatletter
\renewcommand\@biblabel[1]{#1.}
\makeatother
\unitlength=1mm
\usepackage{listings} %% собственно, это и есть пакет listings
% \usepackage{caption}
\DeclareCaptionFont{white}{\color{white}} %% это сделает текст заголовка белым
%% код ниже нарисует серую рамочку вокруг заголовка кода.
\DeclareCaptionFormat{listing}{\colorbox{white}{\parbox{\textwidth}{#1#2#3}}}
% \captionsetup[lstlisting]{format=listing,labelfont=black,textfont=black}
\renewcommand{\lstlistingname}{Листинг}
\begin{document}
\usetikzlibrary{arrows}
\lstset{ %
language=Bash, % выбор языка для подсветки (здесь это С)
basicstyle=\small\ttfamily, % размер и начертание шрифта для подсветки кода
numbers=left, % где поставить нумерацию строк (слева\справа)
numberstyle=\tiny, % размер шрифта для номеров строк
stepnumber=1, % размер шага между двумя номерами строк
numbersep=5pt, % как далеко отстоят номера строк от
% подсвечиваемого кода
backgroundcolor=\color{white}, % цвет фона подсветки - используем
showspaces=false, % показывать или нет пробелы специальными
% отступами
showstringspaces=false, % показывать или нет пробелы в строках
showtabs=false, % показывать или нет табуляцию в строках
frame=single, % рисовать рамку вокруг кода
tabsize=2, % размер табуляции по умолчанию равен 2 пробелам
captionpos=t, % позиция заголовка вверху [t] или внизу [b]
breaklines=true, % автоматически переносить строки (да\нет)
% wordwrap=true,
breakatwhitespace=false, % переносить строки только если есть пробел
escapeinside={\%*}{*)} % если нужно добавить комментарии в коде
}
% \cygfamily
\author{Кузнецов В.В., ассистент кафедры ЭИУ1-КФ}
\title{Лабораторная работа \No 2 по курсу <<Радиотехнические устройства и
системы>> \\
Построение графиков в GNU/Octave}
\maketitle
\section{Цель работы}
Целью лабораторной работы является ознакомление с базовыми принципами построения
графиков в системе численной математики GNU/Octave для применения с целью
проведения расчётов различных радиотехнических устройств.
Система GNU/Octave --- это высокоуровневый язык программирования,
предназначенный прежде всего для численных расчётов. Он предоставляет удобный
интерфейс командной строки для численного решения линейных и нелинейных задач, а
также для выполнения других численных экспериментов. С помощью GNU/Octave можно
решать задачи в том числе генерации и обработки сигналов. Установить GNU/Octave
для Linux можно в один клик через пакетный менеджер, а для Windows её можно
бесплатно скачать с сайта разработчика \url{http://octave.sourceforge.net}.
Octave работает в режиме командной строки. GNU/Octave позволяет выполнять
операции с действительными и комплексными числами, матрицами, решать системы
линейных уравнений, обрабатывать данные, строить графики и диаграммы. Синтаксис
команд Octave близок к языку С и повторяет среду Matlab.
В ходе выполнения лабораторной работы необходимо ознакомится с принципами
построения графиков в среде GNU/Octave.
При подготовке руководства использовались материалы с сайтов
\url{http://mydebianblog.blogspot.com} (на русском языке) и
\url{http://en.wikibooks.org/wiki/Octave_Programming_Tutorial/Getting_started}
(на английском языке).
\section{Построение графиков в Octave}
\subsection{Одиночные графики}
\label{singleplot}
Для построения графиков в GNU/Octave используется два типа функций
Matlab-совместимые и Gnuplot-совместимые. Далее будут рассмотрены
Matlab-совместимые функции.
Для построения графиков служит функция \verb|plot(x,y)|. Параметрами функции
\verb|plot| являются две матрицы-строки или матрицы столбца (вектора),
содержащие координаты точек графика по $х$ и $y$ соответственно. Оба вектора
должны иметь одинаковую длину (количество элементов). Вектора удобно
генерировать с помощью функции \verb|linspace| (см. лабораторную работу \No 1).
Построим график синусоидального сигнала с частотой 5 Гц. Для этого введём в
командной строке Octave следующие команды:
\begin{verbatim}
octave:1> t=linspace(0,1,200); # вектор из 200 точек от 0 до 1 сек.
octave:2> f=5; # частота 5 Гц
octave:3> s=sin(2*pi*f*t); # синусоидальный сигнал
octave:4> plot(t,s); # строим график
\end{verbatim}
В результате открывается графическое окно, в котором построена синусоида.
\subsection{Несколько графиков в одном окне}
Для построения нескольких графиков служит функция
\verb|plot(x1,y1,тип_линии,x2,y2,тип_линии, ...)|. Параметры \verb|x1|,
\verb|y1|, \verb|x2|, \verb|y2| --- такие же векторы как и для одиночного
графика. Тип линии --- это строка специального вида, заключённая в двойные
кавычки, которая устанавливает индивидуальный тип линии каждый для своего
графика.
Например:
\verb|"-"| --- сплошная линия;
\verb|"--"| --- штриховая линия;
Построим дополнительно к графику из раздела \ref{singleplot} ещё один график.
Для этого выполним следующие команды:
\begin{verbatim}
octave:5> f1=10; # частота второго сигнала 10 Гц
octave:6> s1=0.5*sin(2*pi*f1*t); # второй синусоидальный сигнал
octave:7> plot(t,s,"-",t,s1,"--"); # строим графики. По оси Х - время. По оси Y
- напряжение. Первый график сплошной линией, а второй - штриховой.
\end{verbatim}
В результате в графическом окне строятся две синусоиды (с частотой 5 Гц и 10
Гц). Одна --- штриховой линией, а другая --- сплошной.
\subsection{Подписи по осям, заголовок графика и легенда}
Для того, чтобы создать заголовок графика служит функция \verb|title(str)|.
Параметром функции является строка \verb|str|, заключённая в двойные кавычки
\verb|" "|, как в языке С.
Чтобы создать подписи по осям $х$ и $y$, служат функции \verb|xlabel(str)| и
\verb|ylabel(str)| соответственно. Параметрами этих функции является строка
\verb|str|, заключённая в двойные кавычки \verb|" "|, как в языке С.
Легенду создаёт функция \verb|legend(str1,str2, ...)|. Функция должна иметь не
менее одного параметра, каждый из которых является строкой. Каждая строка
относится к своему графику.
\begin{verbatim}
octave:8> title("Sinusoidal voltage"); # Заголовок графика
octave:9> xlabel("time, sec"); # по оси Х время
octave:10> ylabel("Voltage, V"); # по сои Y напряжение
octave:11> legend("Freq= 5 Hz","Freq=10 Hz"); # Легенда. Подпишем каждый график
\end{verbatim}
В результате выполнения всех команд получается график синусоидальных напряжений
с подписями по осям X, Y, легендой и заголовком. (см. рис.\ref{sinus-plot})
\begin{figure}[!ht]
\begin{center}
\includegraphics[width=0.6\textwidth]{sinusoid.png}
\end{center}
\caption{Одиночный график в системе Octave}\label{sinus-plot}
\end{figure}
\subsection{Разделение графического окна на части}
Для разбиения графического окна на части служит функция
\verb|subplot(m, n, k)|
Графическое окно разбивается на $m$ подграфиков по оси $x$ и на $n$ подграфиков
по оси $y$ и осуществляется переход в график с номером $k$. Всего графическое
окно разбивается на $m \cdot n$ графиков. Можно разбивать графическое окно в
любых комбинациях. В том числе допускается $m=1$ и $n=1$.
Графики нумеруются как показано на рис.\ref{gr_numb}. Пример нумерации для
разбиения окна 2х2 показан на рис.\ref{gr_2x2}
\begin{figure}[!ht]
\begin{center}
\begin{tabular}{|c|c|c|c|}
\hline
1 & 2 & $\ldots$ & m \\
\hline
$m+1$ & $m+2$ & $\ldots$ & $m+m$ \\
\hline
$\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ \\
\hline
$m(n-1)+1$ & $m(n-1)+2$ & $\ldots$ & $m\cdot n$ \\
\hline
\end{tabular}
\end{center}
\caption{Схема нумерация подграфиков для команды subplot.}\label{gr_numb}
\end{figure}
\begin{figure}[!ht]
\begin{center}
\begin{tabular}{|c|c|}
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\end{tabular}
\end{center}
\caption{Схема нумерация подграфиков для команды subplot(2,2,1).}\label{gr_2x2}
\end{figure}
Рассмотрим пример. Построим график четырёх синусоид в на четырёх подграфиках:
\begin{verbatim}
octave:12> f1=4;# Частота 1-й синусоиды 4 Гц
octave:13> f2=6;# 2-й синусоиды -- 6 Гц
octave:14> f3=10; # 3-й -- 10 Гц
octave:15> f4=1; # 4-й -- 1 Гц
octave:16> s1=sin(2*pi*f1*t); # 1-й график
octave:17> s2=sin(2*pi*f2*t); # 2-й график
octave:18> s3=sin(2*pi*f3*t); # 3-й график
octave:19> s4=sin(2*pi*f4*t); # 4-й график
octave:20> subplot(2,2,1); # делим графическое окно на 4 части 2х2
# и переходим в первое подокно
octave:21> plot(t,s1); # строим график
octave:22> title("4 Hz"); # подпишем график
octave:23> subplot(2,2,2);# переходим во 2-е подокно
octave:24> plot(t,s2);# строим график
octave:25> title("6 Hz");# подпишем график
octave:26> subplot(2,2,3);# переходим в 3-е подокно
octave:27> plot(t,s3);# строим график
octave:28> title("10 Hz");# подпишем график
octave:29> subplot(2,2,4);# переходим в 4-е подокно
octave:30> plot(t,s4);# строим график
octave:31> title("1 Hz");# подпишем график
\end{verbatim}
В результате выполнения этих команд мы получим четыре графика в графическом
окне, разделённом на 4 части \ref{sinus-2x2}.
\begin{figure}[!ht]
\begin{center}
\includegraphics[width=0.6\textwidth]{sinusoid4.png}
\end{center}
\caption{Несколько графиков в одном окне в системе Octave с
помощью команды subplot}\label{sinus-2x2}
\end{figure}
\subsection{Гистограмма}
В GNU/Octave возможно построение гистограммы. Для этого служит функция
\verb|hist(X,N)|
Параметр \verb|X| представляет собой вектор, содержащий числа, для которых
нужно построить гистограмму.
Параметр \verb|N| представляет собой число интервалов разбиения.
Рассмотрим пример. Построим гистограмму для вектора, содержащего 10000
случайных чисел. Для генерации случайных чисел служит функция \verb|randn|.
\begin{verbatim}
octave:12> X=randn(10000,1); # генерируем вектор из 10000 случайных чисел
octave:13> hist(X,30); # строим гистограмму распределния случайных чисел
\end{verbatim}
В результате открывается графическое окно, в котором построена гистограмма (см.
рис.\ref{hist})
\begin{figure}[!ht]
\begin{center}
\includegraphics[width=0.5\textwidth]{histogramm.png}
\end{center}
\caption{Построение гистограммы при помощи команды hist}\label{hist}
\end{figure}
\section{Экспорт графиков}
Графики можно экспортировать в различные графические форматы. Для этого служит
команда
\verb|print("имя_файла","формат_вывода")|
Параметр \verb|имя_файла| содержит строку, заключённую в двойные кавычки, в
которой записано имя файла, в который будет сохранено содержимое графического
окна. Для ОС Windows здесь должен быть указан полный путь. Например
\verb|C:\\mega_graphic.png|. При этом символ \verb|\| в строке пути обязательно
нужно удваивать, иначе Octave воспринимает его как управляющий символ.
Параметр \verb|формат_вывода| является специальной строкой, которая содержит
указание в каком графическом формате будет сохранён график. Доступны следующие
варианты (перечислены только основные форматы, о дополнительных форматах см.
официальную документацию):
\verb|"-dps"| --- формат Postscript (векторная графика);
\verb|"-deps"| ---- формат Encapsulated Postscript (векторная графика);
\verb|"-dtikz"| --- формат векторной графики TikZ для LaTeX;
\verb|"-dpng"| --- PNG (растровая графика);
\verb|"-dgif"| --- GIF (растровая графика);
\verb|"-djpeg"| --- JPEG (растровая графика);
\verb|"-dpdf"| --- PDF (векторная графика);
Рассмотрим пример. Выполним команду (графическое окно при этом должно быть
открыто):
\begin{verbatim}
octave:12> print("sinusoid.png","-dpng");
\end{verbatim}
Для ОС Windows в первый параметр нужно подставить полный путь: например
\verb|"C:\\sinus.png"|.
В результате исполнения команды в текущем каталоге создаётся файл
\verb|sinus.png|, который содержит копию изображения в графическом окне.
\section{Заключение}
В результате выполнения лабораторной работы произведено ознакомление с
принципами визуализации информации в системе GNU/Octave.
\end{document}