본문 바로가기
Coding/C code

뇌파 분석을 위한 Spectrum 기초, FFT 간단 이해

by SnowRed 2020. 1. 21.
반응형

뇌파를 얻게되면 사전에 Fram rate를 지정해 주게 되고 이를 알아야 어떻게 자르고 분석하고 필요한 정보만 얻을 수 있는지가 정해진다.

필자는 수학이 아주 약하기 때문에 이해를 금방 까먹고 마는 도돌이표에 빠진다.

그래서 Matlab으로 그래프를 그려가며 정리해서 포스팅 해 본다.

여러분도 이 글을 읽으면서 대체적으로 이해할 수 있길 바란다.

 

 

- Spectrum 기초

왼쪽 그림은 1Hz를 나타내는 모습이다. x축이 0부터 1초를 뜻하고 y축은 -1부터 1까지 크기를 보여준다.

y축의 0부터 1은 보통 on, +, 켜짐 등등의 의미로 칭하고 0부터 -1까지는 off, -, 꺼짐 등등의 의미가 된다.

그래서 1Hz는 한번의 on과 off가 일어나는 것을 뜻한다. (한번의 물결이라고 볼 수 있음)

일반적으로 60Hz라는 말을 Unity라는 게임 프로그램을 사용할때 많이 쓰게되는데 그럼 60Hz는 어떤 모습일까? 

바로 1번의 on과 off가 60번 반복된다는 뜻이다.

 

샘플링 주파수(Sampling rate)는 본인이 뇌파를 들고 올때 어떻게 지정해 주느냐에 따라 다르다. 필자는 여기서 10Hz의 샘플링을 가져왔는데 이 뜻은 10번 값을 들고 왔다는 뜻이 된다. 오른쪽 그림을 보면 이해가 갈 것이다. 아마 초보자는 주파수를 설명하는데 이런 조그마한 차이를 제대로 알지 못하면 본인이 말하다가 본인이 논리에 꼬일 수 있다.

(그건마치 이번 학점은 18학점(이수학점)인데 총 4학점(성적)이 되었고 전체 130학점(졸업학점) 받아야해 같은 묘하게 헷갈리는 소리같다고 생각된다.)

 

 

FFT는 이러한 주파수를 이용해 표현할 수 있다. A sin(s*pi*f*t)는 필자는 실제로 써 본적이 없다.

FFT는 Fast Furier Transform이라는 뜻으로 퓨리에라는 사람이 만든 식이다.(그 이상 알려고 하면 너무 어렵다)

여러분이 보고 있는 빨강과 파랑 그래프를 보고 있으면 어떤 정보를 얻을 수 있는가?

시간에 따른 크기를 알 수 있다. 그러나 만약 Hz당의 크기가 보고 싶으면 어떻게 잘라야 할까?

바로 이때 사용하는게 FFT다. Hz당 크기를 보기 위해 시간당 크기로 얻은 뇌파가 FFT를 통과하게 되면 오른쪽 밑의 그래프처럼 Hz당 크기의 점이 찍히게 된다.(실제로 저렇게 간단명료하게 보이지는 않음)

 

추가로 더 업그레이드해서 STFT라는 비슷한 함수도 있다. 시간당 크기도 보고 싶고 Hz당 크기도 보고 싶을때 사용할 수 있는 함수인데 더 복잡하기 때문에 사용할 때 머릿속에서 이해를 하는 과정이 필수적이다.

언제나 코드를 짤때는 자기가 무엇을 짜고 있는건지 명확히 알지 못하면 결과도 제대로 나오지 못하고 시간만 버리게 되니 꼭 기본적인 이해는 해두도록 하자 

 

댓글