我想用python來模擬/模擬一個閉環,線性,時間不變的系統(特別是鎖定的PLL逼近)。用Python建模一個線性系統
模型中的每個子塊都有一個已知的傳遞函數,該函數根據複合頻率H(s) = K/(s * tau + 1)
給出。使用該模型,我希望看到系統響應以及噪聲響應如何隨着參數(例如VCO增益)的改變而受到影響。這將涉及使用波德圖和根軌跡圖。
我應該尋求哪些Python模塊來完成工作?
我想用python來模擬/模擬一個閉環,線性,時間不變的系統(特別是鎖定的PLL逼近)。用Python建模一個線性系統
模型中的每個子塊都有一個已知的傳遞函數,該函數根據複合頻率H(s) = K/(s * tau + 1)
給出。使用該模型,我希望看到系統響應以及噪聲響應如何隨着參數(例如VCO增益)的改變而受到影響。這將涉及使用波德圖和根軌跡圖。
我應該尋求哪些Python模塊來完成工作?
我知道這有點舊,但搜索引起了我的這個問題。當我找不到一個好的模塊時,我把它放在一起。這並不多,但如果有人發現他們在這裏,這是一個好的開始。
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)
編輯:我回到這裏,是因爲有人upvoted這個答案,你應該嘗試Control Systems Library。他們已經使用匹配的語法和一切來實現大部分Matlab控制系統工具箱。
我在編輯控制系統庫後接受了這個答案。 – benpro
正如@Matt所說,我知道這是舊的。但是,這是我第一次接觸谷歌,所以我想編輯它。
您可以使用scipy.signal.lti
來建模線性時不變系統。這給你lti.bode
。對於H(s)=(As^2 + Bs + C)/(Ds^2 + Es + F)形式的脈衝響應,您需要輸入h = scipy.signal.lti([A,B,C],[D,E,F])
。爲了得到波特圖,你會做plot(*h.bode()[:2])
。
根據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()
我波特圖工作了這種方式,使用python-控制。
from matplotlib.pyplot import * # Grab MATLAB plotting functions
from control.matlab import * # MATLAB-like functions
# Transfer functions for dynamics
G_modele = tf([1], [13500, 345, 1]);
# Use state space versions
G_modele = tf2ss(G_modele);
figure(1);
bode(G_modele, dB=1);
show();
的代碼,主要是採取從這個例子中,這是非常廣泛
電氣工程是關於設計和實現線性系統,而不是爲他們的模擬和建模的問題;這是Stack Overflow的主題。 –
遺憾的是,MathJax/LaTeX在Stack Overflow上不可用;感謝您在這裏使用它,但我正在編輯它進行遷移。 –
雖然我不相信它(或任何Python模塊)包含「罐裝」Bode或根軌跡圖,但您應該可以使用[matplotlib](http://matplotlib.sourceforge)生成您自己的合適二維圖.net /)與Python。 – mctylr