【发布时间】:2014-01-10 18:47:36
【问题描述】:
我正在尝试在 Python 中对 EEG 信号执行 FFT,然后根据带宽确定它是 alpha 还是 beta 信号。它看起来不错,但结果图与它们应该的完全不同,频率和幅度值不是我所期望的。任何帮助表示赞赏,这是代码:
from scipy.io import loadmat
import scipy
import numpy as np
from pylab import *
import matplotlib.pyplot as plt
eeg = loadmat("eeg_2013.mat");
eeg1=eeg['eeg1'][0]
eeg2=eeg['eeg2'][0]
fs = eeg['fs'][0][0]
fft1 = scipy.fft(eeg1)
f = np.linspace (fs,len(eeg1), len(eeg1), endpoint=False)
plt.figure(1)
plt.subplot(211)
plt.plot (f, abs (fft1))
plt.title ('Magnitude spectrum of the signal')
plt.xlabel ('Frequency (Hz)')
show()
plt.subplot(212)
fft2 = scipy.fft(eeg2)
f = np.linspace (fs,len(eeg2), len(eeg2), endpoint=False)
plt.plot (f, abs (fft2))
plt.title ('Magnitude spectrum of the signal')
plt.xlabel ('Frequency (Hz)')
show()
【问题讨论】:
-
有一个潜在的问题,取决于输入数据,或者它们是如何归一化的,因为 EEG 信号通常有 10 到 50 Hz 的范围,你的 1 到 9 kHz,这把输入信号?你把它带到哪里?
-
如果您提供数据链接可能会有所帮助。
-
关于数据图,单位会很有帮助。
-
您没有指定与您的采样频率匹配的单位,但是,猜测单位是赫兹(即 200 Hz),那么根据 Nyquest 定理,您无法解析任何高于100 赫兹。
-
似乎您的 FFT 发生了偏移(0 在您的图中约为 4500Hz)。使用fftfreq 获取真实频率。