據(jù)導(dǎo)入實(shí)戰(zhàn)指南:從文件格式到電極定位一條龍)
剛接觸EEGLAB的時(shí)候我繞了不少?gòu)澴印9俜轿臋n和視頻教程看起來(lái)都挺規(guī)矩但真到自己上手第一步“往EEGLAB導(dǎo)入數(shù)據(jù)”就能勸退一撥人。下載完軟件、把MATLAB路徑設(shè)置好雙擊打開(kāi)EEGLAB界面上那十幾個(gè)菜單項(xiàng)到底該點(diǎn)哪個(gè)、數(shù)據(jù)用哪種格式喂進(jìn)去很多新手是懵的。這篇就把EEGLAB導(dǎo)入數(shù)據(jù)這件事嚼碎了講清楚從文件格式、菜單選擇、參數(shù)設(shè)置到電極定位、事件信息檢查一條龍走完保證你看完能直接操作。EEGLAB是個(gè)跑在MATLAB下的開(kāi)源工具箱處理腦電/ERP數(shù)據(jù)用得非常多。它能做的東西很多但所有分析都始于數(shù)據(jù)導(dǎo)入數(shù)據(jù)進(jìn)不來(lái)或者進(jìn)錯(cuò)了后面濾波、偽跡去除、ICA、時(shí)頻分析全都白搭。這篇文章適合剛裝好EEGLAB、準(zhǔn)備認(rèn)真搞腦電數(shù)據(jù)分析的朋友也適合那些已經(jīng)被“ERROR: cannot find file or directory”之類(lèi)報(bào)錯(cuò)勸退的人。我會(huì)把常見(jiàn)的導(dǎo)入方式、彈窗里每個(gè)選項(xiàng)的實(shí)際含義、導(dǎo)入后第一步該檢查什么以及我踩過(guò)的坑一并交代清楚。1. 導(dǎo)入前的準(zhǔn)備工作1.1 確認(rèn)EEGLAB版本與MATLAB環(huán)境在碰任何數(shù)據(jù)之前先把軟件環(huán)境捋順。EEGLAB目前有兩個(gè)主要分支一個(gè)是延續(xù)多年、穩(wěn)定性極好的經(jīng)典版另一個(gè)是加入了新界面和部分新功能的版本。兩者在核心分析邏輯上差別不大但導(dǎo)入面板的布局有一些差異。我建議新手直接用穩(wěn)定版社區(qū)教程多遇到問(wèn)題搜到的解決方案基本都對(duì)得上。MATLAB版本同樣關(guān)鍵。EEGLAB官方要求R2018b以上但并不是說(shuō)裝得越新就越好。有些用戶(hù)用R2022a甚至R2023b跑舊版EEGLAB插件時(shí)反而會(huì)碰到兼容性警告。一個(gè)相對(duì)穩(wěn)妥的組合是MATLAB R2020b到R2022a之間的版本搭配EEGLAB stable版。注意EEGLAB本身不需要安裝解壓后是一個(gè)文件夾。關(guān)鍵是要在MATLAB的“設(shè)置路徑”中將EEGLAB的根目錄及其子文件夾全部添加進(jìn)去最好用“Save”而不是“Default”。如果路徑?jīng)]保存重啟MATLAB后還得重新添加這對(duì)經(jīng)常換電腦做分析的人來(lái)說(shuō)非常煩躁。1.2 搞清你手里的數(shù)據(jù)格式導(dǎo)入前必須先弄清楚一個(gè)核心問(wèn)題你手上的腦電數(shù)據(jù)是哪一種格式。EEGLAB本身不產(chǎn)生數(shù)據(jù)它只是把各種采集設(shè)備輸出的原始文件讀進(jìn)MATLAB環(huán)境。常見(jiàn)的有這么幾類(lèi)EEGLAB原生格式.set .fdt這是EEGLAB自己保存的數(shù)據(jù)格式導(dǎo)入和導(dǎo)出都是它最省心。Neuroscan格式.cnt, .eeg, .dat老牌腦電設(shè)備廠商N(yùn)euroscan現(xiàn)在叫Compumedics Neuroscan的輸出格式。其中CNT是連續(xù)數(shù)據(jù)EEG是分段數(shù)據(jù)DAT則是事件文件。Biosemi格式.bdfBiosemi設(shè)備采集的高密度腦電格式文本頭文件加二進(jìn)制數(shù)據(jù)文件的組合。歐洲數(shù)據(jù)格式.edf, .edf一種跨平臺(tái)通用格式很多醫(yī)院和科研機(jī)構(gòu)會(huì)把腦電數(shù)據(jù)轉(zhuǎn)成EDF保存兼容性好。文本/表格格式.txt, .csv, .xlsx有些舊設(shè)備或自己搭的采集系統(tǒng)會(huì)把數(shù)據(jù)直接存成文本每一行是一個(gè)時(shí)間點(diǎn)每一列是一個(gè)導(dǎo)聯(lián)。其他商業(yè)格式.vhdr/.eeg/.vmrk 的BrainVision格式、.mff的EGI格式等這些通常需要EEGLAB擴(kuò)展插件支持。我的建議是采集完數(shù)據(jù)后第一時(shí)間查設(shè)備手冊(cè)確認(rèn)導(dǎo)出格式最好先導(dǎo)出一個(gè)5分鐘的小文件做測(cè)試不要直接拿整晚的睡眠數(shù)據(jù)第一次就往EEGLAB里灌。1.3 文件路徑與命名規(guī)范這一步看著像廢話但真的是我見(jiàn)過(guò)最多人栽跟頭的地方。EEGLAB和MATLAB對(duì)中文路徑、空格、特殊符號(hào)的支持不太穩(wěn)定。雖然現(xiàn)在的新版本兼容性有所改善但如果你把數(shù)據(jù)放在“D:\腦電數(shù)據(jù)\實(shí)驗(yàn)1\1號(hào)被試 第一次采集.cnt”這樣的路徑下極有可能在導(dǎo)入時(shí)報(bào)路徑錯(cuò)誤或者在保存.set文件時(shí)出現(xiàn)莫名其妙的失敗。建議所有數(shù)據(jù)路徑統(tǒng)一為英文、無(wú)空格、無(wú)括號(hào)文件命名也盡量使用“sub01_rest.cnt”“sub02_task1.bdf”這種風(fēng)格。經(jīng)驗(yàn)之談我自己會(huì)為每個(gè)項(xiàng)目建立一個(gè)固定目錄結(jié)構(gòu)比如D:\EEG_Project\Data\Raw存放原始采集文件D:\EEG_Project\Data\Preprocessed存放處理后的.set文件。這樣不僅導(dǎo)入方便后期追溯數(shù)據(jù)時(shí)也清晰。2. 核心導(dǎo)入方式全拆解2.1 圖形界面導(dǎo)入File → Import data打開(kāi)EEGLAB主界面在MATLAB命令行輸入eeglab回車(chē)點(diǎn)擊菜單欄的File然后再點(diǎn)Import data會(huì)彈出幾個(gè)子選項(xiàng)。這是最常用的入口也是官方默認(rèn)推薦的方式。這里需要注意的是EEGLAB根據(jù)文件格式把導(dǎo)入入口拆成了好幾個(gè)。如果是Neuroscan的CNT文件需要選From Neuroscan .CNT file如果是BDF選From Biosemi .BDF fileEDF則選From EDF/EDF/GDF files。很多新手不看格式隨手點(diǎn)第一個(gè)From data file using EEGLAB functions and plugins結(jié)果發(fā)現(xiàn)彈出來(lái)的通用導(dǎo)入界面里根本沒(méi)有適配自己設(shè)備格式的參數(shù)弄半天導(dǎo)不進(jìn)去。所以正確流程是先了解自己文件的采集軟件格式再去菜單里找到對(duì)應(yīng)的導(dǎo)入入口。EEGLAB主菜單里的導(dǎo)入選項(xiàng)雖然多但每一項(xiàng)其實(shí)都對(duì)應(yīng)一類(lèi)常見(jiàn)設(shè)備或格式找對(duì)了入口后面就順了。2.2 通過(guò)MATLAB命令行導(dǎo)入如果你是那種喜歡用腳本批量處理的人或者需要處理大量被試數(shù)據(jù)GUI點(diǎn)來(lái)點(diǎn)去效率太低。這時(shí)候推薦使用命令行的方式。對(duì)于CNT文件EEG pop_loadcnt(D:\EEG_Project\Data\Raw\sub01_rest.cnt, dataformat, int16); [ALLEEG EEG CURRENTSET] pop_newset(ALLEEG, 0, setname, sub01_rest_raw); eeglab redraw;pop_loadcnt會(huì)讀取CNT文件并返回一個(gè)EEG結(jié)構(gòu)體pop_newset則把這個(gè)結(jié)構(gòu)體作為一個(gè)數(shù)據(jù)集放入EEGLAB的工作區(qū)。對(duì)于EDF文件EEG pop_biosig(D:\EEG_Project\Data\Raw\sub01_task.edf); [ALLEEG EEG CURRENTSET] pop_newset(ALLEEG, 0, setname, sub01_task); eeglab redraw;pop_biosig是EEGLAB里一個(gè)比較通用的讀取函數(shù)能處理EDF、BDF、GDF等多種格式前提是安裝了對(duì)應(yīng)的插件后面我會(huì)講插件安裝。這種方式的一個(gè)好處是當(dāng)你需要批量處理20個(gè)被試時(shí)可以寫(xiě)個(gè)循環(huán)把路徑放在一個(gè)元胞數(shù)組里自動(dòng)全部導(dǎo)入。2.3 常見(jiàn)格式的詳細(xì)參數(shù)選擇Neuroscan .cnt文件導(dǎo)入CNT文件時(shí)EEGLAB會(huì)彈出一個(gè)窗口讓你選擇數(shù)據(jù)范圍。默認(rèn)情況是導(dǎo)入整個(gè)文件但如果你的文件太大比如數(shù)小時(shí)的長(zhǎng)程記錄導(dǎo)入時(shí)會(huì)非??D甚至內(nèi)存溢出。此時(shí)可以在Data range里設(shè)置范圍比如[1 60000]只導(dǎo)入前60000個(gè)采樣點(diǎn)。另一個(gè)需要注意的字段是Sampling interval如果采集軟件里設(shè)置的采樣率與文件頭記錄不一致可以在這里手動(dòng)校正但一般情況下建議保持默認(rèn)不要亂改。Biosemi .bdf文件BDF文件導(dǎo)入相對(duì)簡(jiǎn)單。Biosemi設(shè)備通常用ActiveTwo系統(tǒng)導(dǎo)出的是24位數(shù)據(jù)。BDF有頭文件和事件碼記錄EEGLAB讀取時(shí)會(huì)自動(dòng)識(shí)別導(dǎo)聯(lián)數(shù)和事件標(biāo)記。唯一要注意的是BDF文件較大導(dǎo)入時(shí)若提示內(nèi)存不足可以考慮用pop_biosig的importevent和importannot選項(xiàng)將事件與注釋分開(kāi)導(dǎo)入減少一次加載的數(shù)據(jù)量。EDF/EDF文件EDF格式有兩種普通EDF只能存儲(chǔ)一個(gè)采樣率的連續(xù)數(shù)據(jù)EDF則支持不同導(dǎo)聯(lián)不同采樣率以及注釋軌跡。EEGLAB里的pop_biosig對(duì)EDF支持較好但注意導(dǎo)入時(shí)有個(gè)選項(xiàng)叫Import annotation建議勾上因?yàn)镋DF格式的刺激標(biāo)記通常存在annotation通道里不勾選的話會(huì)導(dǎo)致后續(xù)分析時(shí)找不到事件。文本/Excel格式如果你的數(shù)據(jù)是CSV或TXT每一行是一個(gè)采樣點(diǎn)、每一列是一個(gè)導(dǎo)聯(lián)那么用File → Import data → From ASCII file。這里有個(gè)關(guān)鍵參數(shù)Data begins at和Header lines。如果文件里有幾行文字說(shuō)明則Header lines要填寫(xiě)正確否則會(huì)把文字也當(dāng)作數(shù)據(jù)讀入導(dǎo)致報(bào)錯(cuò)或數(shù)值錯(cuò)亂。Excel文件.xlsx需要先通過(guò)MATLAB的readtable函數(shù)讀進(jìn)來(lái)再用EEG pop_importdata(dataformat,array,nbchan,64,data,data,srate,1000)這種方式導(dǎo)入而不是直接從EEGLAB菜單里選Excel文件。2.4 插件安裝與數(shù)據(jù)格式擴(kuò)展EEGLAB真正強(qiáng)大之處在于它的插件生態(tài)。當(dāng)你遇到某一種廠家格式不支持時(shí)第一反應(yīng)不是自己寫(xiě)腳本而是去EEGLAB官網(wǎng)的插件列表里找對(duì)應(yīng)的擴(kuò)展包。安裝方式很簡(jiǎn)單File → Manage EEGLAB extensions在彈出的窗口中輸入插件名點(diǎn)擊安裝即可。常見(jiàn)的幾個(gè)導(dǎo)入相關(guān)插件Biosig支持EDF、BDF、GDF等多種格式的核心插件強(qiáng)烈建議裝上。Fileio支持讀取很多舊式設(shè)備格式如ANT、Braintronics、Electrical Geodesics等。MFFMatlabIO專(zhuān)門(mén)用于讀取EGI .mff格式。eeglab2fieldtrip雖然它主要用于格式轉(zhuǎn)換但在某些數(shù)據(jù)格式異常時(shí)也可以作為備選讀取路徑。有一次我處理一個(gè)老版本的EGI數(shù)據(jù)標(biāo)準(zhǔn)導(dǎo)入方式一直報(bào)錯(cuò)后來(lái)裝了MFFMatlabIO問(wèn)題立刻解決。這個(gè)插件給我印象很深后來(lái)但凡遇到奇怪格式我的第一反應(yīng)就是先翻插件列表。3. 數(shù)據(jù)導(dǎo)入后的關(guān)鍵檢查與預(yù)處理第一步3.1 檢查采樣率、導(dǎo)聯(lián)數(shù)和數(shù)據(jù)時(shí)長(zhǎng)導(dǎo)入完成后EEGLAB主界面上會(huì)顯示當(dāng)前數(shù)據(jù)集的基本信息數(shù)據(jù)集名稱(chēng)、通道數(shù)、采樣率、數(shù)據(jù)點(diǎn)數(shù)、時(shí)間段等。不要急著進(jìn)入下一步濾波或分段先花30秒核對(duì)這幾個(gè)數(shù)值。采樣率常見(jiàn)的是250Hz、500Hz、1000Hz。如果顯示異常比如250Hz的設(shè)備顯示成了250000那多半是文件頭解析出錯(cuò)需要重新導(dǎo)入或手動(dòng)指定采樣間隔。導(dǎo)聯(lián)數(shù)你記錄的應(yīng)該是64導(dǎo)結(jié)果顯示32導(dǎo)那可能導(dǎo)入時(shí)選錯(cuò)了數(shù)據(jù)范圍或者設(shè)備本身只記錄了部分導(dǎo)聯(lián)。數(shù)據(jù)時(shí)長(zhǎng)數(shù)據(jù)點(diǎn)數(shù)除以采樣率應(yīng)該等于記錄的秒數(shù)。比如1000Hz下記錄5分鐘數(shù)據(jù)點(diǎn)數(shù)應(yīng)為300000。如果偏差很大極有可能是文件讀取時(shí)數(shù)據(jù)格式設(shè)置錯(cuò)誤。3.2 查看電極位置與通道名稱(chēng)EEGLAB中導(dǎo)入的原始數(shù)據(jù)通常不包含完整的電極位置信息界面右側(cè)的通道名稱(chēng)可能是E1、E2或者1、2之類(lèi)的編號(hào)。如果需要后續(xù)做地形圖、源定位或topography可視化就必須給每個(gè)通道指定正確的電極位置。操作路徑是Edit → Channel locations。在彈出的窗口中你需要選擇一種標(biāo)準(zhǔn)電極坐標(biāo)文件。EEGLAB自帶了很多常見(jiàn)坐標(biāo)系統(tǒng)比如10-20系統(tǒng)的10-20.yaml、Biosemi 64導(dǎo)的Biosemi64.sph、EGI 128導(dǎo)的GSN-HydroCel-128.sfp等。選擇后點(diǎn)擊OKEEGLAB會(huì)嘗試根據(jù)通道名稱(chēng)匹配坐標(biāo)。如果通道名稱(chēng)是Fz、Cz、Pz這類(lèi)標(biāo)準(zhǔn)命名匹配會(huì)非??烊绻?、2這種純數(shù)字而且沒(méi)有對(duì)應(yīng)關(guān)系文件就需要手動(dòng)指定或借助插件。實(shí)操提醒這一步很多人會(huì)跳過(guò)。如果你只做頻譜分析和ERP波形分析不涉及頭皮分布圖確實(shí)可以略過(guò)。但如果你后面要做ICA去偽跡通道位置信息強(qiáng)烈建議補(bǔ)上。ICA的成分頭皮圖非常有助于識(shí)別眨眼和肌電成分沒(méi)有電極位置信息這步很難做。3.3 事件信息檢查與修正事件Event是腦電分析中最核心的信息之一。刺激出現(xiàn)的時(shí)間點(diǎn)、按鍵反應(yīng)的時(shí)間、實(shí)驗(yàn)條件等都以事件標(biāo)記的形式保存在數(shù)據(jù)中。導(dǎo)入后打開(kāi)Edit → Event values可以看到當(dāng)前數(shù)據(jù)集的所有事件列表包括延遲時(shí)間點(diǎn)latency和事件類(lèi)型type。這里必須確認(rèn)兩件事一是事件類(lèi)型是否符合實(shí)驗(yàn)設(shè)計(jì)比如應(yīng)該有S1、S2兩種刺激類(lèi)型如果只出現(xiàn)了一種說(shuō)明事件標(biāo)記沒(méi)有全部導(dǎo)入二是事件的時(shí)間點(diǎn)是否與刺激實(shí)際出現(xiàn)時(shí)間吻合可以通過(guò)畫(huà)ERPLAB或EEGLAB的event-related potential波形來(lái)間接驗(yàn)證。有些數(shù)據(jù)格式的事件信息沒(méi)有自動(dòng)加載需要在導(dǎo)入時(shí)勾選Import event或read event選項(xiàng)。比如EDF的annotation事件就必須在導(dǎo)入時(shí)勾選對(duì)應(yīng)選項(xiàng)。若導(dǎo)入后事件列表是空的可以先嘗試重新導(dǎo)入并勾選事件選項(xiàng)若仍然沒(méi)有可考慮用pop_importevent來(lái)手動(dòng)從文本文件導(dǎo)入事件標(biāo)記。3.4 重參考問(wèn)題腦電分析中的參考電極選擇直接影響后續(xù)所有結(jié)果。EEGLAB導(dǎo)入的數(shù)據(jù)如果是原始記錄通常是以采集設(shè)備默認(rèn)的參考比如頭頂?shù)腃z或者乳突參考為參考。這種參考不一定適合后續(xù)分析。EEGLAB提供了重參考功能Tools → Re-reference。常見(jiàn)做法有兩種平均參考將所有導(dǎo)聯(lián)的電壓取平均后作為新的參考Edit → Select data里選擇所有通道然后執(zhí)行Tools → Re-reference并勾選Compute average reference。這種方式在很多ERP研究中很常用。雙側(cè)乳突參考將TP9和TP10兩個(gè)導(dǎo)聯(lián)作為參考執(zhí)行重參考時(shí)在通道列表中選擇這兩個(gè)導(dǎo)聯(lián)即可。重參考是一個(gè)不可逆操作執(zhí)行前最好保存一個(gè)原始數(shù)據(jù)副本。我個(gè)人的習(xí)慣是無(wú)論后續(xù)用什么參考方式導(dǎo)入后第一時(shí)間先保存一份未經(jīng)任何處理的原始.set文件再做重參考和其他預(yù)處理。這樣即使后期參考方案需要調(diào)整也不用從頭導(dǎo)入原始文件。提示重參考并不是每次都必須做。如果實(shí)驗(yàn)本身就采用某個(gè)固定參考并且全流程一致也可以不額外處理。但如果你要發(fā)表論文需要明確說(shuō)明數(shù)據(jù)是以什么方式參考的這一點(diǎn)審稿人很在意。4. 實(shí)操過(guò)程從CNT文件到EEGLAB數(shù)據(jù)集4.1 完整流程演練為了更直觀地說(shuō)明我用一個(gè)實(shí)際案例完整走一遍。假設(shè)我用Neuroscan設(shè)備采集了一名被試的靜息態(tài)數(shù)據(jù)文件名為sub01_rest.cnt采樣率1000Hz記錄64導(dǎo)。第一步啟動(dòng)MATLAB在命令行輸入eeglab彈出EEGLAB主界面。如果EEGLAB還沒(méi)有添加路徑先在Home → Set Path里添加。第二步點(diǎn)擊File → Import data → From Neuroscan .CNT file。彈出窗口中Data range留空表示導(dǎo)入全部數(shù)據(jù)Sampling interval保持默認(rèn)Data format選int16Neuroscan常見(jiàn)默認(rèn)格式點(diǎn)擊OK。第三步等待導(dǎo)入完成。CNT文件較大時(shí)這一步可能需要十幾秒到幾分鐘。導(dǎo)入完成后MATLAB命令行會(huì)輸出類(lèi)似Reading file sub01_rest.cnt ...的信息EEGLAB主界面上方會(huì)顯示數(shù)據(jù)集基本信息。第四步給數(shù)據(jù)補(bǔ)充電極位置。點(diǎn)擊Edit → Channel locations在彈出的窗口中選擇Biosemi64.sph如果CNT文件里的通道名恰好和這個(gè)匹配或者10-20.yaml如果記錄的是標(biāo)準(zhǔn)10-20系統(tǒng)。點(diǎn)擊OK后左側(cè)通道列表中每個(gè)通道名后面會(huì)出現(xiàn)對(duì)應(yīng)的坐標(biāo)信息。第五步檢查事件。原始CNT文件通常自帶事件信息但為了保險(xiǎn)起見(jiàn)先點(diǎn)Edit → Event values查看。如果事件存在且類(lèi)型符合實(shí)驗(yàn)設(shè)計(jì)就可以進(jìn)入下一步處理。第六步保存為.set文件。點(diǎn)擊File → Save current dataset選擇一個(gè)英文路徑命名為sub01_rest_raw.set。EEGLAB保存時(shí)會(huì)同時(shí)生成一個(gè).fdt文件數(shù)據(jù)量較大時(shí)會(huì)自動(dòng)生成兩者需要放在同一目錄下。4.2 批量導(dǎo)入的處理思路當(dāng)你的項(xiàng)目有幾十個(gè)被試時(shí)GUI點(diǎn)擊效率太低。這時(shí)候可以用腳本批量處理。下面是一個(gè)簡(jiǎn)化的批量導(dǎo)入腳本框架適合處理Neuroscan CNT文件clear all; close all; clc; % 設(shè)置EEGLAB路徑并啟動(dòng) addpath(D:\EEGLAB\eeglab2022.0); eeglab nogui; % 原始文件所在路徑 root_dir D:\EEG_Project\Data\Raw; file_list dir(fullfile(root_dir, *.cnt)); for i 1:length(file_list) filename fullfile(root_dir, file_list(i).name); [~, basename, ~] fileparts(filename); % 導(dǎo)入CNT文件 EEG pop_loadcnt(filename, dataformat, int16); % 重命名當(dāng)前數(shù)據(jù)集 EEG.setname basename; % 保存為.set文件 out_path fullfile(D:\EEG_Project\Data\Preprocessed, [basename, .set]); pop_saveset(EEG, filename, out_path); end這段腳本會(huì)遍歷原始文件目錄中的所有CNT文件依次導(dǎo)入并保存為.set格式。實(shí)際使用中你會(huì)發(fā)現(xiàn)dir函數(shù)可以根據(jù)文件擴(kuò)展名非常方便地批量獲取文件列表后面再用pop_loadcnt循環(huán)處理就行。我的批處理經(jīng)驗(yàn)不要一次性處理所有文件先處理1個(gè)文件確認(rèn)流程無(wú)誤再整批跑。我試過(guò)一次性處理30個(gè)文件結(jié)果第二個(gè)文件的頭文件格式就和第一個(gè)不一致跑了十幾分鐘發(fā)現(xiàn)全部導(dǎo)錯(cuò)只能回頭一個(gè)個(gè)檢查。建議每批處理前先跑一個(gè)測(cè)試文件確認(rèn)輸出結(jié)果符合預(yù)期后再跑整批。4.3 常見(jiàn)報(bào)錯(cuò)與排查方案“Cannot find file or directory”這個(gè)最常見(jiàn)。原因通常是路徑中含中文或空格或者M(jìn)ATLAB的當(dāng)前工作目錄沒(méi)有包含該文件路徑。解決辦法是把路徑改為純英文并在導(dǎo)入前用MATLAB命令exist(文件路徑, file)確認(rèn)文件存在。“Data range is out of bounds”當(dāng)你在導(dǎo)入窗口里設(shè)置的導(dǎo)入范圍超出了文件實(shí)際數(shù)據(jù)點(diǎn)數(shù)時(shí)會(huì)出現(xiàn)。建議將Data range清空導(dǎo)入全部數(shù)據(jù)再在后續(xù)處理中用pop_select選取需要的時(shí)段。“Number of channels mismatch”導(dǎo)入時(shí)EEGLAB讀到的通道數(shù)與文件頭記錄的通道數(shù)不一致。這通常發(fā)生在文件頭損壞或數(shù)據(jù)讀取格式設(shè)置不正確的場(chǎng)景。可嘗試更換數(shù)據(jù)格式選項(xiàng)比如從int16改為int32再看是否正常。導(dǎo)入后波形是一條直線或全是NaN通常是因?yàn)閿?shù)據(jù)格式選擇錯(cuò)誤或文件本身包含壞段。先在EEGLAB主界面點(diǎn)Plot → Channel data (scroll)檢查各導(dǎo)聯(lián)波形。如果全部為NaN大概率是數(shù)據(jù)讀取時(shí)格式錯(cuò)誤如果只是某幾個(gè)導(dǎo)聯(lián)為直線那可能是采集時(shí)的電極脫落屬于原始數(shù)據(jù)質(zhì)量問(wèn)題需要記錄并考慮后續(xù)插值處理。4.4 導(dǎo)入后的原始數(shù)據(jù)保存策略無(wú)論通過(guò)哪種方式導(dǎo)入導(dǎo)入后的第一件事都建議保存為.set文件。這不僅僅是備份更重要的是EEGLAB處理數(shù)據(jù)時(shí)的很多操作比如濾波、重參考、ICA都對(duì)內(nèi)存要求較高保存文件后可以把原始文件關(guān)掉釋放內(nèi)存。同時(shí)建議在文件名中加入處理階段標(biāo)識(shí)。比如sub01_raw.set原始導(dǎo)入數(shù)據(jù)sub01_filtered.set濾波后sub01_referenced.set重參考后sub01_clean.set去除偽跡后這樣做的好處到后期才會(huì)體現(xiàn)出來(lái)。當(dāng)你處理完20個(gè)被試突然發(fā)現(xiàn)某一步的參數(shù)設(shè)置有問(wèn)題需要進(jìn)行微調(diào)時(shí)有了清晰的文件命名和保存策略就不需要從頭處理每一個(gè)被試只需要從上一個(gè)正確的處理階段重新開(kāi)始即可。5. 常見(jiàn)問(wèn)題與避坑指南5.1 數(shù)據(jù)格式識(shí)別誤區(qū)很多用戶(hù)把“.edf”文件誤以為就是EEGLAB原生格式直接通過(guò)通用導(dǎo)入方式讀入結(jié)果通道名稱(chēng)和事件信息全亂套。其實(shí)EDF文件需要區(qū)分是普通EDF還是EDF兩者在事件信息存儲(chǔ)方式上有很大區(qū)別。建議用文本編輯器打開(kāi)EDF文件頭部查看是否有“EDF”標(biāo)記如果是EDF導(dǎo)入時(shí)務(wù)必勾選annotation選項(xiàng)。5.2 中文路徑與特殊字符再次強(qiáng)調(diào)EEGLAB的底層數(shù)據(jù)讀取函數(shù)尤其是依賴(lài)外部插件的對(duì)中文路徑支持很差。即使有些版本能正常讀取后續(xù)你在另存為時(shí)也可能出現(xiàn)無(wú)法寫(xiě)入的情況。建議所有路徑全部使用英文且不要有空格。5.3 大文件導(dǎo)入卡死高密度腦電128導(dǎo)、256導(dǎo)加上長(zhǎng)時(shí)間記錄原始文件可能有幾個(gè)GB。導(dǎo)入時(shí)內(nèi)存占用非常高稍有不慎就會(huì)卡死或直接OOM。我的經(jīng)驗(yàn)是對(duì)于這種大文件優(yōu)先用命令行方式導(dǎo)入并在導(dǎo)入前通過(guò)memory查看MATLAB可用內(nèi)存同時(shí)可以先用pop_readbdf或pop_biosig的sample range參數(shù)只讀取部分?jǐn)?shù)據(jù)試運(yùn)行確認(rèn)參數(shù)正確后再全量導(dǎo)入。5.4 事件信息缺失的補(bǔ)救如果導(dǎo)入后發(fā)現(xiàn)事件信息完全缺失有幾種補(bǔ)救方案從原始軟件中導(dǎo)出事件文本文件再用File → Import event導(dǎo)入如果數(shù)據(jù)里有模擬通道記錄了刺激觸發(fā)信號(hào)可以通過(guò)閾值檢測(cè)的方法從該通道提取事件時(shí)間點(diǎn)如果ERP實(shí)驗(yàn)設(shè)計(jì)是固定的時(shí)間間隔可以按實(shí)驗(yàn)?zāi)_本中的刺激順序手動(dòng)生成事件標(biāo)記。5.5 電極位置文件的選擇電極位置文件看起來(lái)是個(gè)小問(wèn)題但選錯(cuò)會(huì)很麻煩。不同導(dǎo)聯(lián)系統(tǒng)使用不同的電極命名方式比如BioSemi使用A1、B1這種字母加數(shù)字的組合10-20系統(tǒng)使用Fz、Cz、Pz等命名。選錯(cuò)坐標(biāo)文件后地形圖上電極的位置會(huì)明顯錯(cuò)位。建議在導(dǎo)入前先查看數(shù)據(jù)中的通道名稱(chēng)列表再去選擇匹配的坐標(biāo)文件。5.6 一個(gè)額外提醒保存前清空命令窗口這個(gè)建議看似無(wú)關(guān)緊要但實(shí)際操作中很實(shí)用。在EEGLAB主界面操作時(shí)MATLAB命令行窗口會(huì)保留所有歷史操作記錄。當(dāng)你需要回溯某一步設(shè)置時(shí)這些記錄是非常有用的日志。而如果你導(dǎo)入數(shù)據(jù)后立即開(kāi)始其他無(wú)關(guān)的MATLAB操作混在一起會(huì)讓后續(xù)檢查變得很難受。我的習(xí)慣是導(dǎo)入一個(gè)數(shù)據(jù)文件前在命令行執(zhí)行一次clear all; close all; clc;保證工作區(qū)干凈再開(kāi)始導(dǎo)入和處理。這樣后續(xù)如果出了差錯(cuò)回溯日志時(shí)非常清晰?;氐綄?dǎo)入數(shù)據(jù)這件事本身說(shuō)到底它就是一個(gè)“把文件讀懂、把結(jié)構(gòu)理清、把基礎(chǔ)信息核對(duì)”的過(guò)程。每個(gè)步驟都不難但少做一步后續(xù)都可能出問(wèn)題。從文件格式確認(rèn)到插件安裝從電極位置補(bǔ)充到事件信息核對(duì)每一步其實(shí)都服務(wù)于后面的分析。你在導(dǎo)入階段花20分鐘把數(shù)據(jù)檢查清爽后面做ICA、提取epoch、跑統(tǒng)計(jì)時(shí)就能省下好幾個(gè)小時(shí)。根據(jù)我自己的處理經(jīng)驗(yàn)來(lái)談最值錢(qián)的習(xí)慣就是導(dǎo)入數(shù)據(jù)后別急著碰濾波和去偽跡先老老實(shí)實(shí)把基本信息過(guò)一遍。磨刀不誤砍柴工這個(gè)道理放哪個(gè)數(shù)據(jù)處理流程里都成立。最后再分享一個(gè)小技巧如果你在導(dǎo)入過(guò)程中遇到任何奇怪的報(bào)錯(cuò)先用搜索引擎把報(bào)錯(cuò)原文復(fù)制下來(lái)搜一下。EEGLAB的社區(qū)很活躍我遇到過(guò)的大部分導(dǎo)入問(wèn)題前人早就踩過(guò)坑且有現(xiàn)成的解決方案。實(shí)在搜不到就去EEGLAB的官方郵件列表或GitHub Issues里提問(wèn)把MATLAB版本、EEGLAB版本、文件格式、報(bào)錯(cuò)信息一并貼出來(lái)基本都能得到回應(yīng)。數(shù)據(jù)導(dǎo)入是整個(gè)EEGLAB分析中最基礎(chǔ)也最枯燥的一環(huán)但換個(gè)角度看它也是決定后續(xù)所有結(jié)果是否可靠的第一道關(guān)口。這關(guān)過(guò)去了后面就順了。