이번 강의부터 몇 개에 걸쳐 푸리에 변환(Fourier Transform)과 선형대수에 대한 이야기를 하겠다. 푸리에 변환은 전자공학, 진동 해석, 음성, 통신 등 신호처리 분야 뿐만 아니라 영상, 그리고 양자역학(quantum mechanics) 등에서도 널리 활용되는 아주 중요한 개념이다. 인터넷에 이미 푸리에 변환에 대한 방대한 자료가 존재하지만, 이번 강의를 통해 간단히 개념을 잡고 선형대수와 관련지어 이해를 해보도록 하자. 푸리에 변환에 대해 공부하기 전에 먼저 푸리에 급수에 대한 개념을 잡고 가자.

 

 

 

1. 푸리에 급수와 직교성 (Fourier Series and orthogonality)

 

- What is the Fourier Series?

 

우리가 일상생활에서 말하는 음성을 녹음한 뒤 그 파형을 보면 굉장히 복잡한 형태의 파형이 나오는 것을 볼 수 있다. 이렇게 복잡한 형태의 신호가 나오는 이유는 다양한 주파수(frequency)를 가진 사인파형태(sinusoidal)의 신호들이 섞여있기 때문이다. 그런데 음성 신호를 분석하고 응용하기 위해선 음성신호들이 어떠한 주파수의 신호들로 이루어져 있는지를 알아내야 한다. 이때 이용할 수 있는 수학적 도구가 바로 푸리에 변환(Fourier Transform)이다. 이후에 자세히 다루겠지만 푸리에 변환은 시간 영역(time domain)에서 표현된 신호를 주파수 영역(frequency domain)에서 표현하여 해당 신호가 어떤 주파수 성분들로 구성되어 있는지를 알아내는 방법이다. 

 

그런데 푸리에 변환 이전에 먼저 알아야 할 이론이 있다. 바로 푸리에 급수(Fourier Series)이다. 푸리에 급수는 임의의 주기신호(periodic signal)를 sine과 cosine함수의 선형 조합으로 나타낼 수 있다는 이론이며, 프랑스의 수학자 Joseph Fourier(1768-1830)가 발견하였다. 원래는 열 방정식(Heat equation)의 문제를 풀기 위해 고안한 방법이었으나, 후에 푸리에 급수(Fourier series)로 불리게 되었다. 

 

푸리에 급수의 핵심은 어떤 복잡한 형태의 주기함수(periodic function)내지는 주기신호를 기저 함수(basis function)의 선형조합(linear combination)으로 표현하는 것이며, 여기에서 기저 함수는 삼각함수인 sine과 cosine함수이다. 이 말이 조금 어렵게 들릴 수도 있으나 천천히 알아보도록 하자. 먼저 주기함수는 아래의 식을 만족시키는 함수를 의미한다. 

 

 

식 (1.1)은 주기함수의 정의를 나타내는 함수이다. 좌변을 보면 함수 f의 입력값으로 x가 있고, 거기에 주기 P를 더하였다. 이렇게 원래의 입력값 x에 어떤 주기 P=2PI를 더한 함수 값이 원래의 함수값과 같다면, 그 함수는 주기함수(periodic function)라 할 수 있다. 대표적인 주기함수로는 sine함수가 있으며, 그 주기는 2PI가 된다. 실제로 sin(x+2PI) = sin(x)는 둘 다 0이므로 식을 만족한다. 

 

이제 이러한 주기함수를 어떻게 sine과 cosine의 선형조합으로 표현할 수 있는지, 즉 푸리에 급수(Fourier series)에 대해 자세히 알아보자. 아래의 식은 푸리에 급수의 식을 나타낸다. 

 

 

식 (2)를 보아하니 sin과 cos함수에 대한 항이 각각 존재하고, 각 항에 $a_n$과 $b_n$이라는 계수(coefficient)들이 곱해져있다. 그리고 시그마(sigma)기호를 통해 n=0부터 무한대까지 각 항들을 모두 더해주는 걸 보니 선형조합(linear combination)의 형태임을 알 수 있다. 지금까지 선형대수강의를 잘 공부했다면 선형조합이라는 단어는 익숙할 것이다. 

 

