control.FrequencyResponseData
- class control.FrequencyResponseData(frdata, omega[, smooth])[source]
Bases:
LTIInput/output model defined by frequency response data (FRD).
The FrequencyResponseData (FRD) class is used to represent systems in frequency response data form. It can be created manually using the class constructor, using the
frdfactory function, or via thefrequency_responsefunction.- Parameters:
- frdata1D or 3D complex array_like
The frequency response at each frequency point. If 1D, the system is assumed to be SISO. If 3D, the system is MIMO, with the first dimension corresponding to the output index of the FRD, the second dimension corresponding to the input index, and the 3rd dimension corresponding to the frequency points in
omega. When accessed as an attribute,frdatais always stored as a 3D array.- omegaiterable of real frequencies
List of monotonically increasing frequency points for the response.
- smoothbool, optional
If True, create an interpolation function that allows the frequency response to be computed at any frequency within the range of frequencies give in
omega. If False (default), frequency response can only be obtained at the frequencies specified inomega.- dtNone, True or float, optional
System timebase. 0 (default) indicates continuous time, True indicates discrete time with unspecified sampling time, positive number is discrete time with specified sampling time, None indicates unspecified timebase (either continuous or discrete time).
- squeezebool
By default, if a system is single-input, single-output (SISO) then the outputs (and inputs) are returned as a 1D array (indexed by frequency) and if a system is multi-input or multi-output, then the outputs are returned as a 2D array (indexed by output and frequency) or a 3D array (indexed by output, trace, and frequency). If
squeeze= True, access to the output response will remove single-dimensional entries from the shape of the inputs and outputs even if the system is not SISO. Ifsqueeze= False, the output is returned as a 3D array (indexed by the output, input, and frequency) even if the system is SISO. The default value can be set usingconfig.defaults['control.squeeze_frequency_response'].- sysnamestr or None
Name of the system that generated the data.
- Attributes:
complexarrayComplex value of the frequency response.
magnitudearrayMagnitude of the frequency response.
phasearrayPhase of the frequency response.
frequency1D arrayFrequencies at which the response is evaluated.
- ninputs, noutputsint
Number of input and output signals.
shapetuple2-tuple of I/O system dimension, (noutputs, ninputs).
- input_labels, output_labelsarray of str
Names for the input and output signals.
- namestr
System name. For data generated using
frequency_response, stores the name of the system that created the data.
- Other Parameters:
- plot_typestr, optional
Set the type of plot to generate with
plot(‘bode’, ‘nichols’).- titlestr, optional
Set the title to use when plotting.
- plot_magnitude, plot_phasebool, optional
If set to False, don’t plot the magnitude or phase, respectively.
- return_magphasebool, optional
If True, then a frequency response data object will enumerate as a tuple of the form
(mag, phase, omega)where wheremagis the magnitude (absolute value, not dB or log10) of the system frequency response,phaseis the wrapped phase in radians of the system frequency response, andomegais the (sorted) frequencies at which the response was evaluated.
See also
Notes
The main data members are
omegaandfrdata, whereomegais a 1D array of frequency points and andfrdatais a 3D array of frequency responses, with the first dimension corresponding to the output index of the FRD, the second dimension corresponding to the input index, and the 3rd dimension corresponding to the frequency points in omega. For example,>>> frdata[2,5,:] = numpy.array([1., 0.8-0.2j, 0.2-0.8j])
means that the frequency response from the 6th input to the 3rd output at the frequencies defined in omega is set to the array above, i.e. the rows represent the outputs and the columns represent the inputs.
A frequency response data object is callable and returns the value of the transfer function evaluated at a point in the complex plane (must be on the imaginary axis). See
FrequencyResponseData.__call__for a more detailed description.Subsystem response corresponding to selected input/output pairs can be created by indexing the frequency response data object:
subsys = sys[output_spec, input_spec]
The input and output specifications can be single integers, lists of integers, or slices. In addition, the strings representing the names of the signals can be used and will be replaced with the equivalent signal offsets.
Attributes
Complex value of the frequency response.
System timebase.
Frequencies at which the response is evaluated.
frespList of labels for the input signals.
Magnitude of the frequency response.
Number of system inputs.
Number of system outputs.
Number of system states.
List of labels for the output signals.
Phase of the frequency response.
String representation format.
response2-tuple of I/O system dimension, (noutputs, ninputs).
Squeeze processing parameter.
List of labels for the state signals.
Methods
Evaluate system transfer function at point in complex plane.
Append a second model to the present model.
Evaluate bandwidth of an LTI system for a given dB drop.
Generate a Bode plot for the system.
Make a copy of an input/output system.
Natural frequency, damping ratio of system poles.
Return the zero-frequency (DC) gain.
Evaluate a transfer function at a frequency point.
Feedback interconnection between two FRD objects.
Find the index for an input given its name (None if not found).
Return list of indices matching input spec (None if not found).
Find the index for a output given its name (None if not found).
Return list of indices matching output spec (None if not found).
Find the index for a state given its name (None if not found).
Return list of indices matching state spec (None if not found).
Generate the forced response for the system.
(deprecated) Evaluate transfer function at complex frequencies.
Evaluate LTI system response at an array of frequencies.
Generate the impulse response for the system.
Generate the initial response for the system.
Check to see if a system is a continuous-time system.
Check to see if a system is a discrete-time system.
Indicate if a linear time invariant (LTI) system is passive.
Check to see if a system is single input, single output.
Generate a Nichols plot for the system.
Generate a Nyquist plot for the system.
Plot the frequency response using Bode or singular values plot.
Set the number/names of the system inputs.
Set the number/names of the system outputs.
Set the number/names of the system states.
Generate the step response for the system.
Convert response data to pandas data frame.
Convert to state space representation.
Convert to transfer function representation.
Update signal and system names for an I/O system.
- __call__(x=None, squeeze=None, return_magphase=None)[source]
Evaluate system transfer function at point in complex plane.
Returns the value of the system’s transfer function at a point
xin the complex plane, wherexissfor continuous-time systems andzfor discrete-time systems. For a frequency response data object, the argument should be an imaginary number (since only the frequency response is defined) and only the imaginary component ofxwill be used.By default, a (complex) scalar will be returned for SISO systems and a p x m array will be return for MIMO systems with m inputs and p outputs. This can be changed using the
squeezekeyword.To evaluate at a frequency
omegain radians per second, enterx = omega * 1jfor continuous-time systems,x = exp(1j * omega * dt)for discrete-time systems, or use thefrequency_responsemethod.If
xis not given, this function creates a copy of a frequency response data object with a different set of output settings.- Parameters:
- xcomplex scalar or 1D array_like
Imaginary value(s) at which frequency response will be evaluated. The real component of
xis ignored. If not specified, return a copy of the frequency response data object with updated settings for output processing (squeeze,return_magphase).- squeezebool, optional
Squeeze output, as described below. Default value can be set using
config.defaults['control.squeeze_frequency_response'].- return_magphasebool, optional
(
x= None only) If True, then a frequency response data object will enumerate as a tuple of the form(mag, phase, omega)where wheremagis the magnitude (absolute value, not dB or log10) of the system frequency response,phaseis the wrapped phase in radians of the system frequency response, andomegais the (sorted) frequencies at which the response was evaluated.
- Returns:
- frdatacomplex ndarray
The value of the system transfer function at
x. If the system is SISO andsqueezeis not True, the shape of the array matches the shape ofx. If the system is not SISO orsqueezeis False, the first two dimensions of the array are indices for the output and input and the remaining dimensions matchx. Ifsqueezeis True then single-dimensional axes are removed.
- Raises:
- ValueError
If
sis not purely imaginary, becauseFrequencyResponseDatasystems are only defined at imaginary values (corresponding to real frequencies).
- append(other)[source]
Append a second model to the present model.
The second model is converted to FRD if necessary, inputs and outputs are appended and their order is preserved.
- Parameters:
- other
LTI System to be appended.
- other
- Returns:
- sys
FrequencyResponseData System model with
otherappended toself.
- sys
- bandwidth(dbdrop=-3)[source]
Evaluate bandwidth of an LTI system for a given dB drop.
Evaluate the first frequency that the response magnitude is lower than DC gain by
dbdropdB.- Parameters:
- dbdropfloat, optional
A strictly negative scalar in dB (default = -3) defines the amount of gain drop for deciding bandwidth.
- Returns:
- bandwidthndarray
The first frequency (rad/time-unit) where the gain drops below
dbdropof the dc gain of the system, or nan if the system has infinite dc gain, inf if the gain does not drop for all frequency.
- Raises:
- TypeError
If
sysis not an SISO LTI instance.- ValueError
If
dbdropis not a negative scalar.
- bode_plot(*args, **kwargs)[source]
Generate a Bode plot for the system.
See
bode_plotfor more information.
- property complex
Complex value of the frequency response.
Value of the frequency response as a complex number, indexed by either the output and frequency (if only a single input is given) or the output, input, and frequency (for multi-input systems). See
FrequencyResponseData.squeezefor a description of how this can be modified using thesqueezekeyword.Input and output signal names can be used to index the data in place of integer offsets.
- Type:
1D, 2D, or 3D array
- copy(name=None, use_prefix_suffix=True)[source]
Make a copy of an input/output system.
A copy of the system is made, with a new name. The
namekeyword can be used to specify a specific name for the system. If no name is given anduse_prefix_suffixis True, the name is constructed by prependingconfig.defaults['iosys.duplicate_system_name_prefix']and appendingconfig.defaults['iosys.duplicate_system_name_suffix']. Otherwise, a generic system name of the form ‘sys[<id>]’ is used, where ‘<id>’ is based on an internal counter.- Parameters:
- namestr, optional
Name of the newly created system.
- use_prefix_suffixbool, optional
If True and
nameis None, set the name of the new system to the name of the original system with prefixconfig.defaults['duplicate_system_name_prefix']and suffixconfig.defaults['duplicate_system_name_suffix'].
- Returns:
- damp()[source]
Natural frequency, damping ratio of system poles.
- Returns:
- wnarray
Natural frequency for each system pole.
- zetaarray
Damping ratio for each system pole.
- polesarray
System pole locations.
- dt
System timebase.
- eval(omega, squeeze=None)[source]
Evaluate a transfer function at a frequency point.
Note that a “normal” FRD only returns values for which there is an entry in the
omegavector. An interpolating FRD can return intermediate values.- Parameters:
- omegafloat or 1D array_like
Frequency(s) for evaluation, in radians per second.
- squeezebool, optional
If
squeeze= True, remove single-dimensional entries from the shape of the output even if the system is not SISO. Ifsqueeze= False, keep all indices (output, input and, ifomegais array_like, frequency) even if the system is SISO. The default value can be set usingconfig.defaults['control.squeeze_frequency_response'].
- Returns:
- frdatacomplex ndarray
The frequency response of the system. If the system is SISO and
squeezeis not True, the shape of the array matches the shape ofomega. If the system is not SISO orsqueezeis False, the first two dimensions of the array are indices for the output and input and the remaining dimensions matchomega. Ifsqueezeis True then single-dimensional axes are removed.
- feedback(other=1, sign=-1)[source]
Feedback interconnection between two FRD objects.
- Parameters:
- other
LTI System in the feedback path.
- signfloat, optional
Gain to use in feedback path. Defaults to -1.
- other
- find_input(name)[source]
Find the index for an input given its name (None if not found).
- Parameters:
- namestr
Signal name for the desired input.
- Returns:
- int
Index of the named input.
- find_inputs(name_list)[source]
Return list of indices matching input spec (None if not found).
- Parameters:
- name_liststr or list of str
List of signal specifications for the desired inputs. A signal can be described by its name or by a slice-like description of the form ‘start:end` where ‘start’ and ‘end’ are signal names. If either is omitted, it is taken as the first or last signal, respectively.
- Returns:
- list of int
List of indices for the specified inputs.
- find_output(name)[source]
Find the index for a output given its name (None if not found).
- Parameters:
- namestr
Signal name for the desired output.
- Returns:
- int
Index of the named output.
- find_outputs(name_list)[source]
Return list of indices matching output spec (None if not found).
- Parameters:
- name_liststr or list of str
List of signal specifications for the desired outputs. A signal can be described by its name or by a slice-like description of the form ‘start:end` where ‘start’ and ‘end’ are signal names. If either is omitted, it is taken as the first or last signal, respectively.
- Returns:
- list of int
List of indices for the specified outputs.
- find_state(name)[source]
Find the index for a state given its name (None if not found).
- Parameters:
- namestr
Signal name for the desired state.
- Returns:
- int
Index of the named state.
- find_states(name_list)[source]
Return list of indices matching state spec (None if not found).
- Parameters:
- name_liststr or list of str
List of signal specifications for the desired states. A signal can be described by its name or by a slice-like description of the form ‘start:end` where ‘start’ and ‘end’ are signal names. If either is omitted, it is taken as the first or last signal, respectively.
- Returns:
- list of int
List of indices for the specified states..
- forced_response(*args, **kwargs)[source]
Generate the forced response for the system.
See
forced_responsefor more information.
- property frequency
Frequencies at which the response is evaluated.
- Type:
1D array
- frequency_response(omega=None, squeeze=None)[source]
Evaluate LTI system response at an array of frequencies.
See
frequency_responsefor more detailed information.
- impulse_response(*args, **kwargs)[source]
Generate the impulse response for the system.
See
impulse_responsefor more information.
- initial_response(*args, **kwargs)[source]
Generate the initial response for the system.
See
initial_responsefor more information.
- property input_labels
List of labels for the input signals.
- isctime(strict=False)[source]
Check to see if a system is a continuous-time system.
- Parameters:
- strictbool, optional
If strict is True, make sure that timebase is not None. Default is False.
- isdtime(strict=False)[source]
Check to see if a system is a discrete-time system.
- Parameters:
- strictbool, optional
If strict is True, make sure that timebase is not None. Default is False.
- ispassive()[source]
Indicate if a linear time invariant (LTI) system is passive.
See
ispassivefor details.
- property magnitude
Magnitude of the frequency response.
Magnitude of the frequency response, indexed by either the output and frequency (if only a single input is given) or the output, input, and frequency (for multi-input systems). See
FrequencyResponseData.squeezefor a description of how this can be modified using thesqueezekeyword.Input and output signal names can be used to index the data in place of integer offsets.
- Type:
1D, 2D, or 3D array
- nichols_plot(*args, **kwargs)[source]
Generate a Nichols plot for the system.
See
nichols_plotfor more information.
- ninputs
Number of system inputs.
- noutputs
Number of system outputs.
- nstates
Number of system states.
- nyquist_plot(*args, **kwargs)[source]
Generate a Nyquist plot for the system.
See
nyquist_plotfor more information.
- property output_labels
List of labels for the output signals.
- property phase
Phase of the frequency response.
Phase of the frequency response in radians/sec, indexed by either the output and frequency (if only a single input is given) or the output, input, and frequency (for multi-input systems). See
FrequencyResponseData.squeezefor a description of how this can be modified using thesqueezekeyword.Input and output signal names can be used to index the data in place of integer offsets.
- Type:
1D, 2D, or 3D array
- plot(plot_type=None, *args, **kwargs)[source]
Plot the frequency response using Bode or singular values plot.
Plot the frequency response using either a standard Bode plot (plot_type=’bode’, default) or a singular values plot (plot_type=’svplot’). See
bode_plotandsingular_values_plotfor more detailed descriptions.
- property repr_format
String representation format.
Format used in creating the representation for the system:
‘info’ : <IOSystemType sysname: [inputs] -> [outputs]>
‘eval’ : system specific, loadable representation
‘latex’ : HTML/LaTeX representation of the object
The default representation for an input/output is set to ‘eval’. This value can be changed for an individual system by setting the
repr_formatparameter when the system is created or by setting therepr_formatproperty after system creation. Setconfig.defaults['iosys.repr_format']to change for all I/O systems or use therepr_formatparameter/attribute for a single system.
- set_inputs(inputs, prefix='u')[source]
Set the number/names of the system inputs.
- Parameters:
- inputsint, list of str, or None
Description of the system inputs. This can be given as an integer count or as a list of strings that name the individual signals. If an integer count is specified, the names of the signal will be of the form ‘u[i]’ (where the prefix ‘u’ can be changed using the optional prefix parameter).
- prefixstring, optional
If
inputsis an integer, create the names of the states using the given prefix (default = ‘u’). The names of the input will be of the form ‘prefix[i]’.
- set_outputs(outputs, prefix='y')[source]
Set the number/names of the system outputs.
- Parameters:
- outputsint, list of str, or None
Description of the system outputs. This can be given as an integer count or as a list of strings that name the individual signals. If an integer count is specified, the names of the signal will be of the form ‘y[i]’ (where the prefix ‘y’ can be changed using the optional prefix parameter).
- prefixstring, optional
If
outputsis an integer, create the names of the states using the given prefix (default = ‘y’). The names of the input will be of the form ‘prefix[i]’.
- set_states(states, prefix='x')[source]
Set the number/names of the system states.
- Parameters:
- statesint, list of str, or None
Description of the system states. This can be given as an integer count or as a list of strings that name the individual signals. If an integer count is specified, the names of the signal will be of the form ‘x[i]’ (where the prefix ‘x’ can be changed using the optional prefix parameter).
- prefixstring, optional
If
statesis an integer, create the names of the states using the given prefix (default = ‘x’). The names of the input will be of the form ‘prefix[i]’.
- property shape
2-tuple of I/O system dimension, (noutputs, ninputs).
- squeeze
Squeeze processing parameter.
By default, if a system is single-input, single-output (SISO) then the outputs (and inputs) are returned as a 1D array (indexed by frequency) and if a system is multi-input or multi-output, then the outputs are returned as a 2D array (indexed by output and frequency) or a 3D array (indexed by output, trace, and frequency). If
squeeze= True, access to the output response will remove single-dimensional entries from the shape of the inputs and outputs even if the system is not SISO. Ifsqueeze= False, the output is returned as a 3D array (indexed by the output, input, and frequency) even if the system is SISO. The default value can be set using config.defaults[‘control.squeeze_frequency_response’].
- property state_labels
List of labels for the state signals.
- step_response(*args, **kwargs)[source]
Generate the step response for the system.
See
step_responsefor more information.
- to_pandas()[source]
Convert response data to pandas data frame.
Creates a pandas data frame for the value of the frequency response at each
omega. The frequency response values are labeled in the form “H_{<out>, <in>}” where “<out>” and “<in>” are replaced with the output and input labels for the system.
- update_names([name, inputs, outputs, states])[source]
Update signal and system names for an I/O system.
- Parameters:
- namestr, optional
New system name.
- inputslist of str, int, or None, optional
List of strings that name the individual input signals. If given as an integer or None, signal names default to the form ‘u[i]’. See
InputOutputSystemfor more information.- outputslist of str, int, or None, optional
Description of output signals; defaults to ‘y[i]’.
- statesint, list of str, int, or None, optional
Description of system states; defaults to ‘x[i]’.
- input_prefixstring, optional
Set the prefix for input signals. Default = ‘u’.
- output_prefixstring, optional
Set the prefix for output signals. Default = ‘y’.
- state_prefixstring, optional
Set the prefix for state signals. Default = ‘x’.