Blame view
tf_cavity/tf_cavity_num.py
4.01 KB
2ae5099ce first commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#!/usr/bin/python # -*- coding: utf-8 -*- '''TF of FP cavity in reflection ---------- X(s) ----- | -tau⋅s | -------------->|1-R|----->(X)----->|e |------ | ----- ^ ---------- | | | | | | V ---- ---- ---- |-R| |-R| |-R| ---- ---- ---- | ^ | | | ---------- | Y(s) V ----- | | -tau⋅s | | <-----(X)<-----|1-R|<--------------|e |<----- ----- ---------- ''' '''import matplotlib as mpl mpl.use('pgf') def figsize(scale): fig_width_pt = 469.755 # Get this from LaTeX using \the\textwidth inches_per_pt = 1.0/72.27 # Convert pt to inch golden_mean = (5.0**0.5-1.0)/2.0 # Aesthetic ratio (you could change this) fig_width = fig_width_pt*inches_per_pt*scale # width in inches fig_height = fig_width*golden_mean # height in inches fig_size = [fig_width,fig_height] return fig_size pgf_with_latex = { # setup matplotlib to use latex for output "pgf.texsystem": "pdflatex", # change this if using xetex or lautex "text.usetex": True, # use LaTeX to write all text "font.family": "serif", "font.serif": [], # blank entries should cause plots to inherit fonts from the document "font.sans-serif": [], "font.monospace": [], "axes.labelsize": 10, # LaTeX default is 10pt font. "text.fontsize": 10, "legend.fontsize": 8, # Make the legend/label fonts a little smaller "xtick.labelsize": 8, "ytick.labelsize": 8, "figure.figsize": figsize(0.9), # default fig size of 0.9 textwidth "pgf.preamble": [ r"\usepackage[utf8x]{inputenc}", # use utf8 fonts becasue your computer can handle it :) r"\usepackage[T1]{fontenc}", # plots will be generated using this preamble ] } mpl.rcParams.update(pgf_with_latex) ''' from numpy import * import matplotlib.pyplot as plt |
bd3099d00 add PDH signal |
57 |
r = 0.99998 |
2ae5099ce first commit |
58 59 60 61 62 |
L = 140e-3 c = 299792458 tau = L/c fsr = 1/(2*tau) |
bd3099d00 add PDH signal |
63 |
finesse = pi*r/(1-r**2) |
eb8647511 add LPF behav of ... |
64 65 66 |
print(' Finesse = %f FSR = %f FSR/Finesse = %f'%(finesse, fsr, fsr/finesse)) |
2ae5099ce first commit |
67 68 69 |
f0 = (193e12//fsr)*fsr f = linspace(f0-0.1*fsr, f0+0.1*fsr, 1e5) |
bd3099d00 add PDH signal |
70 |
fm = 30e6 |
2ae5099ce first commit |
71 72 73 74 75 76 |
#TF of cavity in reflection def Fr(w): s = 1j*w return r*(exp(-2*tau*s)-1)/(1-r**2*exp(-2*tau*s)) G = Fr(2*pi*f) |
bd3099d00 add PDH signal |
77 78 |
Glsb = Fr(2*pi*(f-fm)) Gusb = Fr(2*pi*(f+fm)) |
2ae5099ce first commit |
79 |
|
bd3099d00 add PDH signal |
80 81 |
#plot setup fig, axarr = plt.subplots(3, 2, sharex='col') |
2ae5099ce first commit |
82 |
|
bd3099d00 add PDH signal |
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#plot bode of F(w) axarr[0, 1].set_ylabel('Magnitude') #axarr[0, 1].set_xlabel('Frequency (Hz)') axarr[0, 1].plot(f, abs(G)) axarr[0, 1].grid() axarr[1, 1].set_ylabel('Phase (deg)') #axarr[1, 1].set_xlabel('Frequency (Hz)') axarr[1, 1].plot(f, angle(G, deg = True)) axarr[1, 1].grid() #PDH signal iG = (G*Gusb.conjugate()-G.conjugate()*Glsb).imag axarr[2, 1].set_ylabel('epsillon normalized') axarr[2, 1].set_xlabel('Frequency (Hz)') axarr[2, 1].xaxis.set_label_coords(0.5, -0.3) axarr[2, 1].plot(f, iG) axarr[2, 1].grid() |
2ae5099ce first commit |
100 101 102 |
#nyquist |
bd3099d00 add PDH signal |
103 104 105 106 107 108 109 110 111 112 113 114 |
axarr[2, 0].set_ylabel('$j\omega$') axarr[2, 0].set_xlabel('$\sigma$') axarr[2, 0].plot(real(G), imag(G)) axarr[2, 0].grid() axarr[2, 0].axis('equal') axarr[2, 0].set_xlim([-1.1, 1.1]) #layout axarr[0, 0].axis('off') axarr[1, 0].axis('off') fig.subplots_adjust(wspace=0.5) plt.tight_layout() |
2ae5099ce first commit |
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
#plt.savefig('fig.pgf') plt.show() '''results ⎛ -2.0⋅ⅈ⋅L⋅ω ⎞ ⎜ ───────────⎟ ⎜ c ⎟ r⋅⎝-1 + ℯ ⎠ F(w) = ───────────────────── -2.0⋅ⅈ⋅L⋅ω ─────────── 2 c - r ⋅ℯ + 1 ''' |