finesse.analysis.actions.lti.FrequencyResponse
¶
Overview
- class finesse.analysis.actions.lti.FrequencyResponse(f, inputs, outputs, *, open_loop=False, name='frequency_response')[source]¶
Bases:
Action
Computes the frequency response of a signal injceted at various nodes to compute transfer functions to multiple output nodes. Inputs and outputs should be electrical or mechanical nodes. It does this in an efficient way by using the same model and solving for multiple RHS input vectors.
This action does not alter the model state. This action will ignore any currently definied signal generator elements in the model.
To inject into optical nodes please see
FrequencyResponse2
.- Parameters:
- farray, double
Frequencies to compute the transfer functions over
- inputsiterable[str or Element]
Mechanical or electrical node to inject signal at
- outputsiterable[str or Element]
Mechanical or electrical nodes to measure output at
- open_loopbool, optional
Computes open loop transfer functions if the system has closed
- namestr, optional
Solution name
Examples
Here we measure a set of transfer functions from DARM and CARM to four readouts for a particular model,
>>> sol = model.run(FrequencyResponse(np.geomspace(0.1, 50000, 100), ... ('DARM', 'CARM'), ... ('AS.DC', 'AS45.I', 'AS45.Q', 'REFL9.I'), ... ))
Single inputs and outputs can also be specified
>>> model.run(FrequencyResponse(np.geomspace(0.1, 50000, 100), 'DARM', AS.DC'))
The transfer functions can then be accessed like a 2D array by name, the ordering of inputs to outputs does not matter.
>>> sol['DARM'] # DARM to all outputs >>> sol['DARM', 'AS.DC'] # DARM to AS.DC >>> sol['DARM', ('AS.DC', 'AS45.I')] >>> sol['AS.DC'] # All inputs to AS.DC readout