diff --git a/func/Module_preprocess.py b/func/Module_preprocess.py index 723f0ea..85ba8e0 100644 --- a/func/Module_preprocess.py +++ b/func/Module_preprocess.py @@ -8,6 +8,7 @@ from matplotlib.backends.backend_qt import NavigationToolbar2QT from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg from overrides import overrides from pandas import read_csv, DataFrame +from scipy.signal import resample from yaml import dump, load, FullLoader from func.utils.PublicFunc import PublicFunc @@ -54,6 +55,7 @@ class SettingWindow(QMainWindow): self.__read_config__() self.ui.spinBox_input_freq.valueChanged.connect(self.__update_ui__) + self.ui.spinBox_output_freq.valueChanged.connect(self.__update_ui__) self.ui.pushButton_confirm.clicked.connect(self.__write_config__) self.ui.pushButton_cancel.clicked.connect(self.__rollback_config__) self.ui.pushButton_cancel.clicked.connect(self.close) @@ -78,7 +80,7 @@ class SettingWindow(QMainWindow): ConfigParams.ENDSWITH_TXT))), "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_BCG_FILENAME + - str(Config["InputConfig"]["Freq"]) + + str(Config["OutputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT))) }, "Mode": self.mode @@ -92,7 +94,7 @@ class SettingWindow(QMainWindow): ConfigParams.ENDSWITH_TXT))), "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_ECG_FILENAME + - str(Config["InputConfig"]["Freq"]) + + str(Config["OutputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT))) }, "Mode": self.mode @@ -100,6 +102,7 @@ class SettingWindow(QMainWindow): # 数据回显 self.ui.spinBox_input_freq.setValue(Config["InputConfig"]["Freq"]) + self.ui.spinBox_output_freq.setValue(Config["OutputConfig"]["Freq"]) self.ui.plainTextEdit_file_path_input.setPlainText(Config["Path"]["Input"]) self.ui.plainTextEdit_file_path_save.setPlainText(Config["Path"]["Save"]) @@ -107,11 +110,13 @@ class SettingWindow(QMainWindow): # 从界面写入配置 Config["InputConfig"]["Freq"] = self.ui.spinBox_input_freq.value() + Config["OutputConfig"]["Freq"] = self.ui.spinBox_output_freq.value() Config["Path"]["Input"] = self.ui.plainTextEdit_file_path_input.toPlainText() Config["Path"]["Save"] = self.ui.plainTextEdit_file_path_save.toPlainText() # 保存配置到文件 self.config["InputConfig"]["Freq"] = self.ui.spinBox_input_freq.value() + self.config["OutputConfig"]["Freq"] = self.ui.spinBox_output_freq.value() with open(ConfigParams.PREPROCESS_CONFIG_FILE_PATH, "w") as f: dump(self.config, f) @@ -137,7 +142,7 @@ class SettingWindow(QMainWindow): ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_BCG_FILENAME + - str(self.ui.spinBox_input_freq.value()) + + str(self.ui.spinBox_output_freq.value()) + ConfigParams.ENDSWITH_TXT)))) else: self.ui.plainTextEdit_file_path_input.setPlainText( @@ -152,7 +157,7 @@ class SettingWindow(QMainWindow): ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_ECG_FILENAME + - str(self.ui.spinBox_input_freq.value()) + + str(self.ui.spinBox_output_freq.value()) + ConfigParams.ENDSWITH_TXT)))) @@ -491,18 +496,22 @@ class Data: return False, Constants.PREPROCESS_PROCESS_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Raw_Data_Not_Exist"] try: + if Config["InputConfig"]["Freq"] != Config["OutputConfig"]["Freq"]: + self.raw_data = resample(self.raw_data, + int(len(self.raw_data) * + (Config["OutputConfig"]["Freq"] / Config["InputConfig"]["Freq"]))) if Config["Mode"] == "BCG": self.processed_data = Butterworth_for_BCG_PreProcess(self.raw_data, type='bandpass', low_cut=Config["Filter"]["BCGBandPassLow"], high_cut=Config["Filter"]["BCGBandPassHigh"], order=Config["Filter"]["BCGBandPassOrder"], - sample_rate=Config["InputConfig"]["Freq"]) + sample_rate=Config["OutputConfig"]["Freq"]) else: self.processed_data = Butterworth_for_ECG_PreProcess(self.raw_data, type='bandpass', low_cut=Config["Filter"]["ECGBandPassLow"], high_cut=Config["Filter"]["ECGBandPassHigh"], order=Config["Filter"]["ECGBandPassOrder"], - sample_rate=Config["InputConfig"]["Freq"]) + sample_rate=Config["OutputConfig"]["Freq"]) except Exception: return False, Constants.PREPROCESS_PROCESS_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Filter_Exception"] diff --git a/func/utils/ConfigParams.py b/func/utils/ConfigParams.py index 8605a96..6656b2e 100644 --- a/func/utils/ConfigParams.py +++ b/func/utils/ConfigParams.py @@ -36,6 +36,9 @@ class ConfigParams: "InputConfig": { "Freq": 1000 }, + "OutputConfig": { + "Freq": 1000 + }, "Filter": { "BCGBandPassOrder": 4, "BCGBandPassLow": 2, diff --git a/ui/setting/preprocess_input_setting.py b/ui/setting/preprocess_input_setting.py index 509af36..72bc244 100644 --- a/ui/setting/preprocess_input_setting.py +++ b/ui/setting/preprocess_input_setting.py @@ -23,7 +23,7 @@ class Ui_MainWindow_preprocess_input_setting(object): def setupUi(self, MainWindow_preprocess_input_setting): if not MainWindow_preprocess_input_setting.objectName(): MainWindow_preprocess_input_setting.setObjectName(u"MainWindow_preprocess_input_setting") - MainWindow_preprocess_input_setting.resize(480, 320) + MainWindow_preprocess_input_setting.resize(480, 440) self.centralwidget = QWidget(MainWindow_preprocess_input_setting) self.centralwidget.setObjectName(u"centralwidget") self.gridLayout = QGridLayout(self.centralwidget) @@ -80,6 +80,25 @@ class Ui_MainWindow_preprocess_input_setting(object): self.groupBox_file_path_save.setObjectName(u"groupBox_file_path_save") self.verticalLayout_4 = QVBoxLayout(self.groupBox_file_path_save) self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.label_2 = QLabel(self.groupBox_file_path_save) + self.label_2.setObjectName(u"label_2") + self.label_2.setFont(font) + + self.horizontalLayout_2.addWidget(self.label_2) + + self.spinBox_output_freq = QSpinBox(self.groupBox_file_path_save) + self.spinBox_output_freq.setObjectName(u"spinBox_output_freq") + self.spinBox_output_freq.setFont(font) + self.spinBox_output_freq.setMinimum(1) + self.spinBox_output_freq.setMaximum(1000000) + + self.horizontalLayout_2.addWidget(self.spinBox_output_freq) + + + self.verticalLayout_4.addLayout(self.horizontalLayout_2) + self.plainTextEdit_file_path_save = QPlainTextEdit(self.groupBox_file_path_save) self.plainTextEdit_file_path_save.setObjectName(u"plainTextEdit_file_path_save") @@ -88,6 +107,8 @@ class Ui_MainWindow_preprocess_input_setting(object): self.verticalLayout_2.addWidget(self.groupBox_file_path_save) + self.verticalLayout_2.setStretch(0, 1) + self.verticalLayout_2.setStretch(1, 1) self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 4) @@ -113,6 +134,7 @@ class Ui_MainWindow_preprocess_input_setting(object): self.plainTextEdit_file_path_input.setPlainText("") self.plainTextEdit_file_path_input.setPlaceholderText(QCoreApplication.translate("MainWindow_preprocess_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) self.groupBox_file_path_save.setTitle(QCoreApplication.translate("MainWindow_preprocess_input_setting", u"\u6ee4\u6ce2\u540e\u4fdd\u5b58\u8def\u5f84", None)) + self.label_2.setText(QCoreApplication.translate("MainWindow_preprocess_input_setting", u"\u91c7\u6837\u7387(Hz)\uff1a", None)) self.plainTextEdit_file_path_save.setPlaceholderText(QCoreApplication.translate("MainWindow_preprocess_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) self.pushButton_confirm.setText(QCoreApplication.translate("MainWindow_preprocess_input_setting", u"\u786e\u5b9a", None)) # retranslateUi diff --git a/ui/setting/preprocess_input_setting.ui b/ui/setting/preprocess_input_setting.ui index 718c3a8..7676023 100644 --- a/ui/setting/preprocess_input_setting.ui +++ b/ui/setting/preprocess_input_setting.ui @@ -7,7 +7,7 @@ 0 0 480 - 320 + 440 @@ -37,7 +37,7 @@ 文件路径 - + @@ -94,6 +94,37 @@ 滤波后保存路径 + + + + + + + 12 + + + + 采样率(Hz): + + + + + + + + 12 + + + + 1 + + + 1000000 + + + + +