다음으로 sin함수와 cos함수의 입력값에는 n이 각각 곱해져있는데, n은 sin과 cos함수의 주파수(frequency)를 결정짓는 역할을 한다. 여기서 약간 헷갈릴 수 있는 것이 주기(period)와 주파수인데, sin과 cos함수는 기본적으로 -$\pi$ ~ $\pi$, 혹은 0 ~ 2$\pi$와 같이 2$\pi$의 주기를 가지고 있다. 즉 함수의 주기는 2$\pi$로 고정되어 있고, 식 (2)에서 n을 변경시켜서 주파수를 변경하면 n=1일 땐 2$\pi$의 주기 동안 1번의 순환 주기(cycle)를 마치는 것이고, n=2일 땐 2$\pi$의 주기 동안 2번의 순환 주기를 마치는 것이다. 아래 그림은 -$\pi$ ~ $\pi$동안의 cos(x)와 cos(2x)의 그래프를 나타낸다. 

 

 

Fig. 1 하나의 순환주기(-PI~PI, 2PI)에서 cos(x)와 cos(2x)의 그래프

 

파란색 그래프가 cos(x), 빨간색 그래프가 cos(2x)를 각각 나타내며, 주파수가 정확히 두 배 차이나는 것을 볼 수 있다. 여기서 주기를 계산하려면 삼각함수가 2$\pi$의 주기를 가지기 때문에 2$\pi$를 주파수 n으로 나눠주면 구할 수 있다. 

 

 

식 (3)을 통해 계산해보면 cos(x)의 주기는 2$\pi$/1=2$\pi$이고, cos(2x)의 주기는 2$\pi$/2=$\pi$이다. Fig. 1을 살펴보면 각 함수의 주기가 계산한대로 맞아떨어지는 것을 볼 수 있다. 이를 통해 결국 n이 실질적으로 결정짓는 것은 각주파수(Angular frequency)임을 알 수 있다. 그러나 보다 간결한 표현을 위해 앞으로 n을 주파수를 결정짓는 상수로 이야기 하도록 하겠다. 

 

 

 

 

- Fourier Series coefficient and orthogonality

 

다음으로 식 (2)에서 sin과 cos함수 앞에 각각 곱해지는 계수 $a_n$과 $b_n$에 대해 자세히 알아보자. 직관적으로 봤을 때 이들은 가중치(weight)정도로 이해할 수 있다. 하지만 이보다는 다음과 같이 이해하면 좋을 것 같다. 

 



푸리에 급수의 계수(Fourier Series coefficient) : 


어떤 복잡한 형태의 주기함수 f가 있고, f가 다양한 주파수를 가진 신호들의 조합으로 이루어져 있다고 하자. 이때 각 주파수 성분은 sin과 cos함수에 n을 조절하여 나타낼 수 있고, 이 주파수 성분들이 f에 얼마만큼 포함되어 있는지를 계수 과 이 나타낸다. 

 

결국 푸리에 급수에서 계수는 각 주파수 성분들의 가중치라고 할 수 있다. 그렇다면 이들 계수는 어떻게 구할 수 있을까? 계수를 구하기 위한 핵심 아이디어는 바로 직교성(orthogonality)에 있다. 직교(orthogonal)한다는 것은 선형대수에서는 두 벡터가 90도를 이루어 수직(perpendicular)인 상태를 의미하며, 이때 두 벡터의 내적(dot product)은 0이 된다. 그런데 우리가 풀고있던 문제는 벡터가 아닌 함수에 관한 내용이고, 함수 중에서도 삼각함수에 대한 내용이다. 삼각함수에 대한 직교성을 어떻게 이해해야 할까? 아래의 식을 보도록 하자. 

 

 

