ben*_*pro 5 python simulation modeling
我想用python模拟/建模一个闭环,线性,时不变系统(特别是一个锁定的PLL近似).
模型中的每个子块具有已知的传递函数,其以复频率给出H(s) = K / ( s * tau + 1 ).使用该模型,我希望看到系统响应以及噪声响应如何随着参数(例如VCO增益)的变化而受到影响.这将涉及使用Bode图和根轨迹图.
我应该寻求哪些Python模块来完成工作?
Mat*_*att 12
我知道这有点老了,但搜索让我想到了这个问题.当我找不到一个好的模块时,我把它放在一起.它并不多,但如果有人发现自己,这是一个良好的开端.
import matplotlib.pylab as plt
import numpy as np
import scipy.signal
def bode(G,f=np.arange(.01,100,.01)):
plt.figure()
jw = 2*np.pi*f*1j
y = np.polyval(G.num, jw) / np.polyval(G.den, jw)
mag = 20.0*np.log10(abs(y))
phase = np.arctan2(y.imag, y.real)*180.0/np.pi % 360
plt.subplot(211)
#plt.semilogx(jw.imag, mag)
plt.semilogx(f,mag)
plt.grid()
plt.gca().xaxis.grid(True, which='minor')
plt.ylabel(r'Magnitude (db)')
plt.subplot(212)
#plt.semilogx(jw.imag, phase)
plt.semilogx(f,phase)
plt.grid()
plt.gca().xaxis.grid(True, which='minor')
plt.ylabel(r'Phase (deg)')
plt.yticks(np.arange(0, phase.min()-30, -30))
return mag, phase
f=scipy.signal.lti([1],[1,1])
bode(f)
Run Code Online (Sandbox Code Playgroud)
编辑:我回到这里因为有人赞成这个答案,你应该尝试控制系统库.他们已经实现了大量的Matlab控制系统工具箱,具有匹配的语法和一切.
根据http://docs.scipy.org/doc/scipy/reference/ generated/scipy.signal.bode.html,你现在可以使用这个:
from scipy import signal
import matplotlib.pyplot as plt
s1 = signal.lti([1], [1, 1])
w, mag, phase = signal.bode(s1)
plt.figure()
plt.semilogx(w, mag) # bode magnitude plot
plt.figure()
plt.semilogx(w, phase) # bode phase plot
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12731 次 |
| 最近记录: |