Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Embedded System/신호 및 시스템

[신호및시스템] Phase 2-1 - 주파수 도메인 분석 - 푸리에 급수

sm_amoled 2025. 9. 28. 17:17

주기함수란?

$T>0$ 인 어떤 $T$ 에 대해서, $x(t) = x(t + T)$ 를 모든 $t$에 대해 만족하는 함수.

푸리에 급수

내가 푸리에 급수에 대해서 배우게 될 줄이야… 내 인생이랑은 상관없는 녀석일 줄 알았는데, 학교 다닐 때 좀 더 브로드하게 공부를 해둘 걸 그랬다.

 

이전 글에서 테일러 급수에 대해서 공부했었다. 테일러 급수는 함수를 다항함수의 합으로 근사하여 풀어내는 방식을 말한다. 푸리에 급수는 테일러와 유사하게, ‘주기함수를 근사하는 것’을 목적으로 한다.

 

주기함수는 사이노소이드(Sinusoid)의 합으로 나타낼 수 있음이 알려져있다, 라고만 강의에서 하고 지나갔다. 나는 사이노소이드가 뭔지도 모르겠고, 그게 어떻게 주기함수를 표현해낼 수 있는지도 잘 모르겠어서 조금 더 찾아봤다.

사이노소이드 함수 (Sinusoid)

사이노소이드는 sin, cos 와 같은 형태를 가지는 함수를 말한다. 사이노소이드 함수는 아래와 같은 형태로 표현된다. (여기에서 위상만 조절하면 sin 으로 갈 수 있어서 cos로 표기한 듯)

 

$$
x(t) = A cos(\omega t+ \phi)
$$

  • $A$ : 진폭
  • $\omega$ : 각주파수 (얼마나 빨리 회전하는지)
  • $\phi$ : 위상

오일러 공식을 활용해서 사이노소이드 함수를 complex number 로 표현을 하면

$$
x(t) = Ae^{j(wt+\phi)} =Ae^{j\phi}e^{jwt}
$$

그리고 이 LTI 시스템에서의 출력은 다음처럼 표현할 수 있다.

$$
y(t) = H(\omega)e^{j\omega t}
$$

입력과 출력에 대해서 동일한 주파수 $\omega$ 를 이용하고 있고, 단순히 진폭과 위상값만 변경되는 것을 알 수 있다. 즉 주파수는 유지됨!

푸리에 표현하기

$$
x_{T_0}(t) = \dots + a_{-2}e^{j(-2)\omega t} + a_{-1}e^{j(-1)\omega t} + a_{0} + a_{1}e^{j(1)\omega t} + \dots = \sum_{k=-\infty}^{\infty}a_ke^{jk\omega t}
$$

