优化雷达信号处理,添加心率和呼吸率平滑处理和异常值检测

This commit is contained in:
Admin
2026-02-28 14:39:03 +08:00
parent f3b99428cf
commit 83b2f3ba07
19 changed files with 845 additions and 3594 deletions

View File

@@ -0,0 +1,58 @@
# 修改蓝牙发送雷达数据模式
## 1. 需求分析
- 修改蓝牙发送机制,实现基于数据变化的发送
- 当心率、呼吸、存在检测、体动状态、睡眠状态发生变化时才发送
- 根据小程序设定的时间间隔进行定时检测
- 如果检测到变化,立即更新数据
- 按设定间隔检测数据更新,有变化则发送全部数据
## 2. 实现方案
### 2.1 添加数据存储结构
-`radar_manager.h` 中添加 `LastSentData` 结构体,用于存储上一次发送的数据
- 包含需要检测变化的字段:心率、呼吸率、存在状态、运动状态、睡眠状态
### 2.2 修改全局变量
-`radar_manager.cpp` 中添加 `lastSentData` 全局变量
- 添加 `lastCheckTime` 变量用于记录上次检测时间
### 2.3 实现数据变化检测函数
- 添加 `isDataChanged()` 函数,比较当前数据与上次发送数据
- 实现阈值判断,避免微小波动导致频繁发送
### 2.4 重写 BLE 数据发送任务
- 修改 `bleSendTask` 任务,实现以下逻辑:
1. 定时检测数据变化(基于 `continuousSendInterval`
2. 检测到变化时立即发送数据
3. 发送后更新 `lastSentData` 为当前数据
4. 保持与现有命令处理的兼容性
### 2.5 保持命令处理逻辑
- 保留 `processStartContinuousSend``processStopContinuousSend` 函数
- 确保小程序可以正常控制发送模式和间隔
## 3. 代码修改点
### 3.1 radar_manager.h
- 添加 `LastSentData` 结构体定义
- 在全局变量声明中添加 `lastSentData` 和相关变量
### 3.2 radar_manager.cpp
- 初始化 `lastSentData` 变量
- 实现 `isDataChanged()` 函数
- 重写 `bleSendTask` 任务函数
- 确保数据发送格式与现有代码保持一致
## 4. 技术要点
- 使用阈值检测避免微小数据波动导致的频繁发送
- 保持定时检测机制,确保数据及时性
- 维持与现有 BLE API 的兼容性
- 按照现有代码的注释格式编写新代码
- 确保内存使用合理,避免内存泄漏
## 5. 预期效果
- 减少不必要的蓝牙数据传输
- 只在数据发生实际变化时发送
- 保持数据的实时性和准确性
- 与现有小程序控制逻辑完全兼容

View File

@@ -0,0 +1,37 @@
## 实现BLE API规范计划
### 步骤1: 分析现有实现
- 检查main_backup.cpp.bak中的BLE命令处理函数实现
- 确认它们是否符合BLE_API.md中定义的API规范
- 识别需要移植的函数
### 步骤2: 移植BLE命令处理函数
- 将以下函数从main_backup.cpp.bak移植到main.cpp中
- processWiFiConfigCommand() - 处理WiFi配置命令
- processScanWiFi() - 处理WiFi扫描命令
- processGetSavedNetworks() - 处理获取已保存网络命令
- processEchoRequest() - 处理回显测试命令
- processSetDeviceId() - 处理设置设备ID命令
- processQueryStatus() - 处理查询状态命令
- processQueryRadarData() - 处理查询雷达数据命令
- processStartContinuousSend() - 处理启动持续发送命令
- processStopContinuousSend() - 处理停止持续发送命令
### 步骤3: 更新processBLEConfig函数
- 更新main.cpp中的processBLEConfig()函数,添加命令处理逻辑
- 实现JSON解析和命令分发功能
- 确保按照API规范处理所有支持的命令
### 步骤4: 添加必要的辅助函数
- 添加sendRawEchoResponse()函数,处理回显测试响应
- 确保所有函数都按照API规范返回正确的响应格式
### 步骤5: 验证实现
- 编译项目,确保没有错误
- 检查所有函数是否符合API规范
- 确认响应格式是否与API文档一致
### 预期结果
- 项目能够成功编译
- BLE命令处理函数符合BLE_API.md中定义的API规范
- 设备能够正确处理所有支持的BLE命令并返回符合规范的响应

View File

@@ -0,0 +1,26 @@
# 修复编译错误计划
## 问题分析
编译时出现了多个错误,主要是因为删除了 `radar_manager.cpp``radar_manager.h` 文件后,`main.cpp` 中仍然引用了这些文件中定义的变量和函数。
## 修复步骤
### 1. 修复 SAMPLE_RATE 重复定义
- 删除 `main.cpp` 中的 `SAMPLE_RATE` 定义,使用 `radar_vitals.h` 中的定义
### 2. 添加缺失的 BLE 相关代码
- 添加 `MyServerCallbacks` 类定义
- 添加 `MyCallbacks` 类定义
- 添加 `processBLEConfig` 函数定义
- 添加 `sendStatusToBLE` 函数定义
### 3. 修复其他未声明的变量和函数
- 确保所有使用的变量和函数都有正确的声明
### 4. 测试编译
- 运行 PlatformIO 编译命令,确保所有错误都已修复
## 预期结果
- 编译成功,没有错误
- 系统能够正常启动和运行
- 新的雷达模块能够正常工作

View File

@@ -0,0 +1,49 @@
# 删除无用代码优化项目
## 目标
在保持API功能不变的情况下删除项目中没有用的代码部分减少Flash占用提高代码可读性。
## 分析结果
通过对代码库的分析,我发现了以下可以删除的无用部分:
### 1. main.cpp
- **I2S相关配置**第17-18行的I2S配置定义因为使用的是直接ADC读取方式
- **setup_i2s()函数**第127-131行只是一个空函数没有实际功能
- **重复的雷达处理调用**第166行的`radar_vitals_process(&sample, &vitals);`调用因为已经在第163行调用了`radar_process(I_buf, Q_buf, DATA_LEN);`
- **冗余的WiFi连接成功消息**第357行总是会执行即使WiFi连接失败
- **注释掉的代码**第361-364行已经被注释掉没有实际功能
### 2. radar_vitals.cpp
- **旧的信号处理函数**第29-41行的`bp_breath``bp_heart`函数,使用的是新的处理方法
- **重复的相位解缠函数**第44-50行的`unwrap`函数,在`radar_process`中已经实现
- **旧的BPM计算函数**第53-80行的`calc_bpm`函数,使用的是新的频率估计方法
- **旧的主处理函数**第203-252行的`radar_vitals_process`函数,使用的是新的`radar_process`函数
- **未使用的系统参数**第12-15行的实时系统参数定义
- **未使用的缓冲区大小**第18行的`RADAR_BUFFER_SIZE`定义
- **未使用的队列长度**第19行的`QUEUE_LENGTH`定义
- **未使用的变量**第14-17行的`phase_buf``buf_idx``I_mean``Q_mean``prev_phase`变量
### 3. ble_api.cpp
- **未使用的函数**第60-73行的`sendCustomJSONData`函数
- **未使用的函数**第194-197行的`sendRawEchoResponse`函数
- **无效的超时处理**第369-378行的超时处理代码因为相关变量没有被设置
### 4. io_flash.h
- **重复的常量定义**第40-50行的常量定义已经在`io_flash.cpp`中定义
### 5. io_flash.cpp
- **重复的局部变量**第15-23行的局部变量定义在函数内部已经有局部定义
## 实施步骤
1. **修改main.cpp**删除I2S相关配置、setup_i2s()函数、重复的雷达处理调用、冗余的WiFi连接成功消息和注释掉的代码
2. **修改radar_vitals.cpp**删除旧的信号处理函数、重复的相位解缠函数、旧的BPM计算函数、旧的主处理函数、未使用的系统参数和变量
3. **修改ble_api.cpp**:删除未使用的函数和无效的超时处理代码
4. **修改io_flash.h**:删除重复的常量定义
5. **修改io_flash.cpp**:删除重复的局部变量
6. **编译项目**:确保项目能够成功编译,没有错误
7. **验证功能**确保API功能保持不变
## 预期结果
- 减少Flash占用提高代码可读性
- 保持API功能不变确保系统正常运行
- 消除冗余代码,减少维护成本

View File

@@ -0,0 +1,22 @@
## 备份并删除radar_manager.h文件计划
### 步骤1: 确认文件引用情况
- 检查是否有其他文件引用了radar_manager.h
- 验证main.cpp中确实没有包含radar_manager.h
### 步骤2: 备份文件
- 将radar_manager.h文件重命名为radar_manager.h.bak作为备份
### 步骤3: 删除文件
- 删除radar_manager.h文件
### 步骤4: 验证编译
- 运行platformio编译命令确保项目能够成功编译
- 检查是否有任何编译错误
### 步骤5: 清理临时文件
- 确认项目编译成功后,可以选择删除备份文件(如果需要)
### 预期结果
- 项目能够成功编译,没有任何错误
- 证明radar_manager.h文件是冗余的可以安全删除