来自 EEG 数据的频率电压图 - Python 中的 FFT

Frequency Voltage Graph from EEG Data - FFT in Python

我有点不确定如何处理这个问题,因为这对我来说是一个新话题,所以非常感谢任何对我的代码的指导。我有一组脑电图记录(18949 条脑电图记录,采样率为 500Hz,记录单位为 nV)。我正在尝试根据数据创建频率对电压图,但到目前为止我运气不好。

我的代码如下:

data = pd.read_csv('data.csv')
data = data['O1']
Fs = 500.0
Ts = 1.0/Fs
t = np.arange(len(data)) / Fs

n = len(data) # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T # two sides frequency range
frq = frq[range(int(n/2))]

Y = np.fft.fft(data)/n
Y = Y[range(int(n/2))]

fig, ax = plt.subplots(2, 1)
ax[0].plot(t,data)
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Voltage')
ax[1].plot(frq,abs(Y),'r')
ax[1].set_xlabel('Freq (Hz)')

plt.draw()
plt.show()

fig.savefig("graph.png")

我的结果图如下所示:

任何人都可以就我可能在哪里出错提供一些指导吗?

您的信号在时域中具有相当大的(至少相对于其他信号变化而言)直流偏移。在频域中,这将被绘制为 0Hz 处的强线(被图的轴隐藏),然后其他频率分量的幅度相对来说接近于 0。

为了更好地可视化,您应该使用公式 20*log10(abs(Y))Decibels (dB) 中绘制频谱,这样您就可以实际看到那些其他频率分量。