将黑色波转换为红色信号。
问问题
257 次
2 回答
3
继续 Jesse Craig 的回答和 dukeling 关于发现增加和减少之间切换的评论确实会产生一个解决方案,至少在没有噪音的简单情况下是这样。
例如用这个输入信号
如果您计算 y 的连续值之间的差异(下面的代码在 R 中,因此对向量进行操作)
diffs = y[2:length(y)] - y[1:length(y)-1]
然后是差异的迹象
dir = sign(diffs)
假设没有值是相等的(我们在差异中没有零),您可以通过查找符号不同的位置来发现方向变化
dir_change = dir[2:length(dir)] != dir[1:length(dir)-1]
# no change of direction for first two positions
dir_change = c(FALSE, FALSE, dir_change)
这确定了最大值和最小值,(其中dir_change
是TRUE
)
方波可以像 Jesse Craig 建议的那样,通过取最大值和最小值之间的中点来计算。
到目前为止,一切都很好。我不确定 OP 的信号是否包含噪音。假设确实如此,我尝试了一些技术来尝试识别存在噪声的最大值和最小值,但我发现这非常困难(我花了至少 10 倍的时间来尝试获得一个对噪声具有鲁棒性的算法,就像我做的那样在上面的代码上)。我尝试了移动平均线和一些简单的阈值,但我无法让任何一种技术直接工作。这似乎证实了处理噪音并非易事!如果有人可以发表评论,我会很感兴趣(或者我可以搜索或询问关于此的 SO 问题)。
编辑在这个答案中有一个很好的峰值检测方法总结。
于 2013-05-31T22:12:28.637 回答