medical_SDK/include/indicator_cal.h

36 lines
1.8 KiB
C++

#ifndef _INDICATOR_CAL_H
#define _INDICATOR_CAL_H
#include "headfile.h"
class MetricsCalculator
{
public:
// ECG相关指标
float calculate_heart_rate_ecg(const SensorData& ecg_signal, float sample_rate);
float calculate_t_wave_amplitude(const std::vector<float>& ecg_signal);
float calculate_qrs_width(const std::vector<float>& ecg_signal, float sample_rate);
float calculate_st_offset(const std::vector<float>& ecg_signal, float sample_rate);
// PPG相关指标
float calculate_heart_rate_ppg(const std::vector<float>& ppg_signal, float sample_rate);
float calculate_spo2(const SensorData& ppg_data);
float calculate_perfusion_index(const SensorData& ppg_data);
float calculate_pulse_width(const std::vector<float>& ppg_signal);
float calculate_amplitude_ratio(const SensorData& ppg_data);
// HRV相关指标
float calculate_sdnn(const std::vector<float>& rr_intervals);
float calculate_rmssd(const std::vector<float>& rr_intervals);
float calculate_pnn50(const std::vector<float>& rr_intervals);
float calculate_triangular_index(const std::vector<float>& rr_intervals);
// 信号处理
std::vector<float> detect_r_peaks(const std::vector<float>& ecg_signal, float sample_rate);
std::vector<float> detect_pulse_peaks(const std::vector<float>& ppg_signal, float sample_rate);
float calculate_signal_quality(const std::vector<float>& signal);
// 综合指标计算
std::map<std::string, float> calculate_all_ecg_metrics(const SensorData& ecg_data, float sample_rate);
std::map<std::string, float> calculate_all_ppg_metrics(const SensorData& ppg_data, float sample_rate);
std::map<std::string, float> calculate_all_hrv_metrics(const std::vector<float>& rr_intervals);
};
#endif