Blame view

tf_cavity/tf_cavity_num.py 4.01 KB
2ae5099ce   bmarechal   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   bmarechal   add PDH signal
57
  r = 0.99998
2ae5099ce   bmarechal   first commit
58
59
60
61
62
  L = 140e-3
  c = 299792458
  
  tau = L/c
  fsr = 1/(2*tau)
bd3099d00   bmarechal   add PDH signal
63
64
65
66
  finesse = pi*r/(1-r**2)
  print('Finesse = %f
   FSR = %f
   FSR/Finesse = %f'%(finesse, fsr, fsr/finesse))
2ae5099ce   bmarechal   first commit
67
68
69
  
  f0 = (193e12//fsr)*fsr
  f = linspace(f0-0.1*fsr, f0+0.1*fsr, 1e5)
bd3099d00   bmarechal   add PDH signal
70
  fm = 30e6
2ae5099ce   bmarechal   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   bmarechal   add PDH signal
77
78
  Glsb = Fr(2*pi*(f-fm))
  Gusb = Fr(2*pi*(f+fm))
2ae5099ce   bmarechal   first commit
79

bd3099d00   bmarechal   add PDH signal
80
81
  #plot setup
  fig, axarr = plt.subplots(3, 2, sharex='col')
2ae5099ce   bmarechal   first commit
82

bd3099d00   bmarechal   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   bmarechal   first commit
100
101
102
  
  
  #nyquist
bd3099d00   bmarechal   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   bmarechal   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
  
  '''