周期图(TSA In R)找不到正确的频率

Periodogram (TSA In R) can't find correct frequency

我正在尝试处理正弦时间序列数据集:

我在 R:

中使用这段代码
library(readxl)
library(stats)
library(matplot.lib)
library(TSA)

Data_frame<-read_excel("C:/Users/James/Documents/labssin2.xlsx")

# compute the Fourier Transform
p = periodogram(Data_frame$NormalisedVal)

dd = data.frame(freq=p$freq, spec=p$spec)
order = dd[order(-dd$spec),]
top2 = head(order, 5)
# display the 2 highest "power" frequencies
top2
time = 1/top2$f
time

然而,在检查频谱时,频率(以 Hz 为单位)低得离谱,约为 0.02Hz,而它应该有一个大得多的频率大约 1Hz,另一个较小的频率为 0.02Hz(只是在视觉上假设这是一个正弦波包裹在另一个正弦波中)。

可能是一个相当微不足道的问题,但是有人知道可能出了什么问题吗?

提前致谢。


编辑 1:使用

result <- abs(fft(df$Data_frame.NormalisedVal))

生成我期望看到的内容。

Edit2:根据要求,输出到 dput(Data_frame) 的文本文件。 http://m.uploadedit.com/bbtc/1553266283956.txt

periodogram function returns normalized frequencies in the [0,0.5] range, where 0.5 corresponds to the Nyquist frequency,即采样率的一半。由于您似乎在 60Hz 处采样了数据,因此 0.02 处的尖峰对应于 0.02*60 = 1.2Hz 的频率,这与您的预期一致,并且在您提供的数据中可以看到的附近(大部分尖峰在 0.7-1.1Hz 范围内)。

另一方面,您根据 fft 显示的最后一张图表上的 x 轴是一个索引而不是频率。相应的频率应根据以下公式计算:

f <- (index-1)*fs/N

其中 fs 是采样率,Nfft 使用的样本数。所以在你的图表中,相同的 1.2Hz 会出现在 ~31 的索引处,假设 N 大约是 1500。

注意:您提供的数据中的采样间隔不是很恒定,可能会影响结果,因为 periodogramfft 都假设一个规则采样间隔。