© К. Поляков, 2020 Библиотека ddesign.sci для Scilab Версия 1.1 от 19.02.2023 Общее описание ...........................................................................................................................2 с2d ...................................................................................................................................................3 сwiener ............................................................................................................................................4 dcgain...............................................................................................................................................5 dnorm ..............................................................................................................................................6 mindeadbeat ...................................................................................................................................7 dkalman ...........................................................................................................................................9 dwiener ..........................................................................................................................................10 factorzeta .......................................................................................................................................11 h2reg ..............................................................................................................................................12 mindeadbeat .................................................................................................................................14 separzeta .......................................................................................................................................15 sfactor ............................................................................................................................................16 sfactorzeta .....................................................................................................................................17 showstep........................................................................................................................................18 step ................................................................................................................................................20 tf.....................................................................................................................................................22 ss ....................................................................................................................................................24 z2zeta .............................................................................................................................................27 © К. Поляков, 2020 Общее описание Библиотека ddesign.sci – это набор функций для среды Scilab (www.scilab.org) для анализа и синтеза дискретных и цифровых систем управления. Для того чтобы использовать функции библиотеки в своём скрипте, нужно выполнить файл ddesign.sci, вызвав функцию exec и указав адрес файла: exec("E:\ddesign.sci"); Можно указать и относительный адрес. Если файл ddesign.sci находится в том же каталоге, что и скрипт с основной программой, нужно выполнить следующие команды: path = get_absolute_file_path( "<имя файла>.sce") chdir(path) exec("ddesign.sci"); Здесь <имя файла> нужно заменить на название файла, в котором записан скрипт. Сначала определяется абсолютный путь к этому файлу, затем командой chdir этот путь устанавливается как текущий каталог. Последняя строка загружает файл библиотеки. © К. Поляков, 2020 с2d Dsys = c2d ( sys, T ) дискретизация непрерывной системы методом фиктивного квантования Параметры sys модель непрерывной системы в формате передаточной функции или пространства состояний T интервал квантования Результаты Dsys дискретная модель системы в том же формате, в котором была исходная модель Пример использования F = syslin( "c", 1, %s*(10*%s+1) ); T = 1; DF = c2d ( F, T ) DF = 0.0467884 + 0.0483742z -------------------------2 0.9048374 - 1.9048374z + z © К. Поляков, 2020 сwiener [F,sigma,Fu,sigmaU] = cwiener( Sx, Sn ) линейный стационарный непрерывный фильтр Винера Параметры Sx Sn спектральная плотность полезного сигнала, рациональная функция от переменной или s спектральная плотность шума, рациональная функция от переменной или s Результаты F оптимальный устойчивый фильтр Винера, рациональная функция от s sigma дисперсия ошибки фильтрации при использовании оптимального устойчивого фильтра Винера Fu оптимальный неустойчивый фильтр Винера, рациональная функция от s sigmaU дисперсия ошибки фильтрации при использовании оптимального неустойчивого фильтра Винера Пример использования Sx = syslin( "c", -4, %s^2-4 ); Sn = syslin( "c", -144, %s^2-225 ); [Copt,Dopt,Cu,Du] = cwiener ( Sx, Sn ) Copt = 1.336 + 0.0891s ----------------3.158 + s Dopt = 0.706 Cu = 2 - 6.081 + 0.0270s ----------------2 - 9.973 + s Du = 0.6161954 © К. Поляков, 2020 dcgain g = dcgain ( sys ) статический коэффициент усиления системы Параметры sys модель непрерывной или дискретной системы в формате передаточной функции, «нули-полюса» или пространства состояний Результаты g статический коэффициент усиления системы Пример использования F = syslin( "c", 1, (%s+1)*(10*%s+1) ); g1 = dcgain( F ) g1 = 1. ssF = tf2ss( F ); g2 = dcgain( ssF ) g2 = 1. G = syslin( "d", %z - 0.8, 10*%z - 1 ); g3 = dcgain( G ) g3 = 0.0222222 © К. Поляков, 2020 dnorm n = dnorm ( F ) H2-норма дискретной системы Параметры F дискретная модель в пространстве состояний или передаточная функция Результаты n H2-норма дискретной системы = среднеквадратическое отклонение сигнала выхода при действии на вход единичного белого шума Пример использования F = syslin( "d", 0.2, %z-0.5 ); N = dnorm( F ) N = 0.231 Fss = tf2ss ( F ); Nss = dnorm( Fss ) Nss = 0.231 © К. Поляков, 2020 mindeadbeat [a0,a1,b] = ddesign2dof ( D, M ) [a0,a1,b] = ddesign2dof ( D, M, nInt ) [a0,a1,b] = ddesign2dof ( D, M, nInt, alpha ) проектирование дискретного регулятора с двумя степенями свободы по эталонной модели Параметры D дискретная модель объекта управления – рациональная функция от переменной M дискретная эталонная модель – рациональная функция от переменной nInt количество интеграторов, которые нужно добавить в состав регулятора (по умолчанию 0) alpha сдвиг области устойчивости: если это значение задано, все корни, для которых Re(1/) > –, относятся к неустойчивой части Результаты a0, a1, b полиномы регулятора с двумя степенями свободы, функции переменной Пример использования P = syslin( "c", 0.1, %s*(10*%s+1) ); T = 1; D = ss2tf ( dscr(P,T) ); Dzeta = horner( D, 1/%z ); Wm = syslin( "c", 1, %s^2 + 1.5*%s + 1 ); WmZ = ss2tf( dscr(Wm, T) ); WmZeta = horner( WmZ, 1/%z ); [a0,a1,b] = ddesign2dof(Dzeta, WmZeta) a0 = 239.661 - 140.924z a1 = 61.655 + 37.082z b = 1 + 0.967z C0zeta = syslin( "d", a0, b ) C0 = horner( C0zeta, 1/%z ) C0zeta = 239.661 - 140.924z ------------------1 + 0.967z C0 = © К. Поляков, 2020 - 140.924 + 239.661z ---------------------0.967 + z C1zeta = syslin( "d", a1, b ) C1 = horner( C1zeta, 1/%z ) C1zeta = 61.655 + 37.082z ---------------------1 + 0.967z C1 = 37.082 + 61.655z ---------------------0.967 + z © К. Поляков, 2020 dkalman [L,P] = dkalman ( A, B1, C, Rw, Rksi ) линейный стационарный дискретный фильтр Калмана Параметры A, B1, C матрицы модели системы в пространстве состояний x[k+1] = A*x[k] + B*u[k] + B1*w[k] y[k] = C*x[k] + [k] где w[k] и [k] независимые дискретные белые шумы Rw ковариационная матрица возмущения w[k] Rksi ковариационная матрица шума измерения [k] Результаты L матрица усиления стационарного дискретного фильтра Калмана P апостериорная ковариационная матрица ошибки – решение уравнения Риккати Пример использования A = [1 0; 0 1]; B1 = [1; 0.1]; C = [2 1; 1 2]; Rw = 0.1; Rksi = [1 0 0 2]; [L,P] = dkalman( A, B1, C, Rw, Rksi ) L = 0.2064320 0.0589806 0.0206432 0.0058981 P = 0.1983010 0.0198301 0.0198301 0.0019830 © К. Поляков, 2020 dwiener [F,sigma,Fu,sigmaU] = dwiener( Sx, Sn ) линейный стационарный дискретный фильтр Винера Параметры Sx спектральная плотность полезного сигнала, рациональная функция от переменной z Sn спектральная плотность шума, рациональная функция от переменной z Результаты F оптимальный устойчивый фильтр Винера, рациональная функция от переменной z sigma дисперсия ошибки фильтрации при использовании оптимального устойчивого фильтра Винера Fu оптимальный неустойчивый фильтр Винера, рациональная функция от переменной z sigmaU дисперсия ошибки фильтрации при использовании оптимального неустойчивого фильтра Винера Пример использования Sx = syslin( "d", -0.04*%z, .. 0.8*%z^2 - 1.64*%z + 0.8 ); Sn = syslin( "d", -0.36*%z, .. 0.2*%z^2 - 1.04*%z + 0.2 ); [Copt,Dopt,Cu,Du] = dwiener ( Sx, Sn ) Copt = - 0.0353992 + 0.1769962z ---------------------- 0.6938023 + z Dopt = 0.0739848 Cu = 2 0.0270270 - 0.1405405z + 0.0270270z ----------------------------------2 1 - 2.1351351z + z Du = 0.0650791 © К. Поляков, 2020 factorzeta [ps,pu] = factorzeta ( p, alpha ) факторизация полинома от переменной Параметры p полином от любой переменной или последовательность коэффициентов alpha параметр сдвига области неустойчивости: если это значение задано, все корни, для которых Re(1/) > –, относятся к неустойчивой части Результаты ps устойчивый сомножитель (полином или последовательность коэффициентов полинома), все его корни находятся вне единичного круга (при = 0) pu неустойчивый сомножитель (полином или последовательность коэффициентов полинома) , все его корни находятся внутри единичного круга (при = 0) Пример использования p = (%z + [ps,pu] = ps = 1.9 + pu = – 0.5 1.9)*(%z – 0.5) factorzeta( p ) z + z alpha = 0 [ps,pu] = factorzeta( p, alpha ) ps = 1 pu = 2 - 0.95 + 1.4z + z p = [-0.2 -1.9 1] [ps,pu] = factorzeta( p ) ps = - 2. 1. pu = 0.1 1. © К. Поляков, 2020 h2reg [K, H2norm,W] = h2reg ( sys, o2, i2, options ) синтез H2-оптимального регулятора для непрерывной или дискретной стандартной системы Параметры sys модель стандартной системы в форме передаточной функции или пространства состояний o2 количество выходов второго блока (количество измеряемых сигналов); по умолчанию o2=1 i2 количество входов второго блока (количество сигналов управления); по умолчанию i2=1 options опции – структура, которая может включать следующие поля: options.tol – допустимая относительная ошибка (по умолчанию 10–4) options.method – метод синтеза: 'sa' – формулы М. Сафонова и Р. Чанга (строго правильный регулятор) 'ch' – формулы Б. Чена и Б. Фрэнсиса (правильный регулятор), только для дискретных систем по умолчанию для дискретных систем выбирается метод 'ch', а для непрерывных возможен только метод 'sa' Результаты K H2-оптимальный регулятор – модель в пространстве состояний H2norm H2-норма передаточной функции оптимальной замкнутой системы W модель оптимальной замкнутой системы в пространстве состояний Пример использования P = syslin( 'c', 0.1, 10*%s^2+%s ); Fw = syslin( 'c', 0.5, 1 ) rho = 1 sys = [-P*Fw 0 -P 0 0 rho -P*Fw -Fm -P]; [Copt,H2norm,Wss] = h2reg ( sys ); Copt = ss2tf( Copt ) disp( H2norm, "H2norm = ") W = ss2tf( Wss ) Copt = 0.05 + 0.428s ------------------------2 © К. Поляков, 2020 0.0770 + 0.405s + s H2norm = 0.0449 W = column 1 2 - 0.000385 - 0.00202s - 0.005s ---------------------------------------2 3 4 0.0005 + 0.0120s + 0.117s + 0.505s + s - 0.00025 - 0.00214s ---------------------------------------2 3 4 0.0005 + 0.0120s + 0.117s + 0.505s + s column 2 0.00005 + 0.0004281s ---------------------------------------2 3 4 0.0005 + 0.0120s + 0.117s + 0.505s + s 2 3 - 0.0005s - 0.00928s - 0.0428s ---------------------------------------2 3 4 0.0005 + 0.0120s + 0.117s + 0.505s + s Fx = syslin( 'd', 0.2, %z-0.8 ); Fn = syslin( 'd', 0.6, %z-0.2 ); sys = [-Fx 0 1; Fx Fn 0]; [Copt,H2norm,W] = h2reg ( sys ) Copt = ss2tf( Copt ) W = ss2tf( W ) Copt = - 0.0354 + 0.177z --------------- 0.694 + z H2norm = 0.272 W = - 0.164 0.106 ------------- ------------- 0.694 + z - 0.694 + z © К. Поляков, 2020 mindeadbeat [C,E] = mindeadbeat ( D, R ) [C,E] = mindeadbeat ( D, R, alpha ) проектирование дискретного регулятора с минимальным временем переходного процесса Параметры D дискретная модель объекта управления – рациональная функция от переменной R изображение входного сигнала – рациональная функция от переменной alpha сдвиг области устойчивости: если это значение задано, все корни, для которых Re(1/) > –, относятся к неустойчивой части Результаты С E передаточная функция регулятора от переменной изображение сигнала ошибки от переменной Пример использования P = syslin( "c", 0.1, %s*(10*%s+1) ); T = 1; D = ss2tf ( dscr(P,T) ); Dzeta = horner( D, 1/%z ); R = syslin( "d", %z, %z-1 ); Rzeta = horner( R, 1/%z ); [Czeta,Ezeta] = mindeadbeat(Dzeta, Rzeta) C = horner( Czeta, 1/%z ) Czeta = - 1 + 0.9048374z ---------------------- 0.0048374 - 0.0046788z Ezeta = 1 C = 0.9048374 - z --------------------- 0.0046788 - 0.0048374z © К. Поляков, 2020 separzeta [Fs,Fu] = separzeta ( S ) правильная сепарация рациональной функции от переменной Параметры S скалярная рациональная функция от переменной Результаты Fs устойчивая рациональная функция, все её полюса находятся вне единичного круга Fu строго правильная неустойчивая рациональная функция, все её полюса находятся внутри единичного круга, степенно числителя строго меньше степени знаменателя Пример использования n = %z^2 + 0.5*%z - 0.1 d = (%z + 1.9)*(%z - 0.5) S = syslin( "d", n, d ) [Fs,Fu] = separzeta( S ) Fs = 0.8333333 + z ------------1.9 + z Fu = 0.1666667 --------- 0.5 + z © К. Поляков, 2020 sfactor Fs = sfactor ( S ) спектральная факторизация спектральной плотности от переменной s или z Параметры S скалярная спектральная плотность, для непрерывных ситсем должно выполняться равенство S(s) = S(–s), для дискретных – S(z) = S(z–1) Результаты Fs устойчивая рациональная функция, для непрерывных систем все её полюса находятся в левой полуплоскости, для дискретных – вне единичного круга Пример использования Sn = syslin( "c", -144, %s^2-225 ); Fs = sfactor ( S ) Fs = 12 -----15 + s S = syslin( "d", -0.36*%z, .. 0.2*%z^2 - 1.04*%z + 0.2 ); Fs = sfactor ( S ) Fs = 0.6z ------ 0.2 + z © К. Поляков, 2020 sfactorzeta Fs = sfactorzeta ( S ) спектральная факторизация спектральной плотности от переменной Параметры S скалярная спектральная плотность от переменной , такая что S() = S(–1) Результаты Fs устойчивая рациональная функция, все её полюса находятся вне единичного круга Пример использования S = syslin( "d", -0.36*%z, .. 0.2*%z^2 - 1.04*%z + 0.2 ); Fs = sfactorzeta ( S ) Fs = 0.6 ------1 - 0.2z © К. Поляков, 2020 showstep [y,t] = showstep ( sys, Tfinal ) показать переходную характеристику непрерывной или дискретной системы Параметры sys модель линейной стационарной системы в пространстве состояний или передаточная функция Tfinal время моделирования; если не задано, то вычисляется автоматически Результаты y значения выхода системы t значения соответствующих моментов времени Пример использования F = syslin( "c", 1, %s+1 ); showstep( F ); D = syslin( "d", 0.5, 0.5, 1, 0 ); showstep( D ); D = syslin( "d", 0.5, 0.5, 1, 0 ); showstep( D, 5 ); © К. Поляков, 2020 © К. Поляков, 2020 step [y,t] = step ( sys, Tfinal ) вычисление переходной характеристики непрерывной или дискретной системы Параметры sys модель линейной стационарной системы в пространстве состояний или передаточная функция Tfinal время моделирования; если не задано, то вычисляется автоматически Результаты y значения выхода системы t значения соответствующих моментов времени Пример использования F = syslin( "c", 1, %s+1 ); [y, t] = step( F ) y = 0. 0.0588061 0.1141540 ... 0.9973664 0.9975212 t = 0. 0.0606061 0.1212121 ... 5.9393939 6. D = syslin( "d", 0.5, 0.5, 1, 0 ); [yd, td] = step( D ) y = 0. 0.5 0.75 ... 0.9995117 0.9997559 t = 0. © К. Поляков, 2020 1. 2. ... 11. 12. D = syslin( "d", 0.5, 0.5, 1, 0 ); [yd, td] = step( D, 5 ) y = 0. 0.5 0.75 0.875 0.9375 0.96875 t = 0. 1. 2. 3. 4. 5. © К. Поляков, 2020 tf sys = tf ( S ) sys = tf ( n, d ) sys = tf ( n, d, type ) построение модели в форме передаточной функции Параметры S модель непрерывной или дискретной системы в пространства состояний n числитель передаточной функции d знаменатель передаточной функции type тип модели: "c" для непрерывных систем и "d" для дискретных систем; если тип не указан, предполагается, что type = "c" Результаты sys модель системы в форме передаточной функции Пример использования A = [-1 0;1 -2]; S = syslin( "c", A, [1;0], [1 1], 0 ); T = tf( S ) T = 3 + s --------2 2 + 3s + s F = tf( %s+1, %s*(10*%s + 1) ) F = 1 + s ------2 s + 10s G = tf( %z, %z*(10*%z + 1) ) G = z ------2 z + 10z Xs = tf( [1 0], [10 1 0] ) Xs = s ------- © К. Поляков, 2020 2 s + 10s Xd = tf( [1 0], [10 1 0], "d" ) Xd = z ------2 z + 10z © К. Поляков, 2020 ss sys = ss ( T ) sys = ss ( A, B, C, D ) sys = ss ( A, B, C, D, type ) построение модели в пространстве состояний Параметры T модель непрерывной или дискретной системы в виде передаточной функции A, B, C, D матрицы модели в пространстве состояний type тип модели: "c" для непрерывных систем и "d" для дискретных систем; если тип не указан, предполагается, что type = "c" Результаты sys модель системы в пространстве состояний Пример использования A = [-1 0;1 -2]; Sc = ss( A, [1;0], [1 1], 0 ); ssprint( Sc ) . |-1 0 | | 1 | x = | 1 -2 |x + | 0 |u y = | 1 1 |x Sd = ss( A, [1;0], [1 1], 0, "d" ); ssprint( Sd ) + |-1 0 | | 1 | x = | 1 -2 |x + | 0 |u y = | 1 1 |x F = syslin( "c", 1, %s*(%s+1) SF = ss( F ); ssprint( SF ) . | 0 1 | ); | 0 | x = | 0 -1 |x + | 1 |u y = | 1 0 |x D = syslin( "c", %z+0.2, %z*(%z-0.8) SD = ss( D ); ); © К. Поляков, 2020 ssprint( SD ) . | 0.962 -0.192 | |-1.074 | x = | 0.808 -0.162 |x + | 0.215 |u y = |-0.931 0 |x © К. Поляков, 2020 dioph [x,y,err] = dioph ( a, b, c ) решение диофантова полиномиального уравнения a*x + b*y = c Параметры a, b, b полиномы от одной переменной Результаты x, y полиномы, такие что a*x + b*y = c полином x имеет наименьшую возможную степень ( deg(b)) err ошибка: норма полинома a*x + b*y – c Пример использования A = [-1 0;1 -2]; Sc = ss( A, [1;0], [1 1], 0 ); ssprint( Sc ) . |-1 0 | | 1 | © К. Поляков, 2020 z2zeta sysz = z2zeta ( sys ) замена переменной в передаточной функции z = z–1 Параметры sys модель дискретной системы в формате передаточной функции или константа Результаты sysz модель дискретной системы в формате передаточной функции, в которой выполнена замена переменной z = z–1; знаменатель передаточной функции приведённый (его старший коэффициент равен 1) Пример использования exec("ddesign.sci"); F = syslin( "d", %z - 0.8, 3*%z - 1 ) Fzeta = z2zeta ( F ) Fzeta = - 10 + 8z ------- 30 + z