Merge branch 'main' of https://arnweb.nl/gitea/arne/EV6_HW_Imp
This commit is contained in:
commit
48169776dc
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
doc/*/*.*
|
||||
!doc/*/*.tex
|
||||
!doc/*/*.bib
|
||||
*.cpython-311.pyc
|
12
README.md
12
README.md
@ -38,3 +38,15 @@ Description of PCB design choices.
|
||||
Measurement reports for aforementioned experiments.
|
||||
- Arne van Iterson
|
||||
- Tom Selier
|
||||
|
||||
## Scripts
|
||||
This repository contains scripts to assist in parsing data obtained from a Tektronix oscilloscope
|
||||
|
||||
### `./scripts/reflection.py`
|
||||
A script containing the neccessary steps to find peaks and measure the peaks and throughs of a 1d signal.
|
||||
|
||||
### `./scripts/reader.py`
|
||||
A module containing a class to read data from a tektronix oscilloscope.
|
||||
|
||||
### `./scripts/helper.py`
|
||||
A module containing a function that slices array based on time.
|
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
17
scripts/helper.py
Normal file
17
scripts/helper.py
Normal file
@ -0,0 +1,17 @@
|
||||
# {'TIME': [data], 'CH1': [data], 'CH2': [data]}
|
||||
def cut_time(data : dict, start : float, end : float) -> dict:
|
||||
idx_start = 0
|
||||
idx_end = 0
|
||||
|
||||
for idx, t in enumerate(data['TIME']):
|
||||
if t > start and idx_start == 0:
|
||||
idx_start = idx
|
||||
if t > end and idx_end == 0:
|
||||
idx_end = idx
|
||||
if idx_end != 0 and idx_start != 0:
|
||||
break
|
||||
|
||||
if idx_end != 0 and idx_start != 0:
|
||||
return {key: value[idx_start:idx_end] for key, value in data.items()}
|
||||
else:
|
||||
return None
|
35
scripts/reader.py
Normal file
35
scripts/reader.py
Normal file
@ -0,0 +1,35 @@
|
||||
import csv
|
||||
|
||||
class Reader():
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
def read_file(self, filename) -> dict:
|
||||
with open(filename, 'r') as file:
|
||||
data = list(csv.reader(file, delimiter=','))
|
||||
|
||||
# Delete metadata for now
|
||||
for i in range(15):
|
||||
data.pop(0)
|
||||
|
||||
# {'TIME': [data], 'CH1': [data], 'CH2': [data]}
|
||||
channels = []
|
||||
for i in range(len(data[0])):
|
||||
channels.append([])
|
||||
|
||||
for step in data[1:]:
|
||||
for idx, point in enumerate(step):
|
||||
channels[idx].append(float(point))
|
||||
|
||||
result = {}
|
||||
for idx, label in enumerate(data[0]):
|
||||
result[label] = channels[idx]
|
||||
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
reader = Reader()
|
||||
data = reader.read_file(r".\data\T0007ALL.csv")
|
||||
print(data)
|
||||
|
45
scripts/reflection.py
Normal file
45
scripts/reflection.py
Normal file
@ -0,0 +1,45 @@
|
||||
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\T0004CH1.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.grid()
|
||||
plt.show()
|
Loading…
Reference in New Issue
Block a user