航弈生物BCIduino脑肌电模组滤波和频谱计算操作

本文介绍用python对航弈生物BCIduino放大器脑电/肌电数据进行滤波及频谱计算。

本文介绍如何用python mne对fif格式保存的脑电数据进行读取和简单的滤波,并用numpy对上述数据进行FFT分析,绘制相应的图像。本稿不涉及BCIduino数据如何保存,关于数据如何保存会在之后的文章给出。本文基于一个已经保存好的.fif格式的BCIduino肌电数据,数据保存了大约40s的肌电信号,信号内容是正常人模拟帕金森患者震颤时的肌电信号,采样频率250Hz,一共采集了5次,每次4s,对应fif文件中的标签11。

1.读取数据及利用mne简单滤波
关键代码
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
前提是安装了mne库,安装方法是:在dos窗口里运行pip install mne,如下
航弈生物BCIduino脑肌电模组滤波和频谱计算操作

raw这个变量就是获取到的原始数据,如果需要了解raw的信息,可以多运行一行
print(raw),可以看到dos窗口会打印出下列信息:
可以看出这段数据一共45.6s,一共9个通道(其中第0个是event通道,第1-8个是原始数据通道),一共11401个采样点,采样频率我们已经知道是250Hz,可以算出来确实是45.6s的数据。
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
把原始数据存到变量里之后,我们可以找一下events(即标签),运行:航弈生物BCIduino脑肌电模组滤波和频谱计算操作
此时dos窗口输出:
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
我们关心的数据是标签11对应的数据,其他标签对应的数据对我们意义不大。因此要找出相应的数据段。
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
上述代码语句将raw(原始数据)中event_id=11的数据提取出(一共提取了4s,从标签11开始出现开始截取数据,一共截取4s,这4s的数据是有意义的)。
如果将epoch打印出,即print(epochs),可以看到一共有五段数据,因为我们一共采集了5次数据,每次4s,如下:
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
然后将epoch数据转化为evoked数据(方便处理)
evoked = epochs.average()
相当于将epochs的5段数据进行了平均。然后对evoked数据进行带通滤波:
evoked.filter(l_freq=4,h_freq=8.0)
并对evoked数据绘图:
evoked.plot(titles=‘EMG’,window_title=‘EMG(Hangyi Biotech)’)
输出图像为
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
2.对evoked数据进行FFT计算
该部分借鉴:
https://blog.****.net/qq_39516859/article/details/79794549博客
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
上述数据保存在百度网盘:
链接:https://pan.baidu.com/s/1FB27La-hJn1bEXnjgv7mqA 密码:v9bi
其中只有一份很小的fif文件,可以先拿来练手。

#本篇由BCIduino脑机接口开源社区原创(公众号“BCIduino脑机接口社区”)。BCIduino脑机接口社区由来自北京航空航天大学、康奈尔大学、北京大学、首都医科大学等硕博发起成立,欢迎扫下面码加入社群,也欢迎采购BCIduino脑电模块和外骨骼等(某宝搜索即可或者扫码详询)。
航弈生物BCIduino脑肌电模组滤波和频谱计算操作
航弈生物BCIduino脑肌电模组滤波和频谱计算操作