0915CXH_DL_SA/utils/SignalPreprocess.py
2023-09-17 00:46:14 +08:00

53 lines
1.3 KiB
Python

#!/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