You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MNE读取BrainVision格式EEG文件遇滤波警告及数据集转换问题

解决BrainVision格式EEG转「时间戳->信号」数据集的问题

关于RuntimeWarning的说明

该警告仅提示不同通道的低通滤波参数不一致,MNE自动采用了最高的滤波值(131Hz),不会影响数据读取和后续处理。若不想看到该警告,可在代码开头添加过滤:

import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, module="mne")

完整转换步骤(基于MNE)

直接使用MNE即可完成转换,无需额外工具,具体代码如下:

import mne
import pandas as pd

# 读取BrainVision文件(若需屏蔽警告,先执行上述过滤代码)
raw = mne.io.read_raw_brainvision('base.vhdr', preload=True)

# 1. 提取时间戳:raw.times为相对于数据起始点的秒级时间数组
timestamps = raw.times  # 形状为(n_times,)
# 若需毫秒级时间戳,可转换:timestamps = raw.times * 1000

# 2. 提取信号数据:get_data()返回(n_channels, n_times),转置后为(n_times, n_channels)
signals = raw.get_data().T

# 3. 合并时间戳与信号,生成结构化数据集
channel_names = raw.ch_names
columns = ['timestamp'] + channel_names
eeg_df = pd.DataFrame(data=signals, columns=channel_names)
eeg_df.insert(0, 'timestamp', timestamps)

# 4. 保存为CSV(也可保存为JSON等格式)
eeg_df.to_csv('eeg_timestamp_signal.csv', index=False)

代码补充说明

  • raw.get_data()返回的信号默认单位为微伏(μV),可通过raw.info['units']确认具体单位
  • 最终生成的CSV文件每行对应一个时间戳及该时刻所有通道的信号值,完全匹配「时间戳->信号」的需求

替代方案(轻量库pybv)

若不想使用MNE,可使用专门处理BrainVision格式的轻量库pybv(通过pip install pybv安装):

from pybv import read_brainvision
import pandas as pd

# 读取BrainVision文件
raw_data, sfreq, ch_names, annotations = read_brainvision('base.vhdr')

# 计算时间戳:基于采样频率生成
timestamps = [i / sfreq for i in range(raw_data.shape[1])]

# 生成结构化数据集并保存
eeg_df = pd.DataFrame(data=raw_data.T, columns=ch_names)
eeg_df.insert(0, 'timestamp', timestamps)
eeg_df.to_csv('eeg_timestamp_signal.csv', index=False)

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:57:50