5959
6060# Bode plot
6161def bode_plot (syslist , omega = None , dB = None , Hz = None , deg = None ,
62- Plot = True , omega_num = None , * args , ** kwargs ):
62+ Plot = True , omega_limits = None , omega_num = None , * args , ** kwargs ):
6363 """Bode plot for a system
6464
6565 Plots a Bode plot for the system over a (optional) frequency range.
@@ -69,7 +69,7 @@ def bode_plot(syslist, omega=None, dB=None, Hz=None, deg=None,
6969 syslist : linsys
7070 List of linear input/output systems (single system is OK)
7171 omega : freq_range
72- Range of frequencies (list or bounds) in rad/sec
72+ Range of frequencies in rad/sec
7373 dB : boolean
7474 If True, plot result in dB
7575 Hz : boolean
@@ -78,6 +78,9 @@ def bode_plot(syslist, omega=None, dB=None, Hz=None, deg=None,
7878 If True, plot phase in degrees (else radians)
7979 Plot : boolean
8080 If True, plot magnitude and phase
81+ omega_limits: tuple, list, ... of two values
82+ Limits of the to generate frequency vector.
83+ If Hz=True the limits are in Hz otherwise in rad/s.
8184 omega_num: int
8285 number of samples
8386 *args, **kwargs:
@@ -119,13 +122,17 @@ def bode_plot(syslist, omega=None, dB=None, Hz=None, deg=None,
119122 syslist = (syslist ,)
120123
121124 if omega is None :
122- # Select a default range if none is provided
123- omega = default_frequency_range (syslist , Hz = Hz )
124- elif (isinstance (omega , tuple ) or isinstance (omega , list )) and len (omega ) == 2 :
125- if omega_num :
126- omega = sp .logspace (np .log10 (omega [0 ]), np .log10 (omega [1 ]), num = omega_num , endpoint = True )
125+ if omega_limits is None :
126+ # Select a default range if none is provided
127+ omega = default_frequency_range (syslist , Hz = Hz , number_of_samples = omega_num )
127128 else :
128- omega = sp .logspace (np .log10 (omega [0 ]), np .log10 (omega [1 ]), endpoint = True )
129+ omega_limits = np .array (omega_limits )
130+ if Hz :
131+ omega_limits *= 2. * np .pi
132+ if omega_num :
133+ omega = sp .logspace (np .log10 (omega_limits [0 ]), np .log10 (omega_limits [1 ]), num = omega_num , endpoint = True )
134+ else :
135+ omega = sp .logspace (np .log10 (omega_limits [0 ]), np .log10 (omega_limits [1 ]), endpoint = True )
129136
130137 mags , phases , omegas , nyquistfrqs = [], [], [], []
131138 for sys in syslist :
0 commit comments