Sunday, February 14th, 2010 | Author: salbang

HTS에서 기본적으로 가격 Smoothing을 위해 제공하는 Low-pass(저역 통과) 디지털 필터에는 다음과 같은 3가지가 있다.

  1. 단순 이동 평균, y[n] := \sum_{k=0}^{L-1} \frac{1}{L}x[n-k].
  2. 가중 이동 평균, y[n] := \sum_{k=0}^{L-1}w_k x[n-k], where w_k = \frac{L-k}{\sum_{m = 1}^L m}.
  3. 지수 이동 평균, y[n] := (1-\alpha) y[n-1] + \alpha x[n], where \alpha = \frac{2}{L+1}.

이 글에서는 각 이동 평균 별로 주파수 도메인에서 어떤 특성을 갖고 있는지에 대해서 얘기해 보려 한다.

약간의 신호처리 기본에 대해 얘기하자면 위와 같은 입출력 관계는 다음과 같은 콘볼루션 식으로 나타낼 수 있다.

a*y[n] = b*x[n], where h*x[n] := \sum_{k = -\infty}^{\infty} h[k]\times x[n-k].

그리고 위와 같은 LTI(Linear Time Invariant) 시스템의 z 도메인에서의 응답(Response) H(z) := \frac{Y(z)}{X(z)}은 다음과 같다.

H(z) = \frac{\sum_{k=-\infty}^{\infty} b_k z^{-k}}{\sum_{k=-\infty}^{\infty} a_k z^{-k}}.

이 시스템의 주파수 응답은 H(e^{j\omega}), where j = \sqrt{-1}로 정의 된다. 이 주파수 응답의 의미는 위 시스템(T)에 복소 주기 수열(고유 벡터) x[n] := e^{j\omega n}이 입력으로 인가됐을 때의 출력에 대한 고유값(T\{e^{j\omega n}\} = H(e^{j\omega})e^{j\omega n}을 의미한다.

이제 각 이동 평균 별로 주파수 응답에 대해서 보자. Magnitude Response (진폭 응답?), |H(e^{j\omega})|을 보도록 하겠다. L = 4를 사용하도록 하겠다. -6 dB에 빨간 직선을 그은 것은 그 지점이 진폭이 반(20\log_{10}0.5 \approx -6)이 되는 지점으로 여길 기준으로 주파수가 Cut-off 되는 것으로 판단한다.

먼저 단순이동평균 : y[n] = \frac{1}{4}x[n] +\frac{1}{4}x[n-1] + \frac{1}{4}x[n-2] + \frac{1}{4}x[n-3].

단순 이동 평균의 진폭 및 위상 응답

x축은 Normalized Frequency라고 해서 Radian값을 \pi로 나눈 값이다. 각주파수로 생각하면 되는데 1이 의미하는 바는 \pi 즉 반주기(2\pi/2)인데 이는 Nyquist frequency 때문에 차트 상에서 2개의 Bar를 의미한다고 보면 된다. 위 그림에서 보면 알겠지만 0.5와 1에서 진폭 응답이 0(-\inftydB)임을 볼 수 있다. 즉 단순 이동평균은 4개 Bar(1/0.5 \times 2) 및 2개 Bar(1/1 \times 2)의 주기를 갖는 데이터는 완전히 날려 버리는 성질을 갖고 있다. 물론 이 필터를 사용하는 목적은 Low pass, 즉 낮은 주파수의 데이터를 통과시키는 것이기는 하지만 4일 이동 평균에서 2일 및 4일 주기의 정보를 완전히 날려버리는 것은 의도하지는 않았을 것이다. Cut-off 주기는 대략 봤을 때 0.3 \pi radian, 즉 1/0.3*2= 6.67 Bars 정도 되는 것을 알 수 있다.

다음으로 가중 이동평균 y[n] = \frac{4}{10}x[n] +\frac{3}{10}x[n-1] + \frac{2}{10}x[n-2] + \frac{1}{10}x[n-3]의 주파수 응답을 보자.

가중이동평균의 진폭 및 위상 응답

다행이 이 필터는 4 Bars 및 2 Bars의 주기를 갖는 정보를 완전히 날려버리지는 않는 것을 볼 수 있다. Cut-off 주기는 약 0.35 \pi radian, 즉 5.71 Bars 정도 되는 것을 알 수 있다.

이번에는 지수 이동 평균 y[n] = 0.6y[n-1] + 0.4x[n] (\alpha = 2/(4+1) = 0.4)을 보도록 하자.

지수이동평균의 진폭 및 위상 응답

전체적으로 가중이동평균과 비슷한 모습을 보이나 가중 이동평균과 같은 출렁임은 없다. Cut-off 주기는 약 0.29 \pi radian, 즉 6.9 Bars 정도 되는 것을 알 수 있다. 가중이동평균에 비교하면 주파수를 좀 일찍부터 자르는 경향이 있는 것을 볼 수 있다.

각 이동평균별로 다른 주파수 응답 특성을 보이는데 어떤 디지털필터를 사용할지 판단하는데 위와 같은 분석이 도움이 되었으면 한다.

각 이동 평균들이 얼마나 빠르게 시세를 따라가는지를 보려면 위상응답을 분석해야 하는데 이는 다음에 얘기하도록 하겠다.

위 그림을 그리기 위해 사용한 매틀랩 코드는 다음과 같다.

L = 4;
% Simple Moving Average
b1 = ones(L, 1)/L;
figure;
freqz(b1);
hold on
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);

