Commit 2ae5099ce4f9fc7e6ea0edff2924ea1d040acda8
1 parent
223950810a
Exists in
master
first commit
Showing 14 changed files with 927 additions and 0 deletions Inline Diff
- IQ/IQ.py
- PDH/PDH.py
- PDH_doppler_mach-zender/PDH_doppler_mach-zender_eom_amont.py
- PDH_doppler_mach-zender/PDH_doppler_mach-zender_eom_arm.py
- PDH_doppler_michelson/PDH_doppler_michelson_with_pzt.py
- PDH_doppler_michelson/PDH_doppler_michelson_without_pzt.py
- PDH_doppler_michelson/PDH_doppler_michelson_without_pzt_eom.py
- compensated_link/compensated_link.py
- doppler/doppler.py
- mich_psd_calculations/calc.py
- michelson_w_AOM/michelson_w_AOM.py
- mixer/mixer.py
- tf_cavity/tf_cavity.py
- tf_cavity/tf_cavity_num.py
IQ/IQ.py
| File was created | 1 | from sympy import * | ||
| 2 | from sympy.simplify.fu import * | |||
| 3 | ||||
| 4 | init_printing() | |||
| 5 | ||||
| 6 | #constants | |||
| 7 | E0, E1, W, t, dphi, kphi = symbols('E0, E1, Omega, t, Delta_phi, k_phi', real=True, imaginary=False) | |||
| 8 | ||||
| 9 | #define LO and RF | |||
| 10 | LO_I = E0*cos(W*t) | |||
| 11 | LO_Q = E0*cos(W*t+pi/2) | |||
| 12 | RF = E1*cos(W*t+dphi) | |||
| 13 | ||||
| 14 | #mixer |
PDH/PDH.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''Pound-Drever-Hall setup | |||
| 5 | ||||
| 6 | ----- --- | |||
| 7 | ------------|EOM|------|/|-----( ) | |||
| 8 | w_laser ----- --- cavity | |||
| 9 | ^ | | |||
| 10 | | U | |||
| 11 | | | | |||
| 12 | | v | |||
| 13 | |------->(X) π/2 | |||
| 14 | (w_pdh) | | |||
| 15 | ----- | |||
| 16 | |LPF| | |||
| 17 | ----- | |||
| 18 | | | |||
| 19 | v eps_pdh | |||
| 20 | ||||
| 21 | ''' | |||
| 22 | ||||
| 23 | from time import time | |||
| 24 | tic = time() | |||
| 25 | ||||
| 26 | from sympy import * | |||
| 27 | from sympy.simplify.fu import * | |||
| 28 | ||||
| 29 | init_printing() | |||
| 30 | ||||
| 31 | #constants | |||
| 32 | E0, J0, J1, w_laser, w_pdh, t, c = symbols('E0, J0, J1, omega_laser, Omega_pdh, t, c', imaginary=False, real=True) | |||
| 33 | ||||
| 34 | '''laser and phase-mod laser | |||
| 35 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 36 | ||||
| 37 | E_inc = \ | |||
| 38 | E0*( \ | |||
| 39 | J0*exp(I*((w_laser )*t)) \ | |||
| 40 | + J1*exp(I*((w_laser+w_pdh)*t)) \ | |||
| 41 | - J1*exp(I*((w_laser-w_pdh)*t)) \ | |||
| 42 | )''' | |||
| 43 | ||||
| 44 | #reflection near resonance | |||
| 45 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 46 | def F(phi): | |||
| 47 | dw = phi.diff(t) - w_cav | |||
| 48 | return -(I/pi)*(dw/dnu) | |||
| 49 | ||||
| 50 | #reflected phase-mod laser | |||
| 51 | v_x, d_x = symbols('v_x, delta_x', imaginary=False, real=True) | |||
| 52 | dx = v_x*t + d_x | |||
| 53 | E_ref = \ | |||
| 54 | E0*( \ | |||
| 55 | F( (w_laser )*t - w_laser*dx/c ) \ | |||
| 56 | *J0*exp(I*( (w_laser )*t - 2*w_laser*dx/c ) ) \ | |||
| 57 | + -1*J1*exp(I*( (w_laser+w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 58 | - -1*J1*exp(I*( (w_laser-w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 59 | ) | |||
| 60 | ||||
| 61 | #intensity of reflected phase-mod laser | |||
| 62 | I_pdh = abs(E_ref)**2 | |||
| 63 | I_pdh = expand(TR8(expand(expand_complex(I_pdh)))) | |||
| 64 | ||||
| 65 | #demodulation of I_pdh at Omega_pdh |
PDH_doppler_mach-zender/PDH_doppler_mach-zender_eom_amont.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''Pound-Drever-Hall setup | |||
| 5 | Mach-Zender with one photodiode | |||
| 6 | ||||
| 7 | ----- --- --- | |||
| 8 | ---------|EOM|-|\|------------|/|-----------( ) | |||
| 9 | w_laser ----- --- --- cavity | |||
| 10 | | | | |||
| 11 | | | | |||
| 12 | | ----- --- | |||
| 13 | \-|AOM|-------|\| | |||
| 14 | ----- --- | |||
| 15 | ^ | | |||
| 16 | | U | |||
| 17 | | | | |||
| 18 | | V | |||
| 19 | |-------->(X) | |||
| 20 | | | ----- | |||
| 21 | (W_aom) |---|LPF|--> eps_dop | |||
| 22 | V ----- | |||
| 23 | (W_pdh)---------->(X) | |||
| 24 | | | |||
| 25 | | | |||
| 26 | V eps_pdh | |||
| 27 | ||||
| 28 | ||||
| 29 | ||||
| 30 | ''' | |||
| 31 | ||||
| 32 | from time import time | |||
| 33 | tic = time() | |||
| 34 | ||||
| 35 | from sympy import * | |||
| 36 | from sympy.simplify.fu import * | |||
| 37 | ||||
| 38 | init_printing() | |||
| 39 | ||||
| 40 | #constants | |||
| 41 | E0, J0, J1, w_laser, w_pdh, w_aom, t = symbols('E0, J0, J1, omega_laser, Omega_pdh, Omega_aom, t', imaginary=False, real=True) | |||
| 42 | v_x, d_x = symbols('v_x, delta_x', imaginary=False, real=True) | |||
| 43 | c = symbols('c', imaginary=False, real=True) | |||
| 44 | ||||
| 45 | #laser and phase-mod laser | |||
| 46 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 47 | ||||
| 48 | E_aom_eom = \ | |||
| 49 | E0*( \ | |||
| 50 | J0*exp(I*( ( w_laser+w_aom )*t) ) \ | |||
| 51 | + J1*exp(I*( ( w_laser+w_aom+w_pdh )*t) ) \ | |||
| 52 | - J1*exp(I*( ( w_laser+w_aom-w_pdh )*t) ) ) | |||
| 53 | ||||
| 54 | ||||
| 55 | E_eom = \ | |||
| 56 | E0*( \ | |||
| 57 | J0*exp(I*( ( w_laser )*t ) ) \ | |||
| 58 | + J1*exp(I*( ( w_laser+w_pdh )*t ) ) \ | |||
| 59 | - J1*exp(I*( ( w_laser-w_pdh )*t ) ) ) | |||
| 60 | ||||
| 61 | #approximation of F(w) near a resonance | |||
| 62 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 63 | def F(phi): | |||
| 64 | dw = phi.diff(t) - w_cav | |||
| 65 | return -(I/pi)*(dw/dnu) | |||
| 66 | ||||
| 67 | #reflected phase-mod laser and dephased by doppler effect and by actuator | |||
| 68 | dx = v_x*t + d_x | |||
| 69 | E_ref = \ | |||
| 70 | E0*( \ | |||
| 71 | F( w_laser*t - w_laser*(dx)/(2*pi*c) ) \ | |||
| 72 | *J0*exp( I*( (w_laser )*t - 2*w_laser*dx/c ) ) \ | |||
| 73 | + -1*J1*exp( I*( (w_laser+w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 74 | - -1*J1*exp( I*( (w_laser-w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 75 | ) | |||
| 76 | ||||
| 77 | #optical mixer | |||
| 78 | E_mz = sqrt(2)/2 * E_aom_eom + sqrt(2)/2 * E_ref | |||
| 79 | ||||
| 80 | #intensity of mixed wave | |||
| 81 | I_mz = abs(E_mz)**2 | |||
| 82 | I_mz = expand(TR8(expand(expand_complex(I_mz)))) | |||
| 83 | ||||
| 84 | ||||
| 85 | #Q demodulation of I_mz at Omega_aom for doppler error signal obtention | |||
| 86 | kphidop = symbols('k_phi_doppler', real=True) | |||
| 87 | eps_dop = 2 * kphidop * I_mz * cos(w_aom*t-pi/2) | |||
| 88 | eps_dop = expand(TR8(TR7(expand(eps_dop)))) | |||
| 89 |
PDH_doppler_mach-zender/PDH_doppler_mach-zender_eom_arm.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''Pound-Drever-Hall setup | |||
| 5 | Mach-Zender with one photodiode | |||
| 6 | ||||
| 7 | --- ----- --- | |||
| 8 | ----------|\|---|EOM|---------|/|-----------( ) | |||
| 9 | w_laser --- ----- --- cavity | |||
| 10 | | | | |||
| 11 | | | | |||
| 12 | | ----- --- | |||
| 13 | \----|AOM|---------|\| | |||
| 14 | ----- --- | |||
| 15 | ^ | | |||
| 16 | | U | |||
| 17 | | | | |||
| 18 | | V | |||
| 19 | |---------->(X) | |||
| 20 | | | ----- | |||
| 21 | (W_aom) |---|LPF|--> eps_dop | |||
| 22 | V ----- | |||
| 23 | (W_pdh)---------->(X) | |||
| 24 | | | |||
| 25 | | | |||
| 26 | V eps_pdh | |||
| 27 | ||||
| 28 | ||||
| 29 | ||||
| 30 | ''' | |||
| 31 | ||||
| 32 | from time import time | |||
| 33 | tic = time() | |||
| 34 | ||||
| 35 | from sympy import * | |||
| 36 | from sympy.simplify.fu import * | |||
| 37 | ||||
| 38 | init_printing() | |||
| 39 | ||||
| 40 | #constants | |||
| 41 | E0, J0, J1, w_laser, w_pdh, w_aom, t = symbols('E0, J0, J1, omega_laser, Omega_pdh, Omega_aom, t', imaginary=False, real=True) | |||
| 42 | v_x, d_x = symbols('v_x, delta_x', imaginary=False, real=True) | |||
| 43 | c = symbols('c', imaginary=False, real=True) | |||
| 44 | ||||
| 45 | #laser and phase-mod laser | |||
| 46 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 47 | ||||
| 48 | E_aom = E0*exp(I*((w_laser+w_aom)*t)) | |||
| 49 | ||||
| 50 | E_eom = \ | |||
| 51 | E0*( \ | |||
| 52 | J0*exp(I*( ( w_laser )*t ) ) \ | |||
| 53 | + J1*exp(I*( ( w_laser+w_pdh)*t ) ) \ | |||
| 54 | - J1*exp(I*( ( w_laser-w_pdh)*t ) ) ) | |||
| 55 | ||||
| 56 | #approximation of F(w) near a resonance | |||
| 57 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 58 | def F(phi): | |||
| 59 | dw = phi.diff(t) - w_cav | |||
| 60 | return -(I/pi)*(dw/dnu) | |||
| 61 | ||||
| 62 | #reflected phase-mod laser and dephased by doppler effect and by actuator | |||
| 63 | dx = v_x*t + d_x | |||
| 64 | E_ref = \ | |||
| 65 | E0*( \ | |||
| 66 | F( w_laser *t - w_laser*dx/c ) \ | |||
| 67 | *J0*exp( I*( w_laser *t - 2*w_laser*dx/c ) ) \ | |||
| 68 | + -1*J1*exp( I*( (w_laser+w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 69 | - -1*J1*exp( I*( (w_laser-w_pdh)*t - 2*w_laser*dx/c ) ) \ | |||
| 70 | ) | |||
| 71 | ||||
| 72 | #optical mixer | |||
| 73 | E_mz = sqrt(2)/2 * E_aom + sqrt(2)/2 * E_ref | |||
| 74 | ||||
| 75 | #intensity of mixed wave | |||
| 76 | I_mz = abs(E_mz)**2 | |||
| 77 | I_mz = expand(TR8(expand(expand_complex(I_mz)))) | |||
| 78 | ||||
| 79 | ||||
| 80 | #Q demodulation of I_mz at Omega_aom for doppler error signal obtention | |||
| 81 | kphidop = symbols('k_phi_doppler', real=True) | |||
| 82 | eps_dop = 2 * kphidop * I_mz * cos(w_aom*t-pi/2) |
PDH_doppler_michelson/PDH_doppler_michelson_with_pzt.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''Pound-Drever-Hall setup | |||
| 5 | Michelson with piezo actuator in cavity arm and AOM in reference arm | |||
| 6 | ||||
| 7 | ----- | |||
| 8 | (2*W_aom)-->(X)---|LPF|---> | |||
| 9 | | ----- eps_dop | |||
| 10 | O | |||
| 11 | | | |||
| 12 | ----- --- --- | |||
| 13 | ------------|EOM|---|\|---|/|-----------( ) | |||
| 14 | w_laser ----- --- --- cavity | |||
| 15 | ^ | | | |||
| 16 | | ----- U | |||
| 17 | | |AOM| | | |||
| 18 | | ----- | | |||
| 19 | | _|_ | | |||
| 20 | | //// | | |||
| 21 | | v | |||
| 22 | |---------->(X) | |||
| 23 | (W_pdh) | | |||
| 24 | ----- | |||
| 25 | |LPF| | |||
| 26 | ----- | |||
| 27 | | | |||
| 28 | v eps_pdh | |||
| 29 | ||||
| 30 | ''' | |||
| 31 | ||||
| 32 | from time import time | |||
| 33 | tic = time() | |||
| 34 | ||||
| 35 | from sympy import * | |||
| 36 | from sympy.simplify.fu import * | |||
| 37 | ||||
| 38 | init_printing() | |||
| 39 | ||||
| 40 | #constants | |||
| 41 | E0, J0, J1, w_laser, w_pdh, w_aom, t, c = symbols('E0, J0, J1, omega_laser, Omega_pdh, Omega_aom, t, c', imaginary=False, real=True) | |||
| 42 | ||||
| 43 | '''#laser and phase-mod laser | |||
| 44 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 45 | ||||
| 46 | E_eom = \ | |||
| 47 | E0*( \ | |||
| 48 | J0*exp(I*(w_laser*t)) \ | |||
| 49 | + J1*exp(I*((w_laser+w_pdh)*t)) \ | |||
| 50 | - J1*exp(I*((w_laser-w_pdh)*t)) \ | |||
| 51 | )''' | |||
| 52 | ||||
| 53 | #aom double shifted phase-mod wave in reference arm | |||
| 54 | E_aom = \ | |||
| 55 | E0*( \ | |||
| 56 | J0*exp(I*((w_laser +2*w_aom)*t)) \ | |||
| 57 | + J1*exp(I*((w_laser+w_pdh+2*w_aom)*t)) \ | |||
| 58 | - J1*exp(I*((w_laser-w_pdh+2*w_aom)*t)) \ | |||
| 59 | ) | |||
| 60 | ||||
| 61 | #approximation of F(w) near a resonance | |||
| 62 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 63 | def F(phi): | |||
| 64 | dw = phi.diff(t) - w_cav | |||
| 65 | return -(I/pi)*(dw/dnu) | |||
| 66 | ||||
| 67 | #reflected phase-mod laser and dephased by doppler effect | |||
| 68 | v_x, d_x, v_u, d_u = symbols('v_x, delta_x, v_u, delta_u', imaginary=False, real=True) | |||
| 69 | dx = v_x*t + d_x | |||
| 70 | du = v_u*t + d_u | |||
| 71 | E_ref = \ | |||
| 72 | E0*( \ | |||
| 73 | F( w_laser *t - (dx+du)*(w_laser)/c ) \ | |||
| 74 | *J0*exp( I*( w_laser *t - 2*(dx+du)*(w_laser)/c ) ) \ | |||
| 75 | + -1*J1*exp( I*( (w_laser+w_pdh)*t - 2*(dx+du)*(w_laser)/c ) ) \ | |||
| 76 | - -1*J1*exp( I*( (w_laser-w_pdh)*t - 2*(dx+du)*(w_laser)/c ) ) \ | |||
| 77 | ) | |||
| 78 | ||||
| 79 | #intensity of reflected wave | |||
| 80 | I_pdh = abs(E_ref)**2 | |||
| 81 | I_pdh = expand(TR8(expand(expand_complex(I_pdh)))) | |||
| 82 | ||||
| 83 | #optical mixer | |||
| 84 | E_mich = sqrt(2)/2 * E_aom + sqrt(2)/2 * E_ref | |||
| 85 | ||||
| 86 | #intensity of mixed wave | |||
| 87 | I_mich = abs(E_mich)**2 | |||
| 88 | I_mich = expand(TR8(expand(expand_complex(I_mich)))) | |||
| 89 | ||||
| 90 | #Q demodulation of I_pdh at Omega_pdh for PDH error signal obtention | |||
| 91 | kphipdh = symbols('k_phi_pdh', real=True) | |||
| 92 | eps_pdh = 2 * kphipdh * I_pdh * cos(w_pdh*t-pi/2) | |||
| 93 | eps_pdh = expand(TR8(TR7(expand(eps_pdh)))) | |||
| 94 | ||||
| 95 | #Q demodulation of I_mich at 2*Omega_aom for doppler error signal obtention | |||
| 96 | kphidop = symbols('k_phi_doppler', real=True) | |||
| 97 | eps_dop = 2 * kphidop * I_mich * cos(2*w_aom*t-pi/2) | |||
| 98 | eps_dop = expand(TR8(TR7(expand(eps_dop)))) | |||
| 99 | ||||
| 100 | toc = time() |
PDH_doppler_michelson/PDH_doppler_michelson_without_pzt.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''Pound-Drever-Hall setup | |||
| 5 | Michelson with piezo actuator and AOM in cavity arm | |||
| 6 | ||||
| 7 | ----- | |||
| 8 | (2*W_aom)-->(X)---|LPF|---> | |||
| 9 | | ----- eps_dop | |||
| 10 | O | |||
| 11 | | | |||
| 12 | ----- --- --- ----- | |||
| 13 | ------------|EOM|---|\|---|/|---|AOM|---( ) | |||
| 14 | w_laser ----- --- --- ----- cavity | |||
| 15 | ^ | | | |||
| 16 | | | U | |||
| 17 | | | | | |||
| 18 | | | | | |||
| 19 | | _|_ | | |||
| 20 | | //// | | |||
| 21 | | v | |||
| 22 | |---------->(X) | |||
| 23 | (W_pdh) | | |||
| 24 | ----- | |||
| 25 | |LPF| | |||
| 26 | ----- | |||
| 27 | | | |||
| 28 | v eps_pdh | |||
| 29 | ||||
| 30 | ''' | |||
| 31 | ||||
| 32 | from time import time | |||
| 33 | tic = time() | |||
| 34 | ||||
| 35 | from sympy import * | |||
| 36 | from sympy.simplify.fu import * | |||
| 37 | ||||
| 38 | init_printing() | |||
| 39 | ||||
| 40 | #constants | |||
| 41 | E0, J0, J1, w_laser, w_pdh, t = symbols('E0, J0, J1, omega_laser, Omega_pdh, t', imaginary=False, real=True) | |||
| 42 | v_x, d_x, c = symbols('v_x, delta_x, c', imaginary=False, real=True) | |||
| 43 | w_aom, dw, dphi = symbols('Omega_aom, delta_Omega, delta_phi', imaginary=False, real=True) | |||
| 44 | ||||
| 45 | phi_u = dw*t #+ dphi | |||
| 46 | phi = w_aom*t + phi_u | |||
| 47 | ||||
| 48 | '''# | |||
| 49 | #laser | |||
| 50 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 51 | ''' | |||
| 52 | ||||
| 53 | #phase-mod laser | |||
| 54 | E_eom = \ | |||
| 55 | E0*( \ | |||
| 56 | J0*exp(I*((w_laser )*t)) \ | |||
| 57 | + J1*exp(I*((w_laser+w_pdh)*t)) \ | |||
| 58 | - J1*exp(I*((w_laser-w_pdh)*t)) \ | |||
| 59 | ) | |||
| 60 | ||||
| 61 | #approximation of F(w) near a resonance | |||
| 62 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 63 | def F(phi): | |||
| 64 | dw = phi.diff(t) - w_cav | |||
| 65 | return -(I/pi)*(dw/dnu) | |||
| 66 | ||||
| 67 | #reflected phase-mod laser and dephased by doppler effect with double aom shift | |||
| 68 | dx = v_x*t + d_x | |||
| 69 | E_ref = \ | |||
| 70 | E0*( \ | |||
| 71 | F( (w_laser )*t - dx*(w_laser+phi.diff(t))/c + phi ) \ | |||
| 72 | * J0*exp( I*( (w_laser )*t - 2*dx*(w_laser+phi.diff(t))/c + 2*phi ) ) \ | |||
| 73 | + -1*J1*exp( I*( (w_laser+w_pdh)*t - 2*dx*(w_laser+phi.diff(t))/c + 2*phi ) ) \ | |||
| 74 | - -1*J1*exp( I*( (w_laser-w_pdh)*t - 2*dx*(w_laser+phi.diff(t))/c + 2*phi ) ) \ | |||
| 75 | ) | |||
| 76 | ||||
| 77 | #intensity of reflected wave | |||
| 78 | I_pdh = abs(E_ref)**2 | |||
| 79 | I_pdh = expand(TR8(expand(expand_complex(I_pdh)))) | |||
| 80 | ||||
| 81 | #optical mixer | |||
| 82 | E_mich = sqrt(2)/2 * E_eom + sqrt(2)/2 * E_ref | |||
| 83 | ||||
| 84 | #intensity of mixed wave | |||
| 85 | I_mich = abs(E_mich)**2 | |||
| 86 | I_mich = expand(TR8(expand(expand_complex(I_mich)))) | |||
| 87 | ||||
| 88 | #Q demodulation of I_pdh at Omega_pdh for PDH error signal obtention | |||
| 89 | kphipdh = symbols('k_phi_pdh', real=True) | |||
| 90 | eps_pdh = 2 * kphipdh * I_pdh * cos(w_pdh*t-pi/2) | |||
| 91 | eps_pdh = expand(TR8(TR7(expand(eps_pdh)))) | |||
| 92 | ||||
| 93 | #Q demodulation of I_mich at 2*Omega_aom for doppler error signal obtention | |||
| 94 | kphidop = symbols('k_phi_doppler', real=True) | |||
| 95 | eps_dop = 2 * kphidop * I_mich * cos(2*w_aom*t-pi/2) | |||
| 96 | #eps_dop = 2 * kphidop * I_mich * cos(2*phi.diff(t)*t-pi/2) | |||
| 97 | eps_dop = expand(TR8(TR7(expand(eps_dop)))) | |||
| 98 | ||||
| 99 | toc = time() |
PDH_doppler_michelson/PDH_doppler_michelson_without_pzt_eom.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''pseudo Pound-Drever-Hall setup | |||
| 5 | ||||
| 6 | ----- | |||
| 7 | (2*W_aom)-->(X)---|LPF|---> | |||
| 8 | | ----- eps | |||
| 9 | O | |||
| 10 | | | |||
| 11 | --- | |||
| 12 | --------------------|\|-----------------( ) | |||
| 13 | w_laser --- cavity | |||
| 14 | | | |||
| 15 | ----- | |||
| 16 | |AOM| | |||
| 17 | ----- | |||
| 18 | _|_ | |||
| 19 | //// | |||
| 20 | ||||
| 21 | ''' | |||
| 22 | ||||
| 23 | from time import time | |||
| 24 | tic = time() | |||
| 25 | ||||
| 26 | from sympy import * | |||
| 27 | from sympy.simplify.fu import * | |||
| 28 | ||||
| 29 | init_printing() | |||
| 30 | ||||
| 31 | #constants | |||
| 32 | E0, J0, J1, w_laser, w_pdh, t = symbols('E0, J0, J1, omega_laser, Omega_pdh, t', imaginary=False, real=True) | |||
| 33 | v_x, d_x, c = symbols('v_x, delta_x, c', imaginary=False, real=True) | |||
| 34 | w_aom = symbols('Omega_aom', imaginary=False, real=True) | |||
| 35 | ||||
| 36 | #laser and phase-mod laser | |||
| 37 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 38 | ||||
| 39 | #aom shifted phase-mod wave | |||
| 40 | E_aom = \ | |||
| 41 | E0*exp(I*((w_laser+2*w_aom)*t)) | |||
| 42 | ||||
| 43 | #approximation of F(w) near a resonance | |||
| 44 | dnu, w_cav = symbols('delta_nu, omega_cav', imaginary=False, real=True) | |||
| 45 | def F(phi): | |||
| 46 | dw = phi.diff(t) - w_cav | |||
| 47 | return -(I/pi)*(dw/dnu) | |||
| 48 | ||||
| 49 | #reflected phase-mod laser and dephased by doppler effect with double aom shift | |||
| 50 | dx = v_x*t + d_x | |||
| 51 | E_ref = \ | |||
| 52 | F( (w_laser)*t - (w_laser)*(dx)/(2*pi*c) ) * E0*exp( I*( (w_laser)*t - (w_laser)*(2*dx)/c ) ) | |||
| 53 | ||||
| 54 | #optical mixer | |||
| 55 | E_mich = sqrt(2)/2 * E_aom + sqrt(2)/2 * E_ref | |||
| 56 | ||||
| 57 | #intensity of mixed wave | |||
| 58 | I_mich = abs(E_mich)**2 | |||
| 59 | I_mich = expand(TR8(expand(expand_complex(I_mich)))) | |||
| 60 |
compensated_link/compensated_link.py
| File was created | 1 | from sympy import * | ||
| 2 | from sympy.simplify.fu import * | |||
| 3 | ||||
| 4 | init_printing() | |||
| 5 | ||||
| 6 | #constants | |||
| 7 | E0, w_laser, W_aom, t = symbols('E0, omega_laser, Omega_aom, t', real=True, imaginary=False) | |||
| 8 | dphi, dW = symbols('Delta_phi, Delta_Omega', real=True, imaginary=False) | |||
| 9 | c, dx = symbols('c, Delta_x', real=True, imaginary=False) | |||
| 10 | ||||
| 11 | phi_u = dW*t + dphi | |||
| 12 | phi = W_aom*t + phi_u | |||
| 13 | ||||
| 14 | #laser | |||
| 15 | E_laser = E0*exp(I*(w_laser*t)) | |||
| 16 | ||||
| 17 | #reflected wave and dephased by doppler and noise and double shifted | |||
| 18 | E_aom_ref = E0*exp(I*( w_laser*t + 2*dx*(w_laser+phi.diff(t))/c + 2*phi )) | |||
| 19 | ||||
| 20 | #reflected wave on the reference arm of michelson | |||
| 21 | E_ref = E_laser | |||
| 22 | ||||
| 23 | #optical mixer | |||
| 24 | E_mix = sqrt(2)/2*E_ref + sqrt(2)/2*E_aom_ref | |||
| 25 |
doppler/doppler.py
| File was created | 1 | from sympy import * | ||
| 2 | from sympy.simplify.fu import * | |||
| 3 | ||||
| 4 | init_printing() | |||
| 5 | ||||
| 6 | #constants | |||
| 7 | A, B, w, t, kphi, c = symbols('A, B, omega, t, k_phi, c', imaginary=False, real=True) | |||
| 8 | dx = symbols('delta_x', cls=Function) | |||
| 9 | #wave vector | |||
| 10 | k = w/c | |||
| 11 | ||||
| 12 | #reflected wave | |||
| 13 | E1 = A*cos(w*t-2*k*dx(t)) | |||
| 14 | ||||
| 15 | #demodulation of E1 at omega in quadrature |
mich_psd_calculations/calc.py
| File was created | 1 | from numpy import log, log10, pi | ||
| 2 | ||||
| 3 | #constants | |||
| 4 | c = 3E8 | |||
| 5 | nu = c/1542E-9 | |||
| 6 | f = 1 | |||
| 7 | ||||
| 8 | #allan deviation aimed | |||
| 9 | sigma_y = 1E-17 | |||
| 10 | ||||
| 11 | #PSD of frequency fluctuations (frequency flicker) in dB.Hz^-1 | |||
| 12 | Sy = 10*log10(sigma_y**2/(2*log(2))) | |||
| 13 | ||||
| 14 | #PSD of phase fluctuations in dB.rad^2.Hz^-1 | |||
| 15 | Sphi = Sy + 20*log10(nu) - 20*log10(f) |
michelson_w_AOM/michelson_w_AOM.py
| File was created | 1 | from sympy import * | ||
| 2 | from sympy.simplify.fu import * | |||
| 3 | ||||
| 4 | init_printing() | |||
| 5 | ||||
| 6 | #constants | |||
| 7 | E0, E1, w, W, t, dphi, kphi = symbols('E0, E1, omega, Omega, t, Delta_phi, k_phi', real=True, imaginary=False) | |||
| 8 | dx, du, c = symbols('Delta_x, Delta_u, c', real=True, imaginary=False) | |||
| 9 | ||||
| 10 | #reference wave | |||
| 11 | Eb0 = E0*exp(I*(w*t)) | |||
| 12 | ||||
| 13 | #double Omega shifted and dphi dephased wave | |||
| 14 | Eb1 = E1*exp(I*((w+2*W)*t -2*w*(dx+2*du)/c)) | |||
| 15 | ||||
| 16 | #optical mixer | |||
| 17 | Emix = sqrt(2)/2 * Eb0 + sqrt(2)/2 * Eb1 | |||
| 18 |
mixer/mixer.py
| File was created | 1 | from sympy import * | ||
| 2 | from sympy.simplify.fu import * | |||
| 3 | ||||
| 4 | init_printing() | |||
| 5 | ||||
| 6 | A, B, w, t, dphi = symbols('A, B, omega, t, Delta_phi', real=True, imaginary=False) | |||
| 7 | ||||
| 8 | #polynimial approach of RF mixer | |||
| 9 | k1, k2, k3 = symbols('k1, k2, k3', real=True, imaginary=False) | |||
| 10 | e = A*cos(w*t) + B*cos(w*t+dphi-pi/2) | |||
| 11 | Vmix_poly = k1*e + k2*e**2 | |||
| 12 | Vmix_poly = expand(TR8(TR7(expand(Vmix_poly)))) | |||
| 13 | ||||
| 14 | print('Polynomial result :\n' + pretty(Vmix_poly) + '\n') | |||
| 15 |
tf_cavity/tf_cavity.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''TF of FP cavity in reflection | |||
| 5 | ||||
| 6 | ---------- | |||
| 7 | X(s) ----- | -tau⋅s | | |||
| 8 | -------------->|1-R|----->(X)----->|e |------ | |||
| 9 | | ----- ^ ---------- | | |||
| 10 | | | | | |||
| 11 | | | V | |||
| 12 | ---- ---- ---- | |||
| 13 | |-R| |-R| |-R| | |||
| 14 | ---- ---- ---- | |||
| 15 | | ^ | | |||
| 16 | | | ---------- | | |||
| 17 | Y(s) V ----- | | -tau⋅s | | | |||
| 18 | <-----(X)<-----|1-R|<--------------|e |<----- | |||
| 19 | ----- ---------- | |||
| 20 | ||||
| 21 | ''' | |||
| 22 | ||||
| 23 | from sympy import * | |||
| 24 | ||||
| 25 | init_printing() | |||
| 26 | ||||
| 27 | w, r, L, c = symbols('omega, r, L, c', imaginary=False, real=True) | |||
| 28 | ||||
| 29 | tau = L/c | |||
| 30 | fsr = 1/(2*tau) | |||
| 31 | ||||
| 32 | #TF of cavity in reflection | |||
| 33 | def Fr(w): | |||
| 34 | s = 1j*w | |||
| 35 | return r*(exp(-2*tau*s)-1)/(1-r**2*exp(-2*tau*s)) | |||
| 36 | ||||
| 37 | dw = symbols('dw', imaginary=False, real=True) | |||
| 38 | Fr_dw_0 = simplify(simplify(Fr(2*pi*fsr+dw).series(dw, 0, 2).expand().coeff(dw))*dw) | |||
| 39 | ||||
| 40 | '''results |
tf_cavity/tf_cavity_num.py
| File was created | 1 | #!/usr/bin/python | ||
| 2 | # -*- coding: utf-8 -*- | |||
| 3 | ||||
| 4 | '''TF of FP cavity in reflection | |||
| 5 | ||||
| 6 | ---------- | |||
| 7 | X(s) ----- | -tau⋅s | | |||
| 8 | -------------->|1-R|----->(X)----->|e |------ | |||
| 9 | | ----- ^ ---------- | | |||
| 10 | | | | | |||
| 11 | | | V | |||
| 12 | ---- ---- ---- | |||
| 13 | |-R| |-R| |-R| | |||
| 14 | ---- ---- ---- | |||
| 15 | | ^ | | |||
| 16 | | | ---------- | | |||
| 17 | Y(s) V ----- | | -tau⋅s | | | |||
| 18 | <-----(X)<-----|1-R|<--------------|e |<----- | |||
| 19 | ----- ---------- | |||
| 20 | ||||
| 21 | ''' | |||
| 22 | ||||
| 23 | '''import matplotlib as mpl | |||
| 24 | mpl.use('pgf') | |||
| 25 | ||||
| 26 | def figsize(scale): | |||
| 27 | fig_width_pt = 469.755 # Get this from LaTeX using \the\textwidth | |||
| 28 | inches_per_pt = 1.0/72.27 # Convert pt to inch | |||
| 29 | golden_mean = (5.0**0.5-1.0)/2.0 # Aesthetic ratio (you could change this) | |||
| 30 | fig_width = fig_width_pt*inches_per_pt*scale # width in inches | |||
| 31 | fig_height = fig_width*golden_mean # height in inches | |||
| 32 | fig_size = [fig_width,fig_height] | |||
| 33 | return fig_size | |||
| 34 | ||||
| 35 | pgf_with_latex = { # setup matplotlib to use latex for output | |||
| 36 | "pgf.texsystem": "pdflatex", # change this if using xetex or lautex | |||
| 37 | "text.usetex": True, # use LaTeX to write all text | |||
| 38 | "font.family": "serif", | |||
| 39 | "font.serif": [], # blank entries should cause plots to inherit fonts from the document | |||
| 40 | "font.sans-serif": [], | |||
| 41 | "font.monospace": [], | |||
| 42 | "axes.labelsize": 10, # LaTeX default is 10pt font. | |||
| 43 | "text.fontsize": 10, | |||
| 44 | "legend.fontsize": 8, # Make the legend/label fonts a little smaller | |||
| 45 | "xtick.labelsize": 8, | |||
| 46 | "ytick.labelsize": 8, | |||
| 47 | "figure.figsize": figsize(0.9), # default fig size of 0.9 textwidth | |||
| 48 | "pgf.preamble": [ | |||
| 49 | r"\usepackage[utf8x]{inputenc}", # use utf8 fonts becasue your computer can handle it :) | |||
| 50 | r"\usepackage[T1]{fontenc}", # plots will be generated using this preamble | |||
| 51 | ] | |||
| 52 | } | |||
| 53 | mpl.rcParams.update(pgf_with_latex) | |||
| 54 | ''' | |||
| 55 | from numpy import * | |||
| 56 | import matplotlib.pyplot as plt | |||
| 57 | ||||
| 58 | r = 0.99 | |||
| 59 | L = 140e-3 | |||
| 60 | c = 299792458 | |||
| 61 | ||||
| 62 | tau = L/c | |||
| 63 | fsr = 1/(2*tau) | |||
| 64 | ||||
| 65 | f0 = (193e12//fsr)*fsr | |||
| 66 | f = linspace(f0-0.1*fsr, f0+0.1*fsr, 1e5) | |||
| 67 | ||||
| 68 | #TF of cavity in reflection | |||
| 69 | def Fr(w): | |||
| 70 | s = 1j*w | |||
| 71 | return r*(exp(-2*tau*s)-1)/(1-r**2*exp(-2*tau*s)) | |||
| 72 | ||||
| 73 | G = Fr(2*pi*f) | |||
| 74 | ||||
| 75 | #plot bode of F(w) | |||
| 76 | ax1 = plt.subplot(3, 1, 1) | |||
| 77 | ax1.set_ylabel('Magnitude') | |||
| 78 | ax1.plot(f, abs(G)) | |||
| 79 | ax1.grid() | |||
| 80 | ||||
| 81 | ax2 = plt.subplot(3, 1, 2, sharex = ax1) | |||
| 82 | ax2.set_ylabel('Phase (deg)') | |||
| 83 | ax2.set_xlabel('omega (rad.s$^{-1}$)') | |||
| 84 | ax2.plot(f, angle(G, deg = True)) | |||
| 85 | ax2.grid() | |||
| 86 | ||||
| 87 | ||||
| 88 | #nyquist | |||
| 89 | ax3 = plt.subplot(3, 1, 3) | |||
| 90 | ax3.set_ylabel('$j\omega$') | |||
| 91 | ax3.set_xlabel('$\sigma$') | |||
| 92 | ax3.plot(real(G), imag(G)) |