59
59
60
60
# Bode plot
61
61
def 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 ):
63
63
"""Bode plot for a system
64
64
65
65
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,
69
69
syslist : linsys
70
70
List of linear input/output systems (single system is OK)
71
71
omega : freq_range
72
- Range of frequencies (list or bounds) in rad/sec
72
+ Range of frequencies in rad/sec
73
73
dB : boolean
74
74
If True, plot result in dB
75
75
Hz : boolean
@@ -78,6 +78,9 @@ def bode_plot(syslist, omega=None, dB=None, Hz=None, deg=None,
78
78
If True, plot phase in degrees (else radians)
79
79
Plot : boolean
80
80
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.
81
84
omega_num: int
82
85
number of samples
83
86
*args, **kwargs:
@@ -119,13 +122,17 @@ def bode_plot(syslist, omega=None, dB=None, Hz=None, deg=None,
119
122
syslist = (syslist ,)
120
123
121
124
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 )
127
128
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 )
129
136
130
137
mags , phases , omegas , nyquistfrqs = [], [], [], []
131
138
for sys in syslist :
0 commit comments