【问题标题】:How to set a frequencies grid in Short Time Fourier Transform from SciPy?如何在 SciPy 的短时傅里叶变换中设置频率网格?
【发布时间】:2018-05-23 13:36:54
【问题描述】:

我按照here 的描述执行短时傅立叶变换。

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

据我了解,我得到以下对象:(1) 一个包含频率值的一维数组,(2) 一个包含时间值的一维数组,以及 (3) 一个包含给定频率强度的二维数组给定的时间。

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

除此之外,如果能够指定应使用的频率范围,那就太好了。

【问题讨论】:

  • 关键字 fs 默认为 1.0,但您可以使用它控制采样频率,但这只会缩放您的频率和时间尺度。您正在寻找的是关键字nperseg=256。如果你玩这个,你将控制时间段和频率段之间的权衡。我不太确定是否可以指定频率范围... :(

标签: python scipy fft


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2012-11-10
    • 2021-12-28
    • 2015-05-09
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多