Blame view
tf_cavity/tf_cavity_num.py
3.38 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
#!/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 r = 0.99 L = 140e-3 c = 299792458 tau = L/c fsr = 1/(2*tau) f0 = (193e12//fsr)*fsr f = linspace(f0-0.1*fsr, f0+0.1*fsr, 1e5) #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) #plot bode of F(w) ax1 = plt.subplot(3, 1, 1) ax1.set_ylabel('Magnitude') ax1.plot(f, abs(G)) ax1.grid() ax2 = plt.subplot(3, 1, 2, sharex = ax1) ax2.set_ylabel('Phase (deg)') ax2.set_xlabel('omega (rad.s$^{-1}$)') ax2.plot(f, angle(G, deg = True)) ax2.grid() #nyquist ax3 = plt.subplot(3, 1, 3) ax3.set_ylabel('$j\omega$') ax3.set_xlabel('$\sigma$') ax3.plot(real(G), imag(G)) ax3.grid() ax3.axis('equal') #plt.savefig('fig.pgf') plt.show() '''results ⎛ -2.0⋅ⅈ⋅L⋅ω ⎞ ⎜ ───────────⎟ ⎜ c ⎟ r⋅⎝-1 + ℯ ⎠ F(w) = ───────────────────── -2.0⋅ⅈ⋅L⋅ω ─────────── 2 c - r ⋅ℯ + 1 ''' |