식 (4)는 두 개의 cos함수의 곱에 대한 적분(integral)을 나타낸다. 삼각함수의 주기가 2$\pi$이기 때문에 한 주기에 대한 직교성을 검증하기 위해 적분 구간이 -$\pi$ ~ $\pi$이다(또는 0 ~ 2$\pi$). 여기서 눈여겨 봐야 할 곳이 바로 cos함수의 입력값 부분이다. 첫 번째 cos함수의 입력값은 nx이고, 두 번째 cos함수의 입력값은 kx이다. 즉 두 개의 cos함수는 서로 다른 주파수를 가진 것이다. 식 (4)가 의미하는 것은 결국 같은 cos함수라도 주파수(frequency)가 다르면 두 함수는 직교(orthogonal)의 관계를 갖는다는 것이다. 왜 그런지 수학적 증명을 통해 확인해보자.  

 

 

먼저 확인해봐야 할 것은 식 (5.1)과 (5.2)에서와 같이 임의의 주파수를 가진 sin과 cos함수의 적분(integral)은 -$\pi$ ~ $\pi$구간, 혹은 0 ~ 2$\pi$구간에서 0이 된다는 것이다. 삼각함수의 미분/적분 관계를 이용하여 적분을 해보면 (5.3)과 (5.4)와 같이 적분값이 0이 됨을 증명할 수 있다. sin함수를 적분할 경우 (5.3)과 같이 cos함수가 되는데, x가 -$\pi$혹은 $\pi$라면 주파수 상수 k에 따라서 그 값이 1, 혹은 -1이 번갈아가며 나오게되고, 결과값은 0이 된다. 이때 주파수값 k는 어떤 정수(integer)라도 성립한다. 

 

이와 유사하게 (5.2)의 cos함수를 적분하면 (5.4)와 같이 sin함수가 나오고,  x가 -$\pi$ 혹은 $\pi$라면 주파수 상수 n이 변하여도 sin함수값은 항상 0이 나오게 된다. 이때 중요한 것은 n이 0이 아닌 정수여야 한다는 것이다. n이 0이 되면 cos함수의 값은 1이 되고 적분값은 2$\pi$가 될 것이다. 따라서 (5.2)의 n은 0이 아닌 정수여야 적분값이 0이 된다. 

 

결과적으로 식 (5)를 통해 sin과 cos함수는 임의의(cos은 0이 아닌 정수) 정수 주파수 상수 n에 대해 -$\pi$ ~ $\pi$ 구간, 혹은 0 ~ 2$\pi$구간에서의 적분값이 항상 0이 됨을 증명하였다. 

 

이제 식 (5)에서 증명한 사실을 이용해서 식 (4)의 서로 다른 주파수를 가진 cos함수의 직교성(orthogonality)을 확인해보자. 

 

 

식 (6.1)은 삼각함수의 덧셈공식(Angle sum identity)을 이용하여 유도한 공식이다. 고등학교때 배운 기억이 있을 것이다. 이 공식을 이용하여 식 (6.2)를 cos함수의 덧셈으로 바꾸어 각각 적분을 적용하면 (6.3), (6.4)와 같이 정리할 수 있다. (6.4)의 cos함수의 주파수 상수는 각각 n+k, n-k인데, n과 k가 임의의 정수이기 때문에 결과적으로 주파수값이 임의의 정수가 된다. 

 

 

 

 

여기서도 식이 성립하기 위한 조건이 붙는데, 바로 n과 k는 서로 다른 값이어야 한다는 것, 그리고 n과 k가 값은 같고 부호만 달라서는 안된다는 것이다. 만약 n이 k와 같다면 (6.4)의 cos(n-k)=cos(0)이 되어 2PI/2=PI가 되고, n과 k가 부호만 다르다면 cos(n+k)=cos(0)가 2PI/2=PI가 되어 적분값이 0이 되지 않는다. 다시 말하면 식 (5.2)에서 주파수 n이 0이 아닌 정수(non-zero integer)여야 한다는 조건을 의미하는 것이다. 이 조건만 만족한다면 서로 다른 주파수를 가진 두 cos함수의 곱의 적분값은 0이 된다. 아래 식은 식 (6.2)에 대해서 주파수가 같은 경우와 다른 경우에 대한 예시를 보여준다. 

 

 

