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

175 lines
6.0 KiB
Python

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 ppg_peaks_val import ppg_peaks_val
(on, on_toArea, sp, dn, dp,
on_values, on_toArea_values, sp_values, dn_values, dp_values,
u, u_toArea, v, w,
u_values, u_toArea_values, v_values, w_values,
a, a_toArea, b, c, e, f,
a_values, a_toArea_values, b_values, c_values, e_values, f_values) = ppg_peaks_val()
from ppg_time_interval import ppg_time_interval
differences_ppg = ppg_time_interval()
def ppg_ratio():
features_ppg_2 = {
# 将纵坐标值放入字典中
"on": on_values,
"sp": sp_values,
"dn": dn_values,
"dp": dp_values,
"u": u_values,
"v": v_values,
"w": w_values,
"a": a_values,
"b": b_values,
"c": c_values,
"e": e_values,
"f": f_values,
}
features_ppg_3 = {
"on-sp": differences_ppg["on-sp"],
"on-dn": differences_ppg["on-dn"],
"on-dp": differences_ppg["on-dp"],
"on-u": differences_ppg["on-u"],
"on-v": differences_ppg["on-v"],
"on-w": differences_ppg["on-w"],
"on-a": differences_ppg["on-a"],
"on-b": differences_ppg["on-b"],
"on-c": differences_ppg["on-c"],
"on-e": differences_ppg["on-e"],
"on-f": differences_ppg["on-f"],
"sp-dn": differences_ppg["sp-dn"],
"sp-dp": differences_ppg["sp-dp"],
"sp-u": differences_ppg["sp-u"],
"sp-v": differences_ppg["sp-v"],
"sp-w": differences_ppg["sp-w"],
"sp-a": differences_ppg["sp-a"],
"sp-b": differences_ppg["sp-b"],
"sp-c": differences_ppg["sp-c"],
"sp-e": differences_ppg["sp-e"],
"sp-f": differences_ppg["sp-f"],
"dn-dp": differences_ppg["dn-dp"],
"dn-u": differences_ppg["dn-u"],
"dn-v": differences_ppg["dn-v"],
"dn-w": differences_ppg["dn-w"],
"dn-a": differences_ppg["dn-a"],
"dn-b": differences_ppg["dn-b"],
"dn-c": differences_ppg["dn-c"],
"dn-e": differences_ppg["dn-e"],
"dn-f": differences_ppg["dn-f"],
"dp-u": differences_ppg["dp-u"],
"dp-v": differences_ppg["dp-v"],
"dp-w": differences_ppg["dp-w"],
"dp-a": differences_ppg["dp-a"],
"dp-b": differences_ppg["dp-b"],
"dp-c": differences_ppg["dp-c"],
"dp-e": differences_ppg["dp-e"],
"dp-f": differences_ppg["dp-f"],
"u-v": differences_ppg["u-v"],
"u-w": differences_ppg["u-w"],
"u-a": differences_ppg["u-a"],
"u-b": differences_ppg["u-b"],
"u-c": differences_ppg["u-c"],
"u-e": differences_ppg["u-e"],
"u-f": differences_ppg["u-f"],
"v-w": differences_ppg["v-w"],
"v-a": differences_ppg["v-a"],
"v-b": differences_ppg["v-b"],
"v-c": differences_ppg["v-c"],
"v-e": differences_ppg["v-e"],
"v-f": differences_ppg["v-f"],
"w-a": differences_ppg["w-a"],
"w-b": differences_ppg["w-b"],
"w-c": differences_ppg["w-c"],
"w-e": differences_ppg["w-e"],
"w-f": differences_ppg["w-f"],
"a-b": differences_ppg["a-b"],
"a-c": differences_ppg["a-c"],
"a-e": differences_ppg["a-e"],
"a-f": differences_ppg["a-f"],
"b-c": differences_ppg["b-c"],
"b-e": differences_ppg["b-e"],
"b-f": differences_ppg["b-f"],
"c-e": differences_ppg["c-e"],
"c-f": differences_ppg["c-f"],
"e-f": differences_ppg["e-f"],
}
ratios_ppg_2 = {}
for start_label, start_values in features_ppg_2.items():
for end_label, end_values in features_ppg_2.items():
if start_label != end_label:
ratio_label = f"{start_label}/{end_label}"
# 计算对应位置的比值
ratios = [start_val / end_val for start_val, end_val in zip(start_values, end_values)]
# ratios = [end_val / start_val if start_val != 0 else 0 # 或其他默认值
# for start_val, end_val in zip(start_values, end_values)]
ratios_ppg_2[ratio_label] = ratios
# # 输出间隔
# for key, value in ratios_ppg_2.items():
# print(f" {key}: {value}")
ratios_ppg_3 = {}
for start_label, start_values in features_ppg_3.items():
for end_label, end_values in features_ppg_3.items():
if start_label != end_label:
ratio_label = f"{start_label}/{end_label}"
# 计算对应位置的比值,分母为零时用上一个有效比值替代
ratios = []
last_valid_ratio = None # 用于存储上一个有效的比值
for start_val, end_val in zip(start_values, end_values):
if end_val != 0:
# 如果分母不为零,计算当前比值
current_ratio = start_val / end_val
ratios.append(current_ratio)
last_valid_ratio = current_ratio # 更新上一个有效比值
else:
# 如果分母为零,使用上一个有效比值
if last_valid_ratio is not None:
ratios.append(last_valid_ratio)
ratios_ppg_3[ratio_label] = ratios
# # 输出间隔
# for key, value in ratios_ppg_3.items():
# print(f" {key}: {value}")
return ratios_ppg_2, ratios_ppg_3
if __name__ == "__main__":
ppg_ratio()