我是scikit学习的新手,但我正在尝试去除单个EEG通道中的眨眼(噪声峰值)。 我在互联网上搜索过,但只看到一些更复杂的阅读材料,包括MNE、PyEEG或其他Python模块。我只想要一些简单的,只依赖sklearn的东西。这是我的代码:
#The channel containing some eye-blinks
X = f1ep1_data[:,[4]]
#run ICA on signal
ica = FastICA(n_components=2)
ica.fit(X)
#reconstruct signal with independent components
components = ica.fit_transform(X)
X_restored = ica.inverse_transform(components)
fig1 = plt.figure()
plt.subplot(3,1,1)
plt.title("Original signal")
plt.plot(f1ep1_timescale, X)
plt.subplot(3,1,2)
plt.title("Components")
plt.plot(f1ep1_timescale, components)
plt.subplot(3,1,3)
plt.title("Signal Reconstructed")
plt.plot(f1ep1_timescale, X_restored)
plt.draw()
我所期待的是分离成两个部分,更清晰的脑电图信号和眨眼。我想不出是什么问题。有人能帮忙吗?在
你有没有注意到你的“组件”完全是原始信号的比例和颠倒?这是因为你不能得到比信号更多的成分。在
您需要执行以下步骤:
让我们详细了解第2步:为什么要手动删除组件? 伊卡对眨眼一无所知。它根据统计测量将信号分成不同的分量。如果幸运的话,这些部件中的一些看起来像是眨眼。在
到目前为止还可以,但真正的问题是没有定义组件的顺序。运行ICA,您可能会发现组件1包含眨眼。再次运行它,它们在组件3中。同样,它们都在第2和第5部分中。。。在
没有办法预先知道要移除哪些组件和多少个组件。这就是为什么每次运行时都需要手动告诉算法。在
在类似这样的代码中:
很可能你对手动步骤不满意。不幸的是:)2013年还没有一个健壮的自动算法来标记眨眼成分。我不认为这已经改变,但如果有什么东西你会发现它是一个领域特定的包,如MNE或PyEEG。在
不过,如果你碰巧有EOG录音,还是有希望的!存在A fully automated correction method of EOG artifacts in EEG recordings。这种方法基于典型相关或回归(我不记得细节),但是你需要在脑电图的同时记录EOG信号。在
我用模拟的“脑电图”数据创建了一个工作示例。 数据包括三个通道:额叶、中央和顶叶。10赫兹的阿尔法活动在后面最强,一些眨眼样的尖峰在前面最强。在
希望这个例子能更好地说明如何从多通道数据中删除组件。在
^{pr2}$如果您正在处理单通道EEG,以下是一种易于实现的方法:
1)使用简单的基于阈值的峰值检测来检测信号x中的闪烁(您可能需要通过查看信号中的几个闪烁实例来确定)。Neurosky、Muse等公司的设备都配有API来检测眨眼。如果需要,你可以用它。在
2)拍摄与闪烁对应的帧(xb)。在上面画一条平滑的线(xbs)。在
3)从闪烁(xb)中减去平滑线(xbs),并将信号的平均值相加。我们称之为xbc。在
4)将原始信号中的xbc替换为xb。在
相关问题 更多 >
编程相关推荐