本文簡要介紹 python 語言中 scipy.signal.lsim2
的用法。
用法:
scipy.signal.lsim2(system, U=None, T=None, X0=None, **kwargs)#
使用 ODE 求解器
scipy.integrate.odeint
模擬 continuous-time 線性係統的輸出。- system:
lti
類的實例或說明係統的元組。 下麵給出元組中元素的數量和解釋:
1:(
lti
的實例)2:(數字,書房)
3:(零點、極點、增益)
4:(A、B、C、D)
- U: 數組(一維或二維),可選
說明每個時間 T 的輸入的輸入數組。在給定時間之間使用線性插值。如果有多個輸入,則 rank-2 數組的每一列代表一個輸入。如果未給出 U,則假定輸入為零。
- T: 數組(一維或二維),可選
定義輸入和期望輸出的時間步長。默認值是間隔 [0,10.0] 上的 101 個均勻分布的點。
- X0: 數組 (1D),可選
狀態向量的初始條件。如果沒有給出 X0,則初始條件假定為 0。
- kwargs: dict
額外的關鍵字參數被傳遞給函數 odeint。有關詳細信息,請參閱下麵的注釋。
- system:
- T: 一維ndarray
輸出的時間值。
- yout: ndarray
係統的響應。
- xout: ndarray
state-vector 的 time-evolution。
參數 ::
返回 ::
注意:
該函數使用
scipy.integrate.odeint
來求解係統的微分方程。賦予lsim2
的其他關鍵字參數將傳遞給scipy.integrate.odeint
。有關參數的完整列表,請參閱scipy.integrate.odeint
的文檔。由於
lsim2
現已棄用,建議用戶切換到更快、更準確的lsim
函數。lsim
不支持scipy.integrate.odeint
的關鍵字參數,但通常不需要。如果 (num, den) 為
system
傳入,則分子和分母的係數應按 index 降序指定(例如s^2 + 3s + 5
將表示為[1, 3, 5]
)。例子:
我們將使用
lsim2
來模擬應用於信號的模擬貝塞爾濾波器。>>> import numpy as np >>> from scipy.signal import bessel, lsim2 >>> import matplotlib.pyplot as plt
創建一個截止頻率為 12 Hz 的 low-pass Bessel 濾波器。
>>> b, a = bessel(N=5, Wn=2*np.pi*12, btype='lowpass', analog=True)
生成應用過濾器的數據。
>>> t = np.linspace(0, 1.25, 500, endpoint=False)
輸入信號是三個正弦曲線的總和,頻率分別為 4 Hz、40 Hz 和 80 Hz。濾波器應該主要消除 40 Hz 和 80 Hz 分量,隻留下 4 Hz 信號。
>>> u = (np.cos(2*np.pi*4*t) + 0.6*np.sin(2*np.pi*40*t) + ... 0.5*np.cos(2*np.pi*80*t))
使用
lsim2
模擬濾波器。>>> tout, yout, xout = lsim2((b, a), U=u, T=t)
繪製結果。
>>> plt.plot(t, u, 'r', alpha=0.5, linewidth=1, label='input') >>> plt.plot(tout, yout, 'k', linewidth=1.5, label='output') >>> plt.legend(loc='best', shadow=True, framealpha=1) >>> plt.grid(alpha=0.3) >>> plt.xlabel('t') >>> plt.show()
在第二個示例中,我們模擬雙積分器
y'' = u
,輸入常量u = 1
。我們將使用積分器的狀態空間表示。>>> from scipy.signal import lti >>> A = np.array([[0, 1], [0, 0]]) >>> B = np.array([[0], [1]]) >>> C = np.array([[1, 0]]) >>> D = 0 >>> system = lti(A, B, C, D)
t 和 u 定義要模擬的係統的時間和輸入信號。
>>> t = np.linspace(0, 5, num=50) >>> u = np.ones_like(t)
計算模擬,然後繪製y.正如預期的那樣,該圖顯示了曲線
y = 0.5*t**2
.>>> tout, y, x = lsim2(system, u, t) >>> plt.plot(t, y) >>> plt.grid(alpha=0.3) >>> plt.xlabel('t') >>> plt.show()
相關用法
- Python SciPy signal.lsim用法及代碼示例
- Python SciPy signal.lfilter用法及代碼示例
- Python SciPy signal.lfilter_zi用法及代碼示例
- Python SciPy signal.lp2hp用法及代碼示例
- Python SciPy signal.lti用法及代碼示例
- Python SciPy signal.lp2bs_zpk用法及代碼示例
- Python SciPy signal.lp2bp_zpk用法及代碼示例
- Python SciPy signal.lp2bs用法及代碼示例
- Python SciPy signal.lp2bp用法及代碼示例
- Python SciPy signal.lp2hp_zpk用法及代碼示例
- Python SciPy signal.lp2lp_zpk用法及代碼示例
- Python SciPy signal.lp2lp用法及代碼示例
- Python SciPy signal.lombscargle用法及代碼示例
- Python SciPy signal.czt_points用法及代碼示例
- Python SciPy signal.chirp用法及代碼示例
- Python SciPy signal.residue用法及代碼示例
- Python SciPy signal.iirdesign用法及代碼示例
- Python SciPy signal.max_len_seq用法及代碼示例
- Python SciPy signal.kaiser_atten用法及代碼示例
- Python SciPy signal.oaconvolve用法及代碼示例
- Python SciPy signal.hilbert用法及代碼示例
- Python SciPy signal.ricker用法及代碼示例
- Python SciPy signal.group_delay用法及代碼示例
- Python SciPy signal.cheb2ord用法及代碼示例
- Python SciPy signal.get_window用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.lsim2。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。