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/*/*.*
|
||||||
!doc/*/*.tex
|
!doc/*/*.tex
|
||||||
!doc/*/*.bib
|
!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.
|
Measurement reports for aforementioned experiments.
|
||||||
- Arne van Iterson
|
- Arne van Iterson
|
||||||
- Tom Selier
|
- 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