使用pyedflib实现脑电数据的存储


前言

科研自用,有误请留言

一、bdf格式文件

bdf格式是脑电数据存储的常用文件格式,由于此格式文件无法在原有的基础上进行数据追加,因此只能将所有脑电数据拼接之后再添加到bdf文件中。

二、步骤

1.引入库

代码如下(示例):

import numpy as np
import pyedflib
import random
import time

2.保存数据方法

代码如下(示例):

def create_bdf(file, channel):
    """
    :param file: 需要创建的文件名
    :param channel: 通道数 + 1(刺激通道)
    :return:
    """
    # 创建单次传输数据时长(单次运动想象时长)
    file_duration = 4

    # 读取bdf文件,若不存在则创建
    f = pyedflib.EdfWriter(file, channel, file_type=pyedflib.FILETYPE_BDFPLUS)

    # 创建通道文件头信息列表
    channel_info = []

    # 创建通道列表(最后一个为刺激通道)
    channel_list = ['C3', 'C4', 'Cz', 'FC3', 'FC4', 'CP3', 'CP4', 'CPz', 'Status']

    # 设计通道头文件
    for index, ch in enumerate(channel_list):
        ch_dict = {
            'label': ch,
            'dimension': 'uV',
            'sample_rate': 256,
            'physical_max': 100,
            'physical_min': -100,
            'digital_max': 8388607,
            'digital_min': -8388607,
            'transducer': '',
            'prefilter': ''
        }

        # 修改刺激通道的数字最大值和最小值
        if ch == 'Status':
            ch_dict['digital_max'] = ch_dict['physical_max']
            ch_dict['digital_min'] = ch_dict['physical_min']

            # 将每个通道的文件头信息添加到文件头信息列表
            channel_info.append(ch_dict)
        else:
            channel_info.append(ch_dict)

    # 将通道文件头信息列表添加到bdf文件中
    f.setSignalHeaders(channel_info)

    # 创建一个变量用于控制循环
    num = 0

    # 模拟四次数据的存储
    while num < 10:
        # 随机生成模拟脑电数据
        data_arr = np.random.random((len(channel_list) - 1, file_duration * ch_dict['sample_rate']))

        # 随机生成标签
        random_number = random.randint(1, 4)

        # 生成一个刺激通道大小的全0一维数组
        pulse_data = np.zeros((1, file_duration * ch_dict['sample_rate']))

        # 给刺激通道添加事件(在第0s添加标签会出现异常,可在第0.001s处添加消除该异常)
        pulse_data[0][1] = pulse_data[0][1].item() + random_number

        # 将刺激通道的数据添加到脑电数据数组中
        data_arr = np.insert(data_arr, 8, pulse_data, axis=0)

        # 将脑电数据和标签添加到bdf文件中(为什么不能使用物理测量值??????)
        f.writeSamples(data_arr)

        # 每添加一次数据就将num + 1
        num = num + 1

        # 每次添加数据之间的间隔为2秒
        time.sleep(2)

    # 关闭文件
    f.close()

3. 方法调用

代码如下(示例):

if __name__ == "__main__":
    demoFilePath = 'demoTest.bdf'
    create_bdf(demoFilePath, 9)

总结

还有部分内容未了解清楚,后续补充

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值