Files
Rader_IQ/README.md

189 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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波特率
### 编译和上传
```bash
# 编译项目
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
- 初始版本发布
- 实现基本的人体检测和生命体征监测
- 添加信号平滑和异常值处理功能