Fundamentals of digital signal processing

Table of Contents

  1. Signal and system
  2. Signal processing
  3. Classification of signal
  4. Sinusoids
  5. Energy and power
  6. Decibel
  7. Summary

신호는 우리의 일상 속에서 항상 존재한다. 지금 이 글을 읽는 것도 모니터에서 나오는 빛이라는 신호가 눈에 입력되기 때문이며, 들리는 소리나 스마트폰의 무선 통신에서도 신호가 사용된다. 그러나 일상에서 관찰되는 신호는 아날로그 형태이기에, 컴퓨터로 처리하기 위해 디지털화가 필요하다. 이번 글에서는 디지털 신호 처리를 공부하기 위한 기본 개념을 위주로 살펴보려고 한다.


Signal and system

  • 신호: 물리량의 변화 형태를 담은 자료/정보의 집합. 신호는 수학적으로는 함수로 표현되는데 시간, 공간, 주파수 등이 독립 변수로서 사용된다.
  • 시스템: 특정한 목적에 맞도록 주어진 신호를 조작하고 처리해내는 장치. 수학적으로는 하나 또는 여러 개의 방정식으로 표현이 된다. (신호로부터 원하는 정보를 뽑아내는 역할)


신호와 시스템을 효과적으로 표현하기 위해서 시각적인 표현을 사용한다. 먼저, 신호의 특성을 나타내기 위해 각 독립변수에 맞게 물리량이 어떻게 변화하는지를 그래프로 나타낸다. 그리고 이것을 ‘시간에 따른 값의 변화’ 파형이라고 부른다. 한편, 시스템을 나타낼 때는 블록 다이어그램을 활용한다. 시스템을 구성하는 작은 시스템인 부시스템을 사각 블록으로 나타내고 그 안에 이름 그리고 역할을 나타내는 수식이나 기호를 작성한다. (우측 그림)

블록 다이어그램에서 시스템 간의 연결은 종속병렬 연결의 방식이 있으며, 종속 연결의 특수한 경우로 피드백연결이 존재한다. 공부하면서 이것은 마치 딥러닝모델의 autoregressive 구조와 같다고 느껴졌다. 즉, 이전 시점의 출력을 다시 입력으로 사용하는 것이다.


Signal processing

신호에는 유용한 정보 뿐만 아니라 의도하지 않은 불필요한 정보들도 포함되어 있다. 따라서, 해당 신호에서 우리가 원하는 정보들만 추출해내고 용도에 맞게 변형하는 것이 중요하며 이것을 ‘신호 처리’라고 부른다. 일반적으로 신호처리의 작업은 크게 4종류로 분류된다: 해석, 합성, 변환, 필터링. 음성 신호를 처리하는데 있어서도 이 작업들을 적절히 조합하여 전처리 또는 후처리를 진행한다.

  1. 해석: 신호에서 의미있는 정보를 추출
  2. 합성: 새로운 신호를 생성
  3. 변환: 신호의 표현 방식 변경
  4. 필터링: 불필요한 신호 제거

Classification of signal

신호는 기준에 따라 다양하게 분류할 수 있지만, 가장 보편적으로 분리하는 방법은 시간 축이 연속적인지 이산적인지에 따라 나뉘어진다. 연속적이라면 연속 시간 신호(continous time signal)이라고 하고, 이산적인 경우 이산 시간 신호(discrete time signal)이라고 한다. 기호로는 각각 $x(t)$와 $x[n]$ 으로 나타낸다.

아래에서 설명하겠지만, 이산신호와 연속신호의 특징을 표현하는 기호도 다르다. 연속시간 신호의 주파수는 소문자로 $f$ 라고 작성하지만, 이산시간 신호의 주파수는 $F$ 라고 나타내며 각주파수도 $\omega$와 $\Omega$ 로 다르다. 다른 표현을 보다보면 혼용해서 사용하는 경우도 종종 보이지만 엄밀히 말하자면 구분해서 사용하는 것이 맞다.

어떻게 보면 연속시간 신호를 일정 구간마다 샘플링(sampling)해서 이산적인 신호로 바라볼 수 있지만, 실제로 컴퓨터가 이것을 처리하기 위해서는 각 값에 해당하는 크기 역시 이산적이어야만 한다. 연속적인 그래프 위의 한 지점이 나타낼 수 있는 값은 사실상 무한하므로 마치 1.123456789를 1로 매핑하는 것과 같다. 이 과정을 우리는 양자화(quantization)라고 한다.


Sinusoids

