Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 52a4dac990 | |||
| 9a3d9689fd |
@@ -1,5 +1,6 @@
|
||||
import sys
|
||||
import ast
|
||||
import time
|
||||
import psycopg2
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
@@ -8,6 +9,21 @@ from math import ceil, floor
|
||||
from json import loads, dumps
|
||||
from scipy.fft import fft, fftfreq, rfft, rfftfreq, irfft, ifft
|
||||
|
||||
import lttb
|
||||
from lttb.validators import has_two_columns, x_is_regular
|
||||
|
||||
def get_downsampled_signal(ori_signal, output_length):
|
||||
signal_length = len(ori_signal)
|
||||
signal = np.array([range(signal_length), ori_signal]).T
|
||||
assert signal.shape == (signal_length, 2)
|
||||
|
||||
# Downsampling
|
||||
downsampled_signal = lttb.downsample(signal, n_out=output_length, validators=[has_two_columns, x_is_regular])
|
||||
assert downsampled_signal.shape == (output_length, 2)
|
||||
downsampled_signal_index = downsampled_signal[:, 0]
|
||||
downsampled_signal_value = downsampled_signal[:, 1]
|
||||
return downsampled_signal_index, downsampled_signal_value
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
params = {}
|
||||
@@ -20,7 +36,7 @@ if __name__ == '__main__':
|
||||
cut_off_freq = int(params['cut_off_freq'])
|
||||
threshold = ast.literal_eval('[' + params['threshold'] + ']')
|
||||
waveform = ast.literal_eval('[' + params['waveform'] + ']')
|
||||
SAMPLE_RATE = int(params['sample_rate'])
|
||||
SAMPLE_RATE = int(float(params['sample_rate']))
|
||||
DURATION = ceil(float(params['time_duration']))
|
||||
DELTA_TIME = 1e6 / SAMPLE_RATE
|
||||
N = SAMPLE_RATE * DURATION
|
||||
@@ -39,30 +55,22 @@ if __name__ == '__main__':
|
||||
print(e)
|
||||
exit
|
||||
finally:
|
||||
time = np.array([], dtype=int)
|
||||
data = np.array([])
|
||||
timeArray = np.array([], dtype=int)
|
||||
dataArray = np.array([])
|
||||
|
||||
for sub_data in ret:
|
||||
for split_data in sub_data[0].split('"***"')[:-1]:
|
||||
value = np.array(split_data.split(' '))
|
||||
time = np.append(time, value[::2].astype(np.int))
|
||||
data = np.append(data, value[1::2].astype(np.int))
|
||||
|
||||
# print(len(time), len(data))
|
||||
|
||||
timeArray = np.append(timeArray, value[::2].astype(np.int32))
|
||||
dataArray = np.append(dataArray, value[1::2].astype(np.int32))
|
||||
xf = rfftfreq(N, 1 / SAMPLE_RATE)
|
||||
points_per_freq = len(xf) / (SAMPLE_RATE / 2)
|
||||
target_idx = int(points_per_freq * cut_off_freq)
|
||||
|
||||
# print(xf[target_idx])
|
||||
|
||||
yf = rfft(data)
|
||||
yf = rfft(dataArray)
|
||||
yf[:target_idx] = 0
|
||||
new_sig = np.round(irfft(yf, len(data)),3)
|
||||
|
||||
# print(time[-1])
|
||||
# print(len(datas))
|
||||
# print(len(yf),yf)
|
||||
new_sig = np.round(irfft(yf, len(dataArray)),3)
|
||||
|
||||
if threshold[0] == 'below':
|
||||
th = new_sig < threshold[1]
|
||||
@@ -77,23 +85,26 @@ if __name__ == '__main__':
|
||||
filter_array = []
|
||||
for idx, point in enumerate(thresholded_edge_indices):
|
||||
if idx > 0:
|
||||
if time[thresholded_edge_indices[idx]] - int(waveform[2]) >= time[thresholded_edge_indices[idx-1]]:
|
||||
if timeArray[thresholded_edge_indices[idx]] - int(waveform[2]) >= timeArray[thresholded_edge_indices[idx-1]]:
|
||||
filter_array.append(True)
|
||||
elif time[thresholded_edge_indices[idx]] - int(waveform[1]) >= time[thresholded_edge_indices[idx-1]]:
|
||||
elif timeArray[thresholded_edge_indices[idx]] - int(waveform[1]) >= timeArray[thresholded_edge_indices[idx-1]]:
|
||||
filter_array.append(True)
|
||||
else:
|
||||
filter_array.append(False)
|
||||
else:
|
||||
if time[thresholded_edge_indices[idx]] - int(waveform[1]) < 0:
|
||||
if timeArray[thresholded_edge_indices[idx]] - int(waveform[1]) < 0:
|
||||
filter_array.append(False)
|
||||
else:
|
||||
filter_array.append(True)
|
||||
|
||||
timemark_list = thresholded_edge_indices[filter_array]
|
||||
|
||||
OUTPUT_SIGNAL_SIZE = 2000
|
||||
downsampled_signal_index, downsampled_signal_value = get_downsampled_signal(new_sig, OUTPUT_SIGNAL_SIZE)
|
||||
if ret_data_type == 'all':
|
||||
print(' '.join(str(x) for x in time))
|
||||
print(' '.join(str(x) for x in new_sig))
|
||||
print(' '.join(str(x) for x in timeArray))
|
||||
print(' '.join(str(x) for x in downsampled_signal_index))
|
||||
print(' '.join(str(x) for x in downsampled_signal_value))
|
||||
print(' '.join(str(x) for x in timemark_list))
|
||||
elif ret_data_type == 'partial':
|
||||
return_sub_signal_lists = {}
|
||||
|
||||
Reference in New Issue
Block a user