DyLab_3D_MOT/Data_Coils/Frequ_resp.py
2022-09-05 16:09:56 +02:00

117 lines
4.0 KiB
Python

# %%
import matplotlib.pyplot as plt
import RigolWFM.wfm as rigol
import numpy as np
import matplotlib as mpl
import scipy.optimize
# %%
# Data import
f = np.array(
[1, 1.83, 3.36, 6.16, 11.3, 20.7, 37.9, 69.5, 127, 234, 428, 785, 1440, 2640, 4830, 8860, 16200, 29800, 54600])
A_HH = np.array(
[1.13, 1.13, 1.13, 1.13, 1.13, 1.14, 1.13, 1.11, 1.03, 0.881, 0.708, 0.504, 0.334, 0.198, 0.119, 0.069, 0.046,
0.028, 0.024])
dA_HH = np.array(
[0.006, 0.002, 0.001, 0.002, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.002, 0.001, 0.004, 0.001, 0.001,
0.001, 0.001, 0.001])
ph_HH = np.array(
[0.8, -0.8, -1.2, -0.8, 1.5, 3.7, 7.9, 11.8, 20.6, 32.0, 44.6, 54.8, 64.3, 74.0, 78.6, 82.8, 85.3, 87.4, 93.7])
dph_HH = np.array(
[1.5, 1.5, 0.5, 1.2, 4.1, 0.001, 1.3, 0.001, 0.4, 0.001, 0.080, 0, 0.23, 0.7, 0.05, 1.6, 1.5, 2.5, 2.8])
A_AHH = np.array(
[1.14, 1.14, 1.14, 1.14, 1.15, 1.15, 1.13, 1.09, 0.966, 0.737, 0.539, 0.359, 0.216, 0.130, 0.0767, 0.0475])
dA_AHH = np.array(
[0.007, 0.005, 0.002, 0.002, 0.002, 0.002, 0.001, 0.001, 0.004, 0.012, 0.001, 0.001, 0.003, 0.001, 0.0004, 0.0004])
ph_AHH = np.array([0.6, -0.3, 0.5, 0.3, 2.5, 4.3, 8.8, 17.2, 30.3, 45.3, 54.2, 64.4, 72.6, 77.24, 79.4, 80.14])
dph_AHH = np.array([3.0, 2.0, 0.4, 1.2, 1.0, 0.7, 1.2, 1.2, 0.5, 2.6, 0.9, 1.4, 1.2, 1.5, 2.1, 1.2])
# %%
my_colors = {'light_green': '#97e144',
'orange': '#FF914D',
'light_grey': '#545454',
'pastel_blue': '#1b64d1',
'light_blue': '#71C8F4',
'purple': '#7c588c'}
mpl.rcParams.update({'font.size': 11, 'axes.linewidth': 1, 'lines.linewidth': 2, 'text.usetex': False, 'font.family': 'arial'})
mpl.rcParams['xtick.direction'] = 'in'
mpl.rcParams['ytick.direction'] = 'in'
mpl.rcParams['xtick.top'] = True
mpl.rcParams['ytick.right'] = True
# %% Fit func
def I_fit(f,U,tau):
omega = 2* np.pi *f
return U/np.sqrt(tau**2 + omega**2)
# %% fit HH
fit_bound = (0,len(A_HH))
p0 = [1,2.2e3]
popt_hh, pcov_hh = scipy.optimize.curve_fit(I_fit, f, A_HH, p0=p0, sigma=dA_HH, absolute_sigma=False)
print("U0, tau, t0")
print(popt_hh)
# %% fit AHH
fit_bound = (0,len(A_HH))
p0 = [1,2.2e3]
popt_ahh, pcov_ahh = scipy.optimize.curve_fit(I_fit, f[0:len(A_AHH)], A_AHH, p0=p0)
print("U0, tau, t0")
print(popt_hh)
# %% Scaling factor
scale = 0.3/I_fit(1, *popt_hh)
# %%
x=np.linspace(0,50000,10000)
fig, ax = plt.subplots(figsize=(5.4, 4), dpi=400)
ax.errorbar(f, scale*A_HH, yerr=scale*dA_HH, elinewidth=2, capsize=5, linewidth=0, label='Data HH', zorder=4, marker='.',color='C0')
ax.plot(x, scale*I_fit(x, *popt_hh),label=f'fit HH, $\\tau$ = 2255(110) 1/s',color='C8')
ax.errorbar(f[0:len(A_AHH)], scale*A_AHH, yerr=scale*dA_AHH, elinewidth=2, capsize=5, linewidth=0, label='Data AHH', zorder=3, marker='^',color='C1')
ax.plot(x, scale*I_fit(x, *popt_ahh),label=f'fit AHH, $\\tau$ = 1416(56) 1/s', color='C4')
ax.hlines(scale*I_fit(1, *popt_hh)/np.sqrt(2),0, 1e5, color='C7', linestyle=(0,(2.5,3)), label='3dB point \nHH: f = 359 Hz, AHH: 225 Hz ')
ax.grid(alpha=0.6)
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlim(0, 1e5)
ax.set_ylabel(r'current amplitude ($\rm A_{pp}$)')
ax.set_xlabel('frequency f (Hz)')
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=[handles[3], handles[4], handles[0], handles[1], handles[2]])
fig.tight_layout()
fig.savefig('C:/Users/Joschka/Desktop/Master_Thesis/Figures/Coil_measurements/Final/freq_resp.png')
fig.savefig('C:/Users/Joschka/Desktop/Master_Thesis/Figures/Coil_measurements/Final_low/freq_resp.png', dpi=96)
plt.show()
# %% Find 3dB point
x=np.linspace(0,1000,10000)
for i in range(0,10000):
if I_fit(x[i], *popt_hh) < (I_fit(1, *popt_hh)/np.sqrt(2)):
print(f"Cutoff HH: {x[i]} Hz")
break
for i in range(0, 10000):
if I_fit(x[i], *popt_ahh) < (I_fit(1, *popt_ahh) / np.sqrt(2)):
print(f"Cutoff AHH: {x[i]} Hz")
break
# %%
fig, ax = plt.subplots(figsize=(5.4, 4),dpi=400)
ax.errorbar(f, ph_HH, yerr=dph_HH, label='Data HH')
ax.grid(alpha=0.6, which='minor')
ax.set_xscale('log')
#ax.set_yscale('log')
plt.show()