- •Начала программирования в среде MatLab
- •Содержание
- •Предисловие
- •Введение
- •1. MatLAB как научный калькулятор
- •1.1. Командное окно
- •1.2. Операции с числами
- •1.2.1. Ввод действительных чисел
- •1.2.2. Простейшие арифметические действия
- •1.2.3. Ввод комплексных чисел
- •1.2.4. Элементарные математические функции
- •1.2.5. Специальные математические функции
- •1.2.6. Элементарные действия с комплексными числами
- •1.2.7. Функции комплексного аргумента
- •1.2.8. Задания
- •1.2.9. Вопросы
- •1.3. Простейшие операции с векторами и матрицами
- •1.3.1. Ввод векторов и матриц
- •1.3.2. Формирование векторов и матриц
- •1.3.3. Извлечение и вставка частей матриц
- •1.3.4. Действия над векторами
- •1.3.5. Поэлементное преобразование матриц
- •1.3.6. Матричные действия над матрицами
- •1.3.7. Матричные функции
- •1.3.8. Задания
- •1.3.9. Вопросы
- •1.4. Функции прикладной численной математики
- •1.4.1. Операции с полиномами
- •1.4.2. Обработка данных измерений
- •1.4.3. Функции линейной алгебры
- •1.4.4. Аппроксимация и интерполяция данных
- •1.4.5. Векторная фильтрация и спектральный анализ
- •1.4.6. Задания
- •1.4.7. Вопросы
- •1.5. Построение простейших графиков
- •1.5.1. Процедура plot
- •1.5.2. Специальные графики
- •1.5.3. Дополнительные функции графического окна
- •1.5.5. Задания
- •1.5.6. Вопросы
- •1.6. Операторы управления вычислительным процессом
- •1.6.1. Оператор условного перехода
- •1.6.2. Оператор переключения
- •1.6.3. Операторы цикла
- •1.6.4. Задания
- •1.6.5. Вопросы
- •2. Программирование в среде MatLAB
- •2.1. Функции функций
- •2.2. Создание М-файлов
- •2.2.1. Особенности создания М-файлов
- •2.3.1. Общие требования к построению
- •2.3.2. Типовое оформление процедуры-функции
- •2.3.3. Задания
- •2.3.4. Вопросы
- •2.4. Создание Script-файлов
- •2.4.1. Основные особенности Script-файлов
- •2.4.2. Ввод и вывод информации в диалоговом режиме
- •2.4.3. Организация повторения действий
- •2.4.4. Организация изменения данных в диалоговом режиме
- •2.4.5. Типовая структура и оформление Script-файла
- •2.5. Графическое оформление результатов
- •2.5.1. Общие требования к представлению графической информации
- •2.5.2. Разбивка графического окна на подокна
- •2.5.3. Вывод текста в графическое окно (подокно)
- •2.6. Создание функций от функций
- •2.6.1. Процедура feval
- •2.6.2. Примеры создания процедур от функций
- •2.6.3. Задания
- •2.7. Пример создания сложной программы
- •2.7.1. Программа моделирования движения маятника
- •2.7.2. Задания
- •3.1. Функции меню командного окна
- •3.1.2. Другие меню командного окна
- •3.1.3. Панель инструментов
- •3.2. Команды общего назначения
- •3.3. Создание М-книги
- •3.3.1. Начало новой М-книги
- •3.3.2. Написание М-книги
- •3.3.3. Редактирование М-книги
- •3.3.4. Преобразование документа WORD в М-книгу
- •3.3.6. Изменение параметров вывода результатов
- •4. Классы вычислительных объектов
- •4.1. Основные классы объектов
- •4.1.1. Класс символьных строк (char)
- •4.1.2. Класс записей (struct)
- •4.1.3. Класс ячеек (cell)
- •4.2. Производные классы MatLAB
- •4.2.1. Класс объектов Inline
- •4.2.2. Классы пакета CONTROL
- •4.3. Пример создания нового класса polynom
- •4.3.1. Создание подкаталога @polynom
- •4.3.2. Создание конструктора
- •4.3.3. Создание процедуры символьного представления polynom-объекта.
- •4.4. Создание методов нового класса
- •5.1. Формирование типовых процессов
- •5.1.1. Формирование одиночных импульных процессов
- •5.1.2. Формирование колебаний
- •5.2.1. Основы линейной фильтрации
- •5.2.2. Формирование случайных процессов
- •5.3. Процедуры спектрального (частотного) и статистического анализа процессов
- •5.3.1. Основы спектрального и статистического анализа
- •5.3.2. Примеры спектрального анализа
- •5.3.3. Статистический анализ
- •5.4. Проектирование фильтров
- •5.4.1. Формы представления фильтров и их преобразования
- •5.4.2. Разработка аналоговых фильтров
- •5.4.3. Проектирование БИХ-фильтров
- •5.5. Графические и интерактивные средства
- •5.5.1. Графические средства пакета SIGNAL
- •5.5.2. Интерактивная оболочка SPTOOL
- •6.1. Ввод и преобразование моделей
- •6.2. Получение информации о модели
- •6.3. Анализ системы
- •6.4. Интерактивный "обозреватель" ltiview
- •6.5. Синтез системы
- •7.1. Общая характеристика пакета SimuLink
- •7.1.1. Запуск SimuLink
- •7.1.2. Библиотека модулей (блоков)
- •7.1.3. Раздел Sinks (приемники)
- •7.1.4. Раздел Sources (Источники)
- •7.1.5. Раздел Сontinuous
- •7.1.6. Раздел Discrete
- •7.1.7. Раздел Math
- •7.1.8. Раздел Functions & Tables
- •7.1.9. Раздел Nonlinear
- •7.1.10. Раздел Signals & Systems
- •7.2. Построение блок-схем
- •7.2.1. Выделение объектов
- •7.2.2. Оперирование с блоками
- •7.2.3. Проведение соединительных линий
- •7.2.4. Проставление меток сигналов и комментариев
- •7.2.5. Создание подсистем
- •7.2.6. Запись и распечатка блок-схемы S-модели
- •7.3. Примеры моделирования
- •7.3.1. Моделирование поведения физического маятника
- •7.3.2. Моделирование поведения гироскопа в кардановом подвесе
- •7.4. Объединение S-моделей с программами MatLAB
- •7.4.2. Функции пересечения нуля
- •7.4.5. Образование S-блоков путем использования программ MatLab. S-функции
- •7.4.6. Пример создания S-функции
- •7.5.1. Создание библиотеки
- •7.5.2. Маскировка блоков
- •7.5.3. Моделирование процесса ориентации космического аппарата
- •Послесловие
- •Предметный указатель
- •Указатель операторов, команд, функций и функциональных блоков MatLAB
5.3. Спектральный и статистический анализ |
212 |
|
|
|
|
Формулы (5.21), (5.22) и (5.28) являются основой для вычислений в системе MatLAB соответственно Фурье-изображения процесса, его комплексного спектра и взаимной спектральной плотности двух процессов.
5.3.2. Примеры спектрального анализа
Чтобы применить процедуру fft как преобразование процесса, представленного во временной области, в его представление в частотной области, следует, как было отмечено в разделе 1.4.5, сделать следующее:
- по заданному значению дискрета времени Ts рассчитать величину Fmax диапазона частот (в герцах) по формуле:
Fmax = 1/Ts; |
(5.30) |
- по заданной длительности заданного процесса Т рассчитать дискрет |
|
частоты df по формуле: |
|
df =1/T; |
(5.31) |
- по вычисленным данным сформировать вектор значений частот, в кото- |
|
рых будет вычислено Фурье-изображение. |
|
Последнее проще (но не наиболее правильно) сделать таким образом: |
|
f1=0 : df : Fmax. |
(5.32) |
В результате применения процедуры fft будет получено представление |
|
процесса в частотной области. Обратная процедура ifft, если ее применить |
к ре- |
зультатам первого преобразования, дает возможность восстановить исходный процесс во временной области.
Однако процедура fft не дает непосредственно Фурье-изображения процесса. Чтобы получить Фурье-изображение, надо сделать следующее (см. раздел
1.4.5):
к результатам действия процедуры fft применить процедуру fftshift, которая переставляет местами первую и вторую половины полученного вектора;
перестроить вектор частот по алгоритму
f = -Fmax/2 : df : Fmax/2. |
(5.33) |
Приведем примеры.
Фурье-изображение прямоугольного импульса
Сформируем процесс, состоящий из одиночного прямоугольного импульса.
Зададим дискрет времени Ts=0.01с, длительность процесса Т=100с, амплитуду
импульса А=0.75 и его ширину w=0.5с:
Ts=0.01; T=100; A=0.75; w=0.5; t=0 : Ts : T; y = A*rectpuls(t, w);
plot(t(1:100),y(1:100)), grid, set(gca,'FontName','Arial Cyr','FontSize',16), title('Процесс из одиночного прямоугольного импульса '); xlabel('Время (с)'); ylabel('Y(t)')
Результат показан на рис. 5.27.
5.3. Спектральный и статистический анализ |
213 |
||
|
|
|
|
|
|
|
|
Рис. 5.27
Рис. 5.28
Применим к вектору y процедуру fft и построим график зависимости мо-
дуля результата от частоты. При этом графики в частотной области удобнее вы-
водить при помощи процедуры stem (см. рис. 5.28):
x=fft(y); df=1/T; Fmax=1/Ts; f=0 : df : Fmax; a=abs(x); stem(f,a), grid, set(gca,'FontName','Arial Cyr','FontSize',14), title('Модуль FFT-преобразования прямоугольного импульса '); xlabel('Частота (Гц)'); ylabel('Модуль')
Теперь построим график модуля Фурье-изображения процесса:
xp=fftshift(x); f1=-Fmax/2 : df : Fmax/2; a=abs(xp); stem(f1,a), grid, set(gca,'FontName','Arial Cyr','FontSize',14), title('Модуль Фурье-изображения прямоугольного импульса '); xlabel('Частота (Гц)'); ylabel('Модуль')
Получим результат, приведенный на рис. 5.29.
5.3. Спектральный и статистический анализ |
214 |
||
|
|
|
|
|
|
|
|
Рис. 5.29
Рис. 5.30
В заключение построим графики действительной и мнимой частей Фурье-
изображения прямоугольного импульса:
dch=real(xp); mch=imag(xp);
plot(f1,dch,f1,mch), grid, set(gca,'FontName','Arial Cyr','FontSize',16), title('Фурье-изображение прямоугольного импульса '); ylabel('Действит. и Мнимая части'), xlabel('Частота (Гц)');
Они представлены на рис. 5.30.
Фурье-изображение полигармонического процесса
Рассмотрим пример трехчастотных гармонических колебаний - с частотою 1/π , 1 та 3 Гц и амплитудами соответственно 0.6, 0.3 та 0.7:
y(t ) = 0.6 cos(2t ) + 0.3 sin(2π t ) + 0.7 cos(6π t +π / 4) .
5.3. Спектральный и статистический анализ |
215 |
|
|
|
|
Найдем Фурье-изображение этого процесса и выведем графики самого процесса, модуля его Фурье-изображения, а также действительную и мнимую части:
Ts = 0.01; T = 100; t = 0 : Ts : T;
Y = 0.6*cos(2*t)+0.3*sin(2*pi*t)+0.7*cos(6*pi*t+pi/4); plot(t,Y), grid, set(gca,'FontName','Arial Cyr','FontSize',16), title(' Трехчастотный полигармонический процесс '); xlabel('Время (с)'); ylabel('Y(t)')
График процесса показан на рис. 5.31.
Рис. 5.31
Находим модуль Фурье-изображения этого процесса:
df = 1/T; |
Fmax = 1/Ts; |
dovg=length(t); |
f = - Fmax/2 : df : Fmax/2; |
|
|
X = fft(Y); |
Xp = fftshift(X); |
A = abs(Xp); |
s1 = dovg/2 - 400;s2 = dovg/2 + 400; |
||
stem(f(s1:s2),A(s1:s2)), grid, |
|
set(gca,'FontName','Arial Cyr','FontSize',14),
title('Модуль Фурье-изображения полигармонического процесса'); xlabel('Частота (Гц)'); ylabel('Модуль')
Результат представлен на рис. 5.32.
5.3. Спектральный и статистический анализ |
216 |
||
|
|
|
|
|
|
|
|
Рис. 5.32
Если изменить дискрет времени на Ts=0.02, получим результат, изображенный на рис. 5.33.
Рис. 5.33
Как видно, результат Фурье-преобразования в значительной степени зависит от величины дискрета времени и мало что говорит об амплитудах гармониче-
ских составляющих. Это обусловлено различием между определениями Фурьеизображения и комплексного спектра. Поэтому для незатухающих (установившихся, стационарных) колебаний любого вида намного удобнее находить не Фу- рье-изображение, а его величину, деленную на число точек в реализации. В пре-
дыдущей части программы это эквивалентно замене оператора X=fft(Y) на X = fft(Y)/dovg,где dovg - длина вектора t.
5.3. Спектральный и статистический анализ |
217 |
||
|
|
|
|
|
|
|
|
Рис. 5.34
Рис. 5.35
В результате получается комплексный спектр (рис. 5.34), полностью соответствующий коэффициентам комплексного ряда Фурье.
Выделим действительную и мнимую части комплексного спектра:
dch = real(Xp); mch = imag(Xp); s1 = dovg/2 - 400;s2 = dovg/2 + 400;
subplot(2,1,1), plot(f(s1:s2),dch(s1:s2)), grid, set(gca,'FontName','Arial Cyr','FontSize',10), title('Комплексный спектр полигармонических колебаний'); ylabel('Действит. часть');
subplot(2,1,2) , plot(f(s1:s2),mch(s1:s2)), grid, set(gca,'FontName','Arial Cyr','FontSize',10),
5.3. Спектральный и статистический анализ |
218 |
|
xlabel('Частота (Гц)'); ylabel('Мнимая часть') |
|
|
По полученным графикам (рис. 5.35) можно судить не только о частотах и амплитудах, а и о начальных фазах отдельных гармонических составляющих.
Фурье-изображение случайного процесса
В заключение рассмотрим Фурье-преобразование случайного стационарного процесса, сформированного ранее (см. рис. 5.25). Сначала сформируем процесс в виде белого гауссового шума (рис. 5.36) с шагом во времени 0.01 и длительностью в 100 с :
Ts=0.01; T = 100; t=0 : Ts : T; % Задание параметров процесса x1=randn(1,length(t)); % Формирование белого шума
% Построение графика белого шума
plot(t,x1),grid, set(gca,'FontName','Arial Cyr','FontSize',16) title('Белый Гауссовый шум (СКО= 1; Ts= 0.01)'); xlabel('Время (с)'); ylabel('X1(t)');
Теперь создадим формирующий фильтр, "пропустим" через него белый шум и результат выведем на рис. 5.37:
% Расчет параметров формирующего фильтра
om0=2*pi; dz=0.05; |
A=1; oms=om0*Ts; |
|
a(1)= 1+2*dz*oms+oms^2; a(2)= - 2*(1+dz*oms); |
a(3)=1; |
|
b(1)=A*2*dz*oms^2; |
|
|
%Формирование "профильтрованного" процесса y1=filter(b,a,x1);
%Построение графика процесса
plot(t,y1),grid, set(gca,'FontName','Arial Cyr','FontSize',16) title('Процесс на выходе фильтра (T0=1; dz=0.05, Ts= 0.01)'); xlabel('Время (с)'); ylabel('Y1(t)')
Вычислим Фурье-изображение (ФИ) для процесса-шума с учетом замечания, сделанного для установившихся процессов и построим на рис. 5.38 графики модуля ФИ и спектральной плотности мощности (СПМ):
Рис. 5.36
5.3. Спектральный и статистический анализ |
219 |
||
|
|
|
|
|
|
|
|
Рис. 5.37
Рис.5.38
% Формирование массива частот |
|
|
df = 1/T; |
Fmax = 1/Ts; f = - Fmax/2 : df : Fmax/2; |
dovg = length(f); |
% Расчет скорректированных массивов Фурье-изображений |
|
|
Fu1 = fft(x1)/dovg; Fu2 = fft(y1)/dovg; Fu1p = fftshift(Fu1); |
Fu2p = fftshift(Fu2); |
|
% Формирование массивов модулей ФИ |
|
|
A1 = abs(Fu1p); |
A2 = abs(Fu2p); |
|
% Вычисление Спектральных Плотностей Мощности
S1 = Fu1p.*conj(Fu1p)*dovg;S2 = Fu2p.*conj(Fu2p)*dovg;
% Вывод графиков белого шума subplot(2,1,1); stem(f,A1),grid, set(gca,'FontName','Arial Cyr','FontSize',10) title('Модуль ФИ гауссового белого шума');
5.3. Спектральный и статистический анализ |
220 |
|
|
|
|
subplot(2,1,2); stem(f,S1),grid, set(gca,'FontName','Arial Cyr','FontSize',10) title('Спектральная плотность мощности'); xlabel('Частота (Гц)');
Рассматривая рис. 5.38, можно убедиться, что спектральная плотность практически одинакова по величине во всем диапазоне частот, чем и обусловлено название процесса - "белый шум".
Аналогичную процедуру проведем и с "профильтрованным" процессом
(рис. 5.39):
Рис. 5.39
Рис. 5.40.
% Вывод графиков профильтрованного процесса c1 = fix(dovg/2)-200, c2 = fix(dovg/2)+200, length(f) subplot(2,1,1); stem(f(c1:c2),A2(c1:c2)),grid, set(gca,'FontName','Arial Cyr','FontSize',16)
title('Модуль ФИ случайного стационарного процесса'); subplot(2,1,2); stem(f(c1:c2),S2(c1:c2)),grid, set(gca,'FontName','Arial Cyr','FontSize',16)