拉普拉斯、伯德图、阶跃和冲激函数的时域响应

python 拉式变换和反拉式变换

import matplotlib.pyplot as plt
import sympy as sp
plt.rcParams['font.size'] = '16'  # 设置整体的字号大小
s, t = sp.symbols('s, t')
w = sp.symbols('w', real=True)  # w要设置为实数
myt = sp.laplace_transform(sp.cos(w*t), t, s)
print(myt[0])
myt1 = sp.inverse_laplace_transform(myt[0], s, t)
print(myt1)

伯德图

import control as ctrl
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = '16'
w = np.logspace(-1, 3, 100)
sys = ctrl.tf([200], [1, 8, 100])
fig = plt.figure(figsize=(10, 6))
Gm, Pm, omega = ctrl.bode(sys, w, dB=True)
plt.savefig('伯德图.jpg')
plt.show()

其中Gm是真实计算的值,不是dB,如果要转成dB则要20*log10(Gm)转换。
在这里插入图片描述

阶跃响应和冲激响应

import control as ctrl
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
config = {
    "font.family": 'serif',
    "font.size": 15,
    "mathtext.fontset": 'stix',
    "font.serif": ['SimSun'],
}
rcParams.update(config)
psi = [1, 1.2, 1.4, 1.6]
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(12, 9))
for k in psi:
    sys = ctrl.tf([200], [1, 8*k, 100])
    t1, y1 = ctrl.impulse_response(sys, T=np.linspace(0, 3, 1000))
    t2, y2 = ctrl.step_response(sys, T=np.linspace(0, 3, 1000))
    ax1.plot(t1, y1, label='psi='+str(k))
    ax1.set_title('impulse_response')
    ax1.legend(prop=font)
    ax2.plot(t2, y2, label='psi='+str(k))
    ax2.set_title('step_response')
    ax2.legend(prop=font)
plt.savefig('响应图.jpg')
plt.show()

在这里插入图片描述

任意响应曲线

import control as ctrl
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lsim
t = np.linspace(0, 1, 1000)
x = np.sin(2*np.pi*1*t)
# font = {'family': 'Times New Roman', 'weight': 'normal', 'size': 12}
fig = plt.figure()
sys = ctrl.tf([200], [1, 8, 100])
a = 200
b = [1, 8, 100]
t1, y1, x1 = lsim((a, b), U=x, T=t)  # 此处返回的x1不知道是啥,而且输入不能直接是ctrl.tf传递过来的sys
plt.plot(t1, y1)
# plt.plot(x1, y1)
plt.show()

另外变成状态方程可以用from scipy.signal import lti
lti(A, B, C, D)
上面的传递函数表示可以用
from scipy.signal import TransferFunction
sys1 = TransferFunction(a, b)
这样就能把sys1直接放到lsim的第一个形参中了,即
t1, y1, x1 = lsim(sys1, U=x, T=t)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值