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

Embedded System/신호 및 시스템

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

sm_amoled 2025. 10. 4. 16:42
300x250

푸리에 변환

비주기함수란?

비주기함수 : 신호의 주기가 $T\rightarrow \infty$ 인 주기함수

푸리에 변환 식 구하기

푸리에 급수는 아래 식의 형태로 표현이 된다. 무한개의 차원으로 구성된 공간에서 각 단위 벡터$e^{jk\omega_0t}$들이 얼마나($a_k$) 성분을 이루고 있는지를 더하여 구할 수 있음을 식으로 표현한 것이다.

$$
f(t) = \sum_{k=-\infty}^{\infty}a_ke^{jk\omega_0 t}
$$

  • $\omega_0$ : 각주파수 ${2\pi}\over{T}$
  • $T$ : 주기
  • $a_k$ : 푸리에 계수

각각의 푸리에 계수는 아래 식의 형태로 표현할 수 있다. 하나의 주기 속에서 ($-{{1}\over{T}}$ ~ ${{1}\over{T}}$) 각 시점의 신호와 n 번째 단위벡터와의 내적의 결과를 합한 결과가 푸리에 계수이다. 푸리에 계수는 하나의 주기에서 n번째 단위벡터가 얼마나 $f(t)$ 와 닮았는지 (성분으로 가지는지)를 나타낸 값이다.

$$
a_n={{1}\over{T}}∫_{−T/2}^{T/2}f(t)⋅e^{−jnω_0t}dt
$$

그러면 위 식에서,

  • T가 점점 커져서 거의 무한에 가까이 커졌다면, $\omega_0$ 의 값은 어떻게 될까?
    • $\omega$ 가 $T$의 역수이므로, $\omega$의 값은 0과 가까워진다.
  • 푸리에 급수에서 각 주파수 성분은 $\omega_0$, $2\omega_0$, $3\omega_0$, … 이렇게 떨어져서 이산적으로 분해된다. 만약 $\omega_0$의 값이 작아진다면 어떻게 될까?
    • 주파수의 간격이 매우 세밀해져서, 연속적인 주파수라고 볼 수 있게 된다.

푸리에 급수 식에 푸리에 계수를 합치면 다음과 같아진다.

$$
f(t) = \sum_{k=-\infty}^{\infty}\left[\frac{1}{T}\int_{-T/2}^{T/2}f(\tau)\cdot e^{-jk\omega_0\tau}d\tau\right] e^{jk\omega_0 t}\\
= \sum_{k=-\infty}^{\infty}\left[\frac{\omega_0}{2\pi}\int_{-T/2}^{T/2}f(\tau)\cdot e^{-jk\omega_0\tau}d\tau\right] e^{jk\omega_0 t}
$$

여기에서 우리가 극한으로 보내려는 값들을 이용하자.

$n\omega_0$ 를 하나의 연속 변수 $\omega$ 로 본다면

  • $T\rightarrow\infty$ 이라면 주파수가 작아지므로 $\omega_0\rightarrow 0$ 가 된다.
  • $\omega_0$ 은 각각의 주파수의 간격인 $\Delta\omega$ 라고 볼 수 있다.

$$
f(t) = \sum_{k=-\infty}^{\infty}\left[\frac{\omega_0}{2\pi}\int_{-T/2}^{T/2}f(\tau)\cdot e^{-jk\omega_0\tau}d\tau\right] e^{jk\omega_0 t}\\
= \sum_{k=-\infty}^{\infty}\left[\frac{1}{2\pi}\int_{-T/2}^{T/2}f(\tau)\cdot e^{-jk\omega_0\tau}d\tau\right] e^{jk\omega_0 t}\cdot\omega_0
$$

여기에서 $T\rightarrow\infty$, $\Delta\omega\rightarrow 0$ 을 적용해주면

$$
f(t) = \lim_{\Delta\omega\rightarrow 0}\sum_{k=-\infty}^{\infty}\left[\frac{1}{2\pi}\int_{-\infty}^{\infty}f(\tau)\cdot e^{-j\omega\tau}d\tau\right] e^{j\omega t}\cdot\Delta\omega\\
= \frac{1}{2\pi}\int_{-\infty}^{\infty}\left[\int_{-\infty}^{\infty}f(\tau)\cdot e^{-j\omega\tau}d\tau\right] e^{j\omega t}d\omega
$$

여기에서 괄호 안에 있는 수식이 푸리에 변환인 $F(\omega)$이다. 그리고 원래 수식에 이 푸리에 변환을 넣으면 역푸리에 변환이 된다.

$$
F(\omega) = \int_{-\infty}^{\infty}f(t)\cdot e^{-j\omega t}dt
$$

$$
f(t) = \frac{1}{2\pi}\int_{-\infty}^{\infty}F(\omega) e^{j\omega t}d\omega
$$

푸리에 변환과 역푸리에 변환의 의미

