Select Git revision
board_xml_led.c
Forked from
PSP Fanclub / AVRSimV2
Source project has a limited visibility.
-
Jonas Broeckmann authoredJonas Broeckmann authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
verstaerker.py 4.15 KiB
import numpy as np
import matplotlib.pyplot as plt
import scipy.odr as sodr
import scipy.stats as scs
from my_methods import *
import scipy.optimize
delta_U = 0.00027#20/(2**12) /np.sqrt(12)
errorscale = 1
print('\n########## Verstaerker ohne C3 ##########')
verstaerker = parseCSV('verstaerker_ohne_c3')
t = verstaerker[:, 0]
U_a = verstaerker[:, 1]
U_b = verstaerker[:, 2]
sigma_t = (t[1] - t[0])/np.sqrt(12) * np.ones_like(t)
sigma_U_a = delta_U * np.ones_like(U_a)
sigma_U_b = delta_U * np.ones_like(U_b)
errorscale = 50
plt.errorbar(t, U_a, xerr = sigma_t, yerr = sigma_U_a * errorscale, label = 'U_A', linestyle = '')
plt.errorbar(t, U_b, xerr = sigma_t, yerr = sigma_U_b * errorscale, label = 'U_B', linestyle = '')
plt.ylabel(r'$U [V]$')
plt.xlabel(r'$t [ms]$')
plt.title(r'Messdaten Gleichrichter')
plt.grid()
plt.legend()
plt.tight_layout()
plt.savefig('output/verstaerker_oszi_ohne_c3.pdf')
plt.clf()
print('########## fitting sine ##########')
# odr does not converge here :(
def sine2(x, a,b,c,d):
return sine([a,b,c,d], x)
popt_a, pcov_a = scipy.optimize.curve_fit(sine2, t, U_a, sigma = sigma_U_a, p0 = [2*np.pi, np.pi/2, 0.5, 0])
popt_b, pcov_b = scipy.optimize.curve_fit(sine2, t, U_b, sigma = sigma_U_b, p0 = [2*np.pi, -np.pi/2, 2, 0])
chi_a, p_a = chi_sq_dof_p(t, U_a, xerr = sigma_t, yerr = sigma_U_a, beta = popt_a, model = sine)
chi_b, p_b = chi_sq_dof_p(t, U_b, xerr = sigma_t, yerr = sigma_U_b, beta = popt_b, model = sine)
sigma_a = np.sqrt(pcov_a.diagonal())
sigma_b = np.sqrt(pcov_b.diagonal())
print('## U_a ##')
print(popt_a)
print(sigma_a)
print(chi_a, p_a)
print('## U_b ##')
print(popt_b)
print(sigma_b)
print(chi_b, p_b)
beta = popt_b[2] / popt_a[2]
sigma_beta = np.sqrt((beta*sigma_b[2]/popt_b[2])**2 + (beta*sigma_a[2]/popt_a[2])**2)
print(f'\n\t Verstärkung: {round(beta, sigma_beta)}')
errorscale = 1
plt.errorbar(t, U_a, xerr = sigma_t, yerr = sigma_U_a * errorscale, label = 'U_A', linestyle = '')
plt.errorbar(t, U_b, xerr = sigma_t, yerr = sigma_U_b * errorscale, label = 'U_B', linestyle = '')
plt.plot(t, sine(popt_a, t), label = 'a')
plt.plot(t, sine(popt_b, t), label = 'b')
plt.legend()
plt.grid()
plt.savefig('./output/verstaerker_ohne_c3_fit.pdf')
plt.cla()
print('\n\n########## Verstaerker mit C3 ##########')
verstaerker = parseCSV('verstaerker_mit_c3')
t = verstaerker[:, 0]
U_a = verstaerker[:, 1]
U_b = verstaerker[:, 2]
sigma_t = (t[1] - t[0])/np.sqrt(12) * np.ones_like(t)
sigma_U_a = delta_U * np.ones_like(U_a)
sigma_U_b = delta_U * np.ones_like(U_b)
errorscale = 50
plt.errorbar(t, U_a, xerr = sigma_t, yerr = sigma_U_a * errorscale, label = 'U_A', linestyle = '')
plt.errorbar(t, U_b, xerr = sigma_t, yerr = sigma_U_b * errorscale, label = 'U_B', linestyle = '')
plt.ylabel(r'$U [V]$')
plt.xlabel(r'$t [ms]$')
plt.title(r'Messdaten Gleichrichter')
plt.grid()
plt.legend()
plt.tight_layout()
plt.savefig('output/verstaerker_oszi_ohne_c3.pdf')
plt.clf()
print('########## fitting sine ##########')
# odr does not converge here :(
def sine2(x, a,b,c,d):
return sine([a,b,c,d], x)
popt_a, pcov_a = scipy.optimize.curve_fit(sine2, t, U_a, sigma = sigma_U_a, p0 = [2*np.pi, np.pi/2, 0.05, 0])
popt_b, pcov_b = scipy.optimize.curve_fit(sine2, t, U_b, sigma = sigma_U_b, p0 = [2*np.pi, -np.pi/2, 3.55, -0.3])
chi_a, p_a = chi_sq_dof_p(t, U_a, xerr = sigma_t, yerr = sigma_U_a, beta = popt_a, model = sine)
chi_b, p_b = chi_sq_dof_p(t, U_b, xerr = sigma_t, yerr = sigma_U_b, beta = popt_b, model = sine)
sigma_a = np.sqrt(pcov_a.diagonal())
sigma_b = np.sqrt(pcov_b.diagonal())
print('## U_a ##')
print(popt_a)
print(sigma_a)
print(chi_a, p_a)
print('## U_b ##')
print(popt_b)
print(sigma_b)
print(chi_b, p_b)
beta = popt_b[2] / popt_a[2]
sigma_beta = np.sqrt((beta*sigma_b[2]/popt_b[2])**2 + (beta*sigma_a[2]/popt_a[2])**2)
print(f'\n\t Verstärkung: {round(beta, sigma_beta)}')
errorscale = 1
plt.errorbar(t, U_a, xerr = sigma_t, yerr = sigma_U_a * errorscale, label = 'U_A', linestyle = '')
plt.errorbar(t, U_b, xerr = sigma_t, yerr = sigma_U_b * errorscale, label = 'U_B', linestyle = '')
plt.plot(t, sine(popt_a, t), label = 'a')
plt.plot(t, sine(popt_b, t), label = 'b')
plt.legend()
plt.grid()
plt.savefig('./output/verstaerker_mit_c3_fit.pdf')
plt.show()
plt.cla()