python实现GUI界面控制二阶系统的阶跃响应
时间: 2023-10-09 19:13:11 浏览: 132
要实现GUI界面控制二阶系统的阶跃响应,需要先了解二阶系统的传递函数和阶跃响应公式。
二阶系统的传递函数一般可以表示为:
$$
G(s) = \frac{K}{(s+\alpha)(s+\beta)}
$$
其中,K、α、β均为常数,s为复变量。
二阶系统的阶跃响应公式为:
$$
y(t) = 1 - \frac{1}{\sqrt{1-\zeta^2}}e^{-\zeta\omega_nt}\sin(\omega_d t + \phi)
$$
其中,$\omega_n$为自然频率,$\zeta$为阻尼比,$\omega_d=\omega_n\sqrt{1-\zeta^2}$为阻尼振荡角频率,$\phi$为相位角。
下面是一个简单的Python程序,实现了GUI界面控制二阶系统的阶跃响应:
```python
import tkinter as tk
from scipy import signal
import matplotlib.pyplot as plt
def plot_step_response(K, alpha, beta, zeta):
# 生成二阶系统传递函数的分子和分母
num = [K]
den = [1, alpha + beta, alpha * beta]
# 生成二阶系统传递函数
sys = signal.TransferFunction(num, den)
# 计算二阶系统的阶跃响应
t, y = signal.step(sys)
# 计算阶跃响应公式中的各个参数
wn = (alpha * beta) ** 0.5
wd = wn * (1 - zeta ** 2) ** 0.5
phi = np.arctan(-zeta / ((1 - zeta ** 2) ** 0.5))
# 计算阶跃响应公式
y_ref = 1 - (1 / (1 - zeta ** 2) ** 0.5) * np.exp(-zeta * wn * t) * np.sin(wd * t + phi)
# 绘制阶跃响应图像
plt.figure()
plt.plot(t, y, label='Simulation')
plt.plot(t, y_ref, label='Reference')
plt.legend()
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
# 创建输入框和标签
self.K_label = tk.Label(self, text='K:')
self.K_label.pack()
self.K_entry = tk.Entry(self)
self.K_entry.pack()
self.alpha_label = tk.Label(self, text='alpha:')
self.alpha_label.pack()
self.alpha_entry = tk.Entry(self)
self.alpha_entry.pack()
self.beta_label = tk.Label(self, text='beta:')
self.beta_label.pack()
self.beta_entry = tk.Entry(self)
self.beta_entry.pack()
self.zeta_label = tk.Label(self, text='zeta:')
self.zeta_label.pack()
self.zeta_entry = tk.Entry(self)
self.zeta_entry.pack()
# 创建按钮
self.plot_button = tk.Button(self, text='Plot Step Response', command=self.plot_step_response)
self.plot_button.pack()
self.quit_button = tk.Button(self, text='Quit', command=self.master.destroy)
self.quit_button.pack()
def plot_step_response(self):
# 从输入框中获取参数
K = float(self.K_entry.get())
alpha = float(self.alpha_entry.get())
beta = float(self.beta_entry.get())
zeta = float(self.zeta_entry.get())
# 绘制阶跃响应图像
plot_step_response(K, alpha, beta, zeta)
# 创建GUI应用程序
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
这个程序使用了Tkinter库来创建GUI界面,用户可以在界面上输入二阶系统的参数,然后点击按钮绘制阶跃响应图像。程序中的`plot_step_response()`函数实现了计算阶跃响应和绘制图像的功能,可以根据需要进行调整。
阅读全文