我有一个复杂信号,想要进行FFT变换。使用Mathematica软件,我得到了以下结果:
(* Some acquisition params *)
fS = 100. 10^6;
time = 10. 10^-6;
NbrSamp = Round[fS * time];
(* Generate signal *)
w0 = 2 \[Pi] 80 10^6;
ti = Subdivide[0., time, NbrSamp];
sig = Cos[w0 ti] + \[ImaginaryI] Sin[w0 ti];
(* Plot result of FFT *)
ListPlot[Abs@Fourier[sig], Joined -> True, PlotRange -> All, DataRange -> {0, fS}]
然而,当我在 Python 中执行相同的计算时,与 Mathematica 相比,我得到的光谱图是“翻转”的。为了得到相同的光谱图,我必须反转 FFT 的输出。我的代码如下:
import numpy as np
import matplotlib.pylab as plt
from scipy.fft import fft
# Some acquisition params
fs = 100e6
time = 10e-6
NbrSamp = round(fs*time)
# Generate signal
w0 = 2*np.pi*80e6
ti = np.arange(NbrSamp+1) / fs
sig = np.cos(w0*ti) + 1j*np.sin(w0*ti)
# calc FFT
sigFFT = fft(sig, norm = 'ortho')
freq = np.arange(0, NbrSamp+1) * fs / NbrSamp
# Plot result of FFT
plt.plot(freq, abs(sigFFT), label = "Actual result")
plt.plot(freq, abs(sigFFT[::-1]), label = "Flipped result")
plt.xlim(min(freq), max(freq))
plt.legend()
plt.show()
我的问题是为什么会出现这种情况,如何在Python中获得与Mathematica相同的结果,而无需翻转从FFT获得的数据? 由于我将拥有大量这样的信号,因此我希望避免进行此翻转操作。