ответвлено от main/python-labs
36 строки
1.2 KiB
Python
36 строки
1.2 KiB
Python
class SAU:
|
|
def __init__(self, zn_param):
|
|
self.param = zn_param
|
|
self.ypr = [0, 0]
|
|
|
|
def zdn_zn(self, upr):
|
|
self.x = upr
|
|
|
|
def model(self):
|
|
def inerz(x, T, yy):
|
|
return (x + T * yy) / (T + 1)
|
|
|
|
y0 = self.x - self.ypr[1] * self.param[3] # Обр.связь с усилителем 2
|
|
y1 = self.param[0] * y0 # Усилитель1
|
|
y2 = inerz(y1, self.param[1], self.ypr[0]) # Инерционное звено1
|
|
y3 = inerz(y2, self.param[2], self.ypr[1]) # Инерционное звено2
|
|
self.ypr[0] = y2
|
|
self.ypr[1] = y3
|
|
|
|
def otobraz(self):
|
|
print('y=', self.ypr[1])
|
|
|
|
###main_SAU
|
|
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
|
from SAU import *
|
|
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
|
SAUe=SAU(prm) # Создаём экземпляр класса
|
|
yt=[]
|
|
for xt in xx: # Прохождение входного сигнала
|
|
SAUe.zdn_zn(xt)
|
|
SAUe.model()
|
|
SAUe.otobraz()
|
|
yt.append(SAUe.ypr[1])
|
|
import pylab
|
|
pylab.plot(yt)
|
|
pylab.show() |