임시 블로그 이름

Window Function을 쓰는 이유 본문

엔지니어링

Window Function을 쓰는 이유

paeton 2015. 3. 14. 09:25

신호 분석, 필터 설계 등을 하다보면 다양한 Window Function등을 만나게 된다.


Cosine, Raised Cosine, Hamming, Hanning, Blackman, Triangular, Gaussian 등등등


어떤 Window Function이 있는지는 위키피디아에 잘 정리되어 있으니 참고하자. (http://en.wikipedia.org/wiki/Window_function)




그러면 도데체 이렇게 많은 윈도우를 왜 쓰는 것일까?


간단하게 1차원 데이터에 대해서 생각해보자.


우리가 가지고있는 데이터를 $*$ s(t) $*$라고 하자.

그리고 Window Function을 $*$ w(t) $*$라고 하자.



Window Function을 쓰는 방법은 크게 2가지가 있는것 같다. (같다 라고 이야기한 이유는, 여기서 말한것 말고도 많은 사용법이 있을거라 보기 때문이다.)



첫째는, Window Function을 데이터에 컨볼루션(convolution)해서 쓰는 방법.

$*$ s'(t)=s(t)\ast w(t) $*$


이 방법은 Window Function 자체를 하나의 Filter로써 쓰는 방법이다.

대부분의 Window Function은 주파수축에서 Low-Pass Filter형태를 띄고 있으므로, 이 방법을 쓰게 되면 신호 자체가 smoothing이 되는 결과를 보여주게 된다.


이건 기본적인 Filtering이니까 따로 예시를 보여주지는 않겠다.




둘째는, Window Function을 데이터에 곱해서 쓰는 방법.

$*$ s'(t)=s(t)\cdot w(t) $*$


시간축에서 신호에 윈도우를 곱했다. 이게 과연 무슨 의미일까? 이것을 알려면 이 수식을 Fourier Transform을 해보아야 한다.

Fourier Transfrom의 속성중 하나는, 시간축에서 곱하기는, Fourier Transform된 주파수축에서 convolution이라는 것이다.



이것을 수식으로 표현하면 다음과 같다.

$*$F\left\{ s'(t) \right\} =F\{ s(t)\cdot w(t)\} =F\{ s(t)\} \ast F\{ w(t)\} $*$


쉽게 이야기해서, 주파수축의 스펙트럼을 Filtering하는거라 보면 되겠다.

왜 주파수 스펙트럼을 Filtering하는 것일까?


이렇게 수식만 가지고 이야기하면 잘 와닿지 않으니 예제를 가지고 이야기 해보자.





간단한 레이더 시스템을 생각해 보자.

레이더 시스템의 샘플링 주파수는 $*${ f }_{ s }=1000$*$[Hz]이고, 우리가 송신에 사용할 중심 주파수는 $*${ f }_{ c }=50$*$[Hz]라고 가정하자.

송신파형은 sine이고, 한번에 2개 주기를 사용해서 송신한다고 가정하자.


신호를 만들어보면 다음과 같다.


위 조건의 시간축 신호 ($*$N=41$*$)




위 신호의 주파수 스펙트럼 (50Hz에서 0dB 가 되도록 Normalize했다)




시간축에서 신호를 보면 sine파가 이쁘게 만들어진것 같지만, 주파수축에서 위 신호를 분석해보면 이야기가 좀 다르다. 조건으로 주었던 50Hz외에도 다른 주파수 영역에서 봉우리가 생긴것을 알 수 있다. 가장 큰 50Hz대역의 봉우리를 Main Lobe, 그리고 나머지 주변의 봉우리들을 Side Lobe라고 한다.


(이렇게 side lobe가 생기는 이유는 나중에 설명하도록 하겠다.)


여기서 문제는, 우리는 50Hz의 신호만 주로 보내고 싶은데, 실제로 주파수축에서 분석을 해봤더니, 13Hz에 있는 side lobe와는 대략 9.5dB, 85Hz에 있는 side lobe와는 대략 16dB밖에 차이가 나지 않는다. 그리고 그 주변의 주파수 스펙트럼이 고르지 못하다. 즉, 다시 말하면 이런식으로 보내면 효율적이지 못하다는 것이다.



이럴때 위 신호에다가 Window Function을 곱하면 어떻게 될까?

다양한 Window Function들이 있지만, Gaussian Window를 써보자.

GaussainWindow의 길이는 원래 신호와 같고 ($*$N=41$*$), 

표준편차는 $*$\sigma =(N-1)/(2\alpha )=(41-1)/(2\cdot 2)=10$*$ 이라고 하자. 

(Matlab의 gausswin함수에서 사용하는 수식이다. $*$\alpha$*$를 이용해서 window function의 좁은 정도를 조절한다.)



결과 Window Function은 다음과 같다.







이 Window Function을 원래 신호에 곱하면 다음과 같은 신호와 주파수 스펙트럼을 얻을 수 있다.




(50Hz가 0dB가 되도록 Normalize한 결과다)



WindowFunction의 효과는 주파수축에서 확연히 나타난다. Main lobe와 주변 side lobe와의 차이가 35 dB이상으로 벌어졌다. 그리고 그 외의 고주파 신호들도 원래는 -40dB였다가 -50dB 이상으로 10dB 이상 떨어진 것을 알 수 있다. 또 Main lobe 주변이 이전과는 달리 변화가 적어진것을 알 수 있다.





맨 위로 돌아가서, 시간축에서 Window Function을 곱하는 것은, 주파수축에서 Filtering이라고 했다.

예제 결과를 보고 이야기하면, Gaussian Window의 주파수 스펙트럼을, 원래 입력 신호의 주파수 스펙트럼과 convolution해서, 좀 더 부드럽고 side lobe가 사라진 주파수 스펙트럼을 만들어낼 수 있게 된 것이다.



그러면 반대로 안좋아진 것은 무엇일까??????


Main lobe가 두꺼워졌다. 

그 전에는 25Hz ~ 75Hz사이에 분포하던 것이, 이제는 10Hz ~ 90Hz로 두꺼워지게 된 것이다.


여기에 이렇게 하나가 좋아지면, 다른 하나가 나빠지는 Trade-off가 있다.


Window Function을 사용하지 않으면, side lobe 특성이 좋지 않아지고, window function을 사용하면, main lobe가 두꺼워진다. 그리고 이런 특성은 신호의 중심주파수, window function의 종류에 따라서 달라진다. 또 window function에 따라서 side lobe가 무조건 줄어들지 않는 경우도 있다.



이런 상황에서 어떤 window function을 사용할지, 어디까지 side lobe를 허용할찌, 얼마나 main lobe가 늘어나도 괜찮은지, 각각의 문제를 어떻게 해결할지는 엔지니어가 결정해야 할 문제이다.







마지막으로 side lobe가 생기는 이유에 대해서 생각해 보자.


다시한번 맨 처음 sine파를 보자. 그러면 원래 sine파는 아무런 window function도 곱해져 있지 않은 것일까?????

무한한 길이를 가지는 sine파에 2개 주기만큼 길이를 가지는 rectangular window를 곱했다고 볼 수 있지 않을까?

여기에서 조금만 더 생각해보면 side lobe라는게 왜 나타나는지 알 수 있다.


1. 맨 처음 2개 주기를 가지는 sine파는 무한한 길이를 가지는 sine파에 2개 주기만큼 길이를 가지는 rectangular window를 곱해준것과 같다.

2. 무한한 길이를 가지는 sine파의 주파수 스펙트럼은, 그 sine파의 주파수에 해당하는 impulse이다.

3. rectangular function의 Fourier Transform은 sinc function이다. 무한히 많은 side lobe를 가진다.

4. 시간축에서 곱은 주파수축에서 convolution이다. 따라서, rectangular function의 스펙트럼은 sine파의 주파수만큼 shift되서 보이게 된다.

즉 다시말해서, 어떤 신호든 유한한 길이를 가지는 신호는 (rectangular function이 곱해진 신호는) side lobe가 있을 수 밖에 없다.


Comments