식 (7.1)은 n=1, k=2로 서로 다른 주파수의 계산 결과를, 식 (7.2)는 n=2, k=2로 같은 주파수의 계산결과를 보여준다. 주파수가 서로 다른 (7.1)의 경우엔 적분 계산 결과가 0인 반면, 주파수가 같은 (7.2)의 경우엔 계산 결과가 0이 아닌 $\pi$가 나오는 것을 볼 수 있다. 

 

이처럼 n과 k가 서로 다른 값을 가질 경우엔 삼각함수의 한 주기(-$\pi$ ~ $\pi$)에 대해서 두 cos함수의 곱에 대한 적분값은 0이 된다. 그렇지 않을 경우(n과 k가 같거나, 부호만 다를 경우) 적분값은 $\pi$가 된다. 그런데 두 cos함수의 곱의 적분을 잘 생각해보면 우리가 지금까지 다뤄왔던 선형조합(Linear combination)과 매우 유사한 형태임을 알아챌 수 있다. 그 중에서도 내적(dot product)과 완전히 동일한 개념으로 생각할 수 있는데, 내적(dot product)의 함수(function)버전이라고 생각하면 된다. 아래 식을 보자. 

 

 

식 (8.1)은 서로 수직(perpendicular)인 두 벡터 a=[1, -2, 1]T와 b=[1, 1, 1]의 내적(dot product)을 나타낸다. 내적의 연산형태는 이미 많이 배웠기 때문에 익숙할 것이다. a와 b는 서로 수직이기 때문에 내적 연산의 결과값이 0이 된다. 

 

식 (8.2)는 주파수가 다른 두 cos함수의 곱에 대한 -$\pi$ ~ $\pi$구간에서의 적분을 나타낸다. 지금까지 적분이라고 하면 식 (5)나 (6)과 같이 적분 공식을 이용하여 값을 구하는 방법에 익숙할 것이다. 하지만 적분도 x의 변화량인 dx(delta x)를 유한한 구간으로 설정하면 유한개의 곱과 합으로 표현할 수 있다. 그런데 (8.2)의 연산과정을 살펴보면 (8.1)의 내적 연산과 같은 형태임을 알 수 있다. 즉 cos(x)와 cos(2x)의 내적인 것이다. 이때 cos함수의 벡터의 길이는 dx를 작게 설정할 수록 길어질 것이다. (8.2)에선 dx를 0.01로 설정했는데, 이는 -$\pi$ ~ $\pi$를 630개의 구간으로 나눈 것이다. 따라서 (8.2)는 cos(x)에 대한 1x630짜리 벡터와 cos(2x)에 대한 630x1벡터의 내적으로 생각할 수 있다. 이 두 함수의 내적은 앞서 살펴본 것과 같이 0이 되고, 결과적으로 cos(x)와 cos(2x)와 같이 주파수가 다른 두 cos함수는 직교(orthogonal)하다는 결론을 내릴 수 있다. 이 두 함수 이외에도 cos(8x)cos(19x)등 과 같이 주파수가 다른 경우에 결과값이 0이 됨을 알 수 있다. 

 

아래 그림은 cos함수의 직교성(orthogonality)을 MATLAB함수로 구현한 것이다. 주파수의 값을 바꾸어서 직접 테스트 해보면 서로 다른 주파수 값을 가지는 경우엔 0이 되어 직교성(orthogonality)을 만족하는 것을 알 수 있을 것이다.  

 

 

Fig. 2 주파수가 서로 다른 cos함수의 직교성(orthogonality) 검증을 위한 적분(integral) 구현 코드와 결과

 

 

