import numpy as np
from scipy import interpolate
[docs]def compute_amp(ecg, features_dict):
if len(features_dict[0][~np.isnan(features_dict[0])]) == 0:
return np.nan
amp = np.ones(len(features_dict[0])) * np.nan
if len(features_dict) == 1:
amp[~np.isnan(features_dict[0])] = ecg[features_dict[0][~np.isnan(features_dict[0])]]
else:
if len(features_dict[0][~np.isnan(features_dict[0])]) == 0 or \
len(features_dict[1][~np.isnan(features_dict[1])]) == 0:
return np.nan
begin_amp = np.ones(len(features_dict[0])) * np.nan
end_amp = np.ones(len(features_dict[0])) * np.nan
begin_amp[~np.isnan(features_dict[0])] = ecg[features_dict[0][~(np.isnan(features_dict[0]))].astype(int)]
end_amp[~np.isnan(features_dict[1])] = ecg[features_dict[1][~(np.isnan(features_dict[1]))].astype(int)]
amp = np.abs(end_amp - begin_amp)
amp = amp[~np.isnan(amp)]
return amp
[docs]def compute_area(ecg, freq, features_dict, factor=1000):
if len(features_dict[0][~np.isnan(features_dict[0])]) == 0 or \
len(features_dict[1][~np.isnan(features_dict[1])]) == 0:
return np.nan
begin_fiducial = features_dict[0]
end_fiducial = features_dict[1]
area = np.ones(len(begin_fiducial)) * -1
r_index = (~np.isnan(begin_fiducial)) & (~np.isnan(end_fiducial))
area = area[r_index]
bfi = begin_fiducial[r_index].astype(int)
efi = end_fiducial[r_index].astype(int)
#compute rectangular
for i in range(0, len(bfi)):
f = interpolate.interp1d([bfi[i], efi[i]], [ecg[bfi[i]], ecg[efi[i]]])
rect_base = f(range(bfi[i], efi[i] +1))
area[i] = 0
for j in range(len(rect_base)):
area[i] += np.abs(ecg[bfi[i] +j] - rect_base[j])
units = (factor / freq)
area = area * units
return area