import numpy as np from scipy.integrate import simpson from global_var import global_var_init cycle, fs_ecg, fs_ppg, record_name, record_name_csv, data_path = 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]) # print("此时的P_onsets为:", P_onsets[i]) # print("此时的T_offsets为:", T_offsets[i]) # 提取当前周期的ECG信号片段 signal_segment = ecg_signal[start:end] # 提取当前周期的时间片段 time_segment = t_ecg[start:end] # 当前周期的基线值(使用p_offset点的纵坐标值) baseline_value = P_offsets_values[i] # 创建一个与信号片段大小相同的基线片段 baseline_segment = np.full_like(signal_segment.shape, baseline_value) # 计算相对于基线的信号 relative_signal = signal_segment - baseline_segment # 相对于基线的信号进行积分,计算面积 area = simpson(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]) end = int(P_offsets[i]) # 提取当前周期的ECG信号片段 signal_segment = ecg_signal[start:end] # 提取当前周期的时间片段 time_segment = t_ecg[start:end] # 当前周期的基线值(使用p_offset点的纵坐标值) baseline_value = P_offsets_values[i] # 创建一个与信号片段大小相同的基线片段 baseline_segment = np.full_like(signal_segment.shape, baseline_value) # 计算相对于基线的信号 relative_signal = signal_segment - baseline_segment # 相对于基线的信号进行积分,计算面积 area = simpson(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]) end = int(T_offsets[i]) # print("此时的T_onsets为:", T_onsets[i]) # print("此时的T_offsets为:", T_offsets[i]) # 提取当前周期的ECG信号片段 signal_segment = ecg_signal[start:end] # 提取当前周期的时间片段 time_segment = t_ecg[start:end] # 当前周期的基线值(使用T_offset点的纵坐标值) baseline_value = T_offsets_values[i] # 创建一个与信号片段大小相同的基线片段 baseline_segment = np.full_like(signal_segment.shape, baseline_value) # 计算相对于基线的信号 relative_signal = signal_segment - baseline_segment # 相对于基线的信号进行积分,计算面积 area = simpson(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] # 提取当前周期的时间片段 time_segment = t_ecg[start:end] # 当前周期的基线值(使用S_peaks点的纵坐标值) baseline_value = S_peaks_values[i] # 创建一个与信号片段大小相同的基线片段 baseline_segment = np.full_like(signal_segment.shape, baseline_value) # 计算相对于基线的信号 relative_signal = signal_segment - baseline_segment # 相对于基线的信号进行积分,计算面积 area = simpson(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()