#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:andrew @file:SignalPreprocess.py @email:admin@marques22.com @email:2021022362@m.scnu.edu.cn @time:2023/09/15 """ # 输入信号为一维的的整晚信号 import numpy as np from scipy import signal def XinXiaoPreprocess(data=None, signal_frequency=1000, low_cut=0.01, high_cut=0.7, order=4): """ # 预处理操作 # 提取呼吸 # 四阶巴特沃斯滤波器 提取呼吸信号主成分 # 四秒移动平均滤波器 平滑呼吸信号 # Z-Score 标准化 # 降采样至5Hz :param data: :param signal_frequency: :param low_cut: :param high_cut: :param order: :return: """ order = order low_cut = low_cut high_cut = high_cut sample_rate = signal_frequency low = low_cut / (sample_rate * 0.5) high = high_cut / (sample_rate * 0.5) sos = signal.butter(N=order, Wn=[low, high], btype="bandpass", output='sos') data = signal.sosfilt(sos, data) # 比对采样率 将信号采样率调整至100Hz data= data[::10] data -= np.convolve(data, np.ones(400) / 400, mode='same') data = (data - data.mean()) / data.std() data[data > 3] = 3 data[data < -3] = -3 # 降采样至5Hz data = data[::20] return data