我有一些看似正弦的定期采样数据,我想确定波的频率,为此我获得了R并加载了包含名为'周期图'的函数的TSA包。
为了了解它是如何工作的,我创建了一些数据如下:
x<-.0001*1:260
这可以被解释为260个样本,间隔为.0001秒
Frequency=80
频率可以解释为80Hz,因此每个波周期应该有大约125个点
y<-sin(2*pi*Frequency*x)
然后我做了:
foo=TSA::periodogram(y)
在得到的周期图中,我希望看到与我的数据相对应的频率出现尖峰 - 我确实看到了一个尖锐的尖峰但是最大的规格&#39;值的频率为0.007407407,这与我80Hz的频率有什么关系?
我注意到foo $带宽变化,值为0.001069167,我也难以解释。
如果有更好的方法来确定我的数据频率,我会感兴趣 - 我对R的体验仅限于一天。
答案 0 :(得分:4)
周期图是根据时间序列计算出来的,不知道您的实际采样间隔。这导致频率限于标准化[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
的能量,这与音调的衰减一致。