来自 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) 中绘制频谱,这样您就可以实际看到那些其他频率分量。
我有点不确定如何处理这个问题,因为这对我来说是一个新话题,所以非常感谢任何对我的代码的指导。我有一组脑电图记录(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) 中绘制频谱,这样您就可以实际看到那些其他频率分量。