如何在含噪时序数据中定位首个最高峰值及相邻两个谷值
定位平滑后时间序列的特定峰值与谷值
需求说明
我有一组经滚动平均平滑处理的时间序列数据(原始数据含大量噪声),需要完成:
- 定位曲线中首个且最高的峰值,以及该峰值两侧的两个谷值(仅需此特定峰值,无需找出所有峰值)
- 拟合从左侧谷值到峰值、峰值到右侧谷值的直线(此需求优先级较低,已有大致思路)
尝试过ggpmisc::find_peaks等方法,但只能提取所有峰值和谷值,无法精准定位目标峰值,求解决思路。
已验证的解决方案
使用pracma::findpeaks函数实现需求:通过对目标变量取负,可将查找谷值转换为查找峰值的操作;新增逻辑列标记峰值和谷值的位置,便于后续绘图。
# 查找目标峰值 peaks <- findpeaks(data$L.MEAN, npeaks = 1, minpeakdistance = 100, sortstr = TRUE) is_peak <- vector("logical", length(data$Time)) data$is_peak <- is_peak for (Time in peaks[,2]) { data$is_peak[Time] <- TRUE } # 查找峰值两侧的谷值 valleys <- findpeaks(-data$L.MEAN, npeaks = 2, minpeakdistance = 100) is_valley <- vector("logical", length(data$Time)) data$is_valley <- is_valley for (Time in valleys[,2]) { data$is_valley[Time] <- TRUE }
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

