- •Стохастика электронных систем Оглавление
- •Лабораторная работа 2 Проектирование регулятора для линейной системы
- •1.2. Колебательные процессы
- •1.3 Случайные процессы
- •Лабораторная работа № 1
- •Исследование разомкнутой линейной системы
- •(Краткие теоретические сведения)
- •Модели линейных систем
- •Импульсная характеристика
- •Коэффициент усиления в установившемся режиме
- •Переходная характеристика
- •Частотная характеристика
- •Полюса и нули
- •Лабораторная работа № 1 Исследование разомкнутой линейной системы (практическая часть) Цели работы
- •Задачи работы
- •Оформление отчета
- •Инструкция по выполнению работы
- •Контрольные вопросы к защите
- •Отчет по лабораторной работе № 1 Исследование разомкнутой линейной системы
- •Описание системы
- •Результаты исследования
- •Лабораторная работа № 2
- •Проектирование регулятора для линейной системы
- •(Краткие теоретические сведения)
- •Модели соединений систем
- •Корневой годограф
- •Синтез с помощью лафчх
- •Точность в установившемся режиме
- •Простейшие типы регуляторов
- •Лабораторная работа № 2 Проектирование регулятора для линейной системы (практическая часть) Цели работы
- •Задачи работы
- •Оформление отчета
- •Описание системы
- •Инструкция по выполнению работы
- •Контрольные вопросы к защите
- •Отчет по лабораторной работе № 2 Проектирование регулятора для линейной системы
- •Описание системы
- •Исследование разомкнутой системы
- •4.1 Регулятор, обеспечивающий перерегулирование 10%
- •4.2 Регулятор, обеспечивающий кратчайший переходный процесс
- •Лабораторная работа 3 Дискретное преобразовнаие Фурье. Свойства.
- •Задание на лабораторную работу
- •Лабораторная работа 3 Изучение практического проектирования цифровых фильтров методом весовых окон в matlab.
- •Графический вывод результатов вычислений
- •Xlabel('Значения X'); ylabel('Значения функции'), grid
- •В среде matlab несложно выводить и графики, заданные параметрически. Например, построим график функции, которая определена формулами (рис.):
- •Xlabel('Номер элемента'); ylabel('Значение элемента'); grid
- •Xlabel('Номер элемента'); ylabel('Значение элемента')
- •Xlabel('X'); ylabel('Вероятность X'); grid
- •Xlabel('Частота (Гц)'); ylabel('Отношение амплитуд'); grid;
- •Xlabel('Частота (Гц)'); ylabel('Фаза (град)'); grid
- •Xlabel('X'); ylabel('Значение функции');
- •6.2 Импорт сигналов
- •6.3 Просмотр сигналов
- •6.4. Создание спектров сигналов
- •7.2 Синтез фильтра
- •4. Просмотр характеристик фильтра
Исследование системы с пропорционально-дифференциальным (ПД-) регулятором
Общий вид передаточной функции регулятора
,
где
сек,
сек,
а коэффициент
должен быть выбран в процессе проектирования
в соответствии с требованиями к системе.
4.1 Регулятор, обеспечивающий перерегулирование 10%
Для обеспечения перерегулирования 10% требуется выбрать
Переходная функция скорректированной замкнутой системы
Время переходного процесса
сек,
Запасы устойчивости: по амплитуде 15.9 дБ, по фазе 60.2 градусов.
В сравнении с П-регулятором, использование ПД-регулятора позволяет …
4.2 Регулятор, обеспечивающий кратчайший переходный процесс
Для обеспечения минимального времени переходного процесса требуется выбрать
Переходная функция скорректированной замкнутой системы
Время переходного процесса
сек,
Запасы устойчивости: по амплитуде 18.4 дБ, по фазе 67.3 градуса.
Передаточная функция замкнутой системы
0.025771 (s+0.05208) (s+0.1667)
-------------------------------------------------------------
(s+0.9892) (s+0.5459) (s+0.04826) (s^2 + 0.1382s + 0.008584)
Порядок передаточной функции равен 5, потому что …
Полюса передаточной функции
-0.9892
-0.5459
-0.0691 + 0.0617i
-0.0691 - 0.0617i
-0.0483
Близость полюсов к мнимой оси означает, что … При этом запас устойчивости …
Коэффициент усиления системы в установившемся режиме равен … Это объясняется тем, что …
При постоянном сигнала установившаяся ошибка …, потому что …
При линейно возрастающем сигнале установившаяся ошибка …, потому что …
При использовании датчика, описываемого моделью , коэффициент усиления в установившемся режиме будет равен …, потому что …
Полученная система является астатической, то есть, отслеживает без ошибки постоянный входной сигнал. Это определяется тем, что …
При линейно возрастающем сигнале …
Передаточная функция замкнутой системы от входа к сигналу управления
13.5168 s (s+0.05208) (s+0.05495) (s+0.1667) (s+0.5)
-------------------------------------------------------------
(s+0.9892) (s+0.5459) (s+0.04826) (s^2 + 0.1382s + 0.008584)
Изменение сигнала управления при единичном ступенчатом входном сигнале
Сигнал управления стремится к нулю, потому что …
Лабораторная работа 3 Дискретное преобразовнаие Фурье. Свойства.
Цель работы. Практическое изучения вычисления ДПФ. Изучение свойств ДПФ.
Вопросы для самоподготовки.
1 Прямое дискретное преобразование Фурье (сущность, условия применения, пример во временной и спектральной областях).
2 Обратное дискретное преобразование Фурье (сущность, пример во временной и спектральной областях).
3 Свойства дискретного преобразования Фурье.
4 Физическая сущность коэффициентов ДПФ во временной и спектральной областях (с примерами).
5 Принцип восстановления аналогового сигнала по результатам цифровой обработки.
6 Связь аналоговой функции во временной области с видом выборки ДПФ в частотной области (с примерами).
7 Связь вида выборки во временной области с ее аналоговым прототипом (с примерами).
8 Определите для заданной выборки во временной области {xk}6 = (0, 1, 4, 9, 16, 25) вид временной функции исходного аналоговогосигнала и объясните его. Изобразите график.
9 Объясните, какая временная функция соответствует выборке ДПФ в частотной области вида {Cn}6 = (0, 1, 0, 0, 0, 0). Изобразите и объяснитеграфик аналоговой функции исходного сигнала x(t).
Спектральный анализ в Матлаб.
Целью спектрального анализа сигналов является определение гармонического спектра этих сигналов, то есть частот гармонических составляющих сигнала (частотного спектра), амплитуд этих гармонических составляющих (амплитудного спектра) и их начальных фаз (фазового спектра). Под статистическим анализом процессов обычно понимают нахождение такой характеристики их связи как взаимная корреляционная функция двух процессов, а также связанной с ней частотной характеристики ― взаимной спектральной плотности этих процессов.
Так как в MATLAB все сигналы представлены в виде дискретных отсчетов, для вычисления спектра сигналов используется дискретное преобразование Фурье. ДПФ позволяет вычислять дискретные отсчеты непрерывного спектра сигналов, используя временные отсчеты сигнала. В системе MATLAB предусмотрены преобразования заданного вектора в соответствии с дискретными прямым и обратным преобразованиями Фурье. Это осуществляется с помощью функций fft (Fast Fourier Transformation) и ifft (Inverse Fast Fourier Transformation). Используя обращения к этим функциям вида y=fft(x,n) и x=ifft(y,n), можно получить вектор комплексных отсчетов ДПФ у(к) (в первом случае) и вектор комплексных дискретных отсчетов сигнала х(n) (во втором случае) по формулам:
;
.
Здесь N ― число элементов заданного вектора х(n) (количество отсчетов дискретного сигнала в выборке), n ― номер отсчета выборки во временной области), k ― номер отсчета выборки в частотной области.
Вызов функции осуществляется с использованием команды
sf = fft(st,N)
где st – вектор, содержащий временные отсчеты сигнала,
N – количество отсчетов в st.
Результат выполнения функции – вектор sf, вектор комплексных чисел, содержащий отсчеты ДПФ в спектральной области, с интервалом по частоте Fs/N, где Fs – частота дискретизации.
В выражениях ДПФ (см. лекции) не содержится указания на реальные моменты времени или значения частот, в них используются только номера отсчетов. Для построения спектра сигналов, заданных в определенном временном масштабе, необходимо знать, с какой частотой брались отсчеты непрерывного сигнала. Если последовательность отсчетов x(nT) представляет набор отсчетов, взятых с интервалом дискретизации T = 1/Fs, то частоты анализа, т.е. частоты, которые соответствуют спектральным отсчетам ДФТ, будут расположены с интервалом по частоте Fs/N.
Первый элемент полученного вектора (в MATLAB нумерация элементов векторов начинается с единицы) соответствует нулевой частоте, последний – частоте Fs(N-1)/N, т.е. спектр является симметричным относительно частоты Fs/2. При этом код MATLAB, позволяющий получить вектор значений частот для ДПФ размерности N, если частота дискретизации сигнала равна Fs
f = (0:N-1)/N*Fs;
Так как в работе все входные сигналы являются реальными, для изображения спектра требуется только первая половина спектральных отсчетов вектора ДПФ sf (другая половина – симметрична относительно частоты Fs/2). Вектор значений частот может быть задан в виде
f = 0, Fs/N, 2Fs/N, . . . ,(N/2 - 1)Fs/N
соответствующая команда MATLAB
f = (0 : N/2 - 1)*Fs/N
и для изображения спектра сигнала используется команда
plot(f, abs(sf(1:N/2)).
Для того, чтобы спектр сигнала был расположен симметрично относительно частоты f = 0 используется команда
sf = fftshift(fft(st, N))
При этом значения частот расположены в диапазоне –Fs/2 до Fs/2
f = (-N/2 : N/2 - 1)*Fs/N
Для изображения двустороннего спектра используется команда
plot(f, abs(sf)).
В качестве примера применения функций fft и ifft получим спектральную диаграмму одиночного прямоугольного импульса (рис.4.1) с амплитудой А = 0.75, длительностью 0.25 с. Длительность сигнала выберем Т = 10 с, а дискрет времени Ts = 0.1 с. Для наглядности построения воспользуемся процедурой stem.
Ts=0.1; T=10; A=0.75; w=0.5;
t=0:Ts:T; y=A*rectpuls(t,w);
plot(t,y); grid; title('Прямоугольный импульс');
xlabel('Время (с)'); ylabel('y(t)')
Рисунок 4.1 – Одиночный прямоугольный импульс
x=fft(y); df=1/T; Fmax=1/Ts; f=0:df:Fmax;
a=abs(x); stem(f,a); grid; title('Модуль fft-преобразования');
xlabel('Частота (Гц)'); ylabel('Модуль')
Рисунок 4.2 – Модуль fft-преобразования прямоугольного импульса
Теперь построим график модуля Фурье-изображения процесса (рис.4.3):
xp=fftshift(x); f1=-Fmax/2:df:Fmax/2; a=abs(xp);
stem(f1,a); grid; title('Частотный спектр');
xlabel('Частота (с)'); ylabel('Модуль')
Рисунок 4.3 – Спектральная диаграмма прямоугольного импульса
Пример вычисления спектра синусоидального сигнала
clear all%
N=2^10; % Длина блока
fs=1e5; % Частота дискретизации (Hz)
Ts=1/fs; % Интервал дискретизации (s)
t=(0:N-1)*Ts; % Вектор времени (s)
A=2; % Амплитуда сигнала
f0=fs/12; % Частота сигнала (Hz)
phi=-pi/2; % Фаза сигнала (rad)
x= A*cos(2*pi*f0*t + phi);
% Вычисление спектра
X=fft(x)/N; %
Xa=abs(X); % Модуль спектра
Xp=angle(X); % Спектр фаз (rad)
f=fs*(0:N-1)/N; % Вектор значений частот (Hz)
%
figure(1)
subplot(2,1,1)
plot(t,x)
xlim([0 4/f0]);% масштаб по оси частот
title('Сигнал')
xlabel('\с')
subplot(2,1,2)
plot(f,Xa);
%plot(f-fs/2,fftshift(Xa));
%axis([-fs/2 fs/2 0 1.1*max([abs(A0),A/2])])
Рисунок 3.2 Результат вычисления спектра синусоиды функцией fft.
Задание на лабораторную работу
Для выполнения лабораторной работы можно использовать вычислительный скрипт Матлаб dft.m, находящийся в рабочей папке.
Замените исходный сигнал и выполните следующие задания
1. Исследование прямого преобразования Фурье. Сигнал представлен N отсчетами во времени ( N=2m ), m определено в интервале 2-8. Найти спектр сигнала, представленного на интервале периодически восемью отсчета8ми.
1.1. { Xk } = (1; 1; 1; 1; 1; 1; 1; 1);
1.2. { Xk } = (0; 0.71; 1; 0.71; 0; -0.71; -1; -0.71);
1.3. { Xk } = (0; 1; 0; -1; 0; 1; 0; -1);
1.4. { Xk } = (1; 1; 0; 0; 0; 0; 0; 0);
1.5. { Xk } = (1; 1; 1; 0; 0; 0; 0; 0).
Зарисовать временные и спектральные диаграммы с указанием величин отсчетов.
2. Исследование обратного преобразования Фурье. Ввести действительные составляющие спектра X(ώ), полагая что мнимая составляющая Y(w) = 0.
2.1. { Xn } = (1; 0; 0; 0; 0; 0; 0; 0);
2.2. { Xn } = (0; 1; 0; 0; 0; 0; 0; 0);
2.3. { Xn } = (0; 0; 1; 0; 0; 0; 0; 0);
2.4. { Xn } = (1; 1; 0; 0; 0; 0; 0; 0).
Ввести мнимую составляющую Y(w), полагая X(w) = 0.
2.5. { Yn } = (0; 1; 0; 0; 0; 0; 0; 0).
Сравнить результаты с предыдущим опытом (п.2).
3. Исследование применимости теоремы суперпозиции.
Исследование включает в себя проверку равенства спектра отклика линейной системы на сумму воздействий сумме спектров каждого воздействия. Для этого следует выполнить следующие операции:
3.1 Найти спектр прямоугольного импульса x(t)
{ Xk } = (1; 1; 0; 0; 0; 0; 0; 0).
Записать действительную Xn, мнимую Yn, составляющие спектра, его модуль Cn и фазу Qn.
3.2 Найти спектр треугольного импульса y(t)
{ Yk } = (1; 0.75; 0.5; 0.25; 0; 0; 0; 0).
Записать значения Xn, Yn, Cn и Qn.
3.3 Найти сигнал f(t) = x(t) + y(t) ; { fk } = {Xk}+{Yk}.
3.4 Проверить равенство (принцип суперпозиции)
Sf (jw) = Sx(jw) +Sy(jw).
4. Исследование свертки двух сигналов.
4.1 Рассчитать свертку двух сигналов, используемых в п.3.
fn = 1/N åе Xk*Yn-k , n=0...N-1.
4.2 Найти спектр свертки Cfn и Qfn.
4.3 Проверить выполнение равенства Sf (jw) = Sx (jw) * Sy (jw).
5. Исследование влияния изменения масштаба сигнала на его спектр:
5.1 Найти спектр S1(jw) сигнала (последовательность прямоугольных импульсов) с амплитудой 0.5В и скважностью 4;
5.2 Увеличить амплитуду сигнала в два раза и найти его спектр S2(jw);
5.3 Проверить выполнение равенства
S2(jw) = 2S1(jw).
Лабораторная работа 3 Изучение практического проектирования цифровых фильтров методом весовых окон в matlab.
1.Цель работы
Изучение основ проектирования и моделирования цифровых фильтров в среде Matlab, пакеты sptool и fdatool. Проведение экспериментального исследования процесса фильтрации сигналов.
2 Вопросы для подготовке к лабораторной работе.
1 В чем заключается синтез НЦФ методом весовых функций?
2 Каковы основные этапы синтеза НЦФ методом весовых функций?
3 Как находится ИХ НЦФ при синтезе методом весовых функций?
4 От чего зависит порядок (длина ИХ) НЦФ, синтезируемого методом весовых функций?
5 Приведите выражение для ИХ hd(n), соответствующей заданной (идеальной) частотной характеристике (ЧХ) Hd(jw). Почему коэффициенты hd(n) разложения заданной ЧХ Hd(jw) в ряд Фурье не могут быть использованы в качестве коэффициентов синтезируемого НЦФ?
6 Как производится усечение ИХ, соответствующей заданной ЧХ Hd(jw)? Как проявляется усечение на качестве аппроксимации заданной ЧХ Hd(jw)?
7 К чему приводит усечение ряда Фурье (ИХ hd(n)) с помощью весовых функций конечной длины?
8 Как выражается ЧХ синтезируемого фильтра через ЧХ весовой функции и заданную ЧХ?
9 Как связаны параметры ЧХ фильтра с параметрами весовой функции?
10 Какой математический алгоритм обработки реализуют НЦФ?
11 Как вычисляются отсчеты выходного сигнала НЦФ в соответствии с алгоритмом ДВС?
3. Описание лабораторной работы
3.1 Лабораторная работа реализована на персональном компьютере с программным обеспечением MATLAB с применением пакета Signal Processing, в котором имеется программа FDATool (Filter Design and Analysis), реализующая графический интерфейс для расчета фильтров и просмотра их характеристик.
3.2 Запуск системы
Для запуска программных пакетов SPTool и FDATool нужно предварительно запустить систему MATLAB. На командной строке системы MATLAB с одним командным окном необходимо набрать имя программы
>>fdatool
>>sptool
3.3 Проведение работы.
Для изучения фильтрации цифровым фильтром необходимо выполнить проектирование фильтра по заданным требованиям. Результат проектирования – отсчеты импульсной характеристики фильтра.
Далее необходимо получить реализацию сигнала, которые будет подан на вход цифрового фильтра. В Matlab это может быть выполнено простыми командами:
Fs=1e4; Ts=1/Fs; t=[0:Ts:0.5];
F1 = …; F2 = …;
randn('state',0);
x=sin(2*pi*F1*t)+cos(2*pi*F2*t)+0.1*randn(size(t));
Результат расчетов – вектор отсчетов сигнала х – сумма двух гармонических сигналов с частотами F1 и F2 герц с добавленными отсчетами нормального шума. Отсчеты сигнала вычислены с частотой дискретизации 10 кГц.
Далее запустите пакеты sptool и fdatool.
Пакет sptool позволяет выполнять формирование и обработку различных сигналов во временной и спектральной областях. Вектор отсчетов сигнала х может быть импортирован в sptool:
Во вкладке меню File/Import выбрать Import to SPTool в котором выбираются x и Fs в SPTool. Выбрать х в рабочей области Workspace , нажмите верхнюю правую стрелку и назовите сигнал sig1. Далее необходимо добавить значение частоты дискретизации Fs. Нажмите ОК.
В окне Signals можно выбрать сигнал sig1 и нажать на View. В открывшемся окне отображается временная диаграмма сигнала.
Далее выполняется расчет цифрового полосового фильтра. Параметры фильтра выбрать так, чтобы выполнить фильтрацию входного сигнала – выходной сигнал должен содержать только составляющую с частотой F2. Для этого откройте fdatool и наберите следующие параметры:
f p1 = ….kHz, f p2 = ….kHz
fs1 = ….kHz, fs2 = ….kHz
частота дискретизации Fs= 10 кгц.
Порядок фильтра N
Неравномерность 1 дб.
Нажать на кнопку Design Filter для расчета фильтра filt1.
Можно импортировать уже рассчитанный фильтр.
Следующим шагом является применение рассчитанного фильтра к сигналу, т.е. непосредственно фильтрация.
Выберите исходный сигнал sig1 в списке сигналов. Далее выбирается рассчитанный фильтр filt1. Нажмите кнопку ”применить” и назовите сигнал на выходе фильтра sig2.
При помощи программы sptool выполняется сравнение входного и выходного сигналов фильтра в частотной областях.
В окне SPtool signals выбрать исходный сигнал sig1. В окне Spectra создать диаграмму spectr1 и открыть окно просмотра спектра.
Нажмите Применить (Apply) для вычисления спектра сигнала sig1.
Выполните аналогичные действия для сигнала на выходе фильтра sig2. Получите спектр выходного сигнала. Сравните временные диаграммы sig1 и sig2.
При необходимости измените параметры цифрового фильтра и проведите вычисления выходного сигнала.
Результаты выполнения работы оформить в виде временных и спектральных диаграмм входных и выходных сигналов цифрового фильтра. Укажите параметры фильтра.
Приложение 1
Вычисления в Matlab
Название системы Matlab произошло от сокращенного – MATrix LABoratory – матричная лаборатория. Применение матриц как основных объектов системы способствует резкому уменьшению числа циклов, которые очень распространены при выполнении матричных вычислений на обычных языках программирования высокого уровня, и облегчению реализации параллельных вычислений.
Вычисления в Мatlab
Центральным понятием всех математических систем является математическое
выражение. Оно задает то, что должно
быть вычислено в численном (реже
символьном) виде. Математические
выражения строятся на основе чисел,
констант, переменных, операторов, функций
и разных спецзнаков. Специфика MATLAB в
том, что математические выражения
задаются в виде одной строки. Например,
записывается как 2^3.
Знак ; (точка с запятой) в конце строки ввода блокирует вывод результата вычислений на экран, например:
>> 2^3;
Однако специальная переменная ans (от answer – ответ) позволяет вывести результат вычислений:
>> ans
ans = 8
Простейшие вычисления
>> 3 + 8 % Сложение
ans =
11
>> 12 / 4; % деление
>> ans - 2 % вычитание 2 из последнего результата ans
>>
ans =
1
>> x = 12 / 3;
>> y = x^2 * (12 - ans)
ans =
176
Последовательность выполнения операций можно изменять при помощи скобок. Если после выражения ставится оператор ; (точка с запятой), то результат операции не выводится на экран. Комментарии пишутся в строке после символа %, строка после символа % игнорируется MATLAB.
Работа с редактором m-файлов
Любую последовательность команд в MATLAB можно оформить в виде m-файла,
называемого скрипт-файлом. Для создания и редактирования таких файлов служит специальный редактор m-файлов. Его пустое окно открывается командой New (Новый файл), которую можно ввести активизацией кнопки с тем же названием в панели инструментов или из позиции File меню окна MATLAB.
К примеру, введем такой скрипт-файл вычисления суммы чисел 2 и 3 и построения графика синусоиды:
2+3
x=0:0.1:15
y=sin(x)
plot(x,y)
Введенный файл можно пустить из окна редактора, исполнив команду
Run в позиции Debug (Отладка) меню окна редактора, или набрав имя файла в командной строке и нажав на Enter. В результате будет вычислено
выражение 2 + 3 и число 5 появится в окне сессии MATLAB. Будет также построен
в отдельном окне график синусоидальной функции.
Переменные в MATLAB
Переменные – это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными. На языке программирования MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства:
Имя-переменной = Выражение.
В MATLAB явное определение переменных не требуется. Определение происходит автоматически при первоначальном присваивании переменной значения или при инициализации переменной. Если в процессе вычислений обращаются к несуществующей переменной, MATLAB выдает сообщение об ошибке. Имена переменных и их значения могут быть получены при помощи команд who или whos, а также в графическом окне Workspace. Выводятся переменные, их размерности и занимаемый ими объем памяти.
Для удаления ранее определенных переменных из памяти применяют команду clear (имя переменной).
команда |
описание |
пример |
Help функция |
Описание функции и применение |
>> help sin |
Lookfor символы |
Поиск ключевого слова в файлах помощи Help |
>> lookfor inverse |
whos |
Список применяемых переменных |
>> whos |
Операторы и встроенные функции
MATLAB
Оператор – это специальное обозначение для определенной операции над данными – операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 – операндами
Функции – это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата – отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2).
Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU,X). В данном случае список параметров содержит два аргумента –
NU в виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде
[Y1, Y2,...]=func(X1, X2,...),
где Y1, Y2,... – список выходных параметров и X1, X2,... – список входных
аргументов (параметров).
Математические функции
Функция |
Описание |
Пример |
exp |
Экспоненциальная функция |
>> exp(2) ans = 7.3891 |
Log, Log10, Log2 |
Натуральный логарифм, десятичный, по основанию 2 |
>> log(10) ans = 2.3026 |
sqrt |
Квадратный корень из числа |
>> sqrt(25) ans = 5 |
fix |
Целая часть числа |
>> fix(7.389) ans = 7 |
mod |
Деление по модулю |
>> mod(7,3) ans = 1 |
rem |
Остаток целочисленного деления |
>> rem(12,9) ans = 3 |
Зарезервированные символы.
MATLAB содержит ряд символов, которые зарезервированы системой.
Имя |
Описание |
ans |
Сохраненный результат последнего вычисления |
eps |
Точность между двумя реальными числами |
pi |
Число Пи |
i/j |
Мнимая часть комплексного числа |
Inf |
Символ бесконечности |
NaN |
Символ неопределенности |
Скрипты и функции
Функции пользователя
Хотя ядро новых версий системы MATLAB содержит уже более 1000 встроенных функций (не считая функций, определенных в десятках пакетов расширения), всегда может понадобиться какая-то нужная пользователю функция. Язык программирования системы MATLAB предоставляет ряд возможностей для задания функций пользователя. Одна из таких возможностей заключается в применении функции inline, аргументом которой надо в апострофах задать выражение, задающее функцию одной или нескольких переменных. В приведенном ниже примере задана функция двух переменных – суммы квадратов sin(x) и cos(y):
>> sc2=inline('sin(x).^2+cos(y)^.2')
sc2 =
Inline function:
sc2(x,y) = sin(x).^2+cos(y).^2
Можно также задавать свои функции в виде m-файлов. Например, можно в окне редактора m-файлов (открывается командой New в меню File) создать m-файл с именем sc2 и листингом:
function y=sc2(x,y)
y=sin(x).^2+cos(y).^2
Записав его на диск, можно командой type sc2 вывести листинг созданной
функции:
>> type sc2
function y=sc2(x,y)
y=sin(x).^2+cos(y).^2
Сообщения об ошибках и исправление ошибок
Большое значение при диалоге с системой MATLAB и отладке программ в ней имеет диагностика ошибок. Рассмотрим ряд примеров, поясняющих технику диагностики. Введем, к примеру, ошибочное выражение
>> sqr(2)
и нажмем клавишу ENTER. Система сообщит об ошибке:
??? Undefined function or variable 'sqr' % % Неопределенная функция или переменная sqr
>> x
??? Undefined function or variable 'x'. % Неопределенная функция или переменная X
Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number – не число). Оно обозначает неопределенность, например вида 0/0 или Inf/Inf, где Inf – системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: деление на нуль»).
Диапазон чисел, представимых в системе, лежит от 10–308 до 10+308.
В примере
x = 0:pi/20:3*pi;
y = sin(x);
x = 0:pi/40:3*pi;
plot(x,y)
выводится сообщение об ошибке
Error using ==> plot
Vectors must be the same lengths. % векторы должны быть одинаковой размерности, длины
но команда Plot получает два вектора с разным количеством переменных x и y.
Следующая ошибка возникает при перемножении матриц.
v1=[2 3 4]; v2=[4 5 6 ];
%Вычислим скалярное произведение
c = v 1 ⋅ v 2
??? Error using ==> mtimes
Inner matrix dimensions must agree.
%Система выдает ошибку о несогласованности размерностей перемножаемых матриц .
Для правильного перемножения нужно транспонировать вторую матрицу. Операция транспонирования выполняется с помощью символа " ' ":
v1*v2'
ans =
47.
Применение оператора : (двоеточие)
Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны, например, для создания векторов со значениями абсциссы при построении графиков или при создании таблиц. Для этого в MATLAB используется оператор : (двоеточие) в виде:
Начальное_значение : Шаг : Конечное_значение
Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Применение этой конструкции резко уменьшает потребность в задании программных циклов.
Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, – выдается сообщение об ошибке. Примеры
применения оператора : даны ниже:
>> 1:5
ans = 1 2 3 4 5
>> i=0:2:10
i = 0 2 4 6 8 10
>> j=10:-2:2
j = 10 8 6 4 2
>> V=0:pi/2:2*pi;
>> V
V = 0 1.5708 3.1416 4.7124 6.2832.
Логические операторы
Логические операторы и соответствующие им функции служат для реализации
поэлементных логических операций над элементами одинаковых по размеру массивов. Они широко используются в управляющих структурах программ.
Оператор |
Описание |
== |
Равно |
~= |
Не равно |
<= |
Меньше либо равно |
>= |
Больше либо равно |
&& |
Логическое И |
|| |
Логическое ИЛИ |
~ |
Логическое НЕ |
& |
Поэлементное И |
| |
Поэлементное ИЛИ |
Пример
>> 1 < 2 % 1 меньше 2?
ans =
1 % Да, результат – логическая единица
>> 2 == 0 % 2 равен 0?
ans =
0 % Нет, результат равен 0
>> 7 > [ 2 10 1 7 ] % Сравнение скалярной величины с векторной
%
ans = % Поэлементное сравнение
1 0 1 0
>> [ 1 1 1 ] & [ 1 0 1 ] % Полементное И
ans =
1 0 1
Комплексные числа
В расчетах с комплексными числами следует помнить, что в MATLAB для знака мнимой единицы зарезервированы символы I и J
>> z = 3 + j*4 % Формирование комплексного числа
z = 3 + 4i
>> re = real(z) % Реальная часть
re = 3
>> im = imag(z) % Мнимая часть
im = 4
>> a = abs(z) % Модуль
a = 5
>> phi = angle(z) % Фаза
phi = 0.92730
>> z2 = a*exp(j*phi)
z2 = 3.0000 + 4.0000i
Команда |
Описание |
Пример |
x = real(z) |
Определение реальной части КЧ |
>>real(2+3j) ans = 2 |
y = imag(z) |
Мнимая часть КЧ |
>> imag(2+3j) ans = 3 |
a = abs(z) |
Модуль числа Z |
>> abs(-5) ans = 5 |
phi = angle(z) |
Фаза числа Z |
>> angle(1-j) ans = -0.78540 |
]
Матрицы и векторы
В Matlab по умолчанию предполагается, что каждая заданная переменная – это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано X=1, то это значит, что X – это вектор с единственным элементом, имеющим значение 1, а точнее даже матрица с размером 1×1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами или запятыми. Так, например, присваивание
>> V=[1 2 3]
V = 1 2 3
задает вектор V, имеющий три элемента со значениями 1, 2 и 3 (его можно считать и матрицей размера 3×1). После ввода вектора система выводит его на экран дисплея. Заметим, для вектора столбца нужно разделять элементы знаками «;» (точка с запятой):
>> V=[1; 2; 3]
V =
1
2
3
Задание матрицы требует указания нескольких строк и нескольких столбцов. Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще любой операции) на экран дисплея. Так, ввод
>> M=[1 2 3; 4 5 6; 7 8 9];
задает квадратную матрицу, которую можно вывести:
>> M
M =
1 2 3
4 5 6
7 8 9
Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:
>> V= [2+2/(3+4),exp(5),sqrt(10)];
>> V
V = 2.2857 148.4132 3.1623
Для задания векторов удобно применять команду linspace, которая позволяет получить вектор значений в определенных пределах с равным интервалом.
>> x = linspace(5,10,100); % вектор из 100 элементов в диапазоне от 5 до 10
>> x(1:5)
ans =
5.0000 5.0505 5.1010 5.1515 5.2020
Команда linspace может использоваться при задании вектора значений временных отсчетов или отсчетов частот дискретного спектра.
Для доступа к целым строкам или столбцам матрицы применяют команду двоеточия “:”, которая заменяет тот или иной индекс
>> A = [ 1 2 3; 4 5 6; 7 8 9 ]
A =
1 2 3
4 5 6
7 8 9
>> A(1,:) = [] % удаление первой строки
При умножении матриц следует обращать внимание на то, что число столбцов первой матрицы должно быть равным числу строк второй матрицы.
Поэлементное умножение и сложение матриц
x = [1 2 3]
y = [4 5 6]
>> z = x.*y
z =
4 10 18
>> x.\y, x./y
ans =
4.0000 2.5000 2.0000
ans =
0.2500 0.4000 0.5000
Обьединение матриц
>> A = [ 1 2; 3 4 ]; % Матрица размером 2x2
>> B = [ 5 5 ]; % Матрица размером 1x2
>> C = [ A; B ] % Объединение матриц
C =
1 2
3 4
5 5
>> D = [ A B' ]
D =
1 2 5
3 4 5
Транспонирование матриц
>> B = A'
B =
1 3
2 4
Векторизация циклов.
Под векторизацией понимается преобразование циклов for и while к эквивалентным векторным или матричным выражениям. При векторизации алгоритма ускоряется выполнение M-файла.
Пример
Вот один из способов вычислить 1001 значение функции синуса на интервале [0 10], используя оператор цикла:
i = 0;
for t = 0:.01:10
i = i + 1;
y(i) = sin(t);
end
Эквивалентная векторизованная форма имеет вид
t = 0:.01:10;
y = sin(t);
В этом случае вычисления выполняются намного быстрее, и такой подход в системе MATLAB является предпочтительным.
Предварительное выделение памяти.
В системе MATLAB есть возможность для существенного сокращения времени выполнения программы за счёт предварительного размещения массивов для выходных данных. Предварительное распределение избавляет от необходимости изменять массив при увеличении его размеров. Используйте соответствующие функции предварительного выделения памяти, как это показано в таблице для различных типов массивовТип массива Функция Примеры
Массив чисел zeros y = zeros(1, 100)
for i = 1:100
y(i) = det(X^i);
end
Массив записей struct data = struct([1 3], 'x', [1 3], 'y', [5 6])
data(3).x = [9 0 2];
data(3).y = [5 6 7];
Массив ячеек cell B = cell(2, 3)
B{1, 3} = 1:3;
B{2, 2} = 'string';
Предварительное выделение памяти позволяет избежать фрагментации памяти при работе с большими матрицами. В ходе сеанса работы системы MATLAB, память может стать фрагментированной из-за работы механизмов динамического распределения и освобождения памяти. Это может привести к появлению большого количества фрагментов свободной памяти, и непрерывного пространства памяти может оказаться недостаточно для хранения какого-либо большого массива.
Графический вывод результатов вычислений
Для наглядного представления результатов работы программы важно уметь правильно оформлять их. Наиболее емкой формой отображения информации является графическая. В системе MATLAB для этого имеется ряд эффективных средств.
Общие требования к представлению графической информации.
Вычислительная программа, создаваемая инженером, в большинстве случаев предназначена для исследования поведения разрабатываемого устройства при разных условиях его эксплуатации и различных значениях его конструктивных параметров или для расчета определенных параметров его поведения. Информация, получаемая в результате выполнения вычислительной инженерной программы, как правило, имеет форму ряда чисел, каждое из которых отвечает определенному значению конкретного параметра (аргумента). Такую информацию удобнее всего обобщать и представлять в графической форме.
Требования к оформлению инженерной графической информации отличаются от требований к обычным графикам в математике. Пользователь-инженер должен иметь возможность принять такое решение о выборе значения некоторых конструктивных параметров, характеризующих исследуемый процесс или техническое устройство, чтобы его прогнозируемое поведение удовлетворяло заданным условиям. Поэтому инженерные графики должны быть «читабельными», то есть такими, чтобы с их помощью можно было легко отсчитывать значение функции при любых значениях аргумента (и наоборот) с относительной погрешностью в несколько процентов. Это становится возможным, если координатная сетка графиков соответствует определенным целым числам какого-либо десятичного разряда. Графики, построенные системой MATLAB, полностью отвечают этим требованиям.
С помощью набора определенных функций системы MATLAB можно в поле графика ввести его название, обозначить оси, ввести пояснение к графику. Также можно определить тип и цвет линий.
Для сравнения графиков система позволяет располагать их в одном поле или в одном окне друг под другом.
Процедуры и функции графической визуализации.
Вывод графиков в системе MATLAB ― настолько простая и удобная операция, что ее можно использовать даже в режиме калькулятора. Основной функцией, обеспечивающей построение графиков на экране дисплея, является функция plot. Общая форма обращения к ней такова:
plot(x1,y1,s1,x2,y2,s2,…)
Здесь x1, y1 ― заданные векторы, элементами которых являются массивы значений аргумента (x1) и функции (y1), отвечающие первой кривой графика; x2, y2 ― массивы значений аргумента и функции второй кривой и т. д. При этом предполагается, что значения аргумента откладываются вдоль горизонтальной оси графика, а значения функции ― вдоль вертикальной оси. Переменные s1, s2, … являются символьными (их указание не является обязательным). Любая из них может содержать до трех специальных символов, определяющих соответственно: а) тип линии, которая соединяет отдельные точки графика; б) тип точки графика; в) цвет линии. Если переменные s не указаны, то типом линии по умолчанию является отрезок прямой, типом точки ― пиксел, а цвет устанавливается в такой очередности: синий, зеленый, красный, голубой, фиолетовый, желтый, черный, белый.
Графики в MATLAB всегда выводятся в отдельное графическое окно, которое называют фигурой.
Для примера выведем на экран график синусоиды (рис.):
x=0:0.001:2*pi; y=sin(x);
plot(x,y)
Рисунок 1. СинусоидаРисунок . Результат применения функции grid
Нанесение сетки из координатных линий обеспечивается с помощью функции grid (рис.). При этом сетка координат всегда соответствует «целым» шагам изменения.
Заголовок выводится в графическое поле с помощью процедуры title(’<текст>’). Текст ввода должен всегда помещаться между апострофами. Аналогично можно вывести объяснения к графику, которые размещаются вдоль горизонтальной оси (функция xlabel) и вдоль вертикальной оси (функция ylabel). Применим эти функции для нашего примера (рис.):
x=0:0.001:2*pi; y=sin(x);
plot(x,y);title('Синусоида');
Xlabel('Значения X'); ylabel('Значения функции'), grid
Рисунок. Результат применения функций title, xlabel, ylabel
В среде matlab несложно выводить и графики, заданные параметрически. Например, построим график функции, которая определена формулами (рис.):
t=0:0.1:50;
x=4*exp(-0.05*t).*sin(t); y=0.2*exp(-0.1*t).*sin(2*t);
plot(x,y); title('Параметрическая функция');
xlabel('x'); ylabel('y'); grid
Рисунок. График параметрически заданной функции
Система MATLAB предоставляет очень удобную возможность ― не указывать аргумент функции при построении ее графика. В таком случае в качестве аргумента система принимает номер элемента вектора, график которого строится. Например, построим график вектора х (рис.7):
x=[3 5 2 7 3 9 1];
plot(x); title('График вектора x');
Xlabel('Номер элемента'); ylabel('Значение элемента'); grid
Если функция задана своими значениями при дискретных значениях аргумента и неизвестно, как она может изменяться в промежутках между значениями аргумента, удобнее представлять ее график в виде отдельных вертикальных линий для любого из заданных значений аргумента. Это можно сделать, применяя процедуру stem, обращение к которой аналогично обращению к процедуре plot (рис.):
stem(x); title('График вектора x');
Xlabel('Номер элемента'); ylabel('Значение элемента')
Рисунок 2. График, построенный с помощью процедуры stem
Чрезвычайно полезной для нас является функция hist (построение графика гистограммы заданного вектора). Стандартное обращение к ней имеет вид:
hist(y,x)
где y ― вектор, гистограмму которого нужно построить; x ― вектор, элементы которого определяют интервал изменения первого вектора. Эта функция осуществляет две операции: 1) подсчитывает количество элементов вектора y, значения которых попадают внутрь соответствующего диапазона, указанного вектором x; 2) строит столбцовую диаграмму подсчитанных чисел элементов вектора y как функцию диапазонов, указанных вектором x.
В качестве примера построим гистограмму вектора у, элементы которого распределены по нормальному закону с математическим ожиданием 0 и среднеквадратическим отклонением 1. Общее количество элементов вектора у 10000 (рис.10):
x=-2.5:0.05:2.5; y=randn(10000,1);
hist(y,x); title('Гистограмма нормального распределения');
Xlabel('X'); ylabel('Вероятность X'); grid
Рисунок 3. Гистограмма функции randn
MATLAB имеет несколько функций, которые позволяют строить графики в логарифмическом масштабе. К примеру, функция logspace с обращением
x=logspace(d1,d2,n)
формирует вектор-строку х, содержащую n равноотстоящих в логарифмическом масштабе друг от друга значений в диапазоне от 10 до 10 .
Функция loglog выводит графики, которые по обеим осям строятся в логарифмическом масштабе. Построение графиков, в которых используется логарифмический масштаб только по одной из координатных осей, осуществляется с помощью процедур semilogx (вертикальная ось) и semilogy (горизонтальная ось). Обращение к этим процедурам аналогично обращению к функции plot.
Д
ля
примера построим амплитудно-частотную
и фаза-частотную характеристики фильтра
нижних частот (рис.), имеющего коэффициент
передачи вида:
Как известно, коэффициент передачи, представляющий из себя комплексное число, равен K(jω)=K(ω)exp(φ(ω)), где K(ω) ― амплитудно-частотная характеристика (модуль комплексного числа), φ(ω) ― фаза-частотная характеристика (аргумент комплексного числа). Воспользуемся известными нам функциями:
f=1:10^4; w=2*pi*f; R=1000; C=10^-5;
K=1./(1+j*w*R*C); ACH=abs(K); FCH=angle(K)*180/pi;
Subplot(2,1,1); semilogx(f,ACH);
title('Амплитудно-частотная характеристика');
Xlabel('Частота (Гц)'); ylabel('Отношение амплитуд'); grid;
subplot(2,1,2); semilogx(f,FCH);
title('Фаза-частотная характеристика');
Xlabel('Частота (Гц)'); ylabel('Фаза (град)'); grid
Рисунок 4. АЧХ и ФЧХ фильтра нижних частот
В этом примере была использована функция subplot. Она необходима, если требуется построить несколько графиков в одном графическом окне, но на разных графических полях. Обращение к ней имеет вид:
subplot(m,n,p).
Здесь m указывает, на сколько частей разделяется графическое окно по вертикали, n, соответственно, ― по горизонтали, а p является номером подокна, в котором будет строиться график. При этом подокна нумеруются слева направо построчно сверху вниз.
Если необходимо изменить режим масштабирования, можно воспользоваться функцией axis: axis([xmin xmax ymin ymax]) устанавливает жесткие границы поля графика в единицах величин, которые откладываются по осям, axis('auto') приводит масштабы по осям по умолчанию, axis('ij') перемещает начало отсчета в левый верхний угол (матричная система координат), axis('xy') возвращает декартову систему координат с началом отсчета в левом нижнем углу графика, axis('square') устанавливает одинаковый диапазон изменения переменных по осям графика, axis('equal') обеспечивает одинаковый масштаб по осям графика.
Команда text(x,y,<'текст'>) позволяет расположить указанный текст в поле графика, при этом начало текста помещается в точку с координатами х и у. Но не всегда удается указать «удобные» координаты, поэтому используют команду gtext('текст'), в результате вызова которой в активном графическом окне появляется перекрестие. Перемещение перекрестия с помощью мыши позволяет указать место начала вывода указанного текста.
Чтобы создать несколько графических окон, в каждом из которых расположены соответствующие графики, можно воспользоваться командой figure. Эта команда создает новое графическое окно, оставляя предыдущие.
Наконец, для того чтобы несколько последовательно вычисленных графиков были изображены в графическом окне в одном стиле, можно использовать команду hold on. Команда hold off выключает режим сохранения графического окна, установленного предшествующей командой.
Для примера построим в одном графическом поле несколько функций Бесселя первого рода различных порядков (рис.12):
x=0:0.1:20; y1=besselj(1,x);
y2=besselj(2,x); y3=besselj(3,x);
figure; hold on; plot(x,y1,x,y2,x,y3); grid;
title('Функции Бесселя первого рода');
Xlabel('X'); ylabel('Значение функции');
text(8,0.45,'Син-1-й порядок; Зел-2-й порядок; Красн-3-й порядок')
Рисунок 5. Функции Бесселя первого рода
Вывод текста в графическое окно.
Как было сказано ранее, разбивка графического окна на подокна осуществляется с помощью процедуры subplot.
Сделаем следующее: выведем графическое окно, которое будет содержать три графических подокна и одно текстовое подокно. Причем графические подокна будут располагаться друг под другом, а текстовое ― справа от них. Для этого с помощью вышеуказанной процедуры разобьем графическое окно на 12 частей. Части объединяются аналогично объединению строк и столбцов матрицы (рис.13):
subplot(3,4,[1 2 3]); subplot(3,4,[5 6 7]);
subplot(3,4,[9 10 11]); subplot(3,4,[4 8 12])
Рисунок 6. Разбивка графического окна Рисунок 7. Результат выполнения
команды axis('off')
Для того чтобы вывести текст в одно из подокон, нужно сначала удалить из данного подокна изображение осей координат и надписей на них. Это делается с помощью команды axis('off') (рис.14).
Основной функцией, обеспечивающей вывод текста в графическое окно, является функция text. Обращение к ней имеет вид:
text(x,y,'<текст>','FontName','<название щрифта>','FontSize',<размер шрифта в пикселах>)
Данная функция осуществляет вывод конкретного текста определенным шрифтом указанного размера, начало текста находится в точке подокна с координатами х и у соответствующего поля графика подокна. При этом координаты х и у измеряются в единицах величин, откладываемых вдоль соответствующих осей. Пример приведен на рис.15:
t=0:0.01:10; y1=sin(t); y2=randn(1,length(t)); y3=2*y1+0.5*y2;
subplot(3,4,1:3); plot(t,y1); grid;
subplot(3,4,5:7); plot(t,y2); grid;
subplot(3,4,9:11); plot(t,y3); grid;
subplot(3,4,[4 8 12]); axis('off');
text(0.1,0.9,'Графики','FontSize',12);
text(0.1,0.8,'функций','FontSize',12);
text(0.05,0.6,'гармонического','FontSize',10);
text(0.35,0.55,'сигнала','FontSize',10);
text(0.15,0.5,'и случайного','FontSize',10);
text(0.3,0.45,'процесса','FontSize',10)
Рисунок 8. Пример текстового оформления графического окна
В данном примере была использована функция length(t), она определяет длину вектора t.
Приложение 2
Описание интерактивной оболочки SPTool
Интерактивная оболочка пакета Signal Processing включает:
средство поиска и просмотра сигналов (Signal Browser);
проектировщик фильтров (Filter Designer);
средство просмотра характеристик фильтров (Filter Viewer);
средство просмотра спектра (Spectrum Viewer).
Оболочка активизируется путем ввода в командном окне MATLAB команды sptool. В результате на экране появится окно SPTool (рис.6.9).
Как видим, это окно содержит три списка: Signals (Сигналы), Filters (Фильтры) и Spectra (Спектры). Под каждым из них имеются кнопки с названиями команд, которые можно применять к объектам списков.
Рисунок 6.1 – Окно SPTool
Под списком Signals (Сигналы) находится единственная кнопка View (Просмотр), это означает, что объекты (сигналы), имена которых содержатся в данном списке, могут быть только просмотрены. К списку Filter (Фильтры) относятся четыре кнопки: View (Просмотр), New (Создать), Edit (Правка), Apply (Применить). Они позволяют просматривать, создавать и редактировать фильтры, а также применять их к одному или нескольким объектам, выделенным в списке Signals (Сигналы). Под списком Spectra (Спектры) располагаются кнопки View (Просмотр), Create (Создать), Update (Обновить), с помощью которых можно просматривать, создавать и обновлять (создавать заново под тем же именем) спектры сигналов.
В указанных списках размещаются имена (идентификаторы) переменных или процедур, входящих в открытый sptool-файл, имеющий расширение .spt (имя этого файла отображается в заголовке окна).
При первом обращении к окну SPTool его заголовок содержит имя файла startup.spt, все три списка окна ― пустые; доступной является только кнопка New Design (Создать). Таким образом, после вхождения в оболочку SPTool допустимой является только операция создания нового фильтра. Чтобы сделать доступными остальные кнопки, необходимо откуда-то импортировать данные о каких-то сигналах. Такие данные должны быть сформированы средствами, не относящимися к оболочке SPTool (например, являться результатом выполнения некоторой программы MATLAB или результатом моделирования в среде Simulink), и записаны как некоторые переменные либо в рабочем пространстве (Workspace), либо на диске в файле с расширением .mat.
6.2 Импорт сигналов
Обрабатывать сигналы в SPTool можно лишь после того, как они сформированы с помощью определенной программы MATLAB, а полученные векторы значений данных этих сигналов импортированы в среду SPTool. Для этого в окне SPTool выберите команду File ► Import (Файл ► Импорт), после чего появится диалоговое окно Import to SPTool (Импорт в SPTool), представленное на рис.6.10.
Рисунок 6.2 – Окно Import to SPTool
В области Source (Источник) данного окна по умолчанию установлен переключатель From Workspace (Из рабочего пространства). Это означает, что окно настроено на импорт сигналов из рабочего пространства MATLAB. Поэтому все имена переменных рабочего пространства представлены в списке Workspace Contents (Содержимое рабочего пространства). В начале сеанса работы данный список пуст.
Допустим, что мы сгенерировали случайные процессы x(t), y(t) и y1(t) в соответствии с программой, приведенной в разделе «Графические средства». В результате в рабочем пространстве MATLAB появились векторы x, y и y1, каждый из которых содержит по 10000 элементов. Импортируем их в среду SPTool. После этого в списке Workspace Contents (Содержимое рабочего пространства) появятся имена всех переменных рабочего пространства MATLAB (рис.6.2).
Выбрав в этом списке необходимую переменную, нужно щелкнуть на кнопке со стрелкой, указывающей на поле Data. В результате в этом поле должно появиться имя выбранной переменной. Затем на поле Sampling Frequency (Частота дискретизации) следует записать желаемое значение частоты дискретизации. Фактически этим параметром задается временной промежуток Ts между отдельными значениями выбранного вектора процесса. В поле Name (Имя) нужно ввести имя, под которым данный вектор будет храниться в среде SPTool. На рис.6.3 виден результат выбора переменной y1, которая будет записана в SPTool под тем же именем с частотой дискретизации 100 Гц (то есть с дискретом времени 0.01 с).
Рисунок 6.3 – Импорт в SPTool сигнала y1
Выполнив описанную подготовительную работу, следует щелкнуть на кнопке OK, и импорт сигнала в среду SPTool будет произведен. После этого окно Import to SPTool исчезнет и окно SPTool изменит свой вид: в списке Signals (Сигналы) появится имя вектора сигнала, станут доступными кнопка View (Вид) под этим списком, а также кнопка Create (Создать), относящаяся к списку Spectra (Спектры). Это означает, что появилась возможность находить спектральные характеристики импортированного сигнала.
6.3 Просмотр сигналов
После импорта вектора сигнала можно воспользоваться средствами его просмотра. Для этого достаточно выделить в списке Signals (Сигналы) необходимый сигнал и щелкнуть на кнопке View (Просмотр), расположенной ниже списка. В результате должно появиться окно Signal Browser (Браузер сигналов). Выбрав в списке сигнал y1, получим окно, изображенное на рис.6.4.
Рисунок 6.4 – Окно Signal Browser
Под заголовком окна расположена строка меню. Меню File (Файл) включает команды, предназначенные для подготовки и вывода на принтер содержимого окна.
Меню Markers (Маркеры) включает в себя следующие команды. Первая команда Markers позволяет включать (отключать) маркеры на изображении процессов. Остальные команды доступны при включенных маркерах. После установки флажка рядом с командой Vertical (По вертикали) отображаются лишь аргументы точек пересечения маркеров с графиком процесса. Если активна команда Horizontal (По горизонтали), создаются горизонтальные линии маркеров, что позволяет отсчитывать только их вертикальные координаты. Команда Track (Отслеживать) возвращает предыдущий режим работы с маркерами. Использование команды Slope (Наклон) приводит к появлению на графике еще одной прямой, соединяющей точки пересечения графика сигнала с маркерными линиями. При этом внизу экрана выводится значение тангенса угла наклона этой прямой к оси абсцисс. Вызов команды Peaks (Максимумы) приводит к тому, что линии маркеров могут быть установлены только в точках максимальных значений сигнала. При этом внизу окна появляются значения этих максимумов и их аргументов. Аналогично, с помощью команды Valleys (Минимумы) определяются точки минимумов сигнала. Наконец, команда Export (Экспорт) позволяет записать изображенную в окне маркерную структуру в виде массива с указанным именем в рабочее пространство MATLAB.
Ниже строки меню находится панель инструментов. С помощью инструментов, расположенных на этой панели, можно произвести действия, предусмотренные меню File (Файл), Markers (Маркеры), Windows (Окна), а также выполнить следующие действия: изменить цвета кривых, изображаемых в окне графиков; изменить масштабы изображения по обеим осям графика; выделить для увеличенного изображения отдельную область графика.
6.4. Создание спектров сигналов
После ввода в окно SPTool сигналов можно найти оценки их спектральных свойств. Для этого достаточно в списке Signals (Сигналы) окна SPTool отметить (выделить) тот сигнал, оценку спектральной плотности которого вы хотите получить, и вызвать команду Create (Создать), относящуюся к списку Spectra (Спектры). При этом на экране появится окно Spectrum Viewer (Просмотр спектра), показанное на рис.6.13.
Рисунок 6.5 – Окно Spectrum Viewer
Новое окно напоминает окно Signal Browser (Браузер сигналов). Панели инструментов этих окон практически одинаковы. Область отображения спектра в окне Spectrum Viewer (Просмотр спектра) в начале сеанса работы является пустой, а слева от нее располагается область, в которой можно выбрать метод нахождения спектральной характеристики сигнала, установить количество его обрабатываемых точек, а также количество точек и тип окна сглаживания.
В раскрывающемся списке Method (Метод) можно выбрать метод вычисления спектра: Burg, FFT, MEM, MTM, MUSIC, Welch или YuleAR. Выбор типа окна, используемого при вычислении спектра, осуществляется с помощью списка Window (Окно). Он содержит следующие элементы: bartlett, blackman, boxcar, chebwin, hamming, hanning, kaiser, triang.
Чтобы начать вычисления, после выбора метода следует щелкнуть на кнопке Apply (Применить), расположенной в правом нижнем углу области. Например, выделим для обработки процесс y1, вызовем команду Create (Создать) и выберем метод FFT. После щелчка на кнопке Apply (Применить) в окне Spectrum Viewer (Просмотр спектра) в области отображения спектра появится спектр сигнала y1(t), показанный на рис.6.14.
Рисунок 6.6 – Cпектр сигнала y1(t)
Применение разработанного фильтра
Использовать в среде SPTool разработанный фильтр чрезвычайно просто. Для этого следует в списке Signals (Сигналы) окна SPTool выделить имя сигнала, который нужно преобразовать с помощью фильтра, а в списке Filters (Фильтры) ― имя фильтра, с помощью которого надо преобразовать этот сигнал, и активизировать команду Apply (Применить). В результате в списке Signals (Сигналы) появится имя нового сигнала, начинающееся с сочетания символов sig, за которым следует порядковый номер.
Полученный сигнал можно просмотреть, как это было описано ранее, используя команду View (Просмотр). Например, применяя только что разработанный фильтр filt1 к сигналу y1(t), получим процесс, изображенный на рис.6.7
Рисунок 6.7 – Результат прохождения сигнала y1(t) через фильтр filt1
Приложение 3
Описание интерактивной среды FDATool
Среда FDATool представляет графический интерфейс для расчета фильтров и просмотра их характеристик. На вкладке Design Filter задается тип синтезируемой АЧХ - фильтр нижних частот, тип фильтра нерекурсивный (FIR), метод синтеза - метод окон (синтез с использованием весовых функций). При проектировании КИХ фильтра в среде FDATool применяются следующие методы: Equiriple - синтез фильтров с равномерными пульсациями АЧХ методом Ремеза; Least-Squares - минимизация реднеквадратичного отклонения АЧХ от заданной и метод окон (Window). В разделе Filter Order задается порядок КИХ-фильтра, Расчет фильтра осуществляется после нажатия кнопки Design Filter.
В методе окон обратное преобразование Фурье частотной характеристики дает бесконечную в обе стороны последовательность отсчетов импульсной характеристики. Для получения КИХ-фильтра заданного порядка эта последовательность усекается путем выбора центрального фрагмента нужной длины. Для ослабления паразитных эффектов в этом методе синтеза усеченная импульсная характеристика умножается на весовую функцию (окно), плавно спадающую к краям.
Рисунок 7.1 − Окно программы FDATool.
7.2 Синтез фильтра
Расчет фильтра начинается с задания требуемых параметров в окне
7.3 Необходимо выбрать тип синтезируемой АЧХ, с помощью переключателя Filter Type (рисунок 3.2).
Возможны следующие варианты:
- Lowpass ( ФНЧ );
- Highpass ( ФВЧ );
- Bandpass ( ПФ );
7.4 Выбрав категорию синтезируемой АЧХ, следует выбрать тип синтезируемого фильтра, установив переключатель, расположенный в разделе Design Method, в положение FIR (нерекурсивный) или IIR (рекурсивный). Каждому типу фильтра соответствует список возможных методов синтеза, перечисленных ниже и показанных на рисунке 3.3.
Нерекурсивные фильтры (FIR):
Equiripple - синтез фильтров с равномерными пульсациями АЧХ методом Ремеза;
Least-Squares – на основе минимизации среднеквадратического откло-нения АЧХ от заданной;
Window - синтез с использованием весовых функций (окон);
Рекурсивные фильтры (IIR):
Синтез осуществляется по различным аналоговым прототипам методом билинейного z-преобразования:
Butterworth - синтез фильтра Баттерворта;
Chebyshev Type I - синтез фильтра Чебышева первого рода;
Chebyshev Type II - синтез фильтра Чебышева второго рода;
Elliptic - синтез эллиптического фильтра;
Рисунок 7.3 - Список возможных методов синтеза фильтров
Выбрать порядок фильтра в разделе Filter Order (см. рисунок 3.2).
Примечание: Возможен автоматический выбор оптимального порядка фильтра путем установки переключателя в положение Minimum Order.
Задать числовые параметры выбранной
АЧХ в разделах Frequency
Specifications, Magnitude
Specifications (рисунок
3.2). Параметры, которые необходимо задать,
иллюстрируются графиком, выводимым в
разделе Filter
Specifications. Это
можно сделать, нажав кнопку
на
панели инструментов. Вид этого графика
меняется в зависимости от выбранного
типа АЧХ.
Выбрав метод синтеза и задав характеристики фильтра, щелкните на расположенной в нижней части окна кнопке для создания вашей модели фильтра.
4. Просмотр характеристик фильтра
После выполнения расчета фильтра, нужно просмотреть его характеристики.
Выбор графика для просмотра производится с помощью кнопок панели инструментов или следующих команд меню Analysis (рисунок 3.2):
Filter Specifications
− вывод графика, поясняющего задание
АЧХ;
Magnitude Response
− вывод графика
АЧХ;
Phase Response −
вывод графика
ФЧХ;
Magnitude and
Phase − одновременный
вывод графиков АЧХ и ФЧХ;
Group Delay
− вывод графика частотной зависимости
групповой задержки;
Impulse Response
− вывод графика импульсной
характеристики;
Phase Delay
– вывод графика частотной зависимости
фазовой задержки;
Step Response
− вывод графика переходной характеристики;
Pole/Zero
Plot − вывод графика
расположения нулей и полюсов на
плоскости;
View Filter
Coefficients− просмотр
коэффициентов фильтра.
Когда на экран выведен какой-либо из
графиков, можно использовать кнопки
Zoom In
и Zoom Out
для управления масштабом отображения.
литература
Рабинер Л, Гоулд Б. Теория и применение цифровой обработки сигналов / Пер. с англ.; Под ред. Ю. И. Александрова. - М.: Мир, 1978.
Оппенгейм А. В., Шафер Р. В. Цифровая обработка сигналов: Пер. с англ. / Под ред. С. Я. Шаца. - М.: Связь, 1979.
Сергиенко А.Б. Цифровая обработка сигналов. 3-е изд. Учеб. пособие. — 3-е изд. — СПб.: БХВ-Петербург, 2011. — 768
А. И. Солонина, С. М. Арбузов Цифровая обработка сигналов. Моделирование в MATLAB. БХВ-Петербург, 2008 г. -814
Дьяконов В. П. MATLAB 7.*/R2006/2007. Самоучитель — Москва.: «ДМК-Пресс», 2008. — С. 768.
1 Черным цветом обозначается ввод пользователя, синим – ответ среды Matlab.
2 В зарубежной литературе для одномерных систем используется сокращение SISO = Single Input Single Output.
3 Полюса передаточной функции являются собственными числами матрицы . Таким образом, если у передаточной функции есть полюс в точке , матрица будет вырожденной.
4 Для нелинейных систем это неверно.
5 Значение возвращается функцией damp как собственная частота для вещественного полюса.
6 Все коэффициенты надо взять из таблицы в конце файла.
7 По умолчанию в Matlab время переходного процесса определяется для 2%-ного отклонения от установившегося значения.
8 Точка с запятой в конце команды подавляет вывод на экран результата выполнения. Это удобно при работе с большими массивами.
9 Частотная характеристика возвращается в виде трехмерного массива, в котором каждый элемент имеет 3 индекса: строка, столбец (для многомерных моделей) и номер точки частотной характеристики. Для системы с одним входом и одним выходом команда r = r(:); преобразует эти данные в в обычный одномерный массив.
10 Этим термином также называется совокупность траекторий, которые описывают корни характеристического уравнения при изменении любого числового коэффициента в системе.
11 Численные значения , , и надо взять из таблицы в конце файла.
12 В зарубежной литературе ЛАФЧХ называют диаграммой Боде.
13 SISO = Single Input Single Output, система с одним входом и выходом.
14 LTI = Linear Time-Invariant, линейная стационарная система.
15 По умолчанию в Matlab время переходного процесса определяется для 2%-ного отклонения от установившегося значения.
