Files
Feature-Extraction/ecg_time_interval.py

76 lines
2.9 KiB
Python

import numpy as np
from global_var import global_var_init
cycle, fs_ecg, fs_ppg, record_name, record_name_csv = global_var_init()
from processing import processing
(signal_dwt , waves_dwt , rpeaks , ecg_signal,
signal, signal.v, signal.fs, rows_to_extract, t_ecg, t_ppg,
on_column_list, on_column_list_toArea, on_values, on_values_toArea,
sp_column_list, sp_values, dn_column_list, dn_values, dp_column_list,
dp_values, u_column_list, u_column_list_toArea, u_values, u_values_toArea,
v_column_list, v_values, w_column_list, w_values, a_column_list, a_column_list_toArea,
a_values, a_values_toArea, b_column_list, b_values, c_column_list, c_values,
e_column_list, e_values, f_column_list, f_values,
signal.ppg, signal.vpg, signal.apg, signal.jpg) = processing()
from ecg_peaks_val import ecg_peaks_val
(P_peaks, Q_peaks, R_peaks, S_peaks, T_peaks,
P_onsets, P_offsets, T_onsets, T_offsets,
P_peaks_values, Q_peaks_values, R_peaks_values, S_peaks_values, T_peaks_values,
P_onsets_values, P_offsets_values, T_onsets_values, T_offsets_values,
PQ_baseline) = ecg_peaks_val()
def compute_interval():
time_interval = 1/fs_ecg
# 获取各特征的时间点
P_onsets_time = np.array(P_onsets) * time_interval
P_peaks_time = np.array(P_peaks) * time_interval
P_offsets_time = np.array(P_offsets) * time_interval
Q_peaks_time = np.array(Q_peaks) * time_interval
R_peaks_time = np.array(R_peaks) * time_interval
S_peaks_time = np.array(S_peaks) * time_interval
T_onsets_time = np.array(T_onsets) * time_interval
T_peaks_time = np.array(T_peaks) * time_interval
T_offsets_time = np.array(T_offsets) * time_interval
# 创建一个字典来存储所有的特征点
features = {
"P_onset": P_onsets_time,
"P": P_peaks_time,
"P_offset": P_offsets_time,
"Q": Q_peaks_time,
"R": R_peaks_time,
"S": S_peaks_time,
"T_onset": T_onsets_time,
"T": T_peaks_time,
"T_offset": T_offsets_time
}
# 遍历 features 字典并打印每个键对应的时间序列长度(用于测试)
for label, times in features.items():
print(f"{label}: {len(times)}")
# 计算每对特征点之间的时间间隔
intervals_ecg = {}
for start_label, start_times in features.items():
for end_label, end_times in features.items():
# 避免重复计算相同的比值
if start_label != end_label:
interval_label = f"{start_label}-{end_label}"
intervals_ecg[interval_label] = end_times - start_times
# 单独计算P_onset-P_offset/T_onset-T_offset
ratio_pp_tt = [p / t for p, t in zip(intervals_ecg['P_onset-P_offset'], intervals_ecg['T_onset-T_offset'])]
# 输出间隔时间
# for key, value in intervals_ecg.items():
# print(f"{key} 的间隔时间:", value)
return intervals_ecg, ratio_pp_tt
if __name__ == "__main__":
compute_interval()