여기에서 $\omega$ 는 각의 회전 속도를 나타낸다 ( ($\omega = 2\pi f$). 위 식은 $x$ 신호를 $f$ 주파수의 정수배 주파수를 가지는 sinusoid 의 합으로 나타내었다고 볼 수 있다.

 

그렇다면 2가지 질문이 발생한다.

  • 모든 주기함수를 위 푸리에 급수로 표현할 수 있을까?
  • 각 주기함수가 어떤 푸리에 급수와 1대1로 대응될까? (하나의 주기함수를 여러 방식으로 표현 가능한가?)

벡터 공간으로 확장하기

푸리에 급수에 사용되는 k 번째 항의 sinusoid는 $e^{jk\omega_0t}$ 이렇게 작성된다. (물론 이걸 풀어서 삼각함수로 다시 작성하면 $sin(\omega_0kt + \phi) + jcos(\omega_0kt+\phi)$ 가 되겠지만 )

$e^{jk\omega_0t}$ 가 벡터라면 여러가지 성질들을 또 이용할 수 있게된다. 그렇다면 이 sinusoid는 벡터일까?

벡터임을 만족하려면 다음의 요건을 따를 필요가 있다.

  • 벡터 8가지 공리를 만족
  • vec.add / scal.mul 연산에 대해 닫혀있다 (그 결과가 동일한 set에 속한다)

위 정의에 따르면, 사실 실수도 벡터이다! 일반적으로 내가 알고있던 ‘벡터’는 Euclidian Vector이고, 이건 벡터의 한 종류일 뿐임!!

그렇다면 $k$ 가 정수인 경우에 대해서 우리의 set을 가정해보자.

  • 복소수 $a$ 에 대해서, $ae^{jk\omega_0t}$ 는 동일한 set에 속한다.
  • 복소수 $a, b$ 에 대해서 $ae^{jk\omega_0t} + be^{jr\omega_0t}$ 는 동일한 set에 속한다.
  • 그렇다면 $\sum a_ke^{jk\omega_0t}$ 는 동일한 set에 속하므로, 덧셈과 스칼라곱 연산에 대해 닫혀있다.

 

이러한 기본 연산 이외에도 공리에 대해 만족하는지를 살펴봐야한다.

위 조건들을 만족한다면 $e^{jk\omega_0t}$ 를 이제 ‘벡터’ 라고 부를 수 있게된다.

inner product space

inner product space는 inner product를 정의할 수 있는 벡터 공간을 말한다.

inner product space라고 부르기 위해서는 set 내에 있는 벡터들이 4가지 조건을 만족해야한다.

  • $\langle x, y \rangle = \overline{\langle y, x \rangle}$ : 내적의 순서를 바뀌도 동일하다
  • $\langle ax, y \rangle = a\langle x, y \rangle$
  • $\langle x + z, y \rangle = \langle x, y \rangle + \langle z, y \rangle$
  • $\langle x, x \rangle > 0, x \in V \backslash {0}$

앞서 우리가 정의했던 ${e^{jk\omega_0t}} \text{where } k \in \Z$ 는 inner product space에 속한다.

 

어떻게 inner product space에 속하냐?

에 대해서는 강의에서 다루지 않았던 내용이라 빠르게 찾아보았다. 우선 내적연산은 다음과 같이 정의된다.

$$
\langle f, g\rangle = \int_Tf(t)\overline{g(t)}dt
$$

 

단, 여기에서 복소 벡터의 내적을 통해서 얻고자 하는 것이 내적된 벡터의 크기인데, 복소수 i 의 영향을 받아서 크기 값이 음수로 나오는 것을 방지하기 위해, 켤레복소수를 곱해준다.

 

 

1번 조건

$\langle x, y\rangle = \int_Tx(t)\overline{y(t)}dt = \int_Te^{jk\omega_0t}e^{-jr\omega_0t}dt = \int_Te^{j(k-r)\omega_0t}dt$

$\langle y, x\rangle = \int_Ty(t)\overline{x(t)}dt = \int_Te^{jr\omega_0t}e^{-jk\omega_0t}dt = \int_Te^{j(r-k)\omega_0t}dt$

$\overline{\langle y, x\rangle} = \int_Te^{-j(r-k)\omega_0t}dt = \int_Te^{j(k-r)\omega_0t}dt = \langle x, y\rangle$

따라서 1번 조건을 만족한다.

 

2번 조건

$\langle af, g \rangle = \int_T af(x)\overline{g(x)}dt = a\int_T f(x)\overline{g(x)}dt = a\langle f, g \rangle$

따라서 2번 조건을 만족한다.

 

3번 조건

$\langle f+h, g \rangle = \int_T (f(x) + h(x))\overline{g(x)}dt = \int_T f(x)\overline{g(x)}dt + \int_T h(x)\overline{g(x)}dt = \langle f, g \rangle + \langle h, g \rangle$

따라서 3번 조건을 만족한다.

 

4번 조건

$\langle x, x\rangle = \int_Tx(t)\overline{x(t)}dt = \int_Te^{jk\omega_0t}e^{-jk\omega_0t}dt = \int_T1dt = T$ 이므로$\langle x, x\rangle > 0$ 이다.

따라서 4번 조건을 만족한다.

 

좋았어, 4가지 조건이 만족한다는 것을 확인했으므로 우리가 정의한 set인 ${e^{jk\omega_0t}} \text{where } k \in \Z$ 이 inner product space 임을 확인하였다.

inner product space의 특징

inner product space에 속하는 벡터에 대해서는 이제 ‘크기’와 ‘각도’에 대해서 논할 수 있게 된다. 즉, 우리가 구성하려고 하는 사이노소이드 함수 $e^{jk\omega_0t}$ 벡터의 크기와 각도에 대해서 구하고 비교할 수 있게 된다.

위 성질을 이용하기 위해 아래 2개의 사이노소이드의 내적에 대해 생각해보자.

$$
⟨e^{jk_1ω_0t},e^{jk_2ω_0t}⟩ = ∫_0^Te^{j(k_1−k_2)ω_0t}dt
$$

위 식의 부정적문을 먼저 생각해보면 다음과 같이 정리할 수 있다. (지수함수의 적분을 이용)

$$
{{1}\over{j(k_1-k_2)\omega_0}}\cdot e^{j(k_1-k_2)\omega t} + C
$$

적분구간 T에 대해서, 기본적인 주기인 T가 $T = {{2\pi}\over{\omega_0}}$ 이라고 하면 $\omega_0T = 2\pi$ 로 정리할 수 있다. 이를 이용해서 적분을 계산해본다면

$$
{{1}\over{j(k_1-k_2)\omega_0}}\cdot (e^{j(k_1-k_2)\omega_0 T} - e^{0})
$$

여기에서 e의 지수형태로 되어있는 수식을 오일러 공식을 적용해 다시 sin, cos 으로 복구를 시킨다면 괄호 안에 있는 식은 이렇게 정리할 수 있다.

$$
sin((k_1-k_2) \cdot 2\pi) - sin(0)
$$

그리고 여기에서 모든 $k$ 가 정수이기로 이미 set을 정의하였으므로, $k_1 - k_2$ 도 정수이고, 주기를 $2\pi$로 가지기 때문에 두 항의 차는 0, 적분값도 0이 된다.

여기에서 유의할 점! 만약 내적하려는 두 벡터가 동일하다면 그 내적(적분) 결과는 T가 된다.

$$
⟨e^{jk_1ω_0t},e^{jk_1ω_0t}⟩ = ∫_0^Te^{j(k_1−k_1)ω_0t}dt = ∫_0^Te^{0}dt = ∫_0^T 1 dt = T
$$

 

그러면 위 식은 아래처럼 정리할 수 있다. 즉, 모든 사이노소이드들은 ‘직교’ 하는 상태이다.

$$
⟨e^{jk_1ω_0t},e^{jk_1ω_0t}⟩ = \begin{cases}0 & \text{if } k_1 \ne k_2 \ T & \text{if }k_1=k_2
\end{cases}
$$

 

여기에서 사이노소이드의 직교가 중요하는 이유는 성분 분석으로 활용할 수 있기 때문이다. 만약 4차원의 어떤 벡터가 있다고 하고, 이를 각 차원으로 성분 분석을 하는 과정은 아래와 같다.

$$
\begin{bmatrix} a\\b\\c\\d \end{bmatrix} = a\cdot\begin{bmatrix} 1\\0\\0\\0\end{bmatrix} + b\cdot\begin{bmatrix} 0\\1\\0\\0\end{bmatrix}+c\cdot\begin{bmatrix} 0\\0\\1\\0\end{bmatrix}+d\cdot\begin{bmatrix} 0\\0\\0\\1\end{bmatrix}
$$

 

주어진 모든 사이노소이드가 현재 공간에서 ‘직교’하고 있다는 것은 서로 공통된 성분이 없다는 것을 의미한다. 또, 모든 사이노소이드가 동일한 크기를 가지고 있다. 따라서 사이노소이드를 해당 차원(공간)을 구성하는 기본 성분으로 활용한다면 원하는 형식을 만들어낼 수 있다. 다시 수식으로 정리해보자면, ‘무한 개의 사이노소이드를 신호 $x(t)$에서 필요한 만큼만 더하면($a_k$) 해당 신호를 만들어낼 수 있음’을 의미한다. 무려 무한 개의 차원을 표현할 수 있다!

$$
x(t) = ∑_{k = -\infty}^{\infty}a_ke^{jkω_0t}
$$

그러면 각 성분(사이노소이드)이 얼만큼 신호를 구성하고 있는지를 알아내는 방법은? 단순히 해당 사이노소이드 방향으로 내접을 해보면 된다. (3, 2)를 x축 방향의 단위벡터(1, 0)이 3만큼, y축 방향 단위벡터(0, 1)이 2만큼 구성하고 있음을 생각하면 당연한 논리이다.

$$
⟨x(t),e^{jmω_0t}⟩=⟨∑_ka_ke^{jkω_0t},e^{jmω_0t}⟩=\dots+0+0+a_m\cdot T + 0+\dots=a_m\cdot T
$$

그러면 이제 T를 다시 좌변으로 넘겨서 쭉쭉 식을 전개해주면 각 사이노소이드 항의 성분인 $a_m$ 를 찾을 수 있다.

$$
a_m = {{1}\over{T}}\int^T_0⟨x(t),e^{jmω_0t}⟩ = {{1}\over{T}}\int^T_0x(t)e^{-jm\omega_0t}dt
$$

 

다시 2가지 질문으로 돌아가서

다음 질문에 대해 답변을 할 수 있을까?

  • 모든 주기함수를 위 푸리에 급수로 표현할 수 있을까?
    • 정말정말 거의 대부분의 주기함수를 푸리에 급수로 표현할 수 있다. 다만 표현하지 못하는 주기함수도 존재한다.
    • 그러나, practical 한 영역에서 실제로 사용되는 주기함수는 모두 푸리에 급수로 표현할 수 있다고 봐도 된다.
  • 각 주기함수가 특정한 푸리에 급수와 1대1로 대응될까? (하나의 주기함수를 여러 방식으로 표현 가능한가?)
    • 이 말은 주기함수 $x_{T_0}(t)$ 가 있을 때, 어떤 a 집합인 ${ a_k}$ 와 동치인가? 라는 의미이다. (서로 교환 가능하냐?)
    • 현재 가지고 있는 사이노소이드의 형태를 보면, $a_1=1$ 이라고 하더라도 $e^{jw_0t}$ 에서 $\omega_0$ 이 변수로 남아있다. 신호의 주파수가 바뀐다면 정확히 이 형태로 만들어낼 수 없기 때문에 동치라고 할 수 없다.
    • 따라서, 만약 신호의 주파수인 $T_0$가 주어진다면 동치라고 볼 수 있다.

 

샤라웃

https://www.youtube.com/playlist?list=PL_iJu012NOxcDuKgSjTKJZJd3bQtkAyZU

 

혁펜하임의 “퍼펙트” 신호 및 시스템 (Signals & Systems)

수백명의 A+를 배출한 미친 강의!

www.youtube.com

 

320x100