정현파는 신호와 시스템에서 가장 기본이 되는 신호로, 삼각함수인 사인과 코사인 함수로 정의된다. 정현파는 원 위를 운동하는 점을 시간축으로 풀어서 나타낸 것으로 아래 그림을 참고해보자:

  • 진폭(amplitude, $A$): 정현파가 진동하는 크기를 나타내며, 운동하는 원의 반지름과 같다.-
  • 주기(period, $T$): 공이 한 바퀴 도는데 걸리는 시간
  • 주파수(frequency, $f$): 정현파가 1초에 몇 번 진동하는지
  • 각 주파수(radian frequency, $\omega$): 1초동안 원의 호를 얼마나 움직이는지 - 초당 회전 각도.
  • 위상(phase, $\phi$): 원 운동의 시작 지점


위 개념 중 주기, 각주파수, 주파수는 아래의 관계를 가지고 있다:

\[T= \frac{1}{f}=\frac{2\pi}{\omega}\]

하나의 정현파를 정의하기 위해서 위 개념들을 이용하여 $x(t) = A\cos(\omega t + \phi)$ 로 작성한다. 처음 공부를 진행하면서 위상이라는 개념이 잘 와닿지 않았는데, 이는 신호를 얼마나 늦춰서 시작시킬 것인지에 대한 것으로 이해해볼 수 있다. 그렇기 때문에 기존 1초에 움직이는 거리를 radian 단위로 나타낸 $\omega$ 를 얼마나 늦춰서 시작할 것인지 $\omega t$ 로 대응시켜서 나타낼 수 있다. 아래는 주어진 정현파를 수식으로 나타내는 예제이다.

alt text 주어진 그래프 신호를 보고, 정현파를 함수식으로 작성하는 예제


Energy and power

신호의 특성을 정량적으로 나타내고자 할 때, 신호를 대표하는 값으로 에너지(energy)와 전력(power) 그리고 실횻값(RMS value)를 사용할 수 있다. 각각의 정의는 다음과 같다:

  • 에너지: 전체 구간에 대해 신호 크기의 제곱을 적분 또는 더한 것

    \[\lim_{T \rightarrow \infty} \int_{-\frac{T}{2}}^{\frac{T}{2}}|x(t)|^2 dt \qquad \lim_{N \rightarrow \infty}\sum_{n=-N}^{N}|x[n]|^2\]
  • 전력: 신호의 에너지에 대해 평균을 계산한 값

    \[\lim_{T \rightarrow \infty} \frac{1}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}|x(t)|^2 dt \qquad \lim_{N \rightarrow \infty} \frac{1}{2N + 1}\sum_{n=-N}^{N}|x[n]|^2\]
  • 실횻값: 에너지 관저에서 신호의 실제적 효과를 나타낸 값. (전력의 제곱근)

    \[\sqrt{\lim_{T \rightarrow \infty} \frac{1}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}|x(t)|^2 dt} \qquad \sqrt{\lim_{N \rightarrow \infty} \frac{1}{2N + 1}\sum_{n=-N}^{N}|x[n]|^2}\]

alt text 간단한 연속시간 신호에 대해 에너지와 전력을 구하는 예제


Decibel

데시벨은 신호의 상대적인 크기를 나타내는 데 사용되는 단위이다. 데시벨을 계산할 때는 신호의 전력비에 대해서는 $10 \log$ 를 신호의 크기비에 대해서는 $20\log$ 를 취해야 한다. 상대적인 단위이기 때문에 비교할 대상이 필요한데, python을 사용해 음성 전처리를 진행할 때는 librosa에서 참조 reference 에너지를 정의하여 사용하고 있다. (예: ref=np.max)


Summary

이번 글에서는 신호와 시스템의 기본 개념을 살펴보았다. 신호는 정보를 담은 함수로, 시간, 공간, 주파수와 같은 독립 변수를 기준으로 물리량의 변화를 나타낸다. 이러한 신호를 처리하는 시스템은 수학적으로 방정식으로 표현되며, 신호를 조작하거나 필요한 정보를 추출하는 역할을 한다.

특히 여러가지 신호들 중 정현파는 신호와 시스템의 가장 기본이 되는 단위로 진폭, 주기, 주파수, 각 주파수, 위상과 같은 요소로 정의된다. 이러한 정현파를 통해 신호의 주기성과 시간 변화 특성을 분석하는 것이 가능해졌다. 그 외에 신호의 특성을 나타낼 수 있는 에너지와 전력 그리고 데시벨(dB)에 대해서 살펴보았다.

Written by

Jongmoon Ryu

Passionate about speech synthesis and algorithms, with an open mind toward data-driven technologies.

Start the conversation