在Python中没有拖尾的FFT

时间:2013-10-15 08:46:18

标签: python fft

我正在尝试从en实验中生成一些合成数据。我得到了正频域的理论PSD并计算了一些时间序列。比C对我的数据进行一些操作,进行FFT并在频域中进行拟合。我将首先向您展示一些代码,而不是解释主要问题:

我评估理论PSD的箱子是我的箱子:

bins = np.linspace(1,1e3,2**13)

由此我通过以下方式计算我的时间:

for i in range(bins.shape[0]):
    signal += dataCOS[i] * np.cos(2*np.pi* t * bins[i] + random.uniform(0,2*np.pi))

其中dataCOS是PSD的值,相应的分档和t

给出
t_full = np.linspace(0,1,2**13, endpoint = False)

我的问题是,我需要一个我的时间序列的FFT,它不会被抹掉。好吧,通常是不可能的,但是,如果我是正确的,并且每个时间段中只添加一个频率分区,它们在帧中匹配(最高和最低频率仍然可见),它应该工作。所以,我的问题是,箱子和t_full如何形成?

以下是我的想法:两者都需要具有相同数量的点,并且必须在时域中显示最高和最低频率。但我不确定,希望你能帮助我。

编辑******************************************首先,说明一下我的问题多了一点看到附带的图片:enter image description here在第一个你有经典的后转换结果,在时域中有太多的点,但所有的箱都是周期性的。enter image description here在第二个是相同的,但现在它们不再是周期性的,一个得到预期的涂抹。当然,可以使用过滤器改进这里,但是如果你想要适合初始红色功能,你会遇到重大问题。最后的图片是我想要的结果:所有功能在时间范围内都是周期性的,因此没有任何拖尾。其次,每对t_bins都保持我之前添加的一个频率,因此计算限制的云消失了。 enter image description here

为了得到这个,这里是所需的箱子间距和t

bins = np.linspace(0,2**14,2**14, endpoint = False)
t_full = np.linspace(0,1,2*bins.shape[0], endpoint = False)

1 个答案:

答案 0 :(得分:0)

您可能只需要在FFT之前应用合适的window function来阻止spectral leakage。我不是Python用户,所以我不能给代码,但公式很容易应用。尝试使用von HannHamming窗口(它们相似,但形状略有不同)。