用窗位移和带通计算FFT

2024-06-01 02:46:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我需要用窗口函数(即Kaiser窗口)对这个列表的子集进行频谱分析。在

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

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

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

^{pr2}$

有人能帮我吗?在

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

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

2)对于这个列表2d的每个元素(第1维):如何将FFT分析与加窗函数(更“考虑”中间值的FFT)一起进行?在

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


Tags: 数据函数fft列表波段传感器sensor子集
1条回答
网友
1楼 · 发布于 2024-06-01 02:46:30

对于第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)

这是你想要的吗?至于第三部分,我不太确定你需要什么。在

相关问题 更多 >