技术问询:如何将10Hz信号转换为1Hz信号并关联对应脉冲?
10Hz信号转1Hz信号及脉冲对应实现方法
核心逻辑
把10Hz信号转成1Hz属于降采样操作:每1秒内的10个10Hz采样点合并为1个1Hz采样点。要实现“10Hz数据中出现1则1Hz对应一个脉冲”,只需判断每个1秒窗口内是否存在1值,存在则标记为1(脉冲),否则为0。
R语言实现代码
基于你提供的原始数据,用dplyr包就能快速完成处理:
# 加载处理包 library(dplyr) # 原始10Hz数据 df10 <- data.frame( seq(5, 7 ,0.1), c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0)) names(df10) <- c("t[10Hz]", "sign") # 转换为1Hz带脉冲的数据集 df1 <- df10 %>% # 按1秒窗口分组:取时间的整数部分作为分组键 mutate(t_group = floor(`t[10Hz]`)) %>% group_by(t_group) %>% # 生成脉冲信号:组内只要有1就输出1,否则0 summarise( `t[1Hz]` = t_group, # 1Hz的时间戳 sign_1Hz = as.integer(any(sign == 1)) ) %>% ungroup() # 查看结果 print(df1)
结果说明
运行代码后得到的df1就是目标1Hz数据:
- 时间列
[t[1Hz]]对应5、6、7三个1秒窗口的时间戳 - 信号列
sign_1Hz中,只有6秒窗口(对应原数据6.0-6.9秒区间)存在1值,所以该位置标记为1(脉冲),其余窗口为0,完全匹配你要的效果。
如果需要更贴合实际采样习惯的时间戳(比如每个1秒窗口的中点),可以把floor(t[10Hz])改成floor(t[10Hz]) + 0.5,这样时间列会变成5.5、6.5、7.5。
内容的提问来源于stack exchange,提问作者nando_5g
相关产品推荐
相关产品推荐

