我以规则的时间间隔采样了一些看起来呈正弦曲线的数据,并且我想确定电波的频率,为此,我获得了R并加载了包含名为“周期图”函数的TSA软件包。

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

x<-.0001*1:260

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

频率可以解释为80Hz,因此每个波周期应该有约125个点
y<-sin(2*pi*Frequency*x)

然后,我做:
foo=TSA::periodogram(y)

在生成的周期图中,我希望在与数据相对应的频率处看到一个尖峰-我确实看到一个尖峰,但是最大的“spec”值具有0.007407407的频率,这与我的80Hz频率有什么关系?

我注意到变量foo $ bandwidth的值为0.001069167,我也很难解释。

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

最佳答案

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

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

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

10-05 22:11