- •Начала программирования в среде 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.2. Общие средства фильтрации |
199 |
|
|
|
|
5.2. Общие средства фильтрации. Формирование случайных процессов
5.2.1. Основы линейной фильтрации
Рассмотрим основы линейной фильтрации на примере линейного стационарного фильтра, который в непрерывном времени описывается дифференциальным уравнением второго порядка:
&& |
& |
2 |
y = A x , |
(5.1) |
y |
+ 2ζωo y +ωo |
где x - заданный процесс, подаваемый на вход этого фильтра второго порядка; y - процесс, получаемый на выходе фильтра; ωo - частота собственных колебаний фильтра, а ζ - относительный коэффициент затухания этого фильтра.
Передаточная функция фильтра, очевидно, имеет вид:
W(s) = |
y(s) |
|
A |
(5.2) |
|
|
= |
|
. |
||
x(s) |
s2 + 2ζωo s +ωo2 |
Для контроля и графического представления передаточной функции любого линейного динамического звена удобно использовать процедуру freqs. В общем случае обращение к ней имеет вид:
h = freqs(b, a, w).
При этом процедура создает вектор h комплексных значений частотной характеристики W ( jω) по передаточной функции W ( s) звена, заданной векторами коэффициентов ее числителя b и знаменателя a, а также по заданному век-тору w частоты ω . Если аргумент w не указан, процедура автоматически выбирает 200 отсчетов частоты, для которых вычисляется частотная характеристика.
Если не указана выходная величина, т.е. обращение имеет вид freqs(b, a, w),
процедура выводит в текущее графическое окно два графика - АЧХ и ФЧХ.
Приведем пример. Пусть для передаточной функции (5.2) выбраны такие значения параметров:
A =1; |
ζ = 0.05; |
To = 2π / ωo =1. |
|
Вычислим значения коэффициентов числителя и знаменателя и выведем |
|||
графики АЧХ и ФЧХ: |
|
|
|
T0=1; |
dz=0.05; om0=2*pi/T0; A=1; |
|
|
a1(1)=1; |
a1(2)=2*dz*om0; a1(3)= om0^2; |
b1(1)=A; |
|
freqs(b1,a1) |
|
|
|
В результате получим рис. 5.16. |
|
||
Допустим, что заданный процесс x (t) |
представлен в виде отдельных его |
значений в дискретные моменты времени, которые разделены одинаковыми промежутками Ts времени (дискретом времени). Обозначим через x (k ) значение процесса в момент времени t = k Ts , где k - номер измерения с начала процесса.
5.2. Общие средства фильтрации |
200 |
||
|
|
|
|
|
|
|
|
Рис. 5.16
Запишем уравнение (5.1) через конечные разности процессов x и y , учитывая, что конечно-разностным эквивалентом производной y& является конечная разность
∆y(k ) = y(k ) − y(k −1) ,
T s T s
а эквивалентом производной второго порядка y является конечная разность вто- |
|||||||||||
|
|
|
|
|
|
|
|
&& |
|
|
|
рого порядка |
|
|
|
|
|
|
|
|
|
|
|
∆2 y(k ) |
= |
∆y(k ) − ∆y(k −1) = |
y(k ) − 2 y(k −1) + y(k − 2) |
. |
|
||||||
Ts2 |
|
|
Ts2 |
|
|
|
Ts2 |
|
|||
Тогда разностное уравнение |
|
|
|
|
|
|
|||||
(1 + 2ζωo Ts +ωo2 Ts2 ) y(k ) − 2(1 +ζωo Ts) y(k −1) + y(k − 2) = A Ts2 x(k ) |
(5.3) |
||||||||||
является дискретным аналогом дифференциального уравнения (5.1). |
|||||||||||
|
|||||||||||
Применяя к полученному уравнению Z-преобразование, получим: |
|
||||||||||
y(z ) [a |
+a z −1 |
+a |
2 |
z −2 |
] = A Ts2 x (z ) , |
(5.4) |
|||||
|
|
o |
1 |
|
|
|
|
|
|
||
где |
a |
=1+2ζω |
o |
Ts +ω2 |
Ts2 ; |
|
|||||
|
o |
|
|
|
|
o |
|
|
|
||
|
|
|
a1 = −2(1+ζωo Ts); |
(5.5) |
a2 =1.
Дискретная передаточная функция фильтра определяется из уравнения
(5.4):
5.2. Общие средства фильтрации |
|
|
|
201 |
|||||
|
|
|
|
|
|
|
|
||
G(z ) = |
y(z ) |
= |
|
A Ts2 |
, |
(5.6) |
|||
x (z ) |
ao +a1 |
z −1 |
+a2 z −2 |
||||||
|
|
|
|
|
Таким образом, цифровым аналогом ранее введенного колебательного звена является цифровой фильтр с коэффициентами числителя и знаменателя, рассчитанными по формулам (5.4) и (5.5):
T0=1; |
dz=0.05; Ts=0.01; |
|
om0=2*pi/T0; 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*Ts*Ts*(2*dz*om0^2); |
|
Чтобы получить частотную дискретную характеристику G(e jω ) по дискретной передаточной функции G( z ), которая задана векторами значений ее числителя b и знаменателя a, удобно использовать процедуру freqz, обращение к которой аналогично обращению к процедуре freqs :
freqz( b,a)
Рис. 5.17
В системе MatLAB фильтрация, т.е. преобразование заданного сигнала с помощью линейного фильтра, описываемого дискретной передаточной функцией вида
|
y(z ) |
|
b |
+ b z −1 |
+...+b |
z −m |
|
|
G(z ) = |
|
= |
o |
1 |
m |
|
(5.7) |
|
x (z ) |
ao +a1 z −1 +...+an z −n |
|||||||
|
|
|
осуществляется процедурой filter следующим образом y = filter(b, a, x),
где x - заданный вектор значений входного сигнала; y - вектор значений выходного сигнала фильтра, получаемого вследствие фильтрации; b - вектор коэффициен-
5.2. Общие средства фильтрации |
202 |
|
|
|
|
тов числителя дискретной передаточной функции (5.7) фильтра; a - вектор коэффициентов знаменателя этой функции.
В качестве примера рассмотрим такую задачу. Пусть требуется получить достаточно верную информацию о некотором "полезном" сигнале, имеющем синусоидальную форму с известным периодом Т1 =1с и амплитудой А1 =0.75. Сформируем этот сигнал как вектор его значений в дискретные моменты времени с дискретом Тs = 0.001 с:
Ts=0.001; t=0 : Ts : 20; A1=0.75; T1=1; Yp=A1*sin(2*pi*t/T1);
plot(t(10002:end),Yp(10002:end)),grid,set(gca,'FontName','ArialCyr','FontSize',16) title('"Полезный" процесс '); xlabel('Время (с)'); ylabel('Yp(t)')
Рис. 5.18
Рис. 5.19
5.2. Общие средства фильтрации |
203 |
|
|
|
|
Допустим, что вследствие прохождения через ПП (первичный преобразователь) к полезному сигналу добавился шум ПП в виде более высокочастотной синусоиды с периодом Т2 = 0.2с и амплитудой А2=5, а в результате измерения к нему еще добавился белый гауссовый шум измерителя с интенсивностью Аш =5. В результате создался такой измеренный сигнал x(t) (см. рис. 5.19):
T2=0.2;; A2=10; eps=pi/4; Ash=5; x=A1.*sin(2*pi*t./T1)+A2.*sin(2*pi.*t./T2+eps)+Ash*randn(1,length(t)); plot(t(10002:end),x(10002:end)),grid,set(gca,'FontName','ArialCyr','FontSize',16), title('Входной процесс '); xlabel('Время (с)'); ylabel('X(t)')
Требуется так обработать измеренные данные x, чтобы восстановить по ним полезный процесс как можно точнее.
Так как частота полезного сигнала заранее известна, восстановление его можно осуществить при помощи резонансного фильтра отмеченного выше вида. При этом необходимо создать такой фильтр, чтобы период его собственных колебаний Тф был равен периоду колебаний полезного сигнала (Тф = Т1). Для того, чтобы после прохождения через такой фильтр амплитуда восстановленного сигнала совпадала с амплитудой полезного сигнала, нужно входной сигнал фильтра
умножить на постоянную величину 2ςωo2 (ибо при резонансе амплитуда выходно-
го сигнала "уменьшается" именно во столько раз по сравнению с амплитудой входного сигнала). Сформируем фильтр, описанный выше:
T1=1; |
Tf=T1; |
dz=0.05; |
|
om0=2*pi/Tf; 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*Ts*Ts*(2*dz*om0^2); |
|
и "пропустим" сформированный процесс через него
y=filter(b,a,x)
plot(t(10002:end),y(10002:end),t(10002:end),Yp(10002:end)),grid, set(gca,'FontName','Arial Cyr','FontSize',16)
title('Процесс на выходе фильтра (Tf=1; dz=0.05)'); xlabel('Время (с)'); ylabel('Y(t)')
Рис. 5.20
5.2. Общие средства фильтрации |
204 |
|
|
|
|
В результате получаем восстановленный процесс (рис. 5.20). Для сравнения на этом же графике изображен восстанавливаемый процесс.
Как видим, созданный фильтр достаточно хорошо восстанавливает полезный сигнал. Однако более точному восстановлению препятствуют два обстоятельства:
1) восстановленный процесс устанавливается на выходе фильтра только спустя некоторое время вследствие нулевых начальных условий самого фильтра как динамического звена; это иллюстрируется ниже, на рис. 5.21;
y=filter(b,a,x)
plot(t,y,t,Yp),grid, set(gca,'FontName','Arial Cyr','FontSize',16) title('Процесс на выходе фильтра (Tf=1; dz=0.05)'); xlabel('Время (с)'); ylabel('Y(t)')
Рис. 5.21
2) в установившемся режиме наблюдается значительный сдвиг (π / 2 ) фаз между восстанавливаемым и восстановленным процессами; это тоже понятно, так как при резонансе сдвиг фаз между входным и выходным процессами достигает именно такой величины.
Чтобы избежать фазовых искажений полезного сигнала при его восстановлении, можно воспользоваться процедурой двойной фильтрации - filtfilt. Обращение к ней имеет такую же форму, что и к процедуре filter. В отличие от последней, процедура filtfilt осуществляет обработку вектора x в два приема: сначала в прямом, а затем в обратном направлении.
Результат применения этой процедуры в рассматриваемом случае приведен на рис. 5.22.
y=filtfilt(b,a,x)
plot(t,y,t,Yp),grid, set(gca,'FontName','Arial Cyr','FontSize',16) title('Применение процедуры FILTFILT');
xlabel('Время (с)'); ylabel('Y(t)')