From bf0c780f01bc2bef613d6c7c734d58db92674e93 Mon Sep 17 00:00:00 2001 From: Yorusora <2023025086@m.scnu.edu.cn> Date: Fri, 13 Jun 2025 23:11:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86<=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B2=BE=E5=90=8C=E6=AD=A5>=E7=9A=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- func/Module_precisely_align.py | 107 +++++++++++++++++---------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/func/Module_precisely_align.py b/func/Module_precisely_align.py index 8648515..bb92f13 100644 --- a/func/Module_precisely_align.py +++ b/func/Module_precisely_align.py @@ -1949,50 +1949,45 @@ class Data: def correlation_align(self, mode): try: if mode == "init": - anchor0 = [Config["front"]["anchor_R"], Config["front"]["anchor_J"]] - anchor1 = [Config["back"]["anchor_R"], Config["back"]["anchor_J"]] - Config["orgfs"] = ((int(anchor1[1]) - int(anchor0[1])) * Config["InputConfig"]["UseFreq"] / - (int(anchor1[0]) - int(anchor0[0]))) - Config["offset_anchor"] = anchor0[0] - anchor0[1] - - orgfs = Config["orgfs"] - off = Config["offset_anchor"] + Config["orgfs"] = ((int(Config["back"]["anchor_J"]) - int(Config["front"]["anchor_J"])) * Config["InputConfig"]["UseFreq"] / + (int(Config["back"]["anchor_R"]) - int(Config["front"]["anchor_R"]))) + Config["offset_anchor"] = Config["front"]["anchor_R"] - Config["front"]["anchor_J"] self.res_orgBcg = self.raw_orgBcg.copy() self.res_BCG = self.raw_BCG.copy() self.cut_ECG = self.raw_ECG.copy() self.cut_Rpeak = self.Rpeak.copy() - if off > 0: - self.cut_ECG = self.cut_ECG[off:] - anchor0[0] = anchor0[0] - off - anchor1[0] = anchor1[0] - off - idxs = where(self.cut_Rpeak > off)[0] - self.cut_Rpeak = self.cut_Rpeak[idxs] - off + if Config["offset_anchor"] > 0: + self.cut_ECG = self.cut_ECG[Config["offset_anchor"]:] + Config["front"]["anchor_R"] = Config["front"]["anchor_R"] - Config["offset_anchor"] + Config["back"]["anchor_R"] = Config["back"]["anchor_R"] - Config["offset_anchor"] + idxs = where(self.cut_Rpeak > Config["offset_anchor"])[0] + self.cut_Rpeak = self.cut_Rpeak[idxs] - Config["offset_anchor"] else: - self.res_BCG = self.res_BCG[-off:] - self.res_orgBcg = self.res_orgBcg[-off:] - anchor0[1] = anchor0[1] + off - anchor1[1] = anchor1[1] + off + self.res_BCG = self.res_BCG[-Config["offset_anchor"]:] + self.res_orgBcg = self.res_orgBcg[-Config["offset_anchor"]:] + Config["front"]["anchor_J"] = Config["front"]["anchor_J"] + Config["offset_anchor"] + Config["back"]["anchor_J"] = Config["back"]["anchor_J"] + Config["offset_anchor"] - self.res_BCG = resample(self.res_BCG, orgfs, Config["InputConfig"]["UseFreq"]) - self.res_orgBcg = resample(self.res_orgBcg, orgfs, Config["InputConfig"]["UseFreq"]) + self.res_BCG = resample(self.res_BCG, Config["orgfs"], Config["InputConfig"]["UseFreq"]) + self.res_orgBcg = resample(self.res_orgBcg, Config["orgfs"], Config["InputConfig"]["UseFreq"]) - anchor0[1] = round(int(anchor0[1]) * Config["InputConfig"]["UseFreq"] / orgfs) - anchor1[1] = round(int(anchor1[1]) * Config["InputConfig"]["UseFreq"] / orgfs) - off = anchor1[0] - anchor1[1] + Config["front"]["anchor_J"] = round(int(Config["front"]["anchor_J"]) * Config["InputConfig"]["UseFreq"] / Config["orgfs"]) + Config["back"]["anchor_J"] = round(int(Config["back"]["anchor_J"]) * Config["InputConfig"]["UseFreq"] / Config["orgfs"]) + Config["offset_anchor"] = Config["back"]["anchor_R"] - Config["back"]["anchor_J"] - if off > 0: - self.cut_ECG = self.cut_ECG[off:] - anchor0[0] = anchor0[0] - off - anchor1[0] = anchor1[0] - off - idxs = where(self.cut_Rpeak > off)[0] - self.cut_Rpeak = self.cut_Rpeak[idxs] - off + if Config["offset_anchor"] > 0: + self.cut_ECG = self.cut_ECG[Config["offset_anchor"]:] + Config["front"]["anchor_R"] = Config["front"]["anchor_R"] - Config["offset_anchor"] + Config["back"]["anchor_R"] = Config["back"]["anchor_R"] - Config["offset_anchor"] + idxs = where(self.cut_Rpeak > Config["offset_anchor"])[0] + self.cut_Rpeak = self.cut_Rpeak[idxs] - Config["offset_anchor"] else: - self.res_BCG = self.res_BCG[-off:] - self.res_orgBcg = self.res_orgBcg[-off:] - anchor0[1] = anchor0[1] + off - anchor1[1] = anchor1[1] + off + self.res_BCG = self.res_BCG[-Config["offset_anchor"]:] + self.res_orgBcg = self.res_orgBcg[-Config["offset_anchor"]:] + Config["front"]["anchor_J"] = Config["front"]["anchor_J"] + Config["offset_anchor"] + Config["back"]["anchor_J"] = Config["back"]["anchor_J"] + Config["offset_anchor"] datalen = np_min([len(self.cut_ECG), len(self.res_BCG)]) self.cut_ECG = self.cut_ECG[:datalen] @@ -2009,8 +2004,8 @@ class Data: result = { "res_BCG": self.res_BCG, "cut_ECG": self.cut_ECG, - "anchor00": anchor0[0], - "anchor10": anchor1[0], + "anchor00": Config["front"]["anchor_R"], + "anchor10": Config["back"]["anchor_R"], "a": a, "b": b, "peak_ECG": peak_ECG, @@ -2034,27 +2029,24 @@ class Data: def data_postprocess(self): try: if len(self.correlation_align_point_match_ECG) != 2 and len(self.correlation_align_point_match_BCG) != 2: - off = 0 + Config["offset_anchor"] = 0 else: self.correlation_align_point_match_ECG.sort() self.correlation_align_point_match_BCG.sort() - off = round(((int(self.correlation_align_point_match_ECG[1]) - int( + Config["offset_anchor"] = round(((int(self.correlation_align_point_match_ECG[1]) - int( self.correlation_align_point_match_BCG[1])) + (int(self.correlation_align_point_match_ECG[0]) - int( self.correlation_align_point_match_BCG[0]))) / 2) - anchor0 = [Config["front"]["anchor_R"], Config["front"]["anchor_J"]] - anchor1 = [Config["back"]["anchor_R"], Config["back"]["anchor_J"]] - - if off > 0: - self.cut_ECG = self.cut_ECG[off:] - anchor0[0] = anchor0[0] - off - anchor1[0] = anchor1[0] - off - self.cut_Rpeak = self.cut_Rpeak[where(self.cut_Rpeak > off)[0]] - off + if Config["offset_anchor"] > 0: + self.cut_ECG = self.cut_ECG[Config["offset_anchor"]:] + Config["front"]["anchor_R"] = Config["front"]["anchor_R"] - Config["offset_anchor"] + Config["back"]["anchor_R"] = Config["back"]["anchor_R"] - Config["offset_anchor"] + self.cut_Rpeak = self.cut_Rpeak[where(self.cut_Rpeak > Config["offset_anchor"])[0]] - Config["offset_anchor"] else: - self.res_BCG = self.res_BCG[-off:] - self.res_orgBcg = self.res_orgBcg[-off:] - anchor0[1] = anchor0[1] + off - anchor1[1] = anchor1[1] + off + self.res_BCG = self.res_BCG[-Config["offset_anchor"]:] + self.res_orgBcg = self.res_orgBcg[-Config["offset_anchor"]:] + Config["front"]["anchor_J"] = Config["front"]["anchor_J"] + Config["offset_anchor"] + Config["back"]["anchor_J"] = Config["back"]["anchor_J"] + Config["offset_anchor"] datalen = np_min([len(self.cut_ECG), len(self.res_BCG)]) self.cut_ECG = self.cut_ECG[:datalen] @@ -2064,8 +2056,6 @@ class Data: idxs = where(self.cut_Rpeak < datalen)[0] self.cut_Rpeak = self.cut_Rpeak[idxs] - Config["offset_correct"] = off - self.cut_Jpeak = [] peaks, _ = find_peaks(self.res_BCG) for i in self.cut_Rpeak: @@ -2081,6 +2071,21 @@ class Data: frontcut_index_ECG = self.argmax_ECG - np_argmax(self.cut_ECG) backcut_index_ECG = len(self.cut_ECG) + self.argmax_ECG - np_argmax(self.cut_ECG) + print("修正前的值:front_BCG:{}, back_BCG:{}, front_ECG:{}, back_ECG:{}".format(frontcut_index_BCG, + backcut_index_BCG, + frontcut_index_ECG, + backcut_index_ECG)) + if frontcut_index_BCG < 0: + backcut_index_BCG = np_abs(frontcut_index_BCG) + backcut_index_BCG + frontcut_index_BCG = 0 + if frontcut_index_ECG < 0: + backcut_index_ECG = np_abs(frontcut_index_ECG) + backcut_index_ECG + frontcut_index_ECG = 0 + print("修正后的值:front_BCG:{}, back_BCG:{}, front_ECG:{}, back_ECG:{}".format(frontcut_index_BCG, + backcut_index_BCG, + frontcut_index_ECG, + backcut_index_ECG)) + Config["frontcut_index_BCG"] = frontcut_index_BCG Config["backcut_index_BCG"] = backcut_index_BCG Config["frontcut_index_ECG"] = frontcut_index_ECG