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

Применение MATLAB для моделирования радиотехнических сигналов и устройств. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Фактически количество итераций цикла определяется количеством элементов массива, а значение index – значениями перебираемых элементов. При этом возможно даже символьное значение:

for i='nstu'

n

disp(i);

s

end

t

 

u

5.4.Циклы типа «while»

Вобщем виде цикл «while» записывается как

while условие операторы;

end

В этом случае задается условие, которое каждую итерацию проверяется на истинность. Цикл выполняется пока условие истинно. Выражение считается истинным, когда его результат является непустым4 и ненулевым (логическим или вещественным числовым) [10]:

 

 

v=0;

v = 1

while v<5

v = 2

v=v+1

v = 3

end

v =

4

 

v =

5

Пример бесконечного цикла:

 

 

 

>> tic

 

while 1

Elapsed time is 2.227198 seconds.

toc

Elapsed time is 2.227221

seconds.

end

Elapsed time is 2.227245

seconds.

 

>>

 

4 Пустым (англ. empty) в среде MATLAB называется массив, у которого хотя бы одна размерность равна 0 [11]. Например, пустой массив A=[] имеет размерность 0 на 0.

21

Для остановки выполнения такого цикла или любой другой программы MATLAB необходимо нажатьнаклавиатуреCtrl+C илиCtrl+Break.

Примечание. Здесь tic – команда запуска секундомера, toc – команда чтения времени, истекшего с момента ввода tic.

5.5. Операторы «break», «continue», «return»

Оператор break предназначен для досрочного прерывания циклов типа for или while. Стоящие в теле цикла после break выражения не выполняются. Во вложенных циклах break осуществляет выход только из цикла, в котором он находится.

Пример. Поиск в массиве элемента со значением равным 1:

 

 

A=zeros(1,10);

i =

A(6)=1;

6

for i=1:10

 

if A(i)==1

 

break;

 

end

 

end

 

Оператор continue позволяет досрочно перейти к следующей итерации цикла, оставив невыполненными все выражения, стоящие в теле цикла после него. Данный оператор работает с циклами for или while. Во вложенных циклах оператор пропускает стоящие после него выражения только в цикле, в котором он находится.

Пример. Поиск значений в массиве больше среднего:

 

 

 

 

 

clc;

 

A =

0.0811

0.4868

clear;

 

0.3685

A=rand(3,3)

 

0.6256

0.9294

0.4359

 

0.7802

0.7757

0.4468

disp('Больше среднего:');

 

Больше среднего:

 

for i=1:numel(A)

 

 

if A(i)-mean(mean(A))<=0

 

0.6256

 

 

continue;

 

0.7802

 

 

end;

 

0.9294

 

 

disp(A(i));

 

0.7757

 

 

end

 

 

 

 

 

22

 

 

Оператор return осуществляет возврат в вызывающую функцию или в режим работы с клавиатуры прежде достижения конца функции, в которой он стоит. Под вызывающей функцией подразумевается функция, которая вызывает функцию или код программы, содержащие return.

Пример. Функция, осуществляющая чтение файла с изображением и вывод последнего на экран. При отсутствии файла выдает соответствующее сообщение.

Текст функции:

function read_image(file_full_name)

check=exist(file_full_name); if check==0

errordlg('Файл не найден','Ошибка'); return

end

I=imread(file_full_name); imshow(I);

end

Вызов созданной функции:

read_image('D:\Lighthouse.jpg')

23

5.6.Конструкция «switch … case … otherwise»

Вобщем виде конструкция записывается как

switch switch_выражение case case_выражение операторы;

case case_выражение операторы;

...

otherwise end операторы;

Конструкция данного типа обеспечивает ветвление и работает следующим образом. Последовательно проверяются case_выражения, в случае, если значение одного из них соответствует switch_выражению, выполняется группа операторов, стоящих в его

блоке case. После выполнения программа выходит из блока switch. К блоку otherwise программа переходит, если ни одно из

case_выражений не соответствует switch_выражению.

Для числовых переменных условием является истинность выраже-

ния case_выражение==switch_выражение.

Для символьных переменных переход осуществляется при условии strcmp(case_expression,switch_expression)==1, т. е.

когда векторы символов switch_expression и case_ expression полностью идентичны.

Пример:

a=2; switch a

case 1

disp('a равно 1'); case 2

disp('a равно 2'); otherwise

end

disp('ни одно из значений не совпадает с a');

Результат:

a равно 2

24

5.7. Создание функций

Функции, сохраняемые в m-файлах, находят широкое применение в языке программирования MATLAB. В отличие от скриптов, также сохраняемых в m-файлах, функции могут иметь входные и выходные параметры. Для операций над входными переменными внутри функций записывается набор команд, при этом могут создаваться локальные переменные, которые сохраняются в области памяти, выделенной специально для этой функции, отдельно от рабочего пространства. То есть обратиться к ним из внешней для функции программы невозможно.

В общем виде текст функции записывается как

function [y1, y2, … yN] = имя_функции(x1,x2, … xN)

end

Здесь x1,x2, … xN – входные переменные; y1, y2, … yN

выходные переменные. Число обеих может варьироваться от нескольких до полного отсутствия. Возможно создание функций без входных и выходных переменных.

