Here you go B
This commit is contained in:
58
data.py
Normal file
58
data.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy import signal
|
||||
|
||||
from signalprocess import SignalProcess
|
||||
|
||||
# Read data from the video processing pipeline
|
||||
sig = SignalProcess(path="out.tsv")
|
||||
# Uncomment to see fft plot
|
||||
# sig.fft()
|
||||
|
||||
# Applies the butter filter from the Signal Process class
|
||||
data = sig.butter_filter()
|
||||
|
||||
|
||||
plt.plot(sig.times, data)
|
||||
plt.plot(sig.times, sig.ave_counts)
|
||||
# Uncomment to see raw waveform
|
||||
# plt.plot(sig.times,sig.counts)
|
||||
|
||||
# Peak finding algo provided by scipy package
|
||||
peaks, descript = signal.find_peaks((-1) * data, prominence=0.2, distance=30)
|
||||
|
||||
# Plot the calculated peaks
|
||||
plt.scatter(
|
||||
sig.times[peaks],
|
||||
data[peaks],
|
||||
)
|
||||
|
||||
# Array of peak to peak distances
|
||||
distances = []
|
||||
# Array of the peak heights as calculated in the plot
|
||||
heights = []
|
||||
for i in range(len(peaks)):
|
||||
heights.append(data[peaks[i]])
|
||||
|
||||
for i in range(1, len(peaks) - 1):
|
||||
distance = (peaks[i] - peaks[i - 1]) / 30.0
|
||||
distances.append(distance)
|
||||
|
||||
# Basic stats
|
||||
print("distances: median={}, std={}".format(np.median(distances), np.std(distances)))
|
||||
print("heights: median={}, std={}".format(np.median(heights), np.std(heights)))
|
||||
|
||||
# Standard deviation rejection of outliers
|
||||
d = np.abs(heights - np.median(heights))
|
||||
mdev = np.median(d)
|
||||
s = d / mdev if mdev else 0.0
|
||||
peaks = peaks[s < 3.0]
|
||||
|
||||
# plot the non-rejected data on top of the old peak data
|
||||
plt.scatter(
|
||||
sig.times[peaks],
|
||||
data[peaks],
|
||||
)
|
||||
|
||||
# Draw that bitch
|
||||
plt.show()
|
||||
Reference in New Issue
Block a user