Impulse Train으로 신호 뽑아내기
Impulse 임펄스 함수 $\delta$
임펄스 함수$\delta(t)$ 란 $t=0$ 에서만 무한대의 크기를 가지고, 나머지 모든 시간에서는 0의 크기를 가지는 아주 뾰족한 함수를 말한다.
- $t=0$ 에서의 크기는 무한대.
- 그러나, 해당 지점에서의 가로폭이 매우 작아 함수의 그래프 면적 자체는 무한대가 아님.
- 전체 시간에 대해서 적분했을 때 면적이 1이 된다.

ㅤ
임펄스 함수는 신호 함수에서 특정한 시점의 신호 값을 뽑아내는 ‘추출 함수’ 의 역할을 수행할 수 있다. 아래 수식은 전체 x 신호에 대해서 $t_0$ 만큼 가로로 이동한 델타 함수를 곱해 $t_0$ 에서의 신호 세기를 뽑아내는 과정을 보여준다.
$$
\int^{\infty}_{-\infty}x(t)\delta(x-t_0)dt = x(t_0)
$$
ㅤ
Impulse Train
Impulse Train (또는 delta train)은 일정한 간격으로 반복되는 임펄스 함수의 합. 임펄스 함수의 추출 방식을 동일하게 사용하면 일정한 간격으로 신호의 값들을 추출해낼 수 있다.

- $T_0$ : 샘플링 주기
- $f_0$ : 샘플링 주파수 ($\frac{1}{T_0}$)
ㅤ
연속 신호와 Impulse Train의 곱
- $p(t)$ : 샘플링 주기를 $T_0$를 가지는 Impulse Train 함수
- $x_s(t)$ : 샘플링한 신호 (아직 연속함수)
$$
x_s(t) = x(t) \cdot p(t) = x(t) \cdot \sum_{n=-\infty}^{\infty}\delta(t-nT_0)\
x_s(t) = \sum_{n=-\infty}^{\infty}x(t)\cdot \delta(t-nT_0)\
=\sum_{n=-\infty}^{\infty}x(nT_0)\cdot \delta(t-nT_0)
$$
(신호함수 $x(t)$ 의 나머지는 모두 0으로 제거되므로, $x(nT_0)$ 에 대해서만 신호를 곱해주면 된다.)
$$
x_s(t)=\sum_{n=-\infty}^{\infty}x(nT_0)\cdot \delta(t-nT_0)
$$
ㅤ

ㅤ
위 그림에서 보이는 것처럼, 신호 함수 $x(t)$에 Impulse Train 함수를 곱하면 $T_0$를 간격으로 삐죽삐죽한 모양을 그리는 연속함수 $x_s(t)$를 얻을 수 있다.
ㅤ
그러나, 여전히 해당 시점의 신호의 세기(함수값)만 뽑아내는게 아니라 연속 함수로 뾰족뾰족하게 함수값들을 보여주는 함수가 된다. 이제 여기에서 양자화 과정을 거쳐서 측정 값을 디지털 코드로 변환해주어야 한다. (시리얼화 필요함)
ㅤ
Impulse Train To Sequence
현재 변환한 시간 함수 $x_s(t)$ 는 여전히 임펄스들의 합으로 표현된 연속 시간 신호이다. 물리적으로는 “시간 축 상에 존재하는 임펄스들” 정도로 볼 수 있다. 그러나, MCU에서 이 정보들을 디지털 데이터로 활용하기 위해서는 이산 데이터로 분리할 필요가 있다. 다시 말해, 데이터를 연속 시간에서 이산 시간으로 보낼 필요가 있다.
$$
x_s(t) \rightarrow x[n]
$$

