所以我正在尝试用 Python 计算 EEG(25 个通道,512 个采样率,248832/通道)波段(alpha、beta、gamma 等)。我设法做到这一点:首先用一个看起来像这样的巴特沃斯滤波器过滤信号:
def butter_bandpass_filter(data, lowcut, highcut, fs, order=2):
nyq = 0.5 * fs
low = lowcut /nyq
high = highcut/nyq
b, a = butter(order, [low, high], btype='band')
#print(b,a)
y = lfilter(b, a, data)
return y
我使用了滤波器,低设置为 0.1,高设置为 80。然后我计算信号的 fft 并将其存储在 fft1 中,我再次使用胡桃滤波器来提取每个频段的频率,它看起来像这样:
for i in np.arange(n):
alpha1 = butter_bandpass_filter(fft1[i, :], 8.1, 12.0, 256)
beta1 = butter_bandpass_filter(fft1[i, :], 16.0, 36.0, 256)
gamma1 = butter_bandpass_filter(fft1[i, :], 36.1, 80, 256)
delta1 = butter_bandpass_filter(fft1[i, :], 0.0, 4.0, 256)
sigma1 = butter_bandpass_filter(fft1[i, :], 12.1, 16.0, 256)
theta1 = butter_bandpass_filter(fft1[i, :], 4.1, 8.0, 256)
sumalpha1 = sum(abs(alpha1))
sumbeta1 = sum(abs(beta1))
sumgamma1 = sum(abs(gamma1))
sumdelta1 = sum(abs(delta1))
sumsigma1 = sum(abs(sigma1))
sumtheta1 = sum(abs(theta1))
objects = [sumalpha1, sumbeta1, sumgamma1, sumdelta1, sumsigma1, sumtheta1]
N = len(objects)
ra = range(N)
plt.title(signal_labels[i])
plt.autoscale
somestuffneeded = np.arange(6)
ticks = ['alpha','beta','gamma','delta','sigma','theta']
plt.xticks(somestuffneeded, ticks)
plt.bar(ra, objects)
plt.show()
问题是我对伽玛值很高(它代表了一种高认知活动,这个人显然没有)。第一个通道的结果是:
谁能指出一个更好的解决方案/对什么是错的有任何想法/可以告诉我什么是错的?我使用的过滤器不正确吗?谢谢!