周期图(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
是采样率,N
是 fft
使用的样本数。所以在你的图表中,相同的 1.2Hz 会出现在 ~31 的索引处,假设 N
大约是 1500。
注意:您提供的数据中的采样间隔不是很恒定,可能会影响结果,因为 periodogram
和 fft
都假设一个规则采样间隔。
我正在尝试处理正弦时间序列数据集:
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
是采样率,N
是 fft
使用的样本数。所以在你的图表中,相同的 1.2Hz 会出现在 ~31 的索引处,假设 N
大约是 1500。
注意:您提供的数据中的采样间隔不是很恒定,可能会影响结果,因为 periodogram
和 fft
都假设一个规则采样间隔。