Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidInitialValues = errors.New("the initial values provided are invalid")
ErrInvalidInitialValues indicates that the initial values provided are not valid to initialize a PeakDetector.
Functions ¶
This section is empty.
Types ¶
type PeakDetector ¶
type PeakDetector interface { // Initialize initializes the PeakDetector with its configuration and initialValues. The initialValues are the first // values to be processed by the PeakDetector. The length of these values are used to configure the PeakDetector's // lag (see description below). The PeakDetector will never return any signals for the initialValues. // // influence determines the influence of signals on the algorithm's detection threshold. If put at 0, signals have // no influence on the threshold, such that future signals are detected based on a threshold that is calculated with // a mean and standard deviation that is not influenced by past signals. If put at 0.5, signals have half the // influence of normal data points. Another way to think about this is that if you put the influence at 0, you // implicitly assume stationary (i.e. no matter how many signals there are, you always expect the time series to // return to the same average over the long term). If this is not the case, you should put the influence parameter // somewhere between 0 and 1, depending on the extent to which signals can systematically influence the time-varying // trend of the data. E.g., if signals lead to a structural break of the long-term average of the time series, the // influence parameter should be put high (close to 1) so the threshold can react to structural breaks quickly. // // threshold is the number of standard deviations from the moving mean above which the algorithm will classify a new // datapoint as being a signal. For example, if a new datapoint is 4.0 standard deviations above the moving mean and // the threshold parameter is set as 3.5, the algorithm will identify the datapoint as a signal. This parameter // should be set based on how many signals you expect. For example, if your data is normally distributed, a // threshold (or: z-score) of 3.5 corresponds to a signaling probability of 0.00047 (from this table), which implies // that you expect a signal once every 2128 datapoints (1/0.00047). The threshold therefore directly influences how // sensitive the algorithm is and thereby also determines how often the algorithm signals. Examine your own data and // choose a sensible threshold that makes the algorithm signal when you want it to (some trial-and-error might be // needed here to get to a good threshold for your purpose). // // lag determines how much your data will be smoothed and how adaptive the algorithm is to change in the long-term // average of the data. The more stationary your data is, the more lags you should include (this should improve the // robustness of the algorithm). If your data contains time-varying trends, you should consider how quickly you want // the algorithm to adapt to these trends. I.e., if you put lag at 10, it takes 10 'periods' before the algorithm's // threshold is adjusted to any systematic changes in the long-term average. So choose the lag parameter based on // the trending behavior of your data and how adaptive you want the algorithm to be. Initialize(influence, threshold float64, initialValues []float64) error // Next processes the next value and determines its signal. Next(value float64) Signal // NextBatch processes the next values and determines their signals. Their signals will be returned in a slice equal // to the length of the input. NextBatch(values []float64) []Signal }
PeakDetector detects peaks in realtime timeseries data using z-scores.
This is a Golang interface for the algorithm described by this StackOverflow answer: https://stackoverflow.com/a/22640362/14797322
Brakel, J.P.G. van (2014). "Robust peak detection algorithm using z-scores". Stack Overflow. Available at: https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data/22640362#22640362 (version: 2020-11-08). Deprecated: 原理需要设置阀值, 不推荐使用 [wangfeng on 2024/2/7 11:20]
func NewPeakDetector ¶
func NewPeakDetector() PeakDetector
NewPeakDetector creates a new PeakDetector. It must be initialized before use.
type PeeksAndValleys ¶
type PeeksAndValleys struct { Data []float64 // 原始数据 Diff []float64 // 一阶差分 PosPeak []int // 波峰位置存储 PosValley []int // 波谷位置存储 Pcnt int // 所识别的波峰计数 Vcnt int // 所识别的波谷计数 }
PeeksAndValleys 波峰波谷
func (*PeeksAndValleys) String ¶
func (this *PeeksAndValleys) String() string