Commit e5f370d7 authored by Anchal Gupta's avatar Anchal Gupta
Browse files

Revert "Added including 40m cavity FSR in C_AUX"

This reverts commit 87a7d7fc
parent 87a7d7fc
Pipeline #167991 passed with stage
in 56 seconds
%% Cell type:code id: tags:
``` python
import sys, os
pygw40m = os.path.abspath('../../pygwinc/')
if pygw40m not in sys.path:
sys.path.append(pygw40m)
from os.path import join
cit40m = join(pygw40m, 'CIT40m')
cwd = os.getcwd()
import numpy as np
import scipy.constants as scc
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages #For saving figures to single pdf
import gwinc
import yaml
import control
import control.matlab as mat
import matlab.engine
# Load MPL style file
notLoaded = True
if notLoaded:
mpl.style.use('style40.mpl')
notLoaded = False
```
%% Cell type:markdown id: tags:
## Parameters
%% Cell type:code id: tags:
``` python
R = 4500. #coil driver series resistance (Ohm)
P = 20. #input power (W)
phi = -0.01 #SRC detuning (deg)
zeta = 0. #homodyne phase (deg)
```
%% Cell type:markdown id: tags:
## Evaluate noise budget to get fundamental noise sources
%% Cell type:code id: tags:
``` python
# Define the frequency bins [Hz]
freq = np.logspace(-1, 4, 5000)
# Load the 40m budget class
Budget = gwinc.load_budget(cit40m)
# Optionally override class parameters
Budget.ifo.Optics.SRM.Tunephase = np.pi - np.deg2rad(phi)
Budget.ifo.Optics.Quadrature.dc = np.deg2rad(zeta)
Budget.ifo.Laser.Power = P
# Evaluate the budget
# Traces in units [m^2/Hz]
budget = Budget(freq)
os.chdir(pygw40m)
traces = budget.run()
os.chdir(cwd)
freq2disp = Budget.ifo.Infrastructure.Length * Budget.ifo.Laser.Wavelength / scc.c
def Hztom(x):
return x * freq2disp
def mtoHz(x):
return x / freq2disp
```
%% Cell type:markdown id: tags:
## Run Simulink model to get transfer function from injection points to dispacement noise
<img src="./simulink/ALS_simulink_model.svg"/>
function alsTF(inPort, outPort='Res_Disp', ff=None) generates transfer function for the complete system from yellow input ports to the orange output ports.
%% Cell type:code id: tags:
``` python
try:
os.chdir('./simulink/')
L = Budget.ifo.Infrastructure.Length
L_MC = 13.54 # Length of MC
lambda_PSL = Budget.ifo.Laser.Wavelength
lambda_AUX = lambda_PSL / 2
eng = matlab.engine.start_matlab()
alsModel = eng.runSimModel('ALS', '../ALS_controls.yaml',
'mtoHz', scc.c /lambda_PSL / L,
'mtoHz_AUX', scc.c / (lambda_AUX) / L,
'mtoHz_MC', scc.c / lambda_PSL / L_MC,
'Hztom', L * lambda_PSL / scc.c)
eng.quit()
except BaseException as e:
print(e)
finally:
os.chdir(cwd)
for key in ['A', 'B', 'C', 'D']:
alsModel[key] = np.asarray(alsModel[key])
alsModel['ss'] = control.ss(alsModel['A'], alsModel['B'], alsModel['C'], alsModel['D'])
alsModel['TFmag'], alsModel['TFph'], _ = control.freqresp(alsModel['ss'], 2 * np.pi * freq)
alsModel['TFcom'] = alsModel['TFmag'] * np.exp(1j * alsModel['TFph'])
def alsTF(inPort, outPort='Res_Disp', ff=None):
if ff is not None:
TFmag, TFph, _ = control.freqresp(alsModel['ss'], 2 * np.pi * ff)
TFcom = TFmag * np.exp(1j * TFph)
return TFcom[alsModel['outPorts'][outPort]-1, alsModel['inPorts'][inPort]-1, : ]
else:
return alsModel['TFcom'][alsModel['outPorts'][outPort]-1, alsModel['inPorts'][inPort]-1, : ]
```
%% Cell type:code id: tags:
``` python
ALS_OOL_TF = -alsTF('ALS_DAC', 'ALS_Out1') / alsTF('ALS_DAC', 'ALS_Out2')
```
%% Cell type:code id: tags:
``` python
fig21, ax = plt.subplots(2,1, figsize=(14,14), sharex=True,
gridspec_kw={'hspace':0.05})
ax[0].semilogx(freq, 20*np.log10(np.abs(ALS_OOL_TF)), label='ALS OLTF Model')
ax[0].semilogx(freq, 20*np.log10(np.abs(alsTF('COM_DISP'))), label=r'Common $\rightarrow$ Residual')
ax[0].semilogx(freq, 20*np.log10(np.abs(alsTF('DIFF_DISP'))), label=r'Differential $\rightarrow$ Residual')
ax[0].legend()
ax[0].set_ylabel('Magnitude [dB]')
ax[1].semilogx(freq, np.angle(ALS_OOL_TF) * 180 / np.pi)
ax[1].semilogx(freq, np.angle(alsTF('COM_DISP')) * 180 / np.pi)
ax[1].semilogx(freq, np.angle(alsTF('DIFF_DISP')) * 180 / np.pi)
ax[1].set_ylabel(r'Phase [$^\circ$]')
ax[1].set_xlabel('Frequency [Hz]')
ax[1].set_yticks([-180, -90, 0, 90, 180])
ugfind = np.argmin(np.abs(np.abs(ALS_OOL_TF) - 1))
ugf = freq[ugfind]
phaseMargin = 180 + np.angle(ALS_OOL_TF[ugfind])*180/np.pi
ax[0].hlines(1, *ax[0].get_xlim(), color='black')
ax[0].vlines(ugf, *ax[0].get_ylim(), color='black', ls='--')
ax[1].vlines(ugf, *ax[1].get_ylim(), color='black', ls='--')
ax[0].text(ugf, 10, 'UGF = ' + str(np.round(ugf, 1)) + ' Hz')
ax[1].text(ugf, np.angle(ALS_OOL_TF[ugfind])*180/np.pi+10, 'PM = ' + str(np.round(phaseMargin, 1)) + r'$^\circ$')
ax[0].set_title('ALS Control Model Transfer Functions')
#fig21.savefig('ALS_Control_Model_Bode_Plot.pdf', bbox_inches='tight')
```
%% Cell type:code id: tags:
``` python
fig22, ax = plt.subplots(2,1, figsize=(14,14), sharex=True,
gridspec_kw={'hspace':0.05})
T = np.linspace(0, 0.05, 1000)
t, ImpResp = control.impulse_response(alsModel['ss'],
T, input=8, output=1)
ax[0].plot(t, ImpResp, label='Impulse Response')
ax[0].legend()
ax[0].get_xaxis().set_visible(False)
t, StepResp = control.step_response(alsModel['ss'],
T, input=8, output=1)
ax[1].plot(t, StepResp, label='Step Response')
ax[1].legend()
ax[0].set_title('ALS Control Model Time Domain Response')
#fig22.savefig('ALS_Control_Model_Time_Domain.pdf', bbox_inches='tight')
```
%% Cell type:markdown id: tags:
# Noise Budget
%% Cell type:code id: tags:
``` python
nosbud = {}
```
%% Cell type:markdown id: tags:
## Fundamental Noise Sources
### Propagate from common displacement port
<b>Suspension thermal noise</b> and <b>seismic noise</b> come as common displacement noise from <b><span style="color:red">input port COM_DISP</span></b>.
%% Cell type:code id: tags:
``` python
nosbud['SuspensionThermal'] = ((traces['SuspensionThermal'][0]
* np.abs(alsTF('COM_DISP'))**2),
{'label': 'Suspension Thermal', 'linewidth': '4',
'linestyle': '-.'})
nosbud['Seismic'] = ((np.nan_to_num(traces['Seismic'][0], nan=0)
* np.abs(alsTF('COM_DISP'))**2),
{'label': 'Seismic', 'linewidth': '4', 'linestyle': '-.'})
```
%% Cell type:markdown id: tags:
### Propagate from differential displacement noise port
<b>Coatings Brownian, coatings thermo-optic and ambient thermo-optic noise</b> come as differential displacement noise from <b><span style="color:red">input port DIFF_DISP</span></b>.
%% Cell type:code id: tags:
``` python
nosbud['CoatingBrownian'] = ((traces['CoatingBrownian'][0]
* np.abs(alsTF('DIFF_DISP'))**2),
{'label': 'Coatings Brownian', 'linewidth': '4',
'linestyle': '-.'})
nosbud['CoatingThermoOptic'] = ((traces['CoatingThermoOptic'][0]
* np.abs(alsTF('DIFF_DISP'))**2),
{'label': 'Coatings ThermoOptic', 'linewidth': '4',
'linestyle': '-.'})
```
%% Cell type:markdown id: tags:
## Technical Noise Sources
### Laser Frequency Noise
Residual laser frequency noise from AUX laser and PSL Laser. Noise is injected as estimate of free running laser noise for NPRO as 10kHz/f$\sqrt{Hz}$.
Ref. [B. Willke, S. Brozek, K. Danzmann, V. Quetschke, and S. Gossler, Opt. Lett. 25, 1019 (2000)](https://doi.org/10.1364/OL.25.001019)
These noises are injected at <b><span style="color:red">input port PSL_Freq</span></b> and <b><span style="color:red">AUX_Freq</span></b>.
%% Cell type:code id: tags:
``` python
nosbud['AUX Residual Freq Noise'] = ((1e4 / freq * np.abs(alsTF('AUX_Freq')))**2,
{'label': 'AUX Res. Freq.',
'linewidth': '4', 'linestyle': '-'})
nosbud['PSL Residual Freq Noise'] = ((1e4 / freq * np.abs(alsTF('PSL_Freq')))**2,
{'label': 'PSL Res. Freq.',
'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### Second-Harmonic Generation Noise
The upper limit of the noise level is assumed to be $1\times10^{-5}f\,\text{Hz}/\sqrt{\text{Hz}}$.
Ref. [Optics Express Vol. 20, Issue 19, pp. 21019-21024 (2012)](https://doi.org/10.1364/OE.20.021019)
Dominant contribution is from SHG done on PSL before taking beatnote frequency where the noise gets added at <b><span style="color:red">input port PSL_SHG</span></b>.
For now, I'm adding SHG due to AUX also, just to see how less it is in comparison to PSL SHG really. This noise comes from <b><span style="color:red">input port AUX_SHG</span></b>.
%% Cell type:code id: tags:
``` python
nosbud['SHG PSL'] = ((freq*1e-5)**2 * np.abs(alsTF('PSL_SHG'))**2,
{'label': 'SHG PSL', 'linewidth': '4', 'linestyle': '-'})
nosbud['SHG AUX'] = ((freq*1e-5)**2 * np.abs(alsTF('AUX_SHG'))**2,
{'label': 'SHG AUX', 'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### Shot noise and Detector Dark Noise
The most dominant shot and dark nosie comes from beatnote PD. This noise is coupled to the read frequency noise by DFD as:
$$ S_\text{PD}(f) = \frac{2S_\text{V}(f)}{\text{V}^2_\text{RF}}f^2 $$
where $\text{V}_\text{RF}$ is the rms amplitude of beat RF signal. This noise source enters at <b><span style="color:red">input port BEAT_PD</span></b>.
%% Cell type:code id: tags:
``` python
# Beat PD Dark Noise
V_RF = 22e-3 # in Vrms
S_V_Dark = (24e-9)**2 # in Vrms^2/Hz INPUT REFERED
nosbud['Beat PD Dark'] = ((2 * S_V_Dark * freq**2 / V_RF**2) * np.abs(alsTF('BEAT_PD'))**2,
{'label': 'Beat PD Dark', 'linewidth': '4', 'linestyle': '-'})
S_V_Shot = (8e-9)**2 # in Vrms/Hz INPUT REFERED
nosbud['Beat PD Shot'] = ((2 * S_V_Shot * freq**2 / V_RF**2) * np.abs(alsTF('BEAT_PD'))**2,
{'label': 'Beat PD Shot', 'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### Frequency Discriminator (DFD)
Delay line frequency discriminator adds noise due to RF amplifier, delay-line demodulation board and the Anti-aliasing board. This noise gets injected at <b><span style="color:red">input port BEAT_PD</span></b>.
%% Cell type:code id: tags:
``` python
DFDnoise = np.loadtxt('./data/DFDnoise.txt')
DFDnoise = np.interp(freq, DFDnoise[:, 0], DFDnoise[:, 1])
nosbud['DFD'] = ((DFDnoise * np.abs(alsTF('BEAT_PD')))**2,
{'label': 'DFD', 'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### ADC Noise
ADC reads data from DFD and injects more noise at <b><span style="color:red">input port ALS_Filt</span></b>.
%% Cell type:code id: tags:
``` python
ADCnoise = np.loadtxt('./data/ADCnoiseInputRef.txt') # in V/rtHz
ADCnoise = np.interp(freq, ADCnoise[:, 0], ADCnoise[:, 1])
nosbud['ADC'] = ((ADCnoise * np.abs(alsTF('ALS_Filt')))**2,
{'label': 'ADC', 'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### DAC Noise
DAC applies the digital filter output from F_ALS to make the analog signal for test mass actuators. Here noise is added at <b><span style="color:red">input port ALS_DAC</span></b>.
%% Cell type:code id: tags:
``` python
DACnoise = np.loadtxt('./data/DACwithWhitening.txt')
DACnoise = np.interp(freq, DACnoise[:, 0], DACnoise[:, 1])
nosbud['DAC'] = ((DACnoise * np.abs(alsTF('ALS_DAC')))**2,
{'label': 'DAC', 'linewidth': '4', 'linestyle': '-'})
```
%% Cell type:markdown id: tags:
### Total
Taking quadrature sum of all noise sources added so far.
%% Cell type:code id: tags:
``` python
totNoise = np.zeros_like(freq)
for noise in nosbud:
if noise is not 'Total' and noise is not 'intTotal':
totNoise += nosbud[noise][0]
nosbud['Total'] = (totNoise,
{'label': 'Total', 'color': '#000000',
'linewidth': '6', 'linestyle': '-'})
intTotal = np.zeros_like(totNoise)
for ii in range(len(freq)-1, 0, -1):
intTotal[ii-1] = totNoise[ii] * (freq[ii] - freq[ii-1]) + intTotal[ii]
nosbud['intTotal'] = (intTotal,
{'label': 'RMS', 'color': '#000000',
'linewidth': '4', 'linestyle': '--'})
```
%% Cell type:markdown id: tags:
### Plot
%% Cell type:code id: tags:
``` python
fig1, ax = plt.subplots(1,1, figsize=(14,9))
# Title
ax.set_title('ALS noise budget\n'
'Out-of-loop (OOL) Residual Arm Length Motion\n'
'with respect to Main Laser Frequency')
# Noise curves
for key in nosbud:
trace = nosbud[key][0]**.5
style = nosbud[key][1]
ax.plot(freq, trace, **style)
# Plot formatting
ax.set_xlim([freq[0], freq[-1]])
ax.set_ylim([1e-18, 3e-11])
ax.set_xlabel(u"Frequency [Hz]")
ax.set_ylabel(u"OOL Residual Arm Length Noise ASD [m/\u221AHz]")
ax.set_xscale('log')
ax.set_yscale('log')
ax.legend(ncol=1, loc=(-0.5, 0.05));
ax.tick_params(right=False)
secaxy = ax.secondary_yaxis('right', functions=(mtoHz, Hztom))
secaxy.set_ylabel(u"Residual Frequency Difference Noise ASD [Hz/\u221AHz]")
RMSNoise = nosbud['intTotal'][0][0]**.5
RMSNoiseFreq = mtoHz(RMSNoise)
RMSstr = str(np.round(RMSNoise*1e12, 1))+' pm ('+str(np.round(RMSNoiseFreq, 1))+' Hz)'
ax.text(0.2, RMSNoise*2, RMSstr, fontsize='x-large')
# Uncomment to save figure
#fig1.savefig('ALS_nb.pdf', bbox_inches='tight')
#fig1.savefig('ALS_nb.png', bbox_inches='tight')
```
%% Cell type:markdown id: tags:
---
## Create py-controls model here using same ALS_controls.yaml
%% Cell type:code id: tags:
``` python
def parseZPKModel(zpk):
for key in ['z', 'p']:
if key not in zpk:
zpk[key] = []
elif not isinstance(zpk[key], list):
zpk[key] = [zpk[key]]
z = 2*np.pi*np.array(zpk['z'])
p = 2*np.pi*np.array(zpk['p'])
zpk['ABCD'] = mat.zpk2ss(-z, -p, zpk['k'])
zpk['SS'] = control.ss(*zpk['ABCD'])
if 'delay' in zpk:
num, den = control.pade(zpk['delay'], 4)
zpk['DelayTF'] = control.tf(num, den)
return zpk
def series(alsCtrl, subSys):
out = alsCtrl[subSys[0]]['SS']
for ii in range(1, len(subSys)):
out = control.series(out, alsCtrl[subSys[ii]]['SS'])
return out
def sys2TF(ss, freq):
mag, ph, _ = control.freqresp(ss, 2 * np.pi * freq)
return mag.flatten() * np.exp(1j*ph.flatten())
```
%% Cell type:code id: tags:
``` python
def getAUXModel(yamlFile, model='AUX_Loop', freq = freq):
try:
os.chdir('./simulink/')
L = Budget.ifo.Infrastructure.Length
lambda_PSL = Budget.ifo.Laser.Wavelength
lambda_AUX = lambda_PSL / 2
eng = matlab.engine.start_matlab()
auxModel = eng.runSimModel(model, '../'+yamlFile,
'mtoHz_AUX', scc.c / (lambda_AUX) / L)
eng.quit()
except BaseException as e:
print(e)
finally:
os.chdir(cwd)
for key in ['A', 'B', 'C', 'D']:
auxModel[key] = np.asarray(auxModel[key])
auxModel['ss'] = control.ss(auxModel['A'], auxModel['B'], auxModel['C'], auxModel['D'])
def auxTF(inPort, outPort='AUX_Res', ff=None):
if ff is not None:
TFmag, TFph, _ = control.freqresp(auxModel['ss'], 2 * np.pi * ff)
TFcom = TFmag * np.exp(1j * TFph)
return TFcom[auxModel['outPorts'][outPort]-1, auxModel['inPorts'][inPort]-1, : ]
else:
return auxModel['TFcom'][auxModel['outPorts'][outPort]-1, auxModel['inPorts'][inPort]-1, : ]
auxModel['freq'] = freq
auxModel['TF'] = -(auxTF('AUX_Freq', 'AUX_Out1', ff=freq)
/ auxTF('AUX_Freq', 'AUX_Out2', ff=freq))
auxModel['CLTF'] = auxTF('AUX_Freq', 'AUX_Res', ff=freq)
auxModel['auxTF'] = auxTF
return auxModel
```
%% Cell type:code id: tags:
``` python
with open('ALS_controls.yaml', 'r') as f:
alsCtrl = yaml.full_load(f)
for k, v in alsCtrl.items():
for k1, v1 in v.items():
if isinstance(v1, str):
alsCtrl[k][k1] = eval(v1)
elif isinstance(v1, list):
for k2, v2 in enumerate(v1):
if isinstance(v2, str):
alsCtrl[k][k1][k2] = eval(v2)
alsCtrl[k] = parseZPKModel(v)
```
%% Cell type:code id: tags:
``` python
ff=np.logspace(-1, 5, 6000)
auxModel = getAUXModel('ALS_controls.yaml', freq=ff)
```
%% Cell type:code id: tags:
``` python
alsCtrl['AUX_OL'] = {'TF': auxModel['TF'],
alsCtrl['AUX_OL'] = {'SS': series(alsCtrl, ['A_AUX', 'C_AUX', 'D_AUX', 'F_AUX']),
'style': {'label': 'AUX PDH OLTF Model',
'color': 'tab:red', 'lw': 6}}
alsCtrl['AUX_CL'] = {'TF': auxModel['CLTF'],
alsCtrl['AUX_CL'] = {'SS': control.feedback(alsCtrl['AUX_OL']['SS'], 1, sign=-1),
'style': {'label': 'AUX PDH CLTF Model',
'color': 'tab:green', 'lw': 6}}
```
%% Cell type:code id: tags:
``` python
alsCtrl['A_AUX']['style'] = {'label': 'AUX PZT Actuation',
'ls': '--', 'lw': 3, 'color': 'tab:blue'}
alsCtrl['C_AUX']['style'] = {'label': '40m Cavity Pole for AUX',
'ls': '--', 'lw': 3, 'color': 'tab:orange'}
alsCtrl['D_AUX']['style'] = {'label': 'AUX PDH Discriminant',
'ls': '--', 'lw': 3, 'color': 'tab:pink'}
alsCtrl['F_AUX']['style'] = {'label': 'AUX PDH Box Model',
'ls': '--', 'lw': 3, 'color': 'tab:brown'}
for key in ['A_AUX', 'C_AUX', 'D_AUX', 'F_AUX']:
SS = alsCtrl[key]['SS']
if np.shape(SS.A) == (0,0):
alsCtrl[key]['TF'] = SS.D[0, 0] * np.ones_like(ff)
else:
alsCtrl[key]['TF'] = sys2TF(alsCtrl[key]['SS'], ff)
```
%% Cell type:code id: tags:
``` python
def plotTFs(alsCtrl, keys, ff=freq, title=None):
fig, ax = plt.subplots(2,1, figsize=(14,14), sharex=True,
gridspec_kw={'hspace':0.05})
for key in keys:
SS = alsCtrl[key]['SS']
if np.shape(SS.A) == (0,0):
alsCtrl[key]['TF'] = SS.D[0, 0] * np.ones_like(ff)
else:
alsCtrl[key]['TF'] = sys2TF(alsCtrl[key]['SS'], ff)
ax[0].semilogx(ff, 20*np.log10(np.abs(alsCtrl[key]['TF'])),
**alsCtrl[key]['style'])
ax[1].semilogx(ff, np.angle(alsCtrl[key]['TF']) * 180 / np.pi,
**alsCtrl[key]['style'])
ax[0].legend()
ax[0].set_ylabel('Magnitude [dB]')
ax[1].set_ylabel(r'Phase [$^\circ$]')
ax[1].set_xlabel('Frequency [Hz]')
ax[1].set_yticks([-180, -90, 0, 90, 180])
if title is not None:
ax[0].set_title(title)
return fig, ax
```
%% Cell type:code id: tags:
``` python
ff=np.logspace(-1, 5, 6000)
fig31, ax = plotTFs(alsCtrl, keys=['AUX_OL', 'AUX_CL', 'A_AUX', 'C_AUX', 'D_AUX', 'F_AUX'],
ff=ff, title='AUX PDH Open Loop Transfer Function (ALS not engaged)')
ax[0].legend(ncol=2)
ugfind = np.argmin(np.abs(np.abs(alsCtrl['AUX_OL']['TF']) - 1))
ugf = ff[ugfind]
phaseMargin = 180 + np.angle(alsCtrl['AUX_OL']['TF'][ugfind])*180/np.pi
ax[0].hlines(1, *ax[0].get_xlim(), color='black')
ax[0].vlines(ugf, *ax[0].get_ylim(), color='black', ls='--')
ax[1].vlines(ugf, *ax[1].get_ylim(), color='black', ls='--')
ax[0].text(ugf, 10, 'UGF = ' + str(np.round(ugf/1e3, 1)) + ' kHz')
ax[1].text(ugf, 90, 'PM = ' + str(np.round(phaseMargin, 1)) + r'$^\circ$')
#fig31.savefig('AUX_PDH_Bode_Plot.pdf', bbox_inches='tight')
```
%% Cell type:code id: tags:
``` python
fig32, ax = plt.subplots(2,1, figsize=(14,14), sharex=True,
gridspec_kw={'hspace':0.05})
T = np.linspace(0, 0.001, 1000)
t, ImpResp = control.impulse_response(auxModel['ss'],
T, input=2, output=0)
T = np.linspace(0, 0.005, 1000)
t, ImpResp = control.impulse_response(alsCtrl['AUX_CL']['SS'],
T, input=0, output=0)
ax[0].plot(t, ImpResp, label='Impulse Response')
ax[0].legend()
ax[0].get_xaxis().set_visible(False)
t, StepResp = control.step_response(auxModel['ss'],
T, input=2, output=0)
t, StepResp = control.step_response(alsCtrl['AUX_CL']['SS'],
T, input=0, output=0)
ax[1].plot(t, StepResp, label='Step Response')
ax[1].legend()
ax[0].set_title('AUX PDH Loop Control Model Time Domain Response')
#fig32.savefig('AUX_PDH_Loop_Control_Model_Time_Domain.pdf', bbox_inches='tight')
```
%% Cell type:code id: tags:
``` python
figlist = [fig1, fig21, fig22, fig31, fig32]
pp = PdfPages('ALS_NoiseBudgetUpdate.pdf')
for fig in figlist:
pp.savefig(fig, bbox_inches='tight')
pp.close()
```
......
......@@ -3,50 +3,8 @@
# -----------------------------------------------------------------------------
## Cavity Pole
C_AUX:
z:
- 7.920198337955405e-07+3966558.0576872188j
- 7.920198337955405e-07+7933116.1153744375j
- 7.920198337955405e-07+11899674.173061656j
- 7.920198337955405e-07+15866232.230748875j
- 7.920198337955405e-07+19832790.288436092j
- 7.920198337955405e-07+23799348.34612331j
- 7.920198337955405e-07+27765906.40381053j
- 7.920198337955405e-07+31732464.46149775j
- 7.920198337955405e-07+35699022.51918497j
- 7.920198337955405e-07+39665580.576872185j
- 7.920198337955405e-07-3966558.0576872188j
- 7.920198337955405e-07-7933116.1153744375j
- 7.920198337955405e-07-11899674.173061656j
- 7.920198337955405e-07-15866232.230748875j
- 7.920198337955405e-07-19832790.288436092j
- 7.920198337955405e-07-23799348.34612331j
- 7.920198337955405e-07-27765906.40381053j
- 7.920198337955405e-07-31732464.46149775j
- 7.920198337955405e-07-35699022.51918497j
- 7.920198337955405e-07-39665580.576872185j
p:
- 18890.139491156395+3966558.0576872188j
- 18890.139491156395+7933116.1153744375j
- 18890.139491156395+11899674.173061656j
- 18890.139491156395+15866232.230748875j
- 18890.139491156395+19832790.288436092j
- 18890.139491156395+23799348.34612331j
- 18890.139491156395+27765906.40381053j
- 18890.139491156395+31732464.46149775j
- 18890.139491156395+35699022.51918497j
- 18890.139491156395+39665580.576872185j
- 18890.139491156395-3966558.0576872188j
- 18890.139491156395-7933116.1153744375j
- 18890.139491156395-11899674.173061656j
- 18890.139491156395-15866232.230748875j
- 18890.139491156395-19832790.288436092j
- 18890.139491156395-23799348.34612331j
- 18890.139491156395-27765906.40381053j
- 18890.139491156395-31732464.46149775j
- 18890.139491156395-35699022.51918497j
- 18890.139491156395-39665580.576872185j
- 18890.139491156395
k: 118694.4187500171
p: 1.8883e+04
k: 1.1865e+05
H_AUX:
z: 0
......
No preview for this file type
noiseBudget/ALS_nb.png

227 KB | W: | H:

noiseBudget/ALS_nb.png

209 KB | W: | H:

noiseBudget/ALS_nb.png
noiseBudget/ALS_nb.png
noiseBudget/ALS_nb.png
noiseBudget/ALS_nb.png
  • 2-up
  • Swipe
  • Onion skin
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment