以下是基于Python的手环睡眠检测系统的开发思路和关键步骤,我将分模块说明并给出示例代码:
一、系统核心模块组成
-
数据采集模块
- 加速度计数据(活动频率)
- 心率传感器数据
- 皮肤电反应(可选)
-
数据处理模块
- 噪声过滤
- 特征提取(活动量/心率变异性)
-
算法模块
- 睡眠阶段分类(清醒/浅睡/深睡/REM)
- 机器学习模型(如随机森林)
-
可视化模块
- 睡眠质量报告
- 实时数据图表
二、Python实现代码示例
1. 模拟传感器数据采集
import numpy as np
from datetime import datetime, timedelta
def simulate_sensor_data(duration_hours=8):
"""模拟生成8小时传感器数据"""
timestamps = [datetime.now() + timedelta(minutes=i) for i in range(60*duration_hours)]
accel = np.abs(np.random.normal(0, 0.5, len(timestamps))) # 加速度模拟
heart_rate = 60 + 10*np.sin(np.linspace(0, 4*np.pi, len(timestamps))) # 心率模拟
return timestamps, accel, heart_rate
2. 特征提取与处理
from scipy.signal import butter, filtfilt
def process_data(accel, heart_rate, fs=1/60):
"""数据处理流程"""
# 低通滤波去噪 (截止频率0.1Hz)
b, a = butter(4, 0.1/(0.5*fs), 'low')
filtered_accel = filtfilt(b, a, accel)
# 计算活动量指标
activity = np.convolve(filtered_accel, np.ones(30)/30, mode='same') # 30分钟滑动平均
# 心率变异性(标准差)
hrv = np.std(heart_rate)
return activity, hrv
3. 睡眠阶段分类算法
from sklearn.ensemble import RandomForestClassifier
import joblib
# 示例训练数据(需替换为真实数据)
X_train = np.random.rand(100, 3) # 特征:活动量/心率/HRV
y_train = np.random.randint(0, 3, 100) # 标签:0-清醒,1-浅睡,2-深睡
def train_model():
model = RandomForestClassifier()
model.fit(X_train, y_train)
joblib.dump(model, 'sleep_model.pkl') # 保存模型
return model
def predict_sleep_stage(activity, heart_rate, hrv):
model = joblib.load('sleep_model.pkl')
features = np.array([[np.mean(activity), np.mean(heart_rate), hrv]])
return model.predict(features)
4. 可视化输出
import matplotlib.pyplot as plt
def visualize_sleep(timestamps, stages):
plt.figure(figsize=(10,4))
plt.plot(timestamps, stages, marker='o', linestyle='--')
plt.yticks([0,1,2,3], ['Awake', 'Light', 'Deep', 'REM'])
plt.title('Sleep Stage Analysis')
plt.grid(True)
plt.show()
三、系统工作流程
-
数据采集
timestamps, accel, hr = simulate_sensor_data()
-
特征提取
activity, hrv = process_data(accel, hr)
-
预测睡眠阶段
stages = predict_sleep_stage(activity, hr, hrv)
-
生成报告
visualize_sleep(timestamps[:len(stages)], stages)
四、优化方向建议
-
数据增强
- 使用公开数据集(如SHHS睡眠数据库)训练模型
- 添加环境光传感器数据
-
实时处理
- 采用滑动窗口技术(如5分钟窗口实时更新)
-
设备对接
- 通过蓝牙协议(pybluez库)连接真实手环
- 使用ADXL345等传感器开发板模拟硬件
-
部署优化
- 使用Cython加速关键算法
- 移植到MicroPython用于嵌入式设备
五、典型输出示例
睡眠质量报告(2023-12-01):
总睡眠时间: 7.2小时
深睡比例: ████████ 35%
REM睡眠: █████ 20%
睡眠效率: 89%
建议:保持规律作息时间
通过这个框架,您可以快速搭建原型系统,后续再逐步接入真实硬件和优化算法参数。需要特别注意传感器采样频率的选择(通常1-50Hz)与能耗的平衡。