Fig. 2는 cos함수의 직교성(orthogonality) 검증을 위한 MATLAB구현 코드이다. 구현은 두 가지 방법을 사용했는데, 첫 번째 방법은 MATLAB내부 함수인 integral()함수를 사용한 것이고, 두 번째는 이해를 돕기 위해 적분을 직접 for문을 사용하여 간단히 구현하였다. 적분 결과는 dx를 작게 할 수록 실제 값에 가까워 지는데, Fig. 2의 코드에선 -$\pi$ ~ $\pi$구간을 1000개로 분할하여 dx=0.0063정도가 된다. 내장 함수와 직접 구현한 코드 모두 0에 가까운 작은 수가 나오는 것을 볼 수 있다. 적분을 직접 구현한 두 번째 코드는 실제 적분값에서 약간의 오차가 발생하는데, 이는 적분을 구현하는 방식에서 발생하는 오차이다. 보다 자세한 사항은 구글에서 사다리꼴 규칙(Trapezoidal rule)을 검색하거나 아래의 첨부한 파일을 참고하기 바란다. 적분과 그 구현방법을 이해하는데 좋은 문서이다. 

 

Trapezoidal rule for integral.pdf
다운로드

 

 

 

 

- How to calculate Fourier Series coefficient?

 

앞서 푸리에 급수의 계수에 대한 이해를 했으니 이제 실제로 계수값을 어떻게 계산하는지 알아보도록 하자. 먼저 식 (2)를 다시 보자. 

 

 

계수 an과 bn을 구하는 방법은 식 (2)로 부터 출발하며, 앞서 배웠던 서로 다른 주파수를 가지는 cos함수의 직교성(orthogonality)을 이용하는 것이다. 그렇다면 어떻게 cos함수의 직교성을 이용하여 계수 an과 bn을 구할 수 있을까? 바로 식 (2)의 양변에 cos(kx)를 곱한 뒤, 의 구간에서 적분(integral)하는 것이다. 아래 식을 보자. 

 

 

식 (9)는 푸리에 급수 계수 $a_k$를 구하는 식을 유도하는 과정이다. (9.1)은 식 (2)에서 양변에 cos(kx)를 곱한 결과를 나타내고, (9.2)는 양변을 -$\pi$ ~ $\pi$의 구간에서 적분하는 과정을 각각 나타낸다. 그런데 (9.3)으로 넘어가면서 식이 매우 간단해 진 것을 볼 수 있다. 이는 삼각함수의 직교성에 의한 것인데, 우선 (9.2)에서 sin과 cos함수는 주파수에 상관없이 서로 직교(orthogonal)의 관계이기 때문에 두 함수의 곱에 대한 한 주기의 적분값은 언제나 0이 된다. 따라서 (9.2)의 sin(nx)cos(kx)부분은 임의의 n과 k에 대해 모두 0이 되기 때문에 식에서 생략할 수 있다. 이를 증명하는 방법은 식 (6)에서와 같이 삼각함수의 덧셈공식을 이용하여 적분을 계산해보면 알 수 있다.   

 

마찬가지로 (9.2)의 cos(nx)cos(kx)함수부분은 식 (6)에서 증명한것과 같이 서로 다른 주파수를 가진 cos함수는 직교성에 의해 적분값이 0이 된다. 다만 n=0에서 무한대까지 cos(nx)중에서 주파수 n이 cos(kx)의 주파수 k와 같은 경우, 즉 n=k인 경우에만 0이 아닌 값이 나온다. 결국 cos(kx)의 제곱이라고 볼 수 있는데, (7.2)에서와 같이 (9.3)의 적분값이 $a_k\pi$가 되고, (9.4)와 같이 $a_k$를 정의할 수 있다. 

 

그런데 cos함수의 계수인 a는 index k가 0일 때 (9.4)와는 다른 계산방식이 적용된다. k=0일 때를 가정하여 (9.4)를 다시 써보자. 

 

 

k=0일 땐 식 (10.1)과 같이 cos(0)=1이 되어 상수 1을 적분하는 꼴이 되고, (10.2)와 같이 cos함수가 사라진 형태로 정리할 수 있다. 기존의 (9.4)와 다른 점은 적분 앞의 상수가 PI에서 2PI로 바뀐 것 뿐이다. 여기서 a0를 구하는 식인 (10.2)를 잘 보면 f(x)를 에 걸쳐 적분을 해주고 이를 적분 구간과 같은 2PI로 나눠주는 것을 볼 수 있다. 이것이 의미하는 것은 결국 a0는 함수 f(x)의 평균값(average value)에 해당한다고 볼 수 있다. -$\pi$ ~ $\pi$의 구간에 걸쳐서 분포해있는 f(x)의 데이터들을 전부 더한 뒤(적분), 전체 구간 2PI로 나누어주었는데, 이 구간을 이산적으로(discrete)는 데이터 개수라고 볼 수 있다. 따라서 a0는 f(x)의 한 주기에서의 평균값(average value)으로 볼 수 있는 것이다. 

 

 

