import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from scipy.optimize import curve_fit
from scipy.integrate import odeint
plt.style.use('default')
plt.style.use(['science','notebook','grid'])
# Číslo výboje
shot_no = 15
cesta_k_souboru = f'python_analyza/ch1_{shot_no}.csv'
kanal_1 = pd.read_csv('python_analyza/ch1_15.csv', names=['Time_ch1','U_ch1'])
kanal_2 = pd.read_csv('python_analyza/ch2_15.csv', names=['Time_ch2','U_ch2'])
kanal_3 = pd.read_csv('python_analyza/ch3_15.csv', names=['Time_ch3','U_ch3'])
# Přepočtení kanálu pro proud měděným prstýnkem a časové osy na mikro sekundy
x_puvodni = kanal_1['Time_ch1']
y_puvodni = kanal_1['U_ch1']
y_prepocteno = y_puvodni
x_prepocteno = x_puvodni * 10e-6
x_prepocteno_d = x_prepocteno[0:600]
y_prepocteno_d = y_prepocteno[0:600]
plt.scatter(x_prepocteno_d, y_prepocteno_d, s=5, c='orange', marker='o'
,label='$napětí$ $na$ $kondenzátoru$')
plt.xlabel("t [\u03BCs]",fontsize=14)
plt.ylabel("U [V]",fontsize=14)
#plt.xlim([0, 5])
plt.legend()
plt.savefig('Napeti_na_kondenzatoru_s_tyristorem.png')
U = 48
def fit_ch1(kanal,A,B,C,D):
f = U * np.exp(-1 * A * kanal) * np.sin(B*kanal + C) + D
return f
x_1 = kanal_1['Time_ch1'].iloc[:-1] * 10e-6
y_1 = kanal_1['U_ch1'].iloc[:-1]
x_fit = x_1[50:1000]
y_fit = y_1[50:1000]
# x_fit = x_1[111:501]
# y_fit = x_1[111:501]
parameters, covariance = curve_fit(fit_ch1,x_fit,y_fit)
fit_A = parameters[0]
fit_B = parameters[1]
fit_C = parameters[2]
fit_D = parameters[3]
print(fit_A)
print(fit_B)
print(fit_C)
print(fit_D)
fit_y = fit_ch1(x_fit,fit_A,fit_B,fit_C,fit_D)
plt.scatter(x_1, y_1, s=15, label='data', c='orange')
plt.plot(x_fit, fit_y, '-',c='red', label='fit')
plt.xlabel("t [\u03BCs]",fontsize=14)
plt.ylabel("U [V]",fontsize=14)
plt.legend()
plt.savefig('Napeti_na_kondenzatoru_fit_bez_tyristoru.png')
# ny_0 = 4*np.pi*10e-7
# ny_r = 2000 #ocel
# N_1 = 18
# S_1 = 2.7*2.7*10e-4
# l_1 = 1.2*3*10e-2
# L1 = (ny_0 * ny_r * N_1*N_1 * S_1) / l_1
# Výpočty z jednotlyvých parametrů
omega_0 = np.sqrt((fit_A * fit_A)+(fit_B * fit_B))
L = 1 / (50 * 10e-6 * omega_0 * omega_0)
R = 2 * L * fit_A
print(omega_0, L, R)
620632083.1851835 -4677962608.0042715 3.0027440439354858 -0.30223848250284674 4718953098.364605 8.981289051447564e-17 1.1148152267376365e-07