лаба4. Лабораторная работа 4 Линейные дискретные системы Дискретные сигналы и системы
![]()
|
Исследование импульсных систем с помощью среды Scilab © К. Поляков, 2016 Лабораторная работа № 4Линейные дискретные системыДискретные сигналы и системы Дискретный сигнал – это сигнал, определённый только для отдельных моментов времени, которые нумеруются целыми числами. Время 0 обозначает начало отсчёта (начальный момент времени). Для каждого момента времени с номером k (где k – целое число) значение дискретного сигнала e обозначается как e[k]. Дискретный сигнал {e[k]} – это последовательность значений e[0], e[1],e[2], …. Обычно рассматривают сигналы для неотрицательных значений k. Рассмотрим такой сигнал (считаем, что он равен 0 при k > 6): ![]() Его значения при k = 0, 1, 2, … (отмеченные на графике кружками) равны e[0] = 0, e[1] = 1, e[2] = 2, e[3] = 3, e[4] = 2, e[5] = 1, e[6] = 0 В Scilab эту последовательность можно представить в виде массива e = [0 1 2 3 2 1 0] z-преобразование такого сигнала вычисляется по общей формуле ![]() Поскольку при k ≥ 6 сигнал равен 0, то есть e[6] = e[7] = e[8] = … = 0, бесконечная сумма становится конечной: Z{e[k]} = e[0]∙z0 + e[1]∙z-1 + e[2]∙z-2 + e[3]∙z-3 + e[4]∙z-4 + e[5]∙z-5 + e[6]∙z-6 Подставляя числовые значения e[k], получаем Z{e[k]} = z-1 + 2∙z-2 + 3∙z-3 + 2∙z-4 + z-5 . Дискретная система – это система, вход и выход которой – дискретные сигналы, то есть, последовательности чисел. Входную и выходную последовательности будем обозначать соответственно как {e[k]} и {v[k]}. Буква k в квадратных скобках – это номер отсчёта или номер такта – целое число. Момент k = 0 соответствует началу наблюдений. Обычно рассматривают последовательности, которые начинаются с k = 0: {e[k]}: e[0], e[1],e[2], … {v[k]}: v[0], v[1],v[2], … Линейные дискретные системы Линейной называется система, которая обладает двумя свойствами: свойство суперпозиции: реакция на сумму сигналов равна сумме реакций этой системы на отдельные сигналы. Если {v1[k]} – это реакция системы на входной сигнал {e1[k]} и {v2[k]} – это реакция системы на входной сигнал {e2[k]}, то выход линейной системы при входе {e1[k]+e2[k]} равен {v1[k]+ v2[k]}. свойство однородности: умножение входного сигнала на постоянную приводит к умножению выходного сигнала на ту же постоянную. Если {v0[k]} – это реакция системы на входной сигнал {e0[k]}, то выход линейной системы при входе {e0[k]} равен {v0[k]}. Обычно рассматривают стационарные системы, свойства которых не изменяются во времени. Это означает, что сдвиг во времени входного сигнала на m тактов приводит к такому же сдвигу выходного сигнала. Например, если {v0[k]} – это реакция системы на входной сигнал {e0[k]}, то выход линейной системы при входе {e0[k–m]} равен {v0[k–m]}. На рисунке показан сдвиг во времени (запаздывание) входного и выходного сигнала на 1 такт (m = 1). ![]() Система, для которой это свойство выполняется (при всех m) – стационарная. Цифровой фильтр Линейная дискретная система – это цифровой фильтр, то есть программа для обработки оцифрованного сигнала (последовательности чисел). По входной последовательности значений {e[k]} фильтр строит на выходе новую последовательность {v[k]}: ![]() Например, линейный цифровой фильтр второго порядка вычисляет очередное значение сигнала выхода v[k] по формуле v[k] = a2·e[k] + a1·e[k–1] + a0·e[k–2] – b1·v[k–1] – b0·v[k–2] Здесь a2,a1, a0, b1 и b0 – коэффициенты фильтра; e[k] – текущее (только что полученное) значение входного сигнала; e[k–1] и e[k–2] – два предыдущих значения входного сигнала полученные соответственно в моменты k–1 и k–2; v[k–1] и v[k–2] – два предыдущих значения выходного сигнала. Вычислим реакцию такого фильтра на единичный ступенчатый входной сигнал e[k], который равен 0 при всех k < 0 и равен 1 при всех k 0: … = e[–2] = e[–1] = 0 e[0] = e[1] = e[2] = … = 1 Подставляя эти значения, получаем v[0] = a2·e[0] = a2 v[1] = a2·e[1] + a1·e[0] – b1·v[0] = a2 + a1 – b1·v[0] v[2] = a2 +a1 +a0 – b1·v[1] – b0·v[0] … Так последовательно можно найти значения v[k] при всех k 0. Рассмотрим особый случай, когда b1 = b0 = 0, то есть уравнение фильтра не использует прошлых значений выхода: v[k] = a2·e[k] + a1·e[k–1] + a0·e[k–2] В этом случае получаем v[0] = a2, v[1] = a2 +a1 v[2] = a2 +a1 +a0 v[3] = a2 +a1 +a0 … Это значит, что, начиная с момента k = 2, все значения сигнала выхода будут равны a2 +a1 +a0, то есть переходный процесс заканчивается за конечное число шагов. Такие фильтры называются фильтрами с конечной импульсной характеристикой (КИХ-фильтрами). Для того, чтобы в Scilab вычислить реакцию дискретной системы (цифрового фильтра) на заданный входной сигнал, используют функцию flts: --> F = syslin('d', 0.5*%z-0.2, %z-0.5) --> e = [0 1 2 3 2 1 0] --> v = flts ( e, F ) Первая строка этой программы задаёт цифровой фильтр с передаточной функцией ![]() во второй строке строится входной сигнал, а в третьей – с помощью функции flts вычисляется соответствующий ему выходной сигнал {v[k]}: v = [0. 0.5 1.05 1.625 1.2125 0.70625 0.153125] Установившееся значение По уравнению фильтра можно определить установившееся значение выходного сигнала (если оно существует). Пусть на вход поступает единичный ступенчатый сигнал. Тогда в установившемся режиме выход не меняется, то есть должно выполняться равенство v[k] = v[k–1] = v[k–2] = v = const Поэтому, учитывая, что e[k] = e[k–1] = e[k–2] = 1, получаем v = a2 +a1 +a0 – b1·v – b0·v Отсюда сразу следует, что ![]() Передаточная функция Вернёмся снова к уравнению фильтра: v[k] = a2·e[k] + a1·e[k–1] + a0·e[k–2] – b1·v[k–1] – b0·v[k–2] и запишем его в операторной форме, используя оператор запаздывания z–1, такой что z–1v[k] = v[k–1], … z–mv[k] = v[k–m]. Получаем v[k] = a2·e[k] + a1·z–1e[k] + a0· z–2e[k] – b1· z–1v[k] – b0· z–2v[k] Перенесем все значения выходного сигнала в левую часть: v[k] + b1· z–1v[k] + b0· z–2v[k] = a2·e[k] + a1·z–1e[k] + a0· z–2e[k] и вынесем общие множители в обеих частях: (1 + b1· z–1 + b0· z–2) v[k] = (a2 + a1·z–1 + a0· z–2) e[k] Разделим обе части равенства на скобку в левой части: ![]() Умножим числитель и знаменатель на z2: ![]() Функция ![]() называется передаточной функцией цифрового фильтра. Для КИХ-фильтра знаменатель передаточной функции имеет вид zN, например, ![]() Заметим, что установившееся значение на выходе фильтра при единичном ступенчатом входе можно найти, подставив в передаточную функцию А(z) вместо z единицу: ![]() Использование z-преобразования Зная z-преобразование входного сигнала E(z) и передаточную функцию дискретной системы F(z), можно найти z-преобразование выходного сигнала V(z) простым умножением: V(z) = F(z) · E(z) Например, пусть на вход системы с передаточной функцией ![]() действует единичный ступенчатый входной сигнал, который имеет z-преобразование ![]() Тогда ![]() По теореме о начальном значении для такого изображения имеем ![]() В то же время по теореме о конечном значении ![]() Модели в пространстве состояний Дискретная система может быть описана не только передаточной функцией, но и моделью в пространстве состояний: ![]() Здесь ![]() ![]() Вектор-столбец u[k] – это сигнал управления, поступающий на систему (он тоже может быть векторным). Наконец, y[k] – это сигнал выхода системы. Матрицы A, B, C и D для стационарной системы – постоянные; их размеры таковы, что можно выполнить матричное умножение: матрица A имеет размеры ![]() матрица B имеет размеры ![]() матрица C имеет размеры ![]() матрица D имеет размеры ![]() Для системы с двумя состояниями (n = 2), одним входом (m = 1) и одним выходом (q = 1) эти матрицы выглядят так: ![]() где ![]() ![]() может быть переписана в скалярном виде так: ![]() Модель в пространстве состояний в Scilab задаётся c помощью функции syslin: --> G = syslin('d', A, B, C, D ) Параметр 'd' говорит о том, что система – дискретная (discrete-time). Передаточная функция системы, заданной моделью в пространстве состояний, может быть получена по формуле ![]() где I обозначает единичную матрицу того же размера, что и матрица A. В Scilab такое преобразованиевыполняет функция ss2tf: --> Gtf = ss2tf ( G ) Функция tf2ss выполняет обратный переход, от передаточной функции к модели в пространстве состояний. --> G1 = tf2ss ( Gtf ) Выполнив эти команды, вы можете обнаружить, что матрицы модели G1 отличаются от матриц A, B, C и D, которые мы задали ранее в модели G. Это связано с тем, что одной и той же системе соответствует бесконечное множество моделей в пространстве состояний. Можно показать, что при любой невырожденной матрице T (определитель которой – не ноль) можно заменить матрицу A на TAT-1, матрицу B – на TB и матрицу С – на CT-1 (а матрицу Dоставить без изменений), и мы таким образом построим новую модель в пространстве состояний для той же системы. При этом мы фактически заменяем вектор состояния, переходя от исходного вектора x[k] к новому вектору Tx[k]. Причем этой новой модели будет соответствовать та же самая передаточная функция. Статический коэффициент усиления системы можно найти по теореме о конечном значении: ![]() Можно показать, что при замене A на TAT-1, B на TB и С на CT-1 ни передаточная функция, ни статический коэффициент усиления не изменяются. Устойчивость Устойчивость модели в пространстве состояний определяется матрицей A. Если система не управляется, то есть u[k] = 0, модель собственного движения системы описывается уравнением ![]() Пусть известны начальные условия: x[0] = x0. Тогда можно вычислить значения вектора состояния в следующие моменты времени: ![]() ![]() … ![]() То, как будет вести себя этот процесс, зависит от собственных чисел матрицы A, то есть от корней уравнения ![]() где det обозначает определитель квадратной матрицы. Матрица размером ![]() Если некоторые собственные числа матрицы A по модулю равны 1, а остальные – меньше 1, система находится на границе устойчивости. Это значит, что при ненулевых начальных условиях вектор состояния x[k] не стремится к бесконечным значениям, но и не сходится у нулю. Если у матрицы A есть хотя бы одно собственное число, модуль которого больше 1, система неустойчива – при ненулевых начальных условиях некоторые компоненты вектора состояния стремятся к бесконечности. Как следует из формулы преобразования ![]() ![]() ![]() Знаменатель передаточной функции называется характеристическим полиномом системы, потому что его корни определяют устойчивость системы. Моделирование Для моделирования реакции дискретных моделей в пространстве состояний на заданный входной сигнал используют функцию dsimul. Сначала нужно построить входной сигнал как массив значений. Например, для моделирования на отрезке от 0 до 15 единичный импульсный сигнал строится так: --> t = [0:15] --> xImp = zeros(t) --> xImp(1) = 1 В первой строке программы мы задаем массив значений времени – от 0 до 15. Во второй строке строится сигнал, состоящий из нулей и имеющий тот же размер, что и массив t. Затем в первый элемент этого массива записываем 1 – это (единственное ненулевое) значение сигнала при t = 0. Теперь остается вызвать функцию dsimul: --> yImp = dsimul ( G, xImp ) Единичный ступенчатый сигнал строится еще проще – все его значения равны 1, используется функция ones: --> t = [0:15] --> xStep = ones(t) Передаточные функции системы с регулятором Рассмотрим дискретную систему, в которой дискретный объект с передаточной функцией G(z) управляется регулятором с передаточной функцией C(z): ![]() Если разорвать обратную связь, то получается разомкнутая система: ![]() Её передаточная функция равна произведению передаточных функций двух блоков: Wopen(z) = C(z) G(z). Для замкнутой системы справедлива такая же формула, как и для непрерывных систем: ![]() В Scilab эту передаточную функцию можно вычислить так: W = C*Gtf / (1 + C*Gtf); Кроме того, в Scilab добавили специальный оператор «/.», и ту же передаточную функцию можно построить иначе: W = C*Gtf /. 1; Слева от оператора /. записывается передаточная функция разомкнутой системы (без обратной связи), а справа – передаточная функция отрицательной обратной связи (в данном случае – 1). Люди, будьте бдительны! При использовании оператора «/.» с единичной обратной связью после точки обязательно ставить пробел, иначе запись W = C*Gtf /.1; воспринимается как W = C*Gtf / 0.1; и вычисляет совершенно другую передаточную функцию. |