了解TSA :: periodogram()

Ell*_*are 6 signal-processing r time-series

我有一些看似正弦的定期采样数据,我想确定波的频率,为此我获得了R并加载了包含名为'periodogram'的函数的TSA包.

为了了解它是如何工作的,我创建了一些数据如下:

x<-.0001*1:260
Run Code Online (Sandbox Code Playgroud)

这可以解释为260个样本,间隔为.0001秒

Frequency=80
Run Code Online (Sandbox Code Playgroud)

频率可以解释为80Hz,因此每个波周期应该有大约125个点

y<-sin(2*pi*Frequency*x)
Run Code Online (Sandbox Code Playgroud)

然后我做:

foo=TSA::periodogram(y)
Run Code Online (Sandbox Code Playgroud)

在得到的周期图中,我预计会看到与我的数据相对应的频率出现尖峰 - 我确实看到一个尖峰但是最大'spec'值的频率为0.007407407,这与我80Hz的频率有什么关系?

我注意到foo $带宽变化,值为0.001069167,我也难以解释.

如果有更好的方法来确定我的数据频率,我会感兴趣 - 我对R的经验仅限于一天.

Sle*_*Eye 6

根据时间序列计算周期图,而无需知道您的实际采样间隔。这导致频率限制在归一化[0,0.5]范围内。要获得考虑采样间隔的赫兹频率,您只需要乘以采样率即可。在您的情况下,您的尖峰频率为归一化频率0.007407407为10,000Hz,采样率为10,000Hz,这对应于〜74Hz的频率。

现在,这还不是80Hz(原始音调频率),但是您必须记住,周期图是频谱估计,其频率分辨率受输入采样数的限制。在您的情况下,您使用260个样本,因此频率分辨率约为10,000Hz / 260或〜38Hz。由于74Hz在80 +/- 38Hz范围内,因此是一个合理的结果。为了获得更好的频率估计,您将不得不增加样本数量。

请注意,正弦音调的周期图通常会在音调频率附近尖峰并在任一侧衰减(这种现象是由于用于估计的样本数量有限,通常称为频谱泄漏),直到该值被认为是“可忽略的”为止。foo$bandwidth然后,该变量表示对于高于的频率0.001069167*10000Hz ~ 107Hz,输入信号开始包含较少的能量,这与音调的衰减一致。