如何在 R 中制作功率谱密度图

信息处理 功率谱密度 时间序列 可视化 r
2022-02-09 09:29:34

我有一个代表神经元尖峰的时间序列点过程。我已经计算并绘制了自协方差,acf但现在我需要绘制功率谱密度。

功率谱密度被定义为自协方差的傅里叶变换,所以我从我的数据中计算了这个,但我不明白如何将它变成频率与幅度图。

我使用了以下代码

# X is some set of Wait times between spikes, below is just an example
X <- c(56, 3, 4, 119, 3, 4, 121, 3, 3, 121, 3, 4, 120, 3, 4, 4, 115)
acf <- acf(X,type="covariance")
psd <- fft(acf$acf)

Nowpsd是一个复值数组,跨越acf函数的默认 24 滞后。

如何将此数组转换为 PSD 图?

1个回答

通过进一步的研究,我发现频率由 FFT 的索引乘以采样率并除以数组的大小给出。幅度是复数的大小。

所以这样一个情节的完整代码如下

# Load ggplot library
library(ggplot)
# X is some set of Wait times between spikes, below is just an example
X <- c(56, 3, 4, 119, 3, 4, 121, 3, 3, 121, 3, 4, 120, 3, 4, 4, 115)
acf <- acf(X,type="covariance")
ft <- fft(acf$acf)
freq <- (1:nrow(ft))*1000/nrow(ft) #In my case we sample by ms so 1000 hz
A <- (Re(ft)^2 + Im(ft)^2)^.5 #amplitude is magnitude
PSD <- cbind.data.frame(freq,A)
ggplot(PSD, aes(x=freq,y=A)) + geom_line()