#ifndef POLY2FINDPEAKS_H #define POLY2FINDPEAKS_H #include #include #include class Poly2FindPeaks { public: // 峰值结构体,存储峰值特征 typedef struct { int index; // 峰值在数据中的索引 double position; // 峰值的精确位置(插值计算) double height; // 峰值高度(相对于基线) double amplitude; // 峰值的绝对幅度 double fwhm; // 半高宽(Full Width at Half Maximum) } Peak; // 滑动平均平滑(去噪预处理) static std::vector SmoothData(const std::vector& data, int window_size); // 计算基线(使用百分位法,假设大部分数据为基线) static double calculateBaseline(const std::vector& data, double percentile = 0.1); // 检测峰值 static std::vector findPeaks( const std::vector& data, double height_threshold = 0.0, // 峰值高度阈值(相对于基线) int min_distance = 3, // 峰之间的最小距离(索引) int smooth_window = 3 // 平滑窗口大小 ); }; /******************************************************************************* 算法说明 核心功能: 1、对原始数据进行平滑去噪(滑动平均) 2、自动计算基线(区分信号和背景) 3、检测局部最大值作为峰值候选 4、过滤假峰(通过高度阈值和最小峰间距) 5、精确计算峰值特征(位置、高度、半高宽) 关键参数: * heightThreshold:峰值相对于基线的最小高度(过滤小噪声峰) * minDistance:两个峰值之间的最小距离(避免同一峰被多次检测) * smoothWindow:平滑窗口大小(越大去噪效果越好,但可能模糊窄峰) 峰值特征: * position:峰值的精确位置(通过抛物线插值优化) * height:峰值相对于基线的高度 * amplitude:峰值的绝对幅度 * fwhm:半高宽(反映峰的宽窄,用于峰的进一步分类) *******************************************************************************/ #endif // POLY2FINDPEAKS_H