Files
Rader_IQ/README.md

5.8 KiB
Raw Blame History

# Rader_IQ

基于ESP32-S3的雷达信号处理项目用于人体存在检测、心率和呼吸率监测。

项目简介

本项目使用ESP32-S3微控制器和24GHz雷达传感器R60ABD1实现非接触式人体生命体征监测。通过处理原始IQ信号系统能够实时检测人体存在状态并准确测量心率和呼吸率。

主要功能

  • 人体存在检测:基于相位方差分析判断是否有人体存在
  • 活动状态识别:区分人体静止和运动状态
  • 心率监测通过频域分析提取心率信号40-180 BPM
  • 呼吸率监测通过频域分析提取呼吸率信号4-40 BPM
  • 信号平滑处理:使用移动平均滤波减少测量波动
  • 异常值检测:自动过滤超出生理范围的测量值

硬件平台

  • 主控芯片ESP32-S3 WROOM
  • 开发板FreeNove ESP32-S3 WROOM
  • 雷达传感器R60ABD1 24GHz毫米波雷达
  • ADC配置12位分辨率12dB衰减

技术栈

  • 开发框架Arduino Framework
  • 构建工具PlatformIO
  • 主要库
    • ArduinoJsonJSON数据处理
    • Modbus-ESP8266Modbus通信

项目结构

Rader_IQ/
├── src/
│   ├── main.cpp              # 主程序入口
│   ├── radar_vitals.h        # 雷达信号处理头文件
│   ├── radar_vitals.cpp      # 雷达信号处理实现
│   ├── io_flash.h            # IO和Flash管理头文件
│   └── io_flash.cpp          # IO和Flash管理实现
├── data_formats_explanation.md  # 数据格式说明文档
├── platformio.ini            # PlatformIO配置文件
└── README.md                 # 项目说明文档

核心算法

信号处理流程

  1. 数据采集通过ADC采集I/Q两路原始信号
  2. 去直流处理:消除信号的直流分量
  3. 相位计算使用atan2函数计算相位
  4. 相位展开:处理相位跳变,确保连续性
  5. 人体检测:基于相位方差判断人体存在
  6. 活动识别:基于相位差分能量判断运动状态
  7. 频率估计使用简化DFT在特定频段搜索最大能量
  8. 结果平滑:移动平均滤波和异常值过滤

参数配置

  • 采样率4000 Hz
  • 数据长度256个样本
  • 有效采样率200 Hz经过20倍降采样
  • 心率频段0.8-2.5 Hz48-150 BPM
  • 呼吸频段0.1-0.5 Hz6-30 BPM
  • 平滑窗口10个样本

引脚定义

功能 引脚 说明
I信号输入 GPIO9 ADC1_CHANNEL_0
Q信号输入 GPIO10 ADC1_CHANNEL_1
网络LED GPIO35 网络状态指示
配置清除 GPIO4 配置清除指示灯
雷达启动 GPIO36 雷达使能信号
Boot按钮 GPIO0 系统启动按钮

安装和配置

环境要求

  • PlatformIO IDE推荐使用VSCode + PlatformIO扩展
  • ESP32-S3开发板
  • R60ABD1雷达传感器模块

安装步骤

  1. 克隆或下载本项目
  2. 使用PlatformIO打开项目
  3. 连接ESP32-S3开发板
  4. 上传程序到开发板
  5. 通过串口监视器查看输出115200波特率

编译和上传

# 编译项目
pio run

# 上传到开发板
pio run --target upload

# 监视串口输出
pio device monitor

数据输出格式

系统通过串口输出实时监测数据,格式如下:

👤 Human moving - IQ电压: I=1.570V, Q=1.572V - 💓 心率: 72.0 BPM, 呼吸: 16.0 BPM

状态说明

  • No person:未检测到人体
  • Human moving:检测到人体运动
  • Human static:检测到人体静止

数据字段

  • IQ电压I和Q通道的平均电压值
  • 心率实时心率BPM
  • 呼吸率实时呼吸率BPM

性能特点

  • 实时性每256个样本更新一次结果
  • 准确性:通过频域分析提高测量精度
  • 稳定性:多层滤波处理减少波动
  • 鲁棒性:异常值检测确保数据可靠性

开发说明

代码规范

  • 使用C++编程语言
  • 遵循Arduino编码规范
  • 使用FreeRTOS多任务处理
  • 模块化设计,便于维护和扩展

调试建议

  • 使用串口监视器查看实时输出
  • 调整滤波参数以适应不同环境
  • 根据实际需求修改频段范围
  • 注意ADC采样率和处理能力的平衡

扩展功能

  • 添加BLE或WiFi通信功能
  • 集成数据存储和上传功能
  • 开发移动端或Web端监控界面
  • 添加多目标检测功能

常见问题

心率和呼吸率波动大

  • 确保雷达传感器位置正确
  • 避免环境中有强干扰源
  • 调整平滑窗口大小
  • 检查传感器连接是否稳定

检测不到人体

  • 检查雷达传感器供电
  • 确认传感器工作正常
  • 调整检测阈值参数
  • 检查ADC通道配置

许可证

本项目仅供学习和研究使用。

联系方式

如有问题或建议,请通过项目仓库联系。

更新日志

v1.0

  • 初始版本发布
  • 实现基本的人体检测和生命体征监测
  • 添加信号平滑和异常值处理功能