다음으로 sin함수의 계수에 해당되는 $b_k$를 구하는 방법을 알아보자. 이번에는 식 (2)의 양변에 sin함수를 곱해주고 양변을 한 주기(-$\pi$ ~ $\pi$)의 구간에서 적분을 해주면 된다. 아래의 식을 보자. 

 

 

식 (11.1)은 식 (2)의 양변에 sin함수를 곱한 모습, (11.2)는 양변을 삼각함수의 한 주기의 구간에서 적분을 하는 과정이다. (11.3)은 sin과 cos함수는 직교(orthogonal)이기 때문에 캔슬되고, sin(nx)sin(kx)와 같이 다른 주파수의 sin함수는 역시 직교의 관계이므로 0이 되어 제거되고, n=k일 때의 sin(kx)sin(kx)만 살아남은 모습이다. 이러한 과정을 거쳐 (11.4)와 같이 $b_k$를 구하는 식을 정리할 수 있다. $a_k$와 비교해보면 f(x)뒤에 곱해진 함수가 cos에서 sin으로 바뀌었을 뿐, 그 외의 것은 같다. 

 

이렇게 하여 푸리에 급수의 계수들을 구하는 방법에 대해 공부하였다. 푸리에 급수에 대한 식을 처음 정리했을 때는 식 (2)와 같은 형태였다. 하지만 a0의 경우엔 계산방식이 약간 다른 것을 배웠기 때문에 이를 고려하여 식을 다시 정리하면 아래와 같다. 

 

 

맨 처음 식 (2)에 표현했던 푸리에 급수 식에서 a0를 따로 앞으로 빼서 정리했기 때문에 (12.1)의 시그마에서 n=0이 n=1부터 시작하는 것을 볼 수 있다. 또는 함수 f가 어떤 임의의 주기 T를 가지는 함수라고 가정했을 때, (12.2)와 같이 일반적으로 표현할 수 있다. 즉 (12.2)에서 T=2PI인 경우가 (12.1)인 것이다. 또한 a0를 위한 식은 따로 있으나, b0에 대한 계산식이 따로 존재하지 않는 이유는 b0에 해당하는 값이 sin(0)=0이기 때문임을 기억하자. 이제 우리는 임의의 주기함수 f(x)를 위에서 정리한 계수 계산방법을 이용하여 sin과 cos함수의 선형결합(Linear combination)으로 표현할 수 있다. 다음 챕터에서 실제 주기 함수를 푸리에 급수를 이용하여 구현해보도록 하자. 

 

 

 

 

 

2. 푸리에 전개 및 구현(Fourier expansion and implementation)

 

- Square wave and Fourier expansion

 

Sine함수, Cosine함수 뿐만 아니라 세상에는 여러 가지 형태의 주기함수(periodic function)가 존재한다. 사각파(Square wave), 삼각파(Triangular wave), 톱니파(Sawtooth wave) 등 여러 가지 형태의 주기함수가 존재하지만, 그 중에 디지털 신호에서 가장 널리 사용되는 사각파를 푸리에 급수를 이용하여 만들어보자. 우리가 만들고자 하는 사각파의 형태는 아래 그림과 같다. 

 

 

Fig. 3 의 주기를 가지는 사각파(square wave)

 

 

Fig. 3은 사각파를 나타내며, 가로축은 시간축 t, 혹은 x로 나타내고, 세로축은 y혹은 진폭(Amplitude)의 A로 나타내기도 한다. 사각파는 2$\pi$의 주기를 가지며, -$\pi$ ~ 0의 구간에서는 -1의 진폭 값을, 0 ~ $\pi$구간에서는 1의 진폭값을 가진다. 

 

