improve analysis
This commit is contained in:
@@ -4,8 +4,6 @@ import matplotlib.pyplot as plt
|
|||||||
import scipy as sp
|
import scipy as sp
|
||||||
import time
|
import time
|
||||||
|
|
||||||
# Try using filtfilt instead of filtfilt
|
|
||||||
|
|
||||||
matplotlib.rcParams['legend.framealpha'] = 1.0
|
matplotlib.rcParams['legend.framealpha'] = 1.0
|
||||||
|
|
||||||
packet_definitions = b"""packet_rtc 1 28 uint32_t t 0 4 RTC_TimeTypeDef sTime 4 20 RTC_DateTypeDef sDate 24 4
|
packet_definitions = b"""packet_rtc 1 28 uint32_t t 0 4 RTC_TimeTypeDef sTime 4 20 RTC_DateTypeDef sDate 24 4
|
||||||
@@ -39,6 +37,25 @@ def get_type_list(lines):
|
|||||||
i += 4
|
i += 4
|
||||||
return types
|
return types
|
||||||
|
|
||||||
|
class vbatt_vars():
|
||||||
|
|
||||||
|
charges = []
|
||||||
|
ts = []
|
||||||
|
|
||||||
|
def process_vbatt(d, t):
|
||||||
|
global vbatt_vars
|
||||||
|
for e in t['elements']:
|
||||||
|
block = d[e['offset']:e['offset'] + e['size']]
|
||||||
|
element_size = int(len(block) / e['n_elements'])
|
||||||
|
if e['name'] == b't':
|
||||||
|
vbatt_vars.ts.append((1 / 2000) * int.from_bytes(block[:4], byteorder = 'little', signed = True))
|
||||||
|
if e['name'] == b'vbatt_cnts':
|
||||||
|
vbatt_vars.charges.append(2 * 3.3 * int.from_bytes(block, byteorder = 'little', signed = False) / (1 << 12))
|
||||||
|
|
||||||
|
if len(vbatt_vars.charges) % 10 == 9:
|
||||||
|
plt.plot(vbatt_vars.ts, vbatt_vars.charges)
|
||||||
|
plt.savefig("vbatt.png")
|
||||||
|
plt.close()
|
||||||
|
|
||||||
class ppg_vars():
|
class ppg_vars():
|
||||||
|
|
||||||
@@ -354,9 +371,12 @@ def adc_graphs():
|
|||||||
hrv_ax.plot(np.array(r_peaks_[2:]) / adc_vars.freq_Hz, hrv, 'b.', alpha = 0.5)
|
hrv_ax.plot(np.array(r_peaks_[2:]) / adc_vars.freq_Hz, hrv, 'b.', alpha = 0.5)
|
||||||
|
|
||||||
if len(r_peaks_) > 10:
|
if len(r_peaks_) > 10:
|
||||||
N = int(np.ceil(len(r_peaks_) / 30))
|
|
||||||
|
N = int(np.floor(len(r_peaks_) / 30))
|
||||||
for i in range(N):
|
for i in range(N):
|
||||||
block = 1000 * np.array(r_peaks_[30 * i : min(len(r_peaks_), 30 * i + 30)]) / adc_vars.freq_Hz
|
block = 1000 * np.array(r_peaks_[30 * i : min(len(r_peaks_), 30 * i + 30)]) / adc_vars.freq_Hz
|
||||||
|
if len(block) > 2:
|
||||||
|
bpm = 60 * len(block) / ((block[-1] - block[0]) / 1000)
|
||||||
rmssd = np.power(np.sum(np.power(np.diff(np.diff(block)), 2.0)) / (len(block) - 2), 0.5)
|
rmssd = np.power(np.sum(np.power(np.diff(np.diff(block)), 2.0)) / (len(block) - 2), 0.5)
|
||||||
sdnn = np.std(np.diff(block))
|
sdnn = np.std(np.diff(block))
|
||||||
pNN50 = 100 * np.mean(np.abs(np.diff(np.diff(block))) > 50)
|
pNN50 = 100 * np.mean(np.abs(np.diff(np.diff(block))) > 50)
|
||||||
@@ -376,8 +396,19 @@ def adc_graphs():
|
|||||||
axs[1].plot([],'k.',label = 'R-R int', alpha = 0.5)
|
axs[1].plot([],'k.',label = 'R-R int', alpha = 0.5)
|
||||||
axs[1].plot([],'b.',label = '|delta(R-R int)|', alpha = 0.5)
|
axs[1].plot([],'b.',label = '|delta(R-R int)|', alpha = 0.5)
|
||||||
axs[1].plot([],color = 'orange', label = 'Breath (tension)', alpha = 0.5)
|
axs[1].plot([],color = 'orange', label = 'Breath (tension)', alpha = 0.5)
|
||||||
axs[1].plot([],color = 'red', label = 'RMSSD', alpha = 0.5)
|
|
||||||
|
try:
|
||||||
|
axs[1].plot([],color = 'red', label = f'RMSSD {int(rmssd)}ms', alpha = 0.5)
|
||||||
|
except NameError:
|
||||||
|
axs[1].plot([],color = 'red', label = f'RMSSD', alpha = 0.5)
|
||||||
|
try:
|
||||||
|
axs[1].plot([],color = 'magenta', label = f'SSDN {int(sdnn)}ms', alpha = 0.5)
|
||||||
|
except NameError:
|
||||||
axs[1].plot([],color = 'magenta', label = 'SSDN', alpha = 0.5)
|
axs[1].plot([],color = 'magenta', label = 'SSDN', alpha = 0.5)
|
||||||
|
try:
|
||||||
|
axs[1].plot([],color = 'black', label = f'BPM {int(bpm)}', alpha = 0.5)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
axs[1].plot([],color = 'pink', label = 'pNN50', alpha = 0.5)
|
axs[1].plot([],color = 'pink', label = 'pNN50', alpha = 0.5)
|
||||||
axs[1].legend(loc = 'lower center', bbox_to_anchor = (0.5, 1.02), ncol = 4)
|
axs[1].legend(loc = 'lower center', bbox_to_anchor = (0.5, 1.02), ncol = 4)
|
||||||
axs[1].set_xlabel("t (s)")
|
axs[1].set_xlabel("t (s)")
|
||||||
@@ -502,6 +533,8 @@ def read_and_process(types, cons, size):
|
|||||||
process_adc(d, t)
|
process_adc(d, t)
|
||||||
if t['type_name'] == b'packet_spo2':
|
if t['type_name'] == b'packet_spo2':
|
||||||
process_ppg(d, t)
|
process_ppg(d, t)
|
||||||
|
if t['type_name'] == b'packet_vbatt':
|
||||||
|
process_vbatt(d, t)
|
||||||
index += 1 + t['size']
|
index += 1 + t['size']
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user