我目前正在研究绘制一组信号的傅里叶变换。我目前面临的问题是,每个子图中似乎都有一条平线,我不确定其起源。每组数据只有一组 y 值,因此每个子图中应该只有一行。
这是图形生成的代码。
parsedData
变量是给定数据的二维数组。 parsedData[0] 给出时间步值,而所有后续索引都是 y 值的数组。
代码:
def GenerateFFT(parsedData,T):
colors = ["red","green","blue","purple","orange","cyan","pink","black"]
parsedDataY=parsedData[1:]
print(parsedDataY[len(parsedDataY)-1])
fig, ax = plt.subplots(len(parsedDataY),sharex=True,sharey=True)
#FourierValues = [[] for _ in range(4)]
for i in range(len(parsedDataY)):
signal = np.array(parsedDataY[i],dtype=float)
N=signal.size
print(f"Signal Size at i={i}: {N}")
x=np.arange(30.0,49.035,.005)
fourier = np.fft.fft(signal)
fourierFreq = np.fft.fftfreq(n=signal.size,d=1.0/T)
#FourierValues[i].append(fourier)
print(np.sqrt(np.sqrt(fourier.real**2+fourier.imag**2)).tolist)
ax[i].plot(fourierFreq,np.sqrt(fourier.real**2+fourier.imag**2),color=colors[i],linewidth=.75)
ax[i].set_yscale("log")
ax[i].set_xbound(lower=-10,upper=10)
plt.setp(ax, xlim=(0,10),ylim=ax[0].get_ylim())
fig.suptitle("Fourier Transforms of Monochromatic Wavetrains with Amplitude Modulation",fontweight="bold")
fig.supxlabel("Frequency (Hz)",fontweight="bold")
fig.supylabel("Amplitude (cm) on Logarithmic Scale",fontweight="bold")
plt.show()
这是扭曲的频率轴。 使用 np.fft.fftshift
fourier=np.fft.fftshift(fourier)
fourierFreq=np.fftshift(fourierFreq)