Compare commits

..

2 Commits

Author SHA1 Message Date
8ebc6a36bc Added scope fft snippet
Used to compare the fft of signals taken from the DSOX2024A oscope
2024-03-21 10:54:10 -07:00
02512129e2 Added time of flight data analysis script
Used to compare expected time of flight to measured when using epoxyed desoldered hc-sr04 ultrasonic transducers.
2024-03-21 10:53:11 -07:00
2 changed files with 85 additions and 0 deletions

View File

@ -0,0 +1,40 @@
import numpy as np
import matplotlib.pyplot as plt
num_meas = 4
# speed of sound m/s
sos = 1500
# depth of the tub in mm
tub_depth = 690
# distances from the top measured at in mm
distance = [0,138,276,414]
# distance from the bottom
distance_to_bot = np.empty(num_meas)
for i in range(num_meas):
distance_to_bot[i] = tub_depth - distance[i]
# time from pulse to reflection measuredin uS
tof = [912,758,614,486]
# tot distance traveled
distance_traveled = np.empty(num_meas)
for i in range(num_meas):
distance_traveled[i] = (690*2) - (distance[i] * 2)
# ideal time from pulse to reflection measured uS
tof_expected = np.empty(num_meas)
for i in range(num_meas):
tof_expected[i] = ((distance_traveled[i] * 1e-3) / sos) * 1e6
plt.figure(1)
plt.plot(distance_to_bot, tof, label = 'tof measured in uS')
plt.plot(distance_to_bot, tof_expected, label = 'tof expected in uS')
plt.xlabel('Distance to bottom [mm]')
plt.ylabel('Time [uS]')
plt.title('Tof Data')
plt.xlim(max(distance_to_bot),min(distance_to_bot))
plt.legend()

45
scope_fft/scope_fft.py Normal file
View File

@ -0,0 +1,45 @@
import numpy as np
import matplotlib.pyplot as plt
def sig_fft(file1, file2):
# Load data from CSV files
data = np.genfromtxt(file1, delimiter=',')[2:]
data2 = np.genfromtxt(file2, delimiter=',')[2:]
# find where data is nan
n_index = np.argmax(np.isnan(data[:,1]))
n_index2 = np.argmax(np.isnan(data2[:,1]))
# Define each column
time = data[:n_index, 0]
rx_signal = data[:n_index, 1]
tx_signal = data[:n_index, 2]
num_samples = time.size
fs1 = 1 / (time[1] - time[0]) # Set sampling frequency
# Define each column for data 2
time2 = data2[:n_index2, 0]
rx_signal2 = data2[:n_index2, 1]
tx_signal2 = data2[:n_index2, 2]
num_samples2 = time2.size
fs2 = 1 / (time2[1] - time2[0]) # Set sampling frequency
# Plot raw data
plt.figure(1)
plt.plot(time, rx_signal, label='Data 1')
plt.plot(time2, rx_signal2, label='Data 2')
plt.title('Unfiltered Data')
plt.legend()
# fft for data 1
sigfft = np.fft.fft(rx_signal)
freq = np.fft.fftfreq(rx_signal.shape[-1], 1/(fs1))
# fft for data 2
sigfft2 = np.fft.fft(rx_signal2)
freq2 = np.fft.fftfreq(rx_signal2.shape[-1], 1/(fs2))
# plot fft
plt.figure(2)
plt.plot(freq, np.abs(sigfft), label='Data 1')
plt.plot(freq2, np.abs(sigfft2), label='Data 2')
plt.title('FFT of Data')
plt.xlim(0, 20000)
plt.show()