Files
Rader_Success_5/src/data_processor.h

175 lines
4.1 KiB
C
Raw Normal View History

/**
* @file data_processor.h
* @brief
* @description
*/
#ifndef DATA_PROCESSOR_H
#define DATA_PROCESSOR_H
#include <Arduino.h>
#include "config.h"
// ==================== 心率数据结构 ====================
/**
* @brief
*/
struct HeartRateData {
float bpm; // 当前心率 BPM
float bpmSmoothed; // 平滑后心率
float bpmMean; // 平均心率
float bpmStd; // 心率标准差
float bpmMin; // 最小心率
float bpmMax; // 最大心率
float trend; // 趋势(上升/下降)
float variability; // 心率变异性
float quality; // 数据质量 0-1
bool isValid; // 数据是否有效
unsigned long timestamp; // 时间戳
};
/**
* @brief
*/
struct RespirationData {
float rate; // 呼吸频率 次/分钟
float rateSmoothed; // 平滑后呼吸频率
float rateMean; // 平均呼吸频率
float rateStd; // 呼吸频率标准差
float regularity; // 呼吸规律性 0-1
float variability; // 呼吸变异性
float quality; // 数据质量 0-1
bool isValid; // 数据是否有效
unsigned long timestamp; // 时间戳
};
/**
* @brief HRV估算数据
*/
struct HRVEstimate {
float rmssd; // 估算的RMSSD
float sdnn; // 估算的SDNN
float stressIndex; // 压力指数
float autonomicBalance; // 自主神经平衡
bool isValid; // 是否有效
};
// ==================== 心率数据处理器 ====================
/**
* @brief
*/
class HeartRateProcessor {
private:
// 历史数据缓冲
float* bpmHistory;
int historySize;
int historyIndex;
int historyCount;
// 平滑滤波
float lastSmoothed;
float alpha;
// 统计数据
float bpmSum;
float bpmSumSq;
// 上一次有效值
float lastValidBpm;
unsigned long lastValidTime;
public:
HeartRateProcessor(int histSize = 100);
~HeartRateProcessor();
// 添加新的心率数据
void addData(float bpm, float confidence = 80);
// 获取处理后的数据
HeartRateData getData();
// 计算HRV估算
HRVEstimate estimateHRV();
// 重置
void reset();
private:
void updateStatistics();
float calculateVariability();
float calculateTrend();
};
// ==================== 呼吸数据处理器 ====================
/**
* @brief
*/
class RespirationProcessor {
private:
// 历史数据缓冲
float* rateHistory;
int historySize;
int historyIndex;
int historyCount;
// 平滑滤波
float lastSmoothed;
float alpha;
// 上一次有效值
float lastValidRate;
unsigned long lastValidTime;
public:
RespirationProcessor(int histSize = 50);
~RespirationProcessor();
// 添加新的呼吸数据
void addData(float rate, float confidence = 80);
// 获取处理后的数据
RespirationData getData();
// 重置
void reset();
private:
float calculateRegularity();
float calculateVariability();
};
// ==================== 综合数据处理 ====================
/**
* @brief
*/
class PhysioDataProcessor {
private:
HeartRateProcessor* hrProcessor;
RespirationProcessor* rrProcessor;
public:
PhysioDataProcessor();
~PhysioDataProcessor();
// 更新数据
void update(float hr, float rr, float hrConf = 80, float rrConf = 80);
// 获取心率数据
HeartRateData getHeartRateData();
// 获取呼吸数据
RespirationData getRespirationData();
// 获取HRV估算
HRVEstimate getHRVEstimate();
// 重置
void reset();
};
#endif // DATA_PROCESSOR_H