사각파를 구현하기 위해선 먼저 푸리에 급수를 이용하여 푸리에 전개(Fourier expansion)를 해야 한다. 이를 위해 사각파를 식으로 표현해보자. 

 

 

우리가 디지털 신호처리에서 많이 다뤄왔던 사각파의 정의는 (13.1)과 같다. 의 주기를 가지며, 0을 기준으로 좌측은 -1, 우측은 1의 값을 가진다. 이와 같은 패턴이 2PI를 주기로 반복되는 형태이다. 그러면서 동시에 사각파는 (13.2)를 만족시키는 기함수(odd function)이다. 기함수란 어떤 함수 f(x)에서 입력값인 x의 부호가 바뀌면 그에 대응되는 출력값 자체는 그대로이고 부호만 바뀌는 형태의 함수이며 -f(x)=f(-x)를 만족한다. 그래프상에서 보면 원점을 기준으로 대칭인 꼴이다. 대표적인 기함수로는 sin함수가 있으며 -sin(x)=sin(-x)를 만족한다. 

 

이와는 다르게 우함수(even function)인 것들도 존재하는데, f(x)=f(-x)를 만족하며, 함수 f의 입력값 x의 부호가 바뀌어도 출력값과 부호가 모두 동일한 함수를 의미한다. 그래프 상으로는 y축을 기준으로 대칭인 함수의 형태이며, 대표적인 우함수는 cos함수이고 cos(x)=cos(-x). 자세한 사항은 이곳을 참고하자. 

 

그런데 사각파가 기함수라는 것은 푸리에 급수에서 중요한 의미를 가지게 된다. 앞서 배웠듯이 푸리에 급수는 sin과 cos함수의 선형조합으로 표현할 수 있는데, 사각파는 기함수(odd function)이기 때문에 이를 표현하는데에 있어서 우함수인 cos함수는 존재할 필요가 없기 때문이다. 결국 사각파는 기함수인 sin함수와 계수 $b_k$들로만 구성이 된다. 과연 이것이 맞는지 확인하기 위해 실제로 계산을 해보자. 

 

 

식 (14.1)은 a0, (14.2)는 an의 계산식을 각각 나타낸다. a0와 an은 모두 푸리에 급수에서 cos함수에 곱해지는 계수인데, 계산 결과가 모두 0이 되는 것을 볼 수 있다. 결국 앞서 언급했듯이 사각파의 푸리에 급수에서 cos함수에 곱해지는 계수가 모두 0이 되기 때문에 cos함수는 무시할 수 있다. 식 (14.3)은 sin함수에 대한 계수 bn의 계산식을 나타낸다. an과 마찬가지로 사각파의 계수는 의 구간과 의 구간으로 나누어 계산하면 간단해진다. 

 

위의 계산식은 식 (12)에 정리한대로 계산하여 얻은 결과이다. 그런데 직접 계산을 해보지 않아도 어느 정도 예측할 수 있는 부분이 있다. 바로 기함수(odd function)와 우함수(even function)의 상관관계로 부터 유추할 수 있는 것이다. 아래는 기함수와 우함수의 연산과 적분에 관한 상관관계를 정리한 것이다. 

 



 기함수(odd function)와 우함수(even function)의 적분에 대한 상관관계 : 
  • 기함수와 우함수를 서로 곱하면 기함수가 된다. --- (15.1)
odd x even = odd
  • 기함수는 어떤 임의의 지점 L에 대하여 -L ~ L구간에서 적분하면 항상 0이 된다. --- (15.2)
  • 기함수와 기함수를 곱하면 우함수가 된다. --- (15.3)
odd x odd = even
  • 우함수는 어떤 임의의 지점 L에 대하여 -L ~ L구간에서 적분한 값은 0 ~ L구간에서 적분한 값의 2배가 된다. --- (15.4)
     
 

 

 

 

 