Каждая функция сохраняется в отдельном m-файле, название которого должно совпадать с названием функции – для того, чтобы MATLAB мог их ассоциировать друг с другом. Оба названия должны записываться буквами английского алфавита.

Совет. Поскольку разные операционные системы по-разному воспринимают регистр в именах файлов, рекомендуем называть m-файлы именами из строчных букв.

Для того чтобы использовать созданный m-файл-функцию, он должен находиться или в текущей папке (Current Folder), или путь к нему должен быть добавлен к пути поиска MATLAB (англ. MATLAB search path) (см. п. 6. «Установка пути поиска MATLAB»).

Пример. Функция расчета отсчетов амплитудно-модулированного сигнала:

function s=AM_signal(T,Fd,w0,M,wm) t=0:1/Fd:T; s=(1+M*cos(wm*t)).*cos(w0*t); s=s/max(s);

end

25

Обращение к функции из командного окна:

s=AM_signal(2,4*10^3,10^3,0.5,10); figure;

plot(s);

В теле функции можно вызывать другие созданные m-функции. Кроме того, в одном m-файле можно последовательно записывать несколько функций, при этом первая из них является главной, с которой MATLAB ассоциирует m-файл, а последующие называются локальными: они доступны для использования только внутри данного файла.

 

 

function test_func

>> test_func

t=t_form(2,1*10^3);

2001

disp(length(t));

 

end

 

function t=t_form(T,Fd)

 

t=0:1/Fd:T;

 

end

 

Начиная с версии MATLAB 2016b [12], появилась возможность добавлять текст функций в конец m-файла с текстом программы, в котором они используются.

26

Например. Использование функций расчета отсчетов АМ-сигнала и ограничения сигнала:

s=AM_signal(2,4*10^3,10^3,0.5,10); s_lim=limitation(s,0.8);

figure; plot(s_lim);

function s=AM_signal(T,Fd,w0,M,wm) t=0:1/Fd:T; s=(1+M*cos(wm*t)).*cos(w0*t); s=s/max(s);

end

function s_lim=limitation(s,threshold) s_lim(1:length(s))=0;

for i=1:length(s)

if abs(s(i))>threshold s_lim(i)=threshold*sign(s(i));

else s_lim(i)=s(i);

end end

end

Результат:

27

5.8. Глобальные переменные

Для того чтобы переменная была доступна не только в теле одной функции, а в рабочем пространстве и внутри других функций, ее необходимо объявить как глобальную во всех функциях и скриптах, в которых подразумевается ее использование. Для этого применяется команда global, при этом MATLAB рекомендует объявлять переменные глобальными до того как они будут использоваться в тексте програм-

мы. Например:

 

 

function

>> global a;

f_declare_global(x)

f_declare_global(2);

global a;

a

a=x*2;

a =

end

 

4

Для удаления всех глобальных переменных используется команда clear global.

6. УСТАНОВКА ПУТИ ПОИСКА MATLAB

Если производится обращение к созданной (а не встроенной) функции, MATLAB начинает поиск m-файла с введенным названием. Первоначально поиск производится в текущей папке (Current Folder), если там файл не находится, его поиск продолжается в папках, указан-

ных в пути поиска (Search Path) [13].

Выбор и указание текущей папки производятся с помощью кнопки

«Browse for folder» (рис. 3).

Установка путей поиска может производиться в окне, вызываемом нажатием на кнопку «Set Path» (рис. 4). Второй вариант – использование команд.

Для добавления папок к пути поиска используется команда

аddpath(имя_папки1,имя_папки2, … имя_папкиN)

Здесь в качестве имени папки используется полное имя (англ. full path name) вместе с путем, например, addpath('G:\work').

28

Для того чтобы убрать папки из пути поиска, используется команда rmpath, например, rmpath('G:\work').

Рис. 3. Кнопка «Browse for folder»

Рис. 4. Кнопка «Set Path»

7. ГРАФИЧЕСКИЕ ОБЪЕКТЫ

Графические объекты (англ. graphics objects) MATLAB – это компоненты, предназначенные для вывода графической информации [14]. Ярким примером графических объектов является график, отображаемый в графическом окне (англ. figure window), содержащий в своем составе линию или поверхность, оси, текст и пр. Каждый объект имеет свой уникальный идентификатор – указатель (англ. handle) и характеризуется рядом свойств (англ. properties). Например, линия имеет такие свойства, как цвет (Color), толщина (LineWidth) и др. Свойства можно задавать как при создании объекта, так и менять их у уже существующих.

29

Примерами функций, создающих графические объекты, являются plot, contour, plot3, mesh, surface и др. Каждая из перечис-

ленных создает сразу несколько объектов.

Рассмотрим пример. В данном случае команда plot создает графическое окно, в нем – оси, и только в осях уже строит линию графика. При этом каждому из этих объектов задаются свойства по умолчанию, если они не указаны специально.

t=0:0.0001:0.2; % вектор отсчетов времени [c] f=10; % частота сигнала, Гц

w=2*pi*f; % угловая частота, рад/с

% расчет отсчетов сигнала в комплексной форме: s=exp(1i*w*t);

plot(t,imag(s),t,real(s)); title('Квадратурные составляющие сигнала');

legend('мнимая часть','действительная часть'); xlabel('Время, с');

Результат выполнения этой программы представлен на рис. 5.

Рис. 5. График, созданный командой plot

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]