Python中无涂抹的FFT

Python中无涂抹的FFT,python,fft,Python,Fft,我试图从实验中产生一些合成数据。我得到了正频域中的理论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 * b

我试图从实验中产生一些合成数据。我得到了正频域中的理论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
是如何成形的

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

编辑*********************************************************************首先,为了进一步说明我的问题,请参见附件中的图片:在第一个示例中,你得到了一个经典的后向变换结果,时域中的点太多,但所有的箱子都是周期性的。在第二种情况下是一样的,但现在它们不再是周期性的,人们得到了预期的涂抹。当然,在这里可以使用过滤器进行改进,但如果您想适应inital red函数,您将遇到一个主要问题。最后一张图是我想要的结果:所有函数在时间范围内都是周期性的,因此没有涂抹。第二,每对t_bins都有一个我之前添加的频率,因此计算极限处的云消失了

为了达到这个目的,这里是所需的垃圾箱和垃圾桶的间距

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

您可能只需要在FFT之前应用一个合适的参数来防止。我不是Python用户,所以我不能给出代码,但公式很容易应用。尝试一个或窗口(它们相似,但形状略有不同)。

我已经考虑过了,但这不起作用,因为它只会改变峰值宽度。之后的拟合没有意义。好吧-我真的不明白你想要实现什么(可能会在问题中添加一些数据图及其PSD?),但通常时域的不连续性(由于周期性的假设)是一个问题,窗口函数可以解决这一问题。为了避免最后的超调,添加零或只添加旧数据(反之亦然)可能有助于消除这种污点。如果你对截止频率有很好的解释,窗口函数是有意义的。你可以发一些图片让问题更清楚吗?