Frequency response of an LTI system.
For continuous-time systems with transfer function G, computes the frequency response as
G(j*omega) = mag * exp(j*phase)
For discrete-time systems, the response is evaluated around the unit circle such that
G(exp(j*omega*dt)) = mag * exp(j*phase).
In general the system may be multiple input, multiple output (MIMO), where m = self.ninputs
number of inputs and p = self.noutputs
number of outputs.
Linear system(s) for which frequency response is computed.
A list, tuple, array, or scalar value of frequencies in radians/sec at which the system will be evaluated. Can be a single frequency or array of frequencies, which will be sorted before evaluation. If None (default), a common set of frequencies that works across all given systems is computed.
Limits to the range of frequencies, in rad/sec. Specifying omega
as a list of two elements is equivalent to providing omega_limits
. Ignored if omega is provided.
Number of frequency samples at which to compute the response. Defaults to config.defaults['freqplot.number_of_samples']
. Ignored if omega is provided.
FrequencyResponseData
Frequency response data object representing the frequency response. When accessed as a tuple, returns (magnitude, phase, omega)
. If sysdata
is a list of systems, returns a FrequencyResponseList
object. Results can be plotted using the plot
method. See FrequencyResponseData
for more detailed information.
Magnitude of the frequency response (absolute value, not dB or log10). If the system is SISO and squeeze is not True, the array is 1D, indexed by frequency. If the system is not SISO or squeeze is False, the array is 3D, indexed by the output, input, and, if omega is array_like, frequency. If squeeze
is True then single-dimensional axes are removed.
Wrapped phase, in radians, with same shape as magnitude
.
Sorted list of frequencies at which response was evaluated.
If True, when computing frequency limits automatically set limits to full decades in Hz instead of rad/s. Omega is always returned in rad/sec.
If squeeze
= True, remove single-dimensional entries from the shape of the output even if the system is not SISO. If squeeze
= False, keep all indices (output, input and, if omega is array_like, frequency) even if the system is SISO. The default value can be set using config.defaults['control.squeeze_frequency_response']
.
Notes
This function is a wrapper for StateSpace.frequency_response
and TransferFunction.frequency_response
. You can also use the lower-level methods sys(s)
or sys(z)
to generate the frequency response for a single system.
All frequency data should be given in rad/sec. If frequency limits are computed automatically, the Hz
keyword can be used to ensure that limits are in factors of decades in Hz, so that Bode plots with Hz
= True look better.
The frequency response data can be plotted by calling the bode_plot
function or using the plot
method of the FrequencyResponseData
class.
Examples
>>> G = ct.ss([[-1, -2], [3, -4]], [[5], [7]], [[6, 8]], [[9]]) >>> mag, phase, omega = ct.frequency_response(G, [0.1, 1., 10.])
>>> sys = ct.rss(3, 2, 2) >>> mag, phase, omega = ct.frequency_response(sys, [0.1, 1., 10.]) >>> mag[0, 1, :] # Magnitude of second input to first output array([..., ..., ...]) >>> phase[1, 0, :] # Phase of first input to second output array([..., ..., ...])
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4