% Weighted Moving Average
b2 = (L:-1:1)/sum(L:-1:1);
figure;
freqz(b2);
hold on
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);

% Exponentially Weighted Moving Average
alpha = 2/(L+1);
b3 = [alpha];
a3 = [1, -(1-alpha)];
figure;
freqz(b3, a3);
hold on;
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);


덧 : 그런데 좀더 공부해 보니 단순 이동평균의 4일/2일 주기를 완전히 날려버리는 성질도 좋네요. 리플이 커서 그렇지. 이런 부분은 Elliptic Filter나 Chebyshev Type II 필터 아니면 원하는 스펙으로 디자인한  FIR필터를 사용하여 개선할 수 있습니다.

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

7 Responses

  1. 네이버에서 이웃블로그 등록하려고 하는데 유독 여기만 안되네요.
    RSS feed가 없나요??

  2. 안녕하세요 모래알님. RSS Feed 주소는 아래와 같습니다. ^^
    http://salbang.com/blog/feed/

  3. 안녕하세요. 얼마전에 HFT Round Table 에서 뵈었던
    L모 회사의 YK 입니다.
    모임이 끝날 즈음에 제가 신호처리 전공이라 궁금한게 많으시단 말이 생각나네요.ㅋ
    그때 블로그를 운영한단 말을 전해 들었지만 잠시 잊고 있었는데,
    우연찮게 오늘 알게 되었습니다.
    신호처리 비전공자가 쓴 글이라는게 느껴지지만,
    비전공자 중에는 거의 최고 수준이신 것 같습니다. ㅋ
    추후에 의견을 나눌 기회가 있을 거라 생각합니다.
    Computer Science 에서 선형대수도 배우는 건가요?
    LU-Decomposition과 Freq. Response 를
    이런 곳에서 보게 되다니 재밌네요. ㅋ
    혹시 DSP 관련해서 Reference 가 필요하시다면,
    Oppenheim 이 대가로 잘 알려져 있습니다.
    저도 학부때 노란 책을 기초 도서로 썼었습니다. ㅋ

  4. 누구신지 알겠어요. ^^. 제가 수치해석으로 박사를 받아 선형대수는 매우 빠삭합니다. ^^. 그리고 Computer Science도 분야가 다양해서 ad-hoc 네트워크 하시는 분들은 랜덤 그래프 이런거 열심히 하시고, 네트워크 트래픽이나 음성인식 연구하시는 분들은 신호처리 쪽도 빠삭하시고, 암호화 하시는 분들은 정수론으로 아주 잘하시고, 머신러닝하시는 분들은 함수 해석학 이런거 열심히 하시고 그럽니다.

    그런데 오펜하임은 이미 땠어요 ^^. 제가 학부 때 회로이론을 배웠는데 이게 또 많이 관련이 있더라구요. 역시 학문은 돌고 도는 건가봐요.

  5. 근데 생각해보니 4일 이동평균에서 4일 및 2일 주기 정보를 완전히 날려 버리는게 좋을 수도 있겠네요 ^^.

  6. 워낙 지식의 습득이 광범위한 분 같아서..
    무슨 말을 하기가 겁이 날 정도입니다.ㅋ
    예전에 제가 신호처리와 제어 알고리즘을
    RealTime OS 기반에서 구현하는 일을 했었는데,
    대전의 K모 대학 학석박사학위를 제어쪽으로 받으신 분과 했거든요.
    그런데, 그 분은 IIR Filter 의 구현에 익숙해서인지
    IIR Filter 의 단점을 잘 모르고 계시더라구요.
    그 분도 신호처리를 배운 분이라 뭔가 이상했었는데,
    여러 번의 회의 끝에 알게 된 사실은,
    신호처리를 배운 것과 디지털통신을 기반으로 한 신호처리는
    생각보다 꽤 다른 분야였다는 걸 알게 됐었습니다. ㅋ
    Shannon 의 정보이론에 기반을 둔 디지털통신용 신호처리분야가
    금융쪽 컨셉에 좀 맞는 것 같다는 생각이 듭니다.

    Laplace 와 Fourier 변환이 비슷한 수식이지만
    완전히 다른 응용인 것과 비슷한 상태랄까요. ㅋ

  7. 7
    salbang 
    Monday, 7. June 2010

    YK님 말씀 감사드립니다. 제가 사실 신호처리에 발을 들여 놓은게 얼마 안되서 잘 모르는 상황입니다. FIR 필터를 사용하고 싶은데 사용하는 도구의 특성상 아직 도입이 꺼려지는 상황이기도 하고요. 계속 연구중이긴 합니다. ^^. 저는 아직 신호처리 쪽은 초보라고 할 수 있지요.

Leave a Reply