我执行了here所描述的短时傅里叶变换。
from scipy.signal import stft
f, t, Zxx = stft(data)
据我所知,我得到以下物体:(1)包含频率值的一维数组,(2)包含时间值的一维数组,以及(3)包含给定频率强度的二维数组给定的时刻。
我的问题是如何控制/修改频率网格。默认情况下,我有一个129频率的网格。我想做的第一件事是增加频率数量(以获得更细粒度的网格)。
除此之外,能够指定应使用的频率范围会很好。
答案 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
进行切片以选择感兴趣的频率范围。