[EEG] EEG Preprocessing in EEGLAB
Matlab 기반의 무료 소프트웨어 EEGLAB의 사용법에 대해서 알아보고자 합니다.
Install EEGLAB
기존에는 Python 기반 라이브러리 MNE를 사용하여 EEG data의 전처리 및 분석을 진행하였지만, MNE로 REC 파일(*.REC 또는 *.rec)을 읽는 방법을 찾지 못하여 EEGLAB을 사용하고자 합니다. MNE를 통해 REC 파일 읽는 방법을 아신다면 댓글 또는 이메일 주시면 감사하겠습니다.
- Environment
- Windows 10
Download MATLAB and EEGLAB
EEGLAB은 MATLAB 기반 프로그램이므로 MATLAB을 설치해야 합니다. 대학교 재학 중이거나 회사에서 지원하는 경우 무료로 사용 가능하며, 30일 동안 평가판을 체험할 수 있습니다. MATLAB 설치는 MathWorks에서 진행하면 됩니다.
MATLAB installation page
MATLAB 설치를 완료하였다면 SCCN에서 EEGLAB을 설치하면 됩니다. EEGLAB 프로그램을 다운받기 위해서 성명 및 이메일은 필수로 기입하셔야 하며 연구분야의 경우 기입하지 않아도 괜찮습니다. 마지막으로 이메일로 소식을 받길 희망하는 분은 원하는 체크박스를 누르면 되며, 마지막 체크박스인 “I accept the terms of the BSD license.”를 체크하시며 됩니다.EEGLAB 파일은 이메일로 오는 것이 아니라, 성명과 이메일만 기입하면 자동으로 로컬에 다운로드 됩니다.
EEGLAB installation page
첫 번째 상자인 Click here을 선택하면, 가장 최신 버전의 EEGLAB을 다운받을 수 있습니다. 만약, Matlab 2016a 버전 또는 더 이전 버전을 사용하고 있다면 두 번째 상자인 here에서 EEGLAB v2020.0을 다운받으면 됩니다. 저는 MATLAB R2021b를 사용하고 있어서 Click here에서 가장 최신 버전의 EEGLAB을 다운받았습니다.
Download EEGLAB
다운받은 압축파일을 풀고 평소에 프로그램을 저장하는 디렉토리로 이동시킵니다. 저의 경우 주로 프로그램은 C드라이브 Program Files에 저장하여 이곳으로 옮겼습니다.
Installing EEGLAB
Start MATLAB
Matlab을 실행하고 EEGLAB 프로그램이 있는 경로로 이동하여 선택한 폴더 및 하위폴더를 경로에 추가합니다.
Add the EEGLAB folder to the MATLAB
Start EEGLAB
Matlab 명령 창(command window)에 “eeglab”을 타이핑하면 됩니다.
Type “eeglab” into the MATLAB command window
다음과 같은 화면이 나오면 성공입니다.
Start EEGLAB
Preprocess EEG data
EEGLAB 공식문서에 적혀있는 전처리 파이프라인은 다음과 같습니다.
저는 EEG 데이터를 전처리 할 때 주로 re-referencing, band pass filter, epoching만 하며, 보다 자세한 설명은 공식문서 EEG Preprocessing in EEGLAB을 참고해주실 바랍니다.
EEG Pre-processing pipline(Source: Swartz Center for Computational Neuroscience)
Import data
먼저, EEG data를 불러옵니다. 예제로 연구실에서 측정한 실험 데이터를 사용하겠습니다.
예제 데이터 정보
- 기기: Brain products 사의 actiCHamp
- 채널: 32 채널 (31 EEG + 1 ECG)
- 레퍼런스 채널: FCz
- 시간: 약 3시간 14분
앞선 공식 문서에서는 File - Import data - Using EEGLAB functions and plugins에서 원하는 파일 확장자로 import 하는 방법을 소개하고 있습니다.
데이터를 불러오는 방법 1
그러나, File - Import data - Using the BIOSIG interface로 불러왔을 때 .eeg, .rec 등 확장자의 제약 없이 로드가 가능하였기에 저는 주로 이 방법으로 데이터를 불러옵니다.
데이터를 불러오는 방법 2
실험에서 측정한 EEG 신호 중 첫 번째 연구대상자의 데이터(s01_1.vhdr)를 사용하여 전처리를 해보겠습니다. EEG 기기 actiHamp로 측정한 EEG 신호는 한 번 측정에서 총 3가지의 파일(.eeg, .vhdr, .vmrk)이 나옵니다. EEG 파일 확장자에는 RAW EEG 신호 데이터가 들어있으며, VHDR에는 기본 정보(common infos), 채널 정보(channel infos), amplifier 세팅(e.g., 채널 수, sampling rate) 등, VMRK에는 기본 정보(common infos) 및 트리거(triggers) 정보가 들어있습니다. 트리거는 index와 비슷한 동일한 역할을 하며, 데이터를 자를 때 사용됩니다.
따라서, 분석할 데이터를 선택하면 EEG 데이터가 import되면서 채널 및 시간을 선택할 수 있는 팝업창이 나옵니다.
데이터 선택
채널 및 시간 선택을 위한 팝업창
- Channel list (default all)
- EEG 채널 목록 (빈 칸일 경우 데이터 내의 모든 채널 로드)
- Data range (in seconds) to read
- EEG 시간 범위 (빈 칸일 경우 데이터 내의 모든 시간 로드)
만약, 하나의 채널만 분석하고 싶은 경우에는 Channel list에 해당 채널의 번호를 넣으면 됩니다. 예제에서는 ECG 채널이 32번으로 들어가있어서, ECG 신호만 전체 시간에 대해 분석할 경우 하단과 같이 진행하시면 됩니다.
단일 채널 선택
두 채널을 분석하고 싶은 경우에는 Channel list에 해당 채널의 번호들을 넣으면 됩니다. 예제 데이터에서 F3 및 F4만 분석하고 싶을 경우, F3 및 F4에 해당하는 채널 번호 8, 9번을 Channel list에 넣었습니다.
두 채널 선택
여러 채널을 분석하고 싶은 경우에는 Channel list에 list 형식으로 채널의 번호를 넣으면 됩니다. 단, Matlab은 Python과 달리 0이 아닌 1부터 시작합니다. 예제에서는 ECG 채널이 32번으로 들어가있어서, EEG 신호만 전체 시간에 대해 분석할 경우 하단과 같이 진행하시면 됩니다.
다채널 선택
저는 모든 채널을 사용하며 트리거를 기준으로 데이터를 잘라서 사용하므로, Channel list와 Data range 모두 빈 칸으로 두고 OK를 눌렀습니다.
채널 및 시간 선택을 위한 팝업창
다음으로 데이터셋 이름을 수정하는 팝업창이 나옵니다. EEGLAB은 쉽게 전처리 이전의 데이터로 돌아갈 수 있도록 지원해줍니다. 예제 데이터이므로 데이터셋명을 example로 수정하고 OK를 눌러줍니다. 그럼 최종적으로 import한 EEG 데이터의 정보가 나옵니다.
데이터셋명 수정을 위한 팝업창
데이터셋명 수정
데이터 선택 완료
상단의 결과를 보자면 다음과 같이 해석할 수 있습니다.
- Channels per frame: 채널 개수
- Frames per epochs: time points 개수
- Epochs: epochs 개수
- Events: 트리거 개수
- Sampling rate: 1초당 샘플링 횟수
전처리는 MNE에서 하고 단지 MNE에서 파일을 읽을 수 있도록 파일 확장자만 바꾸고 싶다면 바로 extract 하면 됩니다.
Preprocess data
이제부터 본격적으로 EEG 신호 전처리를 진행하겠습니다.
Re-reference
EEG 신호를 측정하는 동안 online으로 기준 전극을 사용할 수 있지만, 측정 이후 offline으로 기준 전극을 정하거나 새롭게 변경할 수 있습니다. Re-reference는 기준 전극(reference electrode)를 재조정하는 것을 말하며, 모든 채널의 평균을 reference로 사용하거나 기준 전극을 다른 전극으로 변경할 수 있습니다.
Common Average Reference
Common Average Reference(CAR)는 모든 채널의 평균을 reference로 사용하는 방법입니다. 두피 전체에서 기록된 모든 전위의 합이 0 이라고 가정하면, 절대 전압(absolute voltage)를 얻을 수 있다고 가정할 수 있습니다. 그러나 이러한 이상적인 기준을 달성하려면 두피 전체를 균일한게 덮는 수많은 전극이 필요합니다. 따라서 두피 전체의 전위를 평균으로 사용하는 것은 현실적으로 불가능하지만, 그럼에도 흔히 사용됩니다.
먼저, Tools - Re-reference the data를 선택합니다.
re-reference 방법
EEGLAB은 CAR이 기본 설정(default)이므로 자동으로 체크되어 있습니다. 그대로 0k를 눌러서 넘어가줍니다.
common average reference 방법
다음으로 데이터셋 이름 수정 및 저장 여부가 나옵니다. 파일명을 전처리 방법에 맞게 수정하면 이전으로 복구하고 싶을 때 쉽게 돌아갈 수 있습니다. 예제 데이터로 re-referencing을 하였으므로 example_re_ref_car로 수정하였습니다. 그럼 최종적으로 Reference가 unknown에서 average로 바뀐 것을 확인하실 수 있습니다.
common average reference 이후 이름 변경을 위한 팝업창
common average reference 이후 이름 변경
common average reference 완료
Changing the reference channel
주로 CAR을 reference로 사용하지만, 특정한 이유로 reference 지정을 채널하여 사용하는 경우가 있습니다. 뇌파를 실시간으로 측정할 때 사용한 reference 채널로 분석해도 되는 경우면 상관이 없지만, reference 채널을 변경해야 할 때가 있습니다. 앞서 측정 이후 offline으로 기준 전극을 새롭게 변경할 수 있다고 언급하였습니다. EEGLAB과 python 기반 library MNE-python 모두 지원되는 기능이며, MNE로 reference channel을 변경하는 방법은 Re-referencing the EEG signal in MNE-Python를 참고해주실 바랍니다.
우선, 지금 데이터셋은 이미 CAR을 적용한 데이터이므로 CAR 이전의 RAW data로 돌아가보겠습니다. Datasets을 클릭하시면, 체크 박스를 통해 현재 작업 중인 데이터는 CAR를 적용한 exmple_re_ref_car 데이터인 것을 알 수 있습니다. Dataset 1:Example을 클릭하여 raw data로 돌아갈 수 있습니다.
작업 이전의 데이터셋 확인
그럼 다시 Rerefence가 unkown인 raw data로 돌아왔습니다. online reference로 T8을 사용하였는데 EEGLAB은 인식을 못하는 것 같습니다. 아마 인식하는 방법이 있을텐데 제가 모르는 것 같습니다. Re-reference를 통해 reference channel을 T8에서 Fz로 변경해보겠습니다.
Raw dataset description
Resample
Filter
Extract data
References
[1] EEGLAB tutorial. [Online]