52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
from matplotlib import pyplot as plt
|
|
from scipy import signal
|
|
import numpy as np
|
|
import reader
|
|
import helper
|
|
|
|
# load data
|
|
data_reader = reader.Reader()
|
|
data = data_reader.read_file(r".\data\T0001CH1.csv")
|
|
|
|
# slice empty space, start and end time is in seconds
|
|
data = helper.cut_time(data, -1e-7, 5e-7)
|
|
|
|
# find peaks, use max to find the highest, or a threshold
|
|
# adjust width to find the middle of a peak (width is in indices)
|
|
# peaks, _ = signal.find_peaks(data['CH1'], max(data['CH1']))
|
|
peaks, _ = signal.find_peaks(data['CH1'], 2, width=10)
|
|
|
|
# find throughs, comment away it finds too many throughs
|
|
# invert = [-x for x in data['CH1']]
|
|
# throughs, _ = signal.find_peaks(invert, max(invert))
|
|
# peaks = np.concatenate([peaks, throughs])
|
|
|
|
# store time step
|
|
step = data['TIME'][1] - data['TIME'][0]
|
|
|
|
# do some calcs
|
|
idx_diff = peaks[-1] - peaks[0]
|
|
tim_diff = idx_diff*step
|
|
print(f"Time between peaks: {tim_diff*1e9:.1f} ns")
|
|
c = 299792458
|
|
k = 0.66
|
|
c_coax = c * k
|
|
print(f"Measured distance: {(tim_diff/2)*c_coax:.2f} m")
|
|
|
|
# Plot data
|
|
plt.plot(data['TIME'], data['CH1'])
|
|
if len(peaks) > 0:
|
|
for peak in peaks:
|
|
plt.vlines(
|
|
peak*step+data['TIME'][0],
|
|
min(data['CH1']),
|
|
max(data['CH1']), 'red', 'dashed')
|
|
plt.xlabel('Time [s]')
|
|
plt.ylabel('Voltage [V]')
|
|
plt.title('Voltage vs Time, $75 \Omega$ cable')
|
|
plt.tight_layout()
|
|
txt="$\Delta t\ =\ {:.2f}\ ns $".format(tim_diff*1e9)
|
|
plt.figtext(0.54, 0.01, txt, wrap=True, horizontalalignment='center', fontsize=9)
|
|
plt.grid()
|
|
plt.show()
|