0

我正在尝试从实验中生成一些合成数据。我得到了正频域的理论 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)
4

1 回答 1

0

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

于 2013-10-15T10:07:46.013 回答