在R中查找测量的起点和终点

时间:2018-06-13 15:26:57

标签: r dataframe signal-processing sensor

我有来自传感器的原始数据,如下所示:

#Generate sample data
t=seq(0,50,0.1)
dat=sin(t)
dat = replace(dat,dat<0,0)
dat=dat+rnorm(length(dat))/10

#Mark region of interest
plot(dat,type='l')
marks = c(35,60)
for (i in 1:length(marks)){
abline(v=marks[i],col="red") #This is an example for the data I want to cut out/have the start/end indices
abline(h=0.2,col="blue")#I could just get all the data points below 0.2, but then the data would still contain the flanks of the peaks and the smaller peaks within the desired data would be cut out
}

该示例模拟我的传感器测量在校准范围内(标记为红色)和校准范围之外(峰值为1)。请注意,虽然示例的基本功能是正弦波,但实际情况并非如此 - 没有单一频率发生这种情况。

我希望自动获取传感器在校准范围内测量时的子集。

我的第一种方法是用滚动平均值平滑数据并删除高于硬编码阈值的所有值0.1-但是我仍然坚持使用&#34;侧翼&#34;数据中的峰值,我仍然不知道如何实际上数据的子集,并找到我的子集的开始和结束时间......

#My progress so far
ma <- function(x,n){stats::filter(x,rep(1/n,n), sides=2)}
dat_smooth = ma(dat$dat,10) #smooth the data so that small outliers are still included
dat_smooth = replace(dat_smooth,dat_smooth>0.1,NA) #Replace all values above a treshold with NA

plot(dat_smooth,type='l')

我不认为我以正确的方式接近这个话题,部分原因是因为我不知道我试图做什么的术语。这个问题有优雅的解决方案吗?

0 个答案:

没有答案