【问题标题】:Calculate FFT with windowing displacement and bandpass使用窗口位移和带通计算 FFT
【发布时间】:2014-07-15 10:58:15
【问题描述】:

我有一个包含 1000 个传感器读数值的列表(采样率 = 10Hz):

sensor = [100,100,200,...,100]

我需要使用窗口函数(即 Kaiser 窗口)对此列表的子集进行光谱分析。

所以,我想得到一个列表,其中 FFT 是在此数据的多个子采样器上计算的(比如说 100 个结果),位移窗口为50 个读数(在每个限制中重叠 25 个读数),因此,在频域上获得 20 个结果。

然后,我想为 3 个频段(比如 1-2Hz、2-4Hz、4-8Hz)应用带通加权函数

最终结果应该是一个二维列表,其中第一个维度是“波段”,第二个维度表示该波段的幅度值(实部)。

bands = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],[1,...],[1,...]]

谁能帮帮我?

已编辑:好的,让我们拆分问题:

1) 给定一个列表=[1,2,3,4,5,6,7,8]。如何创建这种 2D 列表:list2D = [[1,2,3,4],[3,4,5,6],[5,6,7,8]]?这是制作置换窗口的第一个问题。

2) 对于这个 list2D 的每个元素(第一个维度):我怎样才能与窗口函数一起进行 FFT 分析(FFT 需要更多地“考虑”中间值)?

3) 对于每个 FFT 结果,如何进行带通滤波器,例如将频谱实部的离散结果转换为频率间隔的平均值?

【问题讨论】:

  • 您可能想看看 OpenCV。我没有在 Python 中使用过它,但是 C/C++ 中的 FFT(或者更确切地说是离散傅里叶变换)似乎很公平。
  • 问题是我所有的其他代码都是用 Python 开发的(而且还有很多)......我已经在使用 numpy 和 scipy 来完成它......跨度>
  • 我很确定有一个用于 OpenCV 的 Python 绑定/库,但我还没有尝试过。
  • 看例如这里是图书馆:stackoverflow.com/q/6363154/2379410除此之外“谁能帮助我”太宽泛了,您需要完善您的问题。
  • 我的上一版够了吗?请给我一个“元帮助”,这样我就可以进一步完善我的疑问..

标签: python fft windowing


【解决方案1】:

对于第 1) 和 2) 部分,请查看以下示例:

import numpy as np
import scipy as sci
from scipy.signal import blackman
from scipy.signal import hanning

a = np.array([1,2,3,4,5,6,7,8])


b = np.empty([2, int(len(a)/2)], dtype=complex)
b[0,:] = a[0:int(len(a)/2)]
b[1,:] = a[(int(len(a)/2)-1):-1]

res = np.empty([2, int(len(a)/2)], dtype=complex)

# create blackman window
w = blackman(int(len(a)/2))
# you could also use a hanning window:
# w = hanning(int(len(a)/2))

for i in range(2):
    res[i,:] = sci.fftpack.fft(b[i,:] * w)

这是你想要的吗?至于第 3 部分)我不太确定您需要什么。

【讨论】:

  • 这几乎是完美的!多谢!对于 3)我想要的是获得“频带”内所有频率的平均幅度(即 1Hz 和 4Hz 之间所有频率的平均幅度值)
  • 为此,您将数组 res 和 np.abs(res[i,j])**2 相加,然后除以您要求和的 bin 数量。正确的?当然首先你需要定义一个时间轴,否则无论如何谈论以Hz为单位的频率都是没有意义的。频率步长 - 至少与 - df = 2 * np.pi / (int(len(a)/2) * dt) 成比例,其中 dt 是时间步长,int(len(a)/2)时间数组中的点数。
  • 另请注意,如果您的时域信号是真实的,那么 FFT 信号将是对称的。这意味着您会得到正频率和负频率。只需选择一个积极的一面,然后您就可以进入第 3 部分)
  • 是的!非常感谢!那工作得天衣无缝!我已经为 FFT 使用了 abs 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2011-08-06
相关资源
最近更新 更多