Browse Source

Incorporate round 1 of Greg's comments.

Caleb Fangmeier 7 years ago
parent
commit
182a35a942
6 changed files with 125 additions and 47 deletions
  1. BIN
      build/comprehensive.pdf
  2. 40 45
      comprehensive.tex
  3. BIN
      figures/mode_power.xcf
  4. BIN
      figures/mode_power2.png
  5. 81 0
      scripts/pdh_demo2.py
  6. 4 2
      title.tex

BIN
build/comprehensive.pdf


File diff suppressed because it is too large
+ 40 - 45
comprehensive.tex


BIN
figures/mode_power.xcf


BIN
figures/mode_power2.png


+ 81 - 0
scripts/pdh_demo2.py

@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+import matplotlib
+import matplotlib.pyplot as plt
+from matplotlib import animation
+import numpy as np
+from numpy import cos, pi
+
+matplotlib.rcParams.update({'font.size': 15})
+
+c = 3E8  # m/s
+L = 1.0  # m
+FSR = 2*pi*c/(2*L)  # Hz
+
+A0 = 1.0
+w0 = 1E9*FSR
+f0 = w0 / 2 / pi
+a_mod = 200
+w_mod = 0.0002 * w0
+f_mod = w_mod / 2 / pi
+
+
+def R_e(w):
+    T = 0.05
+    R = 1-T
+    return 1 - T**2 / (1 + R**2 - 2*R*cos(w*2*L/c))
+
+
+def get_ref_power(freqs, powers):
+    return sum(power*R_e(freq) for freq, power in zip(freqs, powers))
+
+
+def main():
+    sample_n = 2000000
+    ts = np.linspace(0, 10000*(1/f0), sample_n)
+    dt = ts[1]-ts[0]
+    mod = a_mod*np.sin(w_mod*ts)
+    Es = A0*np.cos(w0*ts + mod)
+    print("FSR", FSR)
+    print(1/f0, dt)
+
+    n_groups = 100
+    win_size = int((1/f_mod) / dt / 12)
+    win_spacing = (sample_n - win_size) // (n_groups+2)
+    fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, ncols=1)
+
+    def do_plot(i):
+        print(i)
+        # ax0.clear()
+        ax1.clear()
+        n = ts.size // n_groups
+        win_start = (win_size//2) + i*win_spacing
+        win_end = win_start + win_size
+        print(f"{win_start},{win_end}")
+
+        # sec_ts = ts[win_start:win_end]
+        sec = Es[win_start:win_end]
+        # mod_sec = mod[win_start:win_end]
+        sec_ft = np.fft.rfftn(sec)
+        freq = np.fft.fftfreq(sec.size, d=dt)[:n//2]
+        power = (sec_ft[:n//2].real**2 + sec_ft[:n//2].imag**2) / win_size
+
+        # ax0.plot(sec_ts, mod_sec)
+        ax0.plot(ts[(win_start+win_end) // 2], mod[(win_start+win_end) // 2], 'k.')
+        ax0.set_ylim(-1.1*a_mod, 1.1*a_mod)
+        ax0.set_xlim(0, ts[-1])
+
+        ax1.plot(2*pi*freq/w0, power)
+        ax1.set_xlim(0.80, 1.20)
+
+        ref_power = get_ref_power(freq, power)
+        ax2.plot(ts[(win_start+win_end) // 2], ref_power, 'r.')
+        ax2.set_xlim(0, ts[-1])
+
+        plt.tight_layout()
+
+    anim = animation.FuncAnimation(fig, do_plot, n_groups)
+    anim.save("output.mp4")
+
+
+if __name__ == '__main__':
+    main()

+ 4 - 2
title.tex

@@ -49,7 +49,9 @@
 
 \end{center}
 
-\end{titlepage}
+\newpage
+\tableofcontents
+
 
-% \tableofcontents
+\end{titlepage}