我正在尝试从实验中生成一些合成数据。我得到了正频域的理论 PSD 并计算出一些时间序列。比 C 对我的数据进行一些操作,进行 FFT 并在频域中进行拟合。我将首先向您展示一些代码,而不是解释主要问题:
我评估理论 PSD 的分箱是我的分箱,由下式给出:
bins = np.linspace(1,1e3,2**13)
从那我计算我的timerseries:
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 的值和相应的 bin 并且t
由下式给出
t_full = np.linspace(0,1,2**13, endpoint = False)
我的问题是,我需要一个不会模糊的时间序列的 FFT。好的,通常不可能,但是,如果我是正确的,并且每个时间段恰好添加一个频率段,并且它们在帧中匹配(最高和最低频率仍然可见),它应该可以工作。所以,我的问题是,垃圾箱是如何t_full
形成的?
以下是我的想法:两者都需要具有相同数量的点,并且必须从时域中看到最高和最低频率。但我不确定,希望你能帮助我。
EDIT ****************************************** 首先,说明我的问题多看附图:首先,你有一个经典的反向变换结果,时域中有太多的点,但所有的 bin 都是周期性的。
在第二个中它是相同的,但现在它们不再是周期性的并且一个得到预期的涂抹。当然,在这里可以使用过滤器进行改进,但是如果您想适应初始红色功能,则会遇到重大问题。最后一张图片是我想要的结果:所有函数在时间范围内都是周期性的,所以没有拖尾。其次,每一对 t_bins 恰好保持我之前添加的一个频率,因此计算极限处的云消失了。
为此,这里是所需的箱间距和 t
bins = np.linspace(0,2**14,2**14, endpoint = False)
t_full = np.linspace(0,1,2*bins.shape[0], endpoint = False)