비교를 위해 앞서 구했던 푸리에 계수 식부터 살펴보자. 이 식은 결국에는 하나의 '숫자'를 나타낸다. 의미는 '특정 주파수 $\omega_0$ 에서의 진폭'을 나타낸다. 즉, 특정한 신호함수 $f(t)$에 대해서 $k$번째 성분을 얼마나 가지고 있는가? 이다.

$$
a_n=\frac{1}{T}\int_{-T/2}^{T/2}f(t)\cdot e^{-jn\omega_0 t}dt
$$

푸리에 변환식은 복잡해 보이지만, 결국에는 '함수'이다. 수식을 잘 살펴보면, 신호함수 $f(t)$ 와 주파수 $\omega$ 를 구성하는 단위벡터들의 내적의 합이 푸리에 변환이다. 즉, 신호 $f(t)$가 주파수 $\omega$ 의 성분을 얼마나 포함하고 있는가? 를 나타낸다. $F$ 의 값이 크다는 것은 해당 주파수의 성분을 많이 포함하고 있다는 것이고, 0에 가까울수록 거의 성분이 없음을 의미한다.

$$
F(\omega) = \int_{-\infty}^{\infty}f(t)\cdot e^{-j\omega t}dt
$$

푸리에 변환과 역푸리에 변환의 의미

비교를 위해 앞서 구했던 푸리에 계수 식부터 살펴보자. 이 식은 결국에는 하나의 ‘숫자’를 나타낸다. 의미는 ‘특정 주파수 $\omega_0$ 에서의 진폭’을 나타낸다. 즉, 특정한 신호함수 $f(t)$에 대해서 $k$번째 성분을 얼마나 가지고 있는가? 이다.

$$
a_n={{1}\over{T}}∫_{−T/2}^{T/2}f(t)⋅e^{−jnω_0t}dt
$$

푸리에 변환식은 복잡해 보이지만, 결국에는 ‘함수’이다. 수식을 잘 살펴보면, 신호함수 $f(t)$ 와 주피수 $\omega$ 를 구성하는 단위벡터들의 내적의 합이 푸리에 변환이다. 즉, 신호 $f(t)$가 주파수 $\omega$ 의 성분을 얼마나 포함하고 있는가? 를 나타낸다. $F$ 의 값이 크다는 것은 해당 주파수의 성분을 많이 포함하고 있다는 것이고, 0에 가까울수록 거의 성분이 없음을 의미한다.

$$
F(\omega) = ∫_{-\infty}^{\infty}f(t)⋅e^{−j\omega t}dt
$$

푸리에 변환의 성질

시간 이동 (Time Shifting)

신호가 시간축에서 지연이 되더라도 주파수 스펙트럼의 크기는 변하지 않고 위상만 변한다. $f(t-t_0)$ 에 대한 푸리에 변환식을 유도해보면 다음과 같다. 변환 과정에서는 $\tau=t-t_0$ 임을 이용한다.

$$
F' = \int_{-\infty}^{\infty}f(t-t_0)\cdot e^{-j\omega t}dt\\
= \int_{-\infty}^{\infty}f(\tau)\cdot e^{-j\omega (\tau+t_0)}d\tau\\
= \int_{-\infty}^{\infty}f(\tau)\cdot e^{-j\omega \tau}d\tau \cdot e^{-j\omega t_0}\\
= F(\omega)\cdot e^{-j\omega t_0}
$$

이때 푸리에 변환에서 중요한 것은 절대값 크기이다. (성분이 '얼마나 들었는지'를 알기 위해서)

$$
\vert F'\vert = \vert F(\omega)\cdot e^{-j\omega t_0}\vert = \vert F(\omega)\vert \cdot \vert e^{-j\omega t_0}\vert = \vert F(\omega)\vert
$$

복소평면 상에서 $e^{j\omega t}$의 크기는 항상 1이므로, $F'$ 의 크기는 기존의 $F(\omega)$ 와 동일하므로, 시간 이동이 발생하면 위상은 변할 수 있더라도 크기는 변하지 않는다.

시간 이동은 센서의 신호 이동, 통신 시스템의 전파 지연이 발생하더라도 에너지 분포에 영향을 주지 않음을 보이는 특성이다.

주파수 이동 (Frequency Shifting)

시간 신호에 복소 지수를 곱하면, 주파수 영역에서 전체적인 주파수 스펙트럼이 이동한다. 즉, 모양은 그대로 유지하되 주파수 범위를 이동시킬 수 있다.

$f(t) \cdot e^{j\omega_0t}$ 에 대한 퓨리에 변환을 $F'$ 라고 한다면,

$$
F' = \int_{-\infty}^{\infty}e^{-j\omega_0t}\cdot f(t)\cdot e^{-j\omega t}dt\\
= \int_{-\infty}^{\infty}f(t)\cdot e^{-j(\omega - \omega_0)t}dt\\
= F(\omega-\omega_0)
$$

즉, 주파수 $\omega_0$ 만큼에 대한 복소 지수를 곱하면 푸리에 변환은 주파수에 대해서 $\omega_0$ 만큼 평행 이동한 것과 동일하다.

주파수 이동은 AM 변조, 주파수 혼합 처럼 저주파를 고주파로 변경하거나 주파수를 변환했을 때에 신호의 형태에 영향을 주지 않음을 보여준다.

컨볼루션 정리 (Convolution Theorem)

시간영역에서의 두 신호 함수간의 컨볼루션 연산은 아래 식으로 정의된다.

$$
(f*g)(t) = \int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau
$$

$f*g$ 의 퓨리에 변환을 $F'$ 라고 한다면,

$$
F' = \int_{-\infty}^{\infty}\left[\int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau\right] e^{-j\omega t}dt\\
= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}g(t-\tau) e^{-j\omega t}dt\right] d\tau
$$

 

여기에서 $u = t-\tau$ 로 치환하면

 

$$
= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}g(u) e^{-j\omega (u+\tau)}du\right] d\tau\\
= \int_{-\infty}^{\infty}f(\tau)e^{-j\omega \tau}\left[\int_{-\infty}^{\infty}g(t-\tau)d^{-j\omega u} dt\right] d\tau\\
= \left[\int_{-\infty}^{\infty}f(\tau)e^{-j\omega \tau} d\tau\right]\left[\int_{-\infty}^{\infty}g(u)d^{-j\omega u} du\right]\\
=F(\omega)\cdot G(\omega)
$$

 

즉, $(f*g)(t)$ 의 푸리에 변환은 $F(\omega)\cdot G(\omega)$ 이다.

컨볼루션 정리가 임베디드에서는 가장 중요한 컨셉이다!

컨볼루션과 푸리에

사실 아직 컨볼루션 정리에 대해서 명확하게 이해를 한 것 같지는 않아서, 조금 더 찾아봤다.

https://youtu.be/9i6aDdQ9FTQ

여기 영상에서 컨볼루전에 대해 되게 잘 설명해준 것 같아서 크게 도움을 받았다.

$$
(f*g)(t) = \int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau
$$

위 식을 잘 보면, 특정 시각 $t$ 에 대해서 $\tau$ 를 움직이면서 그 함수를 적분한 값을 취하고 있다. 이는 다시 한 번 이렇게 정리할 수 있다.

  • 특정 시점의 t에 대해서 $\tau$ 를 무한까지 키워가면서 신호의 곱을 수행한다.
  • $t$를 무한대까지 키워가면서 $g$ 함수를 sliding 을 하며 곱을 수행하는데, 각 $t$ 에서의 그래프의 너비가 $f*g$ 가 된다.
  • 즉, $f*g$ 그래프의 형태는 $g$를 슬라이딩 하면서(위상을 바꾸면서) $f$ 와 곱했을 때의 값의 변화를 보여준다.

겨기에서 복잡한 신호인 $f(x)$를 수 많은 작은 임펄스의 합으로 볼 수 있다는 컨셉 하에 수식으로 만든 것이 컨볼루션임!

$$
y(t) = x(t) * h(t)= \int^{\infty}_{-\infty}x(\tau)\cdot h(t-\tau)d\tau
$$

또, 임의의 신호 $f(x)$ 를 엄청나게 많은 작은 임펄스들의 합으로 표현할 수 있다는 것도 컨볼루션의 핵심이였다.

$$
f(t) = \int^{\infty}_{-\infty}f(\tau)\cdot \delta (t-\tau)d\tau
$$

사실 이쯤 되니깐 이 식의 의미가 이제 이해가 되는 것 같다. $f(\tau)$는 $\tau$ 시점에 들어오는 임펄스 신호의 세기이고, $\delta(t-\tau)$ 는 각 임펄스 신호의 세기가 지속되는 형태 (어떤 시점에 값이 얼마나 남아있는가) 를 표현하는 것임. 두 값의 곲은 $\tau$ 시점에 들어온 신호가 t 시점까지 어느정도로 남아있는가? 를 의미하는 것이 이제야 보인다.

근데, 푸리에는 이거랑 비슷하게 생기긴 했지만 슬라이딩과는 전혀 다른 의미를 가지고 있다고 판단한다.

$$
F(\omega) = ∫_{-\infty}^{\infty}f(t)⋅e^{−j\omega t}dt
$$

푸리에 변환에서는 특정한 주파수 $\omega$ 를 잡고, $\omega$ 에서 각 단위 복소지수로의 내적값의 합을 구하는 과정이다.그래서 이 신호가 $\omega$ 주파수를 얼마나 포함하고 있는지(신호에 포함된 주파수$\omega$의 강도)를 알 수 있다.

클로드랑 이야기하면서 내가 컨볼루션과 푸리에 변환에 대해서 계속 헷갈려하니깐 차이가 있습니다! 차이가 있습니다! 를 외쳐댔는데, 이해를 어느정도 하고나서 보니 내가 계속 헛다리를 짚고있었다는게 보인다. ㅋㅋㅋ

320x100