我想在线测量嘈杂的时间序列中的波幅。我有一个模拟噪声波函数的时间序列,它会发生幅度变化。例如,说这样的事情:
set.seed <- 1001
x <- abs(sin(seq(from = 0, t = 100, by = 0.1)))
x <- x + (runif(1001, 0, 1) / 5)
x <- x * c(rep(1.0, 500), rep(2.0, 501))
结果数据如下所示:
> head(x, n = 30)
[1] 0.1581530 0.1329728 0.3911897 0.4104984 0.4774424 0.5118123 0.6499325
[8] 0.6837706 0.8520770 0.8625692 0.8441520 0.9960601 1.1119514 1.1414032
[15] 1.1153601 1.1456799 1.0843497 1.1141201 1.1290904 0.9906415 0.9836052
[22] 0.9369836 0.9493608 0.7484588 0.7588435 0.6467422 0.5787302 0.4665009
[29] 0.4643982 0.3398427
> plot(x)
> lines(x)

如您所见,由于序列中的噪声,数据不会在波的波谷和波峰之间单调增加。
我正在寻找一种方法来以计算上不费力的方式在线估计每个波峰值的幅度。 我可能可以找到一种方法来测量噪声项的最大幅度。我不确定波的频率是否恒定,所以我会对假设恒定(已知)波频率或可变波频率的答案感兴趣。真实数据也是正弦的。
我确信这是众所周知的解决方案的常见问题,但我对此很陌生,以至于我什至不知道要搜索哪些术语。另外,如果这个问题更适合stackoverflow,我很抱歉,我可以在那里询问是否首选。



