在列表(大小1024)上执行FFT和FFTShift之后,我现在尝试绘制输出。我尝试按照我想要的方式显示数据时遇到了一些问题。
目前,x轴显示箱号。在FFT移位之后,频率0 Hz在bin编号512处,并且每个bin值额外的2000/1024 Hz,因此bin 0应该是-1000 Hz并且bin 1023应该是+1000 Hz; bin 1应为-998.05 Hz,bin 1022应为+998.05等
我尝试使用xticks来显示:
xlocs, xlabs = plt.xticks()
plt.xticks([0,(len(a)*0.25),(len(a))/2,(len(a)*0.75),len(a)],[(-1000),(-500),0,500,1000])
但是我无法实际读取图表中特定点的x值,而只显示y值和x =。有什么方法可以解决这个问题吗?
此外,我还希望将整个图表向左翻转302个分档。无论如何我能做到吗?
答案 0 :(得分:3)
您应该更改绘制图形的方式,即在绘制图形之前计算区域中的频率:
import numpy as np
import matplotlib.pyplot as plt
bins = np.arange(-512, 512)
x = 2000.*bins/1024
plt.plot(x, fft_data)
然后,您可以使用plt.xlim
答案 1 :(得分:1)
您还可以使用辅助函数fftfreq
,它将为您提供正确缩放的频率。然后,您可以将fftshift
应用于fft
和freq
数组。如果你然后绘制为
plot(freq,fft_vals)
您将获得所需的结果。
当您手动设置xticks时无法读取x
值的原因是您可以将任何作为刻度标签(例如字符串,非单调)序列等)所以matplotlib不知道如何确定画布上任意点的x
值(见setting tickslabel in matplotlib disables mouse cursor position)。