우선 정리 (15.1)은 식 (14.2)에 해당된다. 사각파 f(x)는 기함수(odd function)이고, cos은 우함수(even function)인데, 이 둘을 곱하면 기함수가 된다. 그런데 정리 (15.2)에서 기함수의 -L ~ L구간의 적분은 0이 된다고 하였고, 식 (14.2)의 결과 역시 0이 되었다. 종합해보면 사각파 f(x)와 cos의 곱은 기함수의 결과로 나타났으며, -L ~ L구간에서 적분한 결과가 0이 되는 것으로부터 이것이 기함수임을 확인할 수 있다.  또한 식 (14.1)은 사각파인 f(x)를 구간에서 적분한 것이 0이 된것인데, 사각파가 기함수이므로 정리 (15.2)에 의해 설명될 수 있음을 알 수 있다. 

 

식 (14.3)의 경우엔 기함수인 사각파 f(x)와 sin함수가 곱해졌다. 정리 (15.3)에 의하면 기함수와 기함수의 곱은 우함수가 되고, 정리 (15.4)에 의해 (14.3)의 의 적분이 구간에서의 적분의 2배임을 확인할 수 있다. (14.3)의 마지막 줄을 보면 앞에 2가 곱해져있는 것을 볼 수 있는데, 이것으로부터 정리 (15.4)가 성립함을 확인할 수 있다. 

 

이제 계수에 대한 식을 구했으니 사각파를 푸리에 전개(Fourier expansion)해 보도록 하자. 

 

 

식 (16.1)은 사각파에 대한 푸리에 급수식이다. cos함수의 계수인 an은 전부 0이 되기 때문에 cos함수에 대한 항은 모두 생략하였다. 식 (16.2)는 푸리에 급수를 전개한 것이다. n이 짝수일 때의 항은 전부 0이 되는 것을 볼 수 있고, 이를 정리하면 (16.3)과 같이 정리할 수 있다. n이 커짐에 따라 사각파에 점점 높은 주파수가 사각파에 섞여 사각파 형태를 이루게 된다. 

 

 

- MATLAB implementation

 

앞서 살펴봤던 사각파를 구현해보자. 아래는 사각파를 MATLAB 이용하여 구현한 모습이다.

 

 

 

Fig. 4 MATLAB을 이용하여 사각파(Square wave)를 구현한 모습

 

 

Fig. 4은 사각파(square wave)를 급수 항을 다르게 하여 그래프로 표현한 것을 나타낸다. 좌측 상단부터 우측 하단방향으로 급수 항을 늘려가며 그래프를 그린것이다. [1]번 그래프는 n=2까지 플롯한 모습인데, 그래프의 형태는 그냥 sin파와 동일해보인다. 이는 식 (16)에서와 같이 짝수 항은 0이 되어 사각파 형성에 아무런 영향을 끼치지 않기 때문이다. [2]번 그래프는 n=3까지 더한 모습인데, [1]번 그래프에 비해서 사각파 형태에 근접한 모습을 보인다. [3]번 그래프는 n=5까지, 마지막 [4]번 그래프는 n=10,000까지 더한 모습인데, 거의 완벽에 가까운 사각파의 모습을 보인다. n에 대한 항을 늘려나갈수록 고주파수의 sin파가 더해져서 우리가 원하는 모습의 파형을 만들어낼 수 있는 것이다. 

 

아래 그림은 사각파를 푸리에 급수(Fourier series)를 이용하여 구현한 MATLAB 코드이다. for문의 n을 비롯하여 각종 파라미터를 변경하여 테스트 해보도록 하자. 

 

 

 

 

3. 마치며(continue)

 

이번 강의에선 푸리에 급수와 직교성의 관계에 대해 공부했다. 푸리에 급수를 이용하여 복잡한 주기신호를 sin과 cos함수의 조합으로 표현할 수 있고, 그 핵심엔 sin과 cos의 직교성(orthogonality)이 있음을 배웠다. 또한 이 직교성은 선형대수에서 두 개의 서로 수직인 벡터의 내적으로 설명할 수 있음을 알아두자. 

다음 강의에선 이 직교성에 대해서 선형대수와 연결지어 추가적인 설명을 하도록 하고, 푸리에 급수의 sin과 cos 텀을 한 번에 처리할 수 있는 오일러 공식에 대해 배워보도록 하자. 

 

+ Recent posts