资讯动态

CHB-MIT脑电数据集详解:从数据读取到癫痫发作检测预处理

发布时间:2026/9/15 16:02:27 来源:尧图企业网站定制
1. 为什么CHB-MIT至今仍是发作检测入门的首选数据集做脑电数据处理的人绕不开CHB-MIT这个经典数据集。它由波士顿儿童医院发布收录了多位癫痫患儿的头皮EEG记录。我们课题组刚开始接触癫痫自动检测时翻遍公开数据最后也是从CHB-MIT开始跑通的第一个基线模型。原因很简单它足够规范、标注相对清晰、社区讨论多踩坑后能找到对照。很多初学者一开始就奔着TUH EEG Seizure Corpustusz去反而被它复杂的目录层级和多样化的采样率折腾得够呛。TUH数据确实规模大、真实场景多但预处理成本高对刚入门的人来说并不友好。CHB-MIT之所以适合作为第一个抓手在于以下几点。首先是标注策略合理。每条记录文件里都有对应的专家标注标注的是临床上确认的发作起止时间。相比某些只标“有无发作”的数据集CHB-MIT的连续时间标签让你可以直接做基于时间窗口的逐段分类也可以提取发作段和非发作段做二分类。这种标注结构对早期做特征工程和模型验证都特别顺手。其次是文件格式统一。整个数据集几乎全是标准EDF格式部分早期文件是EDF采样率统一为256Hz通道布局稳定。你不需要为不同患者写不同的读取逻辑一套代码可以跑完所有患者。这在实际开发中省掉了大量心智负担。还有一个常被忽略的优势是数据量适中。24例患者的记录总共接近一千小时的EEG信号既不会大到让普通配置的机器在预处理时长时间空转也足够支撑一个像样的训练集和测试集划分。我见过很多实验室用CHB-MIT做论文实验理由就是单卡GPU也能在合理时间内完成特征提取和训练。不过需要提醒的是CHB-MIT也有它的局限性。它的采集环境相对“干净”被试多为儿童发作类型和导联设置与成人ICU场景差异不小。如果你的目标是开发一个在成人监护病房里鲁棒运行的检测系统把它当作测试集验证外部泛化能力时结果通常会打折扣。但作为技术路线验证它依然是性价比最高的起点。2. CHB-MIT数据目录结构解读下载之后先别急着跑代码第一次下载CHB-MIT时我的第一反应是直接扔给MNE读取结果发现物理通道和标注信息对不上折腾了一个晚上。问题就出在目录结构和文件命名上。这个数据集的元信息藏得比较隐蔽先用半小时把目录搞清楚后面会省出几天的DEBUG时间。标准的PhysioNet目录下数据按患者编号存放文件夹命名从chb01、chb02一直延续到chb24。注意实际患者总数不止24早期版本不含chb01的某些记录后续版本又补充了所以最终每个文件夹里文件的数目并不相同。比如chb01下通常有chb01_01.edf到chb01_26.edf共26条记录有的患者会多出几段有的会有合并文件或者缺失段。更关键的是每个文件夹里那份患者专用的信息文件比如chb01-summary.txt。这个文件记录了每条记录的发作起止时间、通道数量、采样频率以及每个通道对应的电极名称列表。读取数据前一定要先仔细看这个文件因为不同患者的通道顺序和名称存在差异。比如chb01的FP1-F7起源于双极导联而有些患者的文件里会有“x”或者“AF3”这种非常规标记如果你不做通道对齐后续分析很容易出现串数据的问题。从格式本身来看虽然都是EDF扩展名但内部结构有两种可能一种是标准的EDF另一种是EDF。EDF在文件头里通过“”标记区分而且允许不连续的记录标注信息可能内嵌在annotations通道里。CHB-MIT的绝大多数文件在MNE读进来之后annotations都是空的发作时间段需要独立从summary文件解析。所以我的建议是不要依赖MNE的annotations统一用summary文件维护标注这样逻辑更可控。我可以分享一个快速检查目录结构的小脚本思路。遍历所有患者文件夹读取每个EDF文件的时长和通道数简单汇总成表格。这一招在接手任何脑电数据集时都适用能让你在十分钟内掌握数据的整体面貌。CHB-MIT的时长差异很大短的只有几分钟长的接近一个小时这种不均匀分布直接影响后续的数据划分策略。比如直接按比例切训练集和测试集时得分段处理避免把某个患者的连续几小时数据整个扔进训练集或验证集否则会产生严重的个体泄露。2.1 先从summary文件把患者信息结构化summary文件不是固定模板但内容很规律。以chb01-summary.txt为例文件里列出每条记录的采样率、通道数、持续时间以及发作时间段列表。例如“File Name: chb01_03.edf”之后会跟着一行“Seizure Start Time: 2996 seconds”和“Seizure End Time: 3036 seconds”这就对应一段40秒的发作期。我在解析这个文件时踩过一个坑有些患者文件里会有一行“Number of Seizures in File: 0”有的却完全没有这句话还有的记录里同一个文件包含两次以上的发作。如果只用正则去匹配“Seizure Start Time”这样的字符串很容易漏掉那些没有发作的段。正确的做法是逐行解析把每个EDF文件名映射到它对应的所有发作时间对再统一转换为不受时区影响的绝对样本点索引。通道列表的信息通常出现在summary文件末尾的“Channel Labels:”区域。每一行一个通道顺序对应EDF文件内的实际序列。建议把这些通道名存成一个JSON文件后续用这个JSON做通道对齐。我见过有人直接硬编码chb01的通道顺序后来换到chb10时整个特征矩阵都乱了最后花了一个下午排查才发现只是通道顺序问题。2.2 物理通道与参考通道的区别CHB-MIT数据集的导联设置是典型临床配置不是标准的10-20系统而是一套经过改造的双极导联组合。比如FP1-F7、F7-T7、T7-P7这些导联表示的是相邻电极之间的差分信号并非单一电极对地参考。这一点对做源定位研究的人来说尤其重要如果你需要做脑电地形图必须先进行参考转换将双极导联恢复成单极空间信号。从信号处理角度双极导联的优势是天然抑制了共模噪声尤其是工频干扰和运动伪迹。但坏处是通道之间的空间关系不再是一对一的电极位置映射源定位和某些基于拓扑的深度学习模型会比较麻烦。CHB-MIT的大多数分析最后都退化到时序分类任务所以双极设置并不会造成太大问题只是要做好通道名称字符串的规范化处理。3. 基于MNE读取EDF文件把脑电信号变成可计算的张量读取CHB-MIT的最佳工具是MNE-Python。它把EDF解析、通道类型识别、信号裁剪这些底层工作封装好了而且在处理脑电数据时它的事件结构、Raw对象和Epoch对象能很好地衔接后续建模。第一篇文章我尽量不涉及深度模型重点讲清楚如何把EDF文件和发作标注加载成干净的数据张量并保存成便于后续复用的格式。先列出依赖环境Python版本建议3.9以上MNE至少1.4版本最好再装上NumPy、pandas和SciPy。我的环境是Python 3.10MNE最新稳定版读取CHB-MIT没有问题。如果遇到依赖冲突建议新建一个单独的虚拟环境别跟其他项目混在一起。下面是最基础的一段读取代码import mne import numpy as np edf_path chb01/chb01_03.edf raw mne.io.read_raw_edf(edf_path, preloadTrue, verboseERROR) print(raw.info) print(raw.ch_names)运行后会输出文件的基本信息采样频率、通道数量、时长等。CHB-MIT绝大多数文件的采样频率是256Hz也就是说每秒钟每个通道有256个采样点。有些文件在summary里写的采样率是256但EDF头部可能标记成250或者512这种情况很少见真遇到了以EDF头部为准并额外确认是否有归一化系数需要处理。接着要处理标注。从summary文件解析好的发作段落可以构建一个Annotations对象annotations mne.Annotations( onset[start_sec, ...], duration[dur_sec, ...], description[seizure, ...] ) raw.set_annotations(annotations)这一步虽然MNE内部很标准但我个人更推荐在后续清洗阶段保留独立的标签文件而不是完全依赖Annotations。原因在于数据增强和切窗时Annotations在裁剪过程中偶尔会因为边界和事件重叠问题给你埋坑反而用单独的二元标签数组更透明。比如你针对1秒窗口做二分类直接把每个窗口的起始时间与发作时间段做交集判断看起来多写了点代码但逻辑非常直观不会出现MNE事件计数模糊导致标签错位。3.1 通道类型统一设置读取EDF后MNE默认把所有通道都当作eeg类型的“生物电位”通道。如果后续要做带通滤波、ICA去噪或者计算功率谱密度MNE会根据通道类型调用不同的处理流程。所以要把所有通道类型显式改为eegraw.set_channel_types({ch: eeg for ch in raw.ch_names}) raw.set_montage(None) # 或加载标准电极位置如果可用需要注意有些通道名可能是“LOC”或“ROC”这种眼电标记它们在CHB-MIT里其实仍然对应头皮电极而不是严格意义的眼电通道。如果项目研究的是眼球运动伪迹你可以手动把它们标记为eog通道否则全部留作eeg即可。不要因为名称里带个“O”就自动归为枕区得看summary文本里对通道标签的注释。3.2 预处理的第一步滤波和工频干扰抑制CHB-MIT的原始信号里有50Hz或60Hz的工频干扰不同患者采集环境不同噪声水平差异明显。我们一般先做0.5Hz到60Hz的带通滤波如果目标是分析高频振荡80Hz以上频段就要把归档数据视为有损因为原始采集系统并不保证存储了高频成分。下面是一段常用的预处理代码raw.filter(0.5, 60, fir_designfirwin)如果工频是60Hz美国标准可以额外做50Hz或60Hz陷波raw.notch_filter(60, pickseeg, verboseERROR)这里有个细节双极导联的共模抑制已经能削弱不少工频干扰但并非完全消除。陷波滤波会损失该频率附近的有用信息如果后续要做频谱特征而且某个频带恰好跟陷波频率重叠建议不做陷波而是用带阻或者把它当作鲁棒特征的一部分。我自己在提取功率谱密度时倾向于不陷波直接用0.5-60Hz带通因为对于癫痫检测任务工频峰相对稳定分类器可以自动学会忽略。3.3 数据落盘格式别再直接存EDF预处理后的数据建议保存成numpy格式或者HDF5格式方便多个脚本并行读取。我最早直接对EDF文件逐次读取和滤波每次实验都要花十几分钟在IO上后来把所有清洗后的数据保存成npy文件实验启动时间缩到几秒。这是一笔非常值得花的预处理投资。推荐用以下结构来存储每个患者的数据processed/ chb01/ signals.npy # 形状 (n_epochs, n_channels, n_times) labels.npy # 形状 (n_epochs,) metadata.json # 记录患者ID、窗口起止、原始文件名等关键信息这种结构让你后续做交叉验证时可以按患者或按记录灵活分组也可以直接用np.load一次性加载。CHB-MIT涉及的患者人数不多数据总量不算恐怖整个数据集预处理后的npy文件大概几十GB大多数深度学习场景都能接受。4. 数据质量的第一个拦路虎EEG坏道检测与处理很多人拿到数据集就直接滤波、切窗、提取特征直到模型指标差得离谱才发现是坏道问题。CHB-MIT虽然整体信噪比不错但坏道依然存在。所谓坏道就是指某条通道因为电极脱落、接触不良或放大器饱和导致信号呈现平直、超大噪声、剧烈跳动或50/60Hz强度异常等现象。这类通道如果混入后续计算会污染所有涉及空间特征的任务。手工查看每条通道的波形当然最准确但患者多、记录多逐一人工标记不现实。我们需要一套自动化的坏道检测方案。我在项目里用了三种互补策略结合起来可靠度非常高。4.1 基于方差的检测最直接的手段正常脑电信号的幅值方差在一个合理范围内而坏道通常会有极端表现。如果电极完全脱落信号会变成接近一条直线方差趋近于零如果受到接触不良干扰方差可能比正常通道高出数倍甚至数十倍。对每个通道计算一段时间内的信号方差然后设定比例阈值。比如计算所有通道方差的中位数或中位数绝对偏差MAD偏离中位数3个标准差以上的通道标记为疑似坏道。这里要考虑数据非高斯直接用均值和标准差容易被极端值带偏稳健一点的做法是用MAD替代from scipy.stats import median_abs_deviation var np.var(raw.get_data(), axis1) med np.median(var) mad median_abs_deviation(var) threshold_high med 5 * mad threshold_low med / 50 # 极低方差视为平道 bad_by_var (var threshold_high) | (var threshold_low)这个阈值不是绝对真理需要根据具体数据微调。CHB-MIT的导联设置导致通道间方差天然有区别比如枕区通道的方差下限可能比额区高所以如果有标准的脑功能分区模板也可以分区检测。4.2 基于功率谱和相关性检测找出频谱异常的通道方差不敏感的坏道常见情况是某个通道出现强烈的周期性干扰比如持续的工频噪声、高频振荡或电极导线颤振。这类通道的方差可能正常但频谱分布与周围通道截然不同。一个简单有效的方法是计算每个通道60Hz附近的功率占比美国数据用60Hz中国和欧洲数据用50Hz。设置带通滤波器截取出55-65Hz信号计算其能量占整个0.5-60Hz总能量的比例如果比例超过假设阈值比如20%就标为疑似坏道。另外计算通道间相关系数矩阵。正常状态下相邻通道之间存在一定相关性而坏道往往与所有其他通道的相关性都异常低。如果某个通道与所有其他通道平均相关系数低于0.1甚至为负那大概率是坏道。这里有个常见的坑参考电极通道和心电通道天然与脑电通道相关性低所以不能只看相关性。CHB-MIT有少数通道名称是“ECG”或“V”之类它们不是脑电不应参与坏道判断。所以在做自动检测前先用通道名把非脑电通道排除掉。4.3 坏道的处理策略插值还是直接剔除检测到坏道后有的处理方式是用周围通道权重插值MNE里可以调用raw.interpolate_bads()。但CHB-MIT的双极导联设置比较特殊相邻通道不一定在空间上相邻插值效果需要谨慎验证。我自己的经验是如果坏道数少比如一两条直接删除该通道并记录删除索引在建模时通过掩码处理或者对特征矩阵做通道剔除。如果坏道数多超过三条插值时可能会引入虚假的空间相关性还不如保留原始通道并在模型输入时告知该通道无效。计算机视觉领域常把坏道视为数据缺失在输入张量里加一个mask通道也是可行思路。实际做CHB-MIT的发作检测时多数深度学习模型对单通道磨损并不敏感直接把这一个通道的信号置零并在损失函数里不加权重训练后效果也比插值更稳。4.4 坏道检测的完整流程示例下面是我最常用的一段自动化坏道检测伪代码结合了方差、频谱相关性以及手动标注结果def detect_bad_channels(raw, var_z_thresh5.0): data raw.get_data() n_ch data.shape[0] # 1. 方差异常 var np.var(data, axis1) log_var np.log1p(var) med np.median(log_var) mad median_abs_deviation(log_var) bad_var np.abs(log_var - med) var_z_thresh * 1.4826 * mad # 2. 高频功率占比异常 from scipy.signal import welch freqs, psd welch(data, fsraw.info[sfreq], npersegfs*2) high_band (freqs 50) (freqs60) if not high_band.any(): high_band (freqs 55) (freqs65) ratio psd[:, high_band].mean(axis1) / psd.mean(axis1) bad_ratio ratio 0.3 # 3. 相关系数异常 corr np.corrcoef(data) avg_corr (corr.sum(axis1) - 1) / (n_ch - 1) bad_corr avg_corr 0.1 bad_flags bad_var | bad_ratio | bad_corr return bad_flags这个脚本并不完美但足够把明显的坏道找出来。找出来后我会把坏道列表存成JSON并画出一张所有通道的时序缩略图快速确认自动标记是否合理。整个流程跑完之后再统一决定该患者哪些通道要置零、剔除或插值。5. 发作事件标注读取与时间窗口切分准备CHB-MIT最核心的价值就是那条经过专家确认的发作标注。如果你的目标只是做“是否发作”二分类那么标注就是你的金标准。这一节重点讲如何把标注转成深度学习友好的标签并设计出不泄漏的窗口划分方案。5.1 从summary文件到统一的事件表我把所有summary解析结果汇总成一个事件表每行包含以下字段患者ID、EDF文件名、通道数、采样率、信号时长、发作开始时间秒、发作结束时间秒。对于那些没有发作的记录发作开始和结束时间填写NaN。这个事件表是后续所有实验的数据字典。需要考虑的情况是CHB-MIT有些发作记录紧邻另一段发作中间可能只有几秒钟的间隔。如果采用固定窗口切分比如2秒一个窗口那么有些窗口可能同时包含发作结束和下一次发作开始。这种边界窗口的标签归属需要提前定义。我的做法是只要窗口的中心点落在某个发作时间段内就标记为发作否则标记为非发作。这个规则简单且在不同实验间保持一致减少了歧义。5.2 窗口切分的边界条件窗口长度选择直接影响模型输入尺寸。有的人喜欢选1秒窗口因为可以避开“发作窗口太短导致标签不平衡”的问题有的人喜欢选5秒甚至10秒窗口因为特征估计更稳定。我在CHB-MIT上常用的基线是2秒窗口重叠50%这样既保留了时间连续性又产生了足够多的样本。窗口切分时要注意三个边界条件第一包含发作边界的窗口标签按照中心点归属于发作或非发作避免模糊。第二如果窗口跨越记录文件末尾要直接丢弃。有些EDF文件的总时长不是窗口长度的整数倍最后一个窗口很容易越界。第三如果一段非发作数据离发作开始时间非常近比如小于1秒这段数据通常被认为处于发作前状态在二分类任务里应该剔除否则模型会学到一些“临近变化”的提示导致测试时误报率高。5.3 按患者划分训练集和测试集做癫痫检测最忌讳的测试集泄漏就是同一个患者的数据同时出现在训练集和测试集。人的脑电模式个体差异非常大如果模型在训练阶段见过某个患者的部分发作那么它很可能在测试时通过记忆来分类而不是真正学习到泛化的发作模式。所以几乎统一的原则是按患者独立划分数据集。CHB-MIT通常把前20个患者作为训练集后几个患者作为测试集但这样划分会导致测试集患者数量过少方差大。另一种常见做法是Leave-One-Subject-Out交叉验证每个患者作为测试集时其余患者作为训练集。这种方式更严格但训练成本高。对于第一版基线我建议至少保证训练集和测试集患者数量比例不低于4比1并且报告每个患者单独的平均召回率、误报率而不只是汇总的准确率。5.4 建立数据集类在实际编码中我会把事件表和预处理好的npy信号封装成一个简单的Dataset类供PyTorch或TensorFlow使用。这个类通常需要返回两个信息窗口信号张量和标签。如果做了事件表窗口索引可以直接由起始样本点计算得出不需要额外存储整个窗口矩阵。下面是PyTorch Dataset的核心逻辑class ChbMitDataset(Dataset): def __init__(self, events, signals_folder): self.events events self.signals_folder signals_folder self.windows [] self.labels [] self.window_len 512 # 2秒 256Hz self.stride 256 # 50% overlap def __len__(self): return len(self.windows) def __getitem__(self, idx): win_start, win_end, label, signal_path self.windows[idx] signal np.load(signal_path) return signal[:, win_start:win_end], label真实项目里windows列表会在init时一次性计算好并保存为pkl文件这样每次训练不用重新扫一遍事件表。6. 运动伪迹和高密度运动EEG的注意事项搜索热词里出现了“高密度运动eeg”这个词本身不是标准术语我理解是指运动状态下采集的脑电比如跑步、骑行时记录EEG。这类数据在运动监护和脑机接口研究中越来越受关注但和CHB-MIT这种静卧监测场景差别很大。CHB-MIT的儿童患者虽然也会有身体活动但整体运动伪迹远低于运动场景。即便如此CHB-MIT里依然存在幅度较大的运动伪迹尤其是儿童患者配合度不高电极在头部晃动信号会出现明显的突发放电样伪迹从波形看像癫痫发作其实是运动导致的。如果不对这类伪迹进行处理模型很容易把“系统性伪迹”错当成“发作模式”产生大量假阳性。处理运动伪迹的常见思路包括高通滤波把0.5Hz以下的漂移去掉使用ICA或SSP找独立分量识别出眨眼和肌电的固定模式并剔除。但ICA在发作检测任务中要慎用因为某些发作节律成分在独立分量里可能和伪迹分量高度混合粗暴剔除ICA分量可能把发作信号一并丢掉。我的做法是第一只对非发作训练段做ICA去伪迹第二在保存特征之前使用相对稳健的带通滤波和不重叠的短窗口把明显属于大异常幅值的样本剔除第三在评估阶段允许误报但重点关注误报与伪迹的相关性如果某个通道的伪迹被系统性触发再回头调整该通道的权重或滤波参数。7. 踩坑记录和给初学者的实践建议这一部分分享我实际跑CHB-MIT时遇到过的几个典型坑希望能让你少走弯路。7.1 别被“儿科”标签误导发作模式差异很大CHB-MIT里的患者年龄跨度大从几岁到十几岁都有发作类型并不统一。有的患者是局灶性发作放电集中在颞叶或额叶有的患者是全面性发作全脑同步放电。直接用同一个模型去拟合所有患者往往平均指标看起来还不错但个别患者的召回率极低。我第一次实验时在chb14上只拿到不到40%的召回率后来才发现该患者的发作多为低幅高频起始段跟训练集里的典型棘慢波模式差异太大。建议在报告结果时按患者拆分混淆矩阵单独列出低召回率的患者。如果最终目标是临床应用应该针对低召回率患者做模型微调或者数据增强而不是对所有患者一视同仁。7.2 EDF文件里的数值范围被压缩了CHB-MIT的EDF文件在存储时对数字进行了缩放有些文件的信号值不是物理单位微伏而是经过ADC量化后的整数值。MNE读出后的数据单位是Volt但底层原始值可能经过了校准系数。读取后最好乘以一个校准因子否则信号幅值会偏差很大。MNE在read_raw_edf时会自动应用了EDF头部里的Calibration系数所以使用MNE读出来的数据本身没问题。但如果你绕过MNE自己去解析EDF一定要手动处理calibration字段这是我见过初学者踩坑最多的细节之一。7.3 别用全局标准化覆盖所有通道脑电信号的幅值在头皮不同区域有明显差异额区表情肌伪迹大枕区alpha节律强。如果你对整个数据集做全局均值方差标准化模型可能过度关注幅值大的通道弱化其他通道的信息。更好的做法是按通道单独标准化或者在提取特征后做通道级归一化。我建议无论是原始信号还是频谱特征都在每个通道内部计算均值方差然后保存归一化参数。测试阶段用训练集的归一化参数而不是在测试集上重新计算这一点很重要否则会引入数据泄漏。7.4 数据增强不要破坏时间连续性常见的数据增强方式包括时间偏移、通道交换、加高斯噪声等。但脑电信号具有极强的自相关结构随机打乱通道顺序或随机大幅偏移时间轴可能破坏发作节律的空间一致性。对于CHB-MIT我更推荐在做频谱图输入时使用时间掩码和频率掩码或者在同一患者不同发作段之间做混合增强而不要简单地把整个信号矩阵的通道换掉。当然具体效果需要实验验证。7.5 评价指标不能只看准确率发作检测是个严重类别不平衡问题。非发作样本通常占绝对多数就算你全部预测为“无发作”准确率也能达到95%以上。这时候准确率毫无意义。建议重点关注灵敏度也就是真实发作样本中被正确识别的比例以及每小时的假阳性次数。在CHB-MIT基准中很多方法能达到90%以上灵敏度但每小时的误报次数差别很大。临床上宁可灵敏度略低也希望误报次数控制在一个较低水平否则会大量干扰医护人员。8. 后续系列内容预告从预处理走向发作检测模型作为系列的第一篇我主要把数据获取、读取、预处理、坏道检测、标注对齐和窗口切分讲透了。这些步骤枯燥但至关重要。下一篇文章我会重点讲如何在CHB-MIT上做基础特征工程包括频带能量、小波变换、非线性特征等并给出一个基于随机森林的基线模型。再到后面我们再逐步过渡到时序卷积网络和Transformer结构。这里留一个关键问题供大家思考按照窗口切出来的样本训练集和测试集按患者划分后训练集中存在同一患者多条连续记录这些记录之间时间间隔较短是否会出现相似样本跨记录泄漏这种现象我们在实验里确实遇到过比如chb01的连续几小时记录中发作模式非常相似如果粗暴地全部放进训练集测试时万一该患者又被独立留出实际评估结果会偏乐观。更严谨的做法是在记录级别或时间段级别做分组划分而不是数据点级别随机打散。这个话题在下一篇做实验设计时会展开。最后分享一个我个人的小技巧每次处理一个新的CHB-MIT患者文件时我先画出该患者一条包含发作的记录的完整持续时间压缩波形图让发作段在图上直接可见。这样能快速判断该患者的发作形态、幅值特点以及是否存在明显的周期性噪声。这个过程只需要三十秒但对后续分析方向的影响非常大强烈建议一试。整个CHB-MIT处理流程跑通之后你会发现它最大的价值不是数据本身而是给了你一套可复现的脑电数据处理流程。换到其他数据集比如TUH或高密度运动场景的EEG核心逻辑依然成立只是文件解析和坏道阈值需要重新适配。第一篇就到这里有问题欢迎随时交流下一篇我们继续从特征工程开始。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价