如何使用R同步具有不同采样频率(Hz)的文件?

oug3syen  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(114)

我有两个不同的文件,其中一个是在1500Hz采样的EMG数据。另一个文件基本上是与EMG数据相关的触发信号,在1000Hz采样。为了分析EMG数据,我需要知道何时发生1000Hz文件中的触发。我想合并文件,我猜都是在1000Hz,我不知道该怎么做。任何帮助都很感激。谢谢
到目前为止,我已经尝试过:

fs_old <- 1500
fs_new <- 1000
emg_data_new_fs <- emg_data %>%
  select(starts_with("muscle")) %>%
  as.matrix() %>%
  t() %>%
  resample(fs_new, fs_old) %>%
  t() %>%
  as.data.frame() %>%
  setNames(paste0("muscle_", 1:ncol(.)))

但是这不起作用,我最终得到一个只有一个观测值的一堆列的文件。我想只是改变1500Hz文件的采样率,并将其添加到另一个文件中,保持原始列并排。

pftdvrlh

pftdvrlh1#

我会使用线性插值。在base R中有一个approx()函数的实现。语法如下所示
y2 <- approx(x1, y1, x2)$y
其中x1y1是一个频率的时间和值向量,x2是另一个频率的时间向量。我想这取决于你想插值到哪个频率。

library(tidyverse)
library(lubridate)

# simulate data
origin <- as_date("1970-01-01")

high_freq <- tibble(
  freq = "high",
  tme = Sys.time() + seconds(seq(0, 1000, by = 10)),
  x = as.double(tme, origin = origin),
  y = sin(x * 1e-2)
)

low_freq <- tibble(
  freq = "low",
  tme = Sys.time() + seconds(seq(0, 1000, by = 100)),
  x = as.double(tme, origin = origin),
  y = as.numeric(scale(x))
)

bind_rows(high_freq, low_freq) %>%
  ggplot() + aes(tme, y) + geom_point() + facet_wrap(~freq, ncol = 1, labeller = label_both) + 
  ggtitle("both low and high freq")

# low freq values interpolated to high freq axis
high_freq$z <- approx(low_freq$x, low_freq$y, high_freq$x)$y

high_freq %>%
  rename(high = y, low = z) %>%
  pivot_longer(c(high, low), names_to = "frequ") %>%
  ggplot() + aes(tme, value) + geom_point(na.rm = TRUE) + facet_wrap(~frequ, ncol = 1, labeller = label_both) + 
  ggtitle("low freq values interpolated to high freq axis")

创建于2023-04-21使用reprex v2.0.2

相关问题