Files
Feature-Extraction/ecg_ratio_calculate.py
2025-10-20 22:01:18 +08:00

115 lines
4.9 KiB
Python

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()
from ecg_calculate_areas import ecg_areas_calculate
ecg_areas, P_areas, T_areas, QRS_areas = ecg_areas_calculate()
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
#------------------------ 计算比值 ------------------------------------
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------
def ratio_calculate():
# 创建一个存储波峰纵坐标的字典
peaks_values = {
"P_peaks_values": P_peaks_values,
"Q_peaks_values": Q_peaks_values,
"R_peaks_values": R_peaks_values,
"S_peaks_values": S_peaks_values,
"T_peaks_values": T_peaks_values,
"P_onset_values": P_onsets_values,
"P_offset_values": P_offsets_values,
"T_onset_values": T_onsets_values,
"T_offset_values": T_offsets_values,
}
# 初始化一个空字典来存储波峰比值
peak_ratios = {}
# 计算每对波峰的比值
for start_label, start_values in peaks_values.items():
for end_label, end_values in peaks_values.items():
# 避免重复计算相同的比值
if start_label != end_label:
ratio_label = f"{start_label}/{end_label}"
# 初始化比值列表和上一个有效比值
ratio_values = []
last_valid_ratio = None # 用于存储上一个有效的比值
# 使用zip同时遍历start_values和end_values
for start_val, end_val in zip(start_values, end_values):
if end_val != 0:
# 如果分母不为零,计算当前比值
current_ratio = start_val / end_val
ratio_values.append(current_ratio)
last_valid_ratio = current_ratio # 更新上一个有效比值
else:
# 如果分母为零,使用上一个有效比值
if last_valid_ratio is not None:
ratio_values.append(last_valid_ratio)
peak_ratios[ratio_label] = ratio_values
# #输出每对波峰的比值
# for key, value in peak_ratios.items():
# print(f"{key} 的峰值比值:", value)
# 创建一个存储面积的字典
areas_values = {
"ecg_areas": ecg_areas,
"P_areas": P_areas,
"T_areas": T_areas,
"QRS_areas": QRS_areas,
}
# 初始化一个空字典来存储面积比值
areas_ratios = {}
# 计算每对面积的比值
for start_label, start_values in areas_values.items():
for end_label, end_values in areas_values.items():
# 避免重复计算相同的比值
if start_label != end_label:
ratio_label = f"{start_label}/{end_label}"
# 初始化比值列表和上一个有效比值
ratio_values_2 = []
last_valid_ratio = None # 用于存储上一个有效的比值
# 使用zip同时遍历start_values和end_values
for start_val, end_val in zip(start_values, end_values):
if end_val != 0:
# 如果分母不为零,计算当前比值
current_ratio = start_val / end_val
ratio_values_2.append(current_ratio)
last_valid_ratio = current_ratio # 更新上一个有效比值
else:
# 如果分母为零,使用上一个有效比值
if last_valid_ratio is not None:
ratio_values_2.append(last_valid_ratio)
areas_ratios[ratio_label] = ratio_values_2
# #输出每对波峰的比值
# for key, value in areas_ratios.items():
# print(f"{key} 的比值:", value)
return peak_ratios, areas_ratios
if __name__ == "__main__":
ratio_calculate()