174 lines
6.3 KiB
Python
174 lines
6.3 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 ecg_time_interval import compute_interval
|
||
(intervals_ecg, ratio_pp_tt)= compute_interval()
|
||
|
||
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()
|
||
|
||
num = len(R_peaks)
|
||
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#----------------------------------- 计算面积 ----------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
#--------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
# 计算每个周期相对于基线的面积
|
||
def ecg_areas_calculate():
|
||
|
||
ecg_areas = []
|
||
|
||
for i in range(num):
|
||
# 获取当前周期的起点和终点,并将其转换为整数索引
|
||
start = int(P_onsets[i])
|
||
end = int(T_offsets[i])
|
||
|
||
# 提取当前周期的ECG信号片段
|
||
signal_segment = ecg_signal[start:end+1]
|
||
|
||
# 提取当前周期的时间片段
|
||
time_segment = t_ecg[start:end+1]
|
||
|
||
# 创建一个与信号片段大小相同的基线片段
|
||
baseline_segment = np.full_like(signal_segment.shape, PQ_baseline)
|
||
|
||
# 计算相对于基线的信号
|
||
relative_signal = signal_segment - baseline_segment
|
||
|
||
# 相对于基线的信号进行积分,计算面积
|
||
area = np.trapz(relative_signal, time_segment)
|
||
|
||
# 将计算得到的面积添加到列表中
|
||
ecg_areas.append(area)
|
||
|
||
# 输出所有周期的面积列表
|
||
# print("ecg_areas:", ecg_areas)
|
||
|
||
|
||
# 计算P_areas
|
||
P_areas = []
|
||
|
||
for i in range(num):
|
||
# 获取当前周期的起点和终点,并将其转换为整数索引
|
||
start = int(P_onsets[i]) # 500 是采样率
|
||
end = int(P_offsets[i]) # 500 是采样率
|
||
|
||
|
||
# 提取当前周期的ECG信号片段
|
||
signal_segment = ecg_signal[start:end+1]
|
||
|
||
# 提取当前周期的时间片段
|
||
time_segment = t_ecg[start:end+1]
|
||
|
||
# 创建一个与信号片段大小相同的基线片段
|
||
baseline_segment = np.full(signal_segment.shape, PQ_baseline)
|
||
|
||
# 计算相对于基线的信号
|
||
relative_signal = signal_segment - baseline_segment
|
||
|
||
# 相对于基线的信号进行积分,计算面积
|
||
area = np.trapz(relative_signal, time_segment)
|
||
|
||
# 将计算得到的面积添加到列表中
|
||
P_areas.append(area)
|
||
|
||
# 输出所有周期的面积列表
|
||
# print("P_areas:", P_areas)
|
||
|
||
|
||
# 计算T_areas
|
||
T_areas = []
|
||
|
||
for i in range(num):
|
||
# 获取当前周期的起点和终点,并将其转换为整数索引
|
||
start = int(T_onsets[i]) # 500 是采样率
|
||
end = int(T_offsets[i]) # 500 是采样率
|
||
|
||
|
||
# 提取当前周期的ECG信号片段
|
||
signal_segment = ecg_signal[start:end+1]
|
||
|
||
# 提取当前周期的时间片段
|
||
time_segment = t_ecg[start:end+1]
|
||
|
||
# 创建一个与信号片段大小相同的基线片段
|
||
baseline_segment = np.full(signal_segment.shape, PQ_baseline)
|
||
|
||
# 计算相对于基线的信号
|
||
relative_signal = signal_segment - baseline_segment
|
||
|
||
# 相对于基线的信号进行积分,计算面积
|
||
area = np.trapz(relative_signal, time_segment)
|
||
|
||
# 将计算得到的面积添加到列表中
|
||
T_areas.append(area)
|
||
|
||
# 输出所有周期的面积列表
|
||
# print("T_areas:", T_areas)
|
||
|
||
|
||
# 计算QRS_areas
|
||
QRS_areas = []
|
||
|
||
for i in range(num):
|
||
# 获取当前周期的起点和终点,并将其转换为整数索引
|
||
start = int(Q_peaks[i])
|
||
end = int(S_peaks[i])
|
||
|
||
# 提取当前周期的ECG信号片段
|
||
signal_segment = ecg_signal[start:end+1]
|
||
|
||
# 提取当前周期的时间片段
|
||
time_segment = t_ecg[start:end+1]
|
||
|
||
# 创建一个与信号片段大小相同的基线片段
|
||
baseline_segment = np.full(signal_segment.shape, PQ_baseline)
|
||
|
||
# 计算相对于基线的信号
|
||
relative_signal = signal_segment - baseline_segment
|
||
|
||
# 相对于基线的信号进行积分,计算面积
|
||
area = np.trapz(relative_signal, time_segment)
|
||
|
||
# 将计算得到的面积添加到列表中
|
||
QRS_areas.append(area)
|
||
|
||
# 输出所有周期的面积列表
|
||
# print("QRS_areas:", QRS_areas)
|
||
|
||
# values = [ ecg_areas, P_areas, T_areas, QRS_areas]
|
||
|
||
# # 遍历并打印每个列表的长度
|
||
# for idx, values in enumerate(values):
|
||
# print(f"List {idx+1}: {len(values)}")
|
||
|
||
return ecg_areas, P_areas, T_areas, QRS_areas
|
||
|
||
|
||
if __name__ == "__main__":
|
||
ecg_areas_calculate() |