Files
Rader_Success_5/睡眠方案.txt

214 lines
4.4 KiB
Plaintext
Raw Permalink Normal View History

🧠 一、系统总体架构(通用版)
雷达输入(两种类型)
统一存在检测层Presence Layer
生理信号层HR / RR / HRV / Movement
睡眠状态机(核心)
睡眠分期
事件检测(入睡 / 醒来 / 离床)
统计 + 评分
🧩 二、雷达适配层设计(重点)
你要做的是:统一接口,底层适配
✅ 统一输出结构
typedef struct {
bool isPresent; // 是否有人
float distance; // 距离(无距离雷达填-1
float confidence; // 存在置信度 0~1
float motionEnergy; // 微动能量(关键!)
} PresenceData;
🟢 情况1支持距离雷达如FMCW
isPresent = (distance > 20cm && distance < 100cm)
&& (energy > threshold);
confidence = energy归一化;
👉 优势:
可以判断是否在床上
可以做“离床”精准检测
🔵 情况2不支持距离如存在检测雷达
👉 用“微动 + 呼吸”判断
isPresent = (motionEnergy > lowThreshold)
|| (检测到呼吸信号);
confidence = motionEnergy归一化;
⚠️ 关键优化(必须做)
👉 防误判(静止误判无人):
if (HR 或 RR 有效)
isPresent = true;
🚶 三、有人 / 离床 / 无人逻辑(统一)
✅ 状态定义
NO_PERSON
IN_BED
OUT_OF_BED
🧾 通用逻辑
if (!presence.isPresent) {
noPersonTimer += dt;
if (noPersonTimer > 10min) {
state = NO_PERSON;
endSleepSession();
} else {
state = OUT_OF_BED;
awakeTime += dt;
}
} else {
noPersonTimer = 0;
// 有距离版本
if (presence.distance > 80cm)
state = OUT_OF_BED;
else
state = IN_BED;
}
😴 四、入睡判断(统一方案)
✅ 输入
HR心率
RR呼吸
HRV
Movement0~100
📐 Sleepiness Score
S = 0.35*(1 - HR_norm)
+ 0.25*(HRV_norm)
+ 0.20*(1 - RR_var)
+ 0.20*(1 - Movement_norm)
🧾 判定
if (S > 0.6 持续 5~10分钟)
→ 入睡
⚠️ 雷达适配补充
👉 无距离雷达必须加:
if (!presence.isPresent)
不允许入睡
🌙 五、睡眠分期(核心)
🧠 特征统一归一化
HR_norm = (HR - baselineHR)/20
RR_norm = (RR - baselineRR)/4
HRV_norm = HRV / 50
Move_norm= Movement / 100
🟢 深睡Deep Sleep
DeepScore =
0.4*(1 - HR_norm)
+ 0.3*(HRV_norm)
+ 0.2*(1 - Move_norm)
+ 0.1*(RR稳定)
条件加强版:
Movement < 10
HRV > baseline
🔵 浅睡Light Sleep
LightScore =
0.3*(HR适中)
+ 0.3*(HRV中)
+ 0.2*(Move 10~40)
+ 0.2*(RR稳定)
🔴 清醒Awake
AwakeScore =
0.5*(Move_norm)
+ 0.3*(HR_norm)
+ 0.2*(RR波动)
🧾 分类
max(Deep, Light, Awake)
⏰ 六、醒来判断
✅ 强规则(推荐)
if (Movement > 50 持续 2分钟)
→ 醒来
✅ 融合规则
if (HR ↑ && RR ↑ && Movement ↑)
→ 醒来
🚪 七、离床判断(通用版)
🟢 有距离雷达
if (distance > 80cm)
OUT_OF_BED
🔵 无距离雷达
if (!presence.isPresent 持续 > 30秒)
OUT_OF_BED
🧾 最终结束
if (无人 > 10分钟)
→ 结束睡眠
📊 八、睡眠统计
记录:
totalSleepTime
deepSleepTime
lightSleepTime
awakeTime
outOfBedTime
sleepLatency入睡时间
wakeCount
⭐ 九、睡眠评分系统
🎯 总分100
1⃣ 时长30
7~9小时 → 满分
2⃣ 深睡比例25
Deep / Total > 20%
3⃣ 连续性20
醒来少 → 高分
4⃣ 生理质量15
HRV高 + HR稳定
5⃣ 入睡速度10
<20分钟
📐 总公式
Score =
0.3*duration +
0.25*deep +
0.2*continuity +
0.15*physiology +
0.1*latency
🔁 十、完整状态机(统一)
NO_PERSON
IN_BED
AWAKE
↓ (满足入睡)
LIGHT_SLEEP
DEEP_SLEEP
↑↓
LIGHT_SLEEP
AWAKE
OUT_OF_BED
10min
END
⚙️ 十一、ESP32建议架构实战
🧵 任务划分FreeRTOS
Task1雷达采集Presence
Task2HR/RR/HRV计算
Task3睡眠状态机核心
Task4UI / MQTT上传
⏱ 更新周期
Presence10~20Hz
HR/RR1Hz
睡眠分析1Hz
🚀 十二、关键工程优化(你必须做)
1⃣ 防误判“无人”
if (HR有效 || RR有效)
强制 presence = true
2⃣ 防抖动(超级关键)
状态必须持续 N 秒才切换
3⃣ 数据无效保护
if (!HRV valid)
不参与深睡判断
✅ 总结(最核心一句话)
👉 这套方案本质是:
“雷达判断人 → 生理判断睡 → 时间保证稳定 → 状态机做最终决策”