1

问题

我有一个可以在这里下载的频谱:https ://www.dropbox.com/s/ax1b32aotuzx9f1/example_spectrum.npy?dl=0

使用 Python,我试图使用零填充来增加频域中的点数。为此,我依赖 scipy.fft 和 scipy.ifft 函数。我没有得到想要的结果,如果有人能解释为什么会这样,我将不胜感激。

代码

这是我尝试过的代码:

import numpy as np
from scipy.fft import fft, ifft
import matplotlib.pyplot as plt
spectrum = np.load('example_spectrum.npy')
spectrum_time = ifft(spectrum) # In time domain
spectrum_oversampled = fft(spectrum_time, len(spectrum)+1000) # FFT of zero padded spectrum
xaxis = np.linspace(0, len(spectrum)-1, len(spectrum_oversampled)) # to plot oversampled spectrum

fig, (ax1, ax2) = plt.subplots(2,1)
ax1.plot(spectrum, '.-')
ax1.plot(xaxis, spectrum_oversampled)
ax1.set_xlim(500, 1000)
ax1.set_xlabel('Arbitrary units')
ax1.set_ylabel('Normalized flux')
ax1.set_title('Frequency domain')

ax2.plot(spectrum_time)
ax2.set_ylim(-0.02, 0.02)
ax2.set_title('Time domain')
ax2.set_xlabel('bin number')
plt.tight_layout()
plt.show()

结果

添加图形以显示结果。蓝色是原始光谱,橙色是零填充光谱。 橙色的零填充光谱。 蓝色的原始光谱

预期行为

我希望零填充会导致原始频谱的某种 sinc 插值。但是,橙色曲线不通过原始光谱的点。

有谁知道我为什么会出现这种行为和/或如何解决这个问题?

4

0 回答 0