본문 바로가기
Self learning

Detrend : Remove linear trends

by 단창 2011. 4. 3.
심심해서 포스팅이나 해볼까 싶어서 아무거나 포스팅... 
아무거나에  걸린놈은 바로 detrend...


Detrend란 긴 타임시리즈의 데이터에서  Linear Trend를 빼는 과정이다. 물론 옵션에 따라서 단순히 정해진 mean값을 뺄것인지 선택 할 수는 있다. (사용한 툴은 그냥 매틀랩)
모든 자료는 www.mathworks.com 매틀랩 홈페이지에서 가져왔다...ㅋㅋㅋㅋ

알기 쉽게 내 식대로 정의하면!
어떤 신호 소스가 있고, 그 신호를 얹고 가는 보다 슬로우한 다른 신호가 있다.(많은 상황에서 이 캐리어 신호를 노이즈로 보겠지..)
이때 신호를 얹고 가는 슬로우 신호를 빼는것,, 리니어한 트렌드를 제거하고 신호만을 보겠다는 것이다. 
아니, 그러면 단순히 주파수 기준으로 필터하는것과 무엇이 다른가?

무엇이 다른가 하면,, 주파수 기반으로 필터하는것이 좀 더 큰 범주라 할수있는듯,,
어떤 신호에서 리니어한 트렌드란, 어떤 특정주파수로써만 설명될수는 없는것이고

매틀랩 도큐멘테이션을 봐도, vector 이나 matrix로 부터 mean value, 나 linear trend를 빼는 과정이라 설명되어있다 . least-squares 한 best-fit line를 만들어서 그것을 빼는 것이지.. 

best-fit line을 빼는것이면 단순히 주파수 끊어서 필터하는것이랑은 다르다 할수 있겠다..(물론 내생각...)

예제 하나 들어보자면

sig = [0 1 -2 1 0 1 -2 1 0];      % signal with no linear trend

trend = [0 1 2 3 4 3 2 1 0];      % two-segment linear trend

x = sig+trend;                    % signal with added trend 

y = detrend(x,'linear',5)         % breakpoint at 5th element

>> sig

    1.0000         0

 

>> sig


sig =


     0     1    -2     1     0     1    -2     1     0


>> y


y =


  Columns 1 through 7


    0.0000    1.0000   -2.0000    1.0000    0.0000    1.0000   -2.0000


  Columns 8 through 9


    1.0000         0



물론 아주 간단한 데이터 set이기는 하지만 굉장히 잘된다!

다른 예제 하나!

close all

clear all

 

 

t = 0:300;

dailyFluct = gallery('normaldata',size(t),2); 

sdata = cumsum(dailyFluct) + 20 + t/100;

mean(sdata)

figure

plot(t,sdata);

legend('Original Data','Location','northwest');

xlabel('Time (days)');

ylabel('Stock Price (dollars)');

 

detrend_sdata=detrend(sdata);

trend = sdata - detrend_sdata;

% As expected, the detrended data has a mean very close to 0.

mean(detrend_sdata)

 

hold on

plot(t,trend,':r')

plot(t,detrend_sdata,'m')

plot(t,zeros(size(t)),':k')

legend('Original Data','Trend','Detrended Data',...

       'mean(Detrended)','Location','northwest')

xlabel('Time (days)'); 

ylabel('Stock Price (dollars)');


 

sdata라는 테린드가 가미된 데이터를 만들었다.(파란색)
그리고 별과정없이 detrend(sdata) 를 하고 
trend와 트렌드를 제거한 신호를 디스플레이! 

예제라서 그런지 몰라도 굉장히 깔끔하지 않은가! 


이것을 MRI nuisance base를 제거 하는데 사용하는데 
과연 얼마나 제대로 디트렌딩이 되는지는 모르겠다.. 

원 brain source를 온전하게 그것만 얻는건 일단 불가능하니.. 비교할 원본도 없는거 같은데,. .
나중에 시간되면 정확도 평가한 논문이나 찾아봐야겠다 ㅋ 아마도 있겠지..?


 
반응형