ㅤ
샘플링된 신호 시퀀스 $x[n]$ 는 다음의 특징을 가진다.
- 연속 데이터가 아닌 이산 도메인의 데이터이기에, [ 대괄호 ] 를 사용해 표기한다.
- 시간 정보를 제거하여, 인자로 시간 $t$ 대신에 index 번호 $n$ 을 사용한다.
- 임펄스를 제거하여, 단순하게 $x[n] = x(nT_0)$ 의 값을 가진다.
ㅤ
이렇게 변환하면 푸리에 변환의 적용이 매우 단순해진다. $\Omega$ 는 여기에서 물리적인 각주파수 (rad/s) 를 말한다. 물리적인 주파수는 샘플링 주파수와 이어지는 데이터로, $\Omega_s = \frac{2\pi}{T_0}$에 따라 샘플링 주파수가 변경된다면 $X(\Omega)$ 의 주기도 함께 변경된다는 단점이 있다.
$$
X(\Omega) = \sum_{n=-\infty}^{\infty}x[n]\cdot e^{-j\Omega n}
$$
ㅤ
물리적인 각주파수 대신에 정규화된 각주파수 $\omega$를 사용하여 아래처럼 표현해줄 수도 있다. 이 경우에는 샘플링 주파수와 상관없이 항상 주기를 $2\pi$ 로 가지며, $\omega \in [0, 2\pi)$ 의 범위에 대해서만 고려해주면 된다.
$$
X(e^{j\omega}) = \sum_{n=-\infty}^{\infty}x[n]\cdot e^{-j\omega n}\\text{이때 }\omega=\Omega T_0 \text{ and }\omega \in [0, 2\pi)`
$$
ㅤ
이 두 식의 차이와 의미를 계속 생각해봤는데, 나는 나름대로 아래의 결론을 내렸다.
ㅤ
복소 평면에서 회전하는 그래프를 생각했을 때, $\Omega$ 를 인자로 받는 녀석은 $-\infty$ 에서부터 $\infty$ 까지의 주파수에 대해서 일치하는 정도를 찾는다. 아래 그래프에서 $cos(t)$ 함수의 샘플링에 최대가 되는 주파수를 찾아보려고 하면 이렇게 여러 개의 주파수를 찾을 수 있다.

ㅤ
그런데, $\omega$ 를 인자로 받는 녀석은 단순히 0
$2\pi$ 까지의 주파수에 대해서만 일치하는 정도를 찾는다. 어차피 이게 샘플링된 주파수이기 때문에 정확한 주파수를 찾을 수는 없다. 그래서 0
$2\pi$ 범위에 대해서 주파수의 파형만 판단한다. 그 다음에 $\omega = \Omega T_0$ 에서 $\Omega$ 와 $T_0$ 의 값의 밸런스를 조정해주면서 값을 찾으면 되니깐.
ㅤ
그리고 이 $\omega$ 값은 각주파수를 의미하기 때문에, $\frac{3}{2}\pi = -\frac{1}{2}\pi$ 만큼 회전한 것이라고 볼 수 있다. 그래서 매 샘플마다 $\pi$ 만큼 회전하는 경우 (1,0)→(-1,0) 을 반복하기에 가장 빠르게 회전하는 주파수라고 생각할 수 있다.
ㅤ
물론 이게 연속 신호에 대해서 값을 찾는 상황이였다면 단 하나의 주파수가 튀어나오겠지만, 지금은 ‘샘플’에 대해서 주파수를 추측하고 있기 때문에 위 그림처럼 여러 개의 주파수가 해답으로 제시될 수 있는 상황이라 그냥 정규화된 $\omega$ 를 구하고, $\Omega$와 $T_0$ 를 선택하는게 더 나은 방법일 것이라 생각된다.
ㅤ
실제로는?
실제로는 ADC (Analog to Digital Converter) 에서 $T_0$ 마다 신호의 크기를 측정해서 메모리에 저장한다. 즉, 이런 복잡한 Impulse Train과의 곱 같은걸 안하고, 그냥 신호의 세기를 가져온다. 😮😮😮😮
ㅤ
그런데 이걸 수학적으로 표현하고 분석해내기 위해서 Impulse Train과의 곱셈 후 표기방법을 sequence로 변환하는 과정을 거친다고 말을 한 것이다.
- 푸리에 변환을 적용할 수 있음 (Impulse Train의 푸리에 변환이 간단함)
- 주파수 영역 분석 가능 (Aliasing, Nyquist 정리 등을 유도해낼 수 있음)
- 원본 복원에 대한 분석 가능
ㅤ
나는 지금까지 이해 과정을 거치면서 ADC는 이런 일을 하는구나! 아~~ 하고 있었는데, 그런게 아니였어… 그냥 쉽게 해석하기 위한 도구였을 뿐이였다… 어쩐지 처음에는 그냥 값 가져오면 되는거 아닌가 했는데 역시나 이런 이유가 숨어있었네.
ㅤ
'Embedded System > 신호 및 시스템' 카테고리의 다른 글
| [신호및시스템] Phase 4-3 - 이산 신호처리 파이프라인 (0) | 2025.10.14 |
|---|---|
| [신호및시스템] Phase 4-2 - 샘플링 복원 (0) | 2025.10.14 |
| [신호및시스템] Phase 3-3 - Fast Fourier Transform (0) | 2025.10.07 |
| [신호및시스템] Phase 3-2 - 이산 푸리에 변환 (0) | 2025.10.07 |
| [신호및시스템] Phase 3-1 - 이산시간 푸리에 급수와 푸리에 변환 (0) | 2025.10.04 |