- •Начала программирования в среде 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.4. Проектирование фильтров |
223 |
|
|
|
|
Группа функций xcorr вычисляет оценку Взаимной Корреляционной Функции (ВКФ) двух последовательностей x и y. Обращение c = xcorr(x,y) вычисляет и выдает вектор c длины 2N-1 значений ВКФ векторов x и y длины N. Обращение c = xcorr(x) позволяет вычислить АКФ (автокорреляционную функцию) последовательности, заданной в векторе x.
Вычислим АКФ для случайного процесса, сформированного ранее:
R=xcorr(y1); |
tau= -10+Ts : Ts : 10; |
lt=length(tau ); |
|
s1r=round(length(R )/2)-lt/2; |
s2r=round(length(R )/2)+lt/2-1; |
||
plot(tau,R(s1r:s2r)),grid |
|
|
set(gca, 'FontName', 'Arial Cyr', 'FontSize', 16)
title('АКФ случайного процесса') , xlabel('Запаздывание (с)')
На рис. 5.43 представлен результат применения процедуры xcorr.
5.4. Проектирование фильтров
5.4.1. Формы представления фильтров и их преобразования
Фильтр как звено системы автоматического управления может быть представлен в нескольких эквивалентных формах, каждая из которых полностью описывает его:
в форме рациональной передаточной функции (tf - представление); если звено является непрерывным (аналоговым), то оно описывается непрерывной передаточной функцией
W (s) = |
b(s) |
= |
b(1) sm + b(2) sm−1 |
+... + b(m +1) |
, |
(5.34) |
|
a(s) |
a(1) sn + a(2) sn−1 |
+... + a(n +1) |
|||||
|
|
|
|
а в случае дискретного фильтра последний может быть представлен дискретной передаточной функцией вида
W (z) = |
b(z) |
= |
b(1) + b(2) z −1 +... + b(m +1) |
z −m |
; |
(5.35) |
|
a(z) |
a(1) + a(2) z −1 +... + a(n +1) |
z −n |
|||||
|
|
|
|
в обоих случаях для задания звена достаточно задать два вектора - вектор b коэффициентов числителя и а - знаменателя передаточной функции;
в виде разложения передаточной функции на простые дроби; в случае простых корней такое разложение имеет вид (для дискретной передаточ-
ной функции):
b(z) |
= |
|
r(1) |
+... + |
|
r(n) |
+ k(1) + k(2) z −1 +... |
|
a(z) |
1− p(1) z −1 |
1− p(n) z −1 |
||||||
|
|
(5.36) |
... + k(m − n +1) z −(m−n) ;
в этой форме звено описывается тремя векторами: вектором-столбцом r вычетов передаточной функции, вектором столбцом p полюсов и векто- ром-строкой k коэффициентов целой части дробно-рациональной функции;
5.4. Проектирование фильтров |
224 |
|
|
|
|
в каскадной форме (sos - представление), когда передаточная функция звена представлена в виде произведения передаточных функций не выше второго порядка:
L |
|
L b +b |
z−1 +b |
|
z−2 |
|
|||
H (z) = ∏H |
k |
(z) =∏ |
ok |
1k |
2k |
|
; |
||
|
+ a |
|
z−2 |
||||||
k=1 |
k=1 a |
ok |
z−1 + a |
2k |
|
||||
|
|
|
|
1k |
|
|
|
параметры каскадного представления задаются в виде матрицы жащей вещественные коэффициенты:
bo1b11b21ao1a11a21
sos = bo2b12b22ao2a12a22 ;
..................
boLb1Lb2L aoL a1L a2L
(5.37)
sos, содер-
(5.38)
в пространстве состояний (ss -представление), т. е. с помощью уравнений звена в форме
x = A x + B u |
|
|
& |
; |
(5.39) |
y = C x + D u |
в этой форме звено задается совокупностью четырех матриц A,B,C и D;
путем задания векторов z нулей передаточной функции, p - ее полюсов и k - коэффициента передачи звена (zp - представление):
W (s) = k |
[s − z(1)] |
[s − z(2)] [s − z(m)] |
|
; |
(5.40) |
|
[s − p(1)] |
[s − p(2)] [s − p(n)] |
|||||
|
|
|
решетчатое latc-представление; в этом случае решетчатый фильтр задается векторами k коэффициентов знаменателя решетчатого дискретного фильтра и v - коэффициентов его числителя; коэффициенты k решетчатого представления некоторого полинома с коэффициентами, представленными вектором а, определяются по этому вектору с помощью рекурсивного алгоритма Левинсона.
Пакет SIGNAL предоставляет пользователю ряд процедур, позволяющих преобразовать звено (фильтр) из одной формы в другую.
Процедуры преобразования к tf-форме
1. Процедура zp2tf осуществляет вычисления векторов b коэффициентов числителя и a знаменателя передаточной функции в форме (5.34) по известным векторам z ее нулей, p - ее полюсов и k - коэффициенту усиления звена. Обращение к процедуре имеет вид:
[ b, a] = zp2tf( z, p, k).
В общем случае многомерного звена величина z является матрицей, число столбцов которой должно быть равно числу выходов. Вектор-столбец k содержит коэффициенты усиления по всем выходам звена. В векторе a выдаются вычисленные коэффициенты знаменателя, а матрица b содержит коэффициенты
5.4. Проектирование фильтров |
225 |
|
|
|
|
числителей. При этом каждая строка матрицы соответствует коэффициентам числителя для отдельной выходной величины.
2.Процедура ss2tf преобразовывает описание звена (системы) из пространства состояний в форму передаточной функции. Обращение к ней вида
[ b, a] = ss2tf ( A, B, C, D, iu)
позволяет найти коэффициенты числителей (b) и знаменателя (а) передаточных функций системы по всем выходным величинам и по входу с номером "iu", если заданы матрицы A, B, C, D описания системы в виде (5.39).
3.Процедура sos2tf позволяет найти передаточную функцию звена по заданным параметрам каскадной формы. Для этого надо обратиться к этой процедуре таким образом:
[ b, a] = sos2tf ( sos),
где sos - заданная матрица каскадной формы (5.38).
4.С помощью процедуры latc2tf можно вычислить коэффициенты числителя и знаменателя передаточной функции (5.35) по коэффициентам знаменателя и числителя решетчатого фильтра. При этом обращение к ней должно иметь один из видов:
[ b, a] = latc2tf( k, v) [ b, a] = latc2tf( k, 'iir') b = latc2tf( k, 'fir')
b = latc2tf( k).
Первый вид используется, если заданы коэффициенты решетчатого представления и числителя v и знаменателя k БИХ-фильтра (фильтра с Бесконечной Импульсной Характеристикой).
Вторая форма - если решетчатый БИХ-фильтр имеет только полюсы. Третья и четвертая формы применяются для вычисления коэффициентов
передаточной функции решетчатого КИХ-фильтра (с Конечной Импульсной Характеристикой).
5.Нахождение коэффициентов передаточной функции по коэффициентам разложения ее на простые дроби (5.36) осуществляется использованием функций residue и residuez. Первая применяется для непрерывной передаточной функции вида (5.34), вторая - для дискретной передаточной функции (5.35). При обращении вида
[ b, a] = residue( r, p, k) [ b, a] = residuez( r, p, k)
вычисляются коэффициенты числителя и знаменателя передаточной функции по заданным векторам ее разложения - вычетов r, полюсов p и коэффициентам целой части k.
Спомощью тех же процедур осуществляется разложение заданной передаточной функции на простые дроби.
При этом обращение к ним должно быть таковым: [ r, p, k] = residue(b, a)
[ r, p, k] = residuez( b, a).
5.4. Проектирование фильтров |
226 |
|
|
|
|
Процедуры перехода от tf - формы к другим
1.Вычисление нулей, полюсов и коэффициентов усиления звена с заданной передаточной функцией можно осуществить, применяя процедуру tf2zp в такой форме:
[ z, p, k] = tf2zp(b, a).
При этом вектор z будет содержать значения нулей передаточной функции с коэффициентами числителя b и знаменателя а, вектор p - значения полюсов, а k будет равен коэффициенту усиления звена.
2.Нахождение матриц A, B, C и D, описывающих звено с заданной передаточной функцией в виде совокупности дифференциальных уравнений в форме Коши (5.39), осуществимо с помощью процедуры tf2ss. Если обратиться к ней в форме
[A, B, C, D] = tf2ss( b, a),
где b и a - соответственно векторы коэффициентов числителя и знаменателя передаточной функции, то в результате получим искомые матрицы в указанном порядке.
3.Вычисление коэффициентов решетчатого фильтра по заданной дис-
кретной передаточной функции можно осуществить при помощи процедуры tf2latc, обращаясь к ней так:
[ k, v] = tf2latc( b, a) [ k, v] = tf2latc( 1, a) k = tf2latc( 1, a)
k = tf2latc( b).
Первое обращение позволяет вычислить коэффициенты k знаменателя и v - числителя решетчатого БИХ-фильтра (модель авторегрессии скользящего среднего). Обращение во второй форме дает возможность определить вектор коэффициентов знаменателя k и скалярный коэффициент v, когда БИХ-фильтр имеет только полюсы (не имеет нулей). В третьей форме определяются только коэффициенты знаменателя решетчатого фильтра. Наконец, четвертая форма предназначена для нахождения вектора k коэффициентов решетчатого КИХ-фильтра (задаваемого только вектором b коэффициентов числителя передаточной функции).
Другие преобразования 1. Вычисление коэффициентов решетчатого представления по коэффици-
ентам полинома можно осуществить, используя функцию poly2rc. Обращение k = poly2rc( а)
позволяет найти коэффициенты решетчатого представления k по коэффициентам а заданного полинома. Вектор а должен содержать только вещественные элементы и должно выполняться условие a ≠ 0 . Размер вектора k на единицу меньше размера вектора а коэффициентов полинома.
По коэффициентам решетчатого представления очень просто определить, находятся ли все полюсы внутри единичного круга. Для этого достаточно прове-