如何在SciPy中设置短时傅里叶变换的频率网格?

时间:2017-12-09 13:28:15

标签: python scipy fft

我执行了here所描述的短时傅里叶变换。

from scipy.signal import stft
f, t, Zxx = stft(data)

据我所知,我得到以下物体:(1)包含频率值的一维数组,(2)包含时间值的一维数组,以及(3)包含给定频率强度的二维数组给定的时刻。

我的问题是如何控制/修改频率网格。默认情况下,我有一个129频率的网格。我想做的第一件事是增加频率数量(以获得更细粒度的网格)。

除此之外,能够指定应使用的频率范围会很好。

1 个答案:

答案 0 :(得分:1)

正如Uvar所说,可观察频率的范围受到参数nperseg的限制。给定n个样本,人们只能观察n/2 + 1个频率,即fs*k/n频率k = 0,1,2,...,n/2,其中fs是采样频率,n是{{1} }}。由于aliasing,任何更高的东西都会丢失。这是一个数学限制,SciPy无法做到这一点。要获得足够精细的频率列表,请增加nperseg。默认值nperseg给出(256/2)+ 1 = 129个频率。

离散傅里叶变换一次性为您提供所有可观察的频率,无法选择自定义范围。当然,您可以对输出nperseg = 256进行切片以选择感兴趣的频率范围。