o0y0o

[1주 BCI 기초 다지기] 4일차: 아티팩트 제거, EOG, EMG, ICA, fastICA 본문

BCI/1주 BCI 기초 다지기

[1주 BCI 기초 다지기] 4일차: 아티팩트 제거, EOG, EMG, ICA, fastICA

_\oyo/_ 2025. 1. 26. 18:31

4일차: EEG 신호의 전처리 II (25-01-25)

1. 아티팩트 제거 개념

아티팩트란?

  • 정의
    • 아티팩트(artifact)는 EEG 신호에 포함된 비뇌파 신호로, 분석에 방해가 되는 잡음이기에 부가적인 제거가 필요함.
  • 아티팩트의 종류
    • Eye Blink (EOG)
      • 눈 깜박임으로 인한 신호.
      • 보통 전두엽(Frontal, Fp1, Fp2)에 영향을 미쳐 큰 진폭으로 나타남.
    • 근전도 (EMG)
      • 근육 움직임에 의한 신호.
      • 주로 30 Hz 이상에서 강하게 나타남.
    • 전력선 노이즈
      • 주변 전기 기기나 전력선에서 발생하는 일정한 주파수의 신호.
      • 50 Hz(또는 60 Hz)에서 발셍힘.
    • 전극 접촉 불량
      • 전극이 두피에 제대로 접촉하지 않아 발생하는 느리고 큰 폭의 신호.

아티팩트 제거 방법

  • 필터링
    • 전력선 노이즈와 같은 특정 주파수 제거.
    • 3일차에서 다룬 Band-pass 및 Notch 필터로 처리 가능.
  • 수동 제거
    • 눈에 띄는 큰 아티팩트가 있는 구간 혹은 trial을 제거하거나 마스크 처리.
  • Independent Component Analysis (ICA)
    • EEG 신호를 독립적인 신호 성분으로 분리해 아티팩트를 제거.
    • 오늘 다룰 주요 기법!

2. ICA(Independent Component Analysis)

ICA(독립성분분석, Independent Component Analysis)란?

  • 정의
    • 다변량의 신호를 통계적으로 독립적인 하부 성분으로 분리하는 계산 방법.
    • 즉, 관찰된 다채널 EEG 데이터를 독립적인 뇌파 성분아티팩트 성분으로 분리하는 데 자주 사용됨.
  • 원리
    • 관찰된 신호 X는 여러 독립적인 신호 S가 혼합된 결과로 표현할 수 있음.

      X=A⋅S
      X∈R^(n×T): 관찰된 신호 (n개의 채널, T개의 샘플).
      S∈R^(m×T): 독립적인 신호 성분 (m≤n).
      A∈R^(n×m): 혼합 행렬 (unknown).

      이때 ICA의 목표는 A와 S를 추정하여 X를 분리하는 것.
    • 뇌파 신호 X의 S에서 아티팩트를 제거하고 나머지 신호를 다시 조합하는 기법이 ICA 기반 아티팩트 제거.
    • ICA는 다음 세 가지 주요 가정을 기반으로 작동함.
      • 독립성 (Independence): S의 각 성분 S1,S2,…,Sm은 통계적으로 독립적이어야 함.
      • 비가우시안성 (Non-Gaussianity): S의 분포는 가우시안 분포가 아니어야 함. (가우시안 분포에서는 독립 성분을 추정할 수 없음)
      • 혼합 행렬 A의 정칙성: A는 정칙 행렬로 가정, (열백터가 선형독립이어야 함.)
    • 이하 Whitening, 독립 성분 분리, 독립 성분 정렬 및 출력의 단계로 신호를 재구성할 수 있음.

3. MATLAB에서의 실습

사전 설정

  • fastICA 라이브러리 설치
    • MATLAB Add-On에서 ICA를 검색해 “PCA and ICA Pakage” 설치.
      본 글에선 두 번째 목록의 PCA and ICA Pakage을 사용함.
  • 다채널 예제 데이터 생성
    • ICA는 다변량(EEG 신호에서는 다채널) 데이터에서 사용 가능한 기법이므로, 3일차에서 사용한 rawData를 다채널로 확장.
      % 다채널 데이터 생성
      rawData_multi = [rawData; rawData + 1 * sin(2 * pi * 1 * t);];
      
      % 다채널 데이터 시각화
      for i = 1:2
          subplot(2, 1, i);
          plot(t, rawData_multi(i, :));
          title([num2str(i), '번째 데이터']);
          xlabel('Time (s)');
          ylabel('Amplitude');
      end
    • 위의 코드로 생성한 데이터에 ICA 분석을 적용하면 sin(2 * pi * 1 * t) 성분이 분리될 것을 기대할 수 있음.

예제 데이터와 fastICA를 이용한 실습

  • ICA 수행
    % fastICA 적용
    [ICs, mixingMatrix, separatingMatrix] = fastICA(rawData_multi, 2);
    % [독립성분, 분리행렬, 화이트닝행렬, 데이터평균]
    % 2: 추출할 독립 성분의 개수.
    
    % 독립 성분 시각화
    figure;
    for i = 1:2
        subplot(2, 1, i);
        plot(t, ICs(i, :));
        title(['Independent Component ', num2str(i)]);
        xlabel('Time (s)');
        ylabel('Amplitude');
    end

두 번쨰 성분으로 sin(2 * pi * 1 * t)이 분리됨.

    • 아티팩트 제거 및 신호 재구성
      % 다채널 데이터 생성
      rawData_multi = [rawData; rawData + sin(2 * pi * 1 * t);];
      
      % 다채널 데이터 시각화
      for i = 1:2
          subplot(2, 1, i);
          plot(rawData_multi(i, :));
          title([num2str(i), '번째 데이터']);
          xlabel('Time (s)');
          ylabel('Amplitude');
      end