디지털 신호처리 기초

송대건·2021년 2월 19일
1

1. 디지털 신호처리 기초

신호의 종류

신호는 시공간적으로 변하는 물리량으로, 형태에 따라 아날로그 신호와 디지털 신호로 나눌 수 있다.

신호를 목적에 맞게 가공하는 과정을 신호처리라고 한다.

하나의 소스에서 발생되는 신호를 스칼라 신호라고 하고, 시간에 따라 두 개 이상의 소스에서 발생하는 신호를 벡터 신호라고 한다. 스칼라 신호는 하나의 독립 변수로 표현할 수 있으므로 1차원 신호라고 하고, 벡터 신호는 두 개 이상의 독립 변수로 표현되므로 다차원 신호라고 한다. 예를 들어 영상(image)신호는 2차원 신호이며, 동영상(video) 신호는 3차원 신호이다.

디지털화

아날록 신호를 디지털 시스템에서 처리하기 위한 과정을 디지털화 과정이라고 한다. 디지털화는 기본적으로 샘플링양자화를 거쳐서 수행된다. 샘플링은 연속 시간 신호를 이산 시간 신호로 변환하는 과정을 말하고, 양자화는 신호의 크기를 연속된 크기에서 몇 개의 크기로 매핑하는 과정을 말한다.

일반적으로 연속 신호를 샘플링하여 얻은 신호를 이산 신호라고 하고, 이를 양자화해서 얻은 신호를 디지털 신호라고 한다.

나이퀴스트 샘플링 정리

샘플링을 촘촘하게 수행할수록 이산 신호는 연속 신호로 손실 없이 복원될 수 있다. 나이퀴스트가 증명한 샘플링 정리에 따르면 대역 제한된 신호(band-limited signal)에 대해, 몇 개의 이산 표본으로 원래의 아날로그 신호를 완벽하게 표현할 수 있다.

2. 시간 영역에서의 분석

신호

단위 임펄스 신호는 하나의 샘플 신호를 가지는 신호로, 다음과 같이 정의된다.

δ[n]={1,(n=0)0,(n0)\delta[n] = \begin{cases} 1, &(n=0) \\ 0, &(n \ne 0) \end{cases}

단위 계단 신호는 신호가 계단 형태여서 붙여진 이름으로 다음과 같이 정의된다.

u[n]={1,(n0)0,(n<0)u[n] = \begin{cases} 1, &(n \ge 0) \\ 0, &(n < 0) \end{cases}

단위 계단 신호를 1 지연시킨 후 빼서 단위 임펄스 신호를 얻을 수 있다.

시스템

이산 신호 xx는 샘플 인덱스 nn에 대하여 x[n]x[n]와 같이 표현한다.

x[n]x[n]은 일종의 함수이기 때문에 상수로 착각하지 않도록 하자.

이산 신호를 입력으로 받을 때 이산 출력 신호를 생성하는 함수를 시스템이라고 한다.

선형 및 비선형 시스템

중첩 합 정리를 만족시키는 시스템을 선형 시스템, 그렇지 않은 시스템을 비선형 시스템이라고 한다.

중첩 합 정리는 합 성질과 스칼라 곱 성질을 모두 만족시키는 것으로, 시스템 TT에 대하여 간단히 다음과 같이 나타낼 수 있다.

T{αx[n]+βy[n]}=αT{x[n]}+βT{y[n]}T\{\alpha x[n] + \beta y[n]\} = \alpha T\{x[n]\} + \beta T\{ y[n] \}

시불변 및 시가변 시스템

어떤 입력 신호 x[n]x[n]에 대하여 출력 신호 y[n]y[n]이 생성되는 시스템 TT과 모든 정수 kk에 대하여 x[nk]x[n-k]를 입력 신호로 했을 때 출력 신호가 y[nk]y[n-k]가 생성되는 시스템을 시불변 시스템이라고 하며 그렇지 않은 시스템을 시가변 시스템이라고 한다.

예제

다음 시스템이 시불변 시스템인지 시가변 시스템인지 밝히시오.

y[n]=k=nx[k]y[n]= \sum _{k= -\infty} ^{n} x[k]

신호 x1[n]x_1[n]n0n_0만큼 지연시켜서 얻은 데이터를 시스템에 통과시키면

k=nx[kn0]=k=nn0x[k]=y[nn0]\sum _{k= - \infty } ^{n} x[k-n_0 ] = \sum _{ k = -\infty} ^{ n - n_0} x[k] = y[n-n_0]

을 얻을 수 있다. 따라서 이 시스템은 시불변 시스템이다.

위에 주어진 시스템은 누산기 시스템이라 불린다.

임펄스 응답 시스템

임의의 시스템이 갖는 고유한 성질을 알고자 할 때 주로 사용하는 방법은 시스템에 임퍼스 입력 δ[n]\delta[n]을 넣어 나오는 출력 h[n]h[n]의 형태로 파악하는 것이다. 이를 임펄스 응답이라고 한다. 임펄스 응답은 이산 시스템의 고유한 성질을 반영하게 되어 임펄스 응답 시스템이라고 부른다.

LTI 시스템

선형성과 시불변성을 동시에 만족하는 시스템을 LTI(Linear time-invariant) 시스템이라고 한다. LTI 시스템은 입력과 출력의 관계를 쉽게 해석할 수 있어서 매우 중요한 시스템이다. LTI 시스템에서 임펄스 응답은 아주 큰 역할을 한다.

x[n]=k=x[k]δ[nk]x[n] = \sum _{k=-\infty} ^{\infty} x[k] \delta [n-k]
y[n]=T{x[n]}=k=x[k]T{δ[nk]}      linearityy[n] = T\{x[n]\} = \sum _{k = -\infty} ^{\infty} x[k] T \{ \delta [n-k] \}\;\;\cdots\;\textrm{linearity}
y[n]=k=x[k]h[nk]=x[n]h[n]      time invarianty[n] = \sum _{ k = -\infty } ^{\infty} x[k]h[n-k] = x[n]*h[n] \;\;\cdots\;\textrm{time invariant}

위의 과정을 통해 LTI시스템의 임펄스 응답 h[n]h[n]을 가지고 있으면, 그 출력 y[n]y[n]을 곧바로 알 수 있다는 사실을 알 수 있다. 또한 LTI의 시스템의 이러한 특성 때문에, 여러 LTI 시스템을 직렬로 통과시키는 것은 여러 개의 임펄스 응답 h2[x]h_2[x], h2[n]h_2[n], \cdots을 연쇄적으로 컨벌루션을 수행하는 것으로 계산할 수 있다. 이는 결국 여러 개의 LTI 시스템의 임펄스 응답을 가지고 있으면 이를 단 한 번의 컨벌루션으로 줄일 수 있다는 것을 함의한다. 따라서 시스템을 설계할 때, 여러 LTI 시스템을 직렬로 연결해서 마음에 드는 시스템을 얻어내고 나서 그 최종 임펄스 응답만을 기록하면 된다. 이와 같은 방법으로 뮤직 플레이어에서 가끔 볼 수 있는 이퀄라이저가 만들어진다.

인과성(causality)과 안정성(Stability)

LTI 시스템의 임펄스 응답이 절대 수렴할 때, LTI 시스템은 안정성을 갖는다고 말한다.

S=k=h[k]<S = \sum _{ k = -\infty} ^{\infty} |h[k]| < \infty

LTI 시스템이 과거와 현재에만 영향을 받고, 미래 신호에 대해서는 영향을 받지 않을 때, LTI 시스템은 인과성을 갖는다고 말한다.

y(t)=x(t)h(t)=x(τ)h(tτ)dτy(t) = x(t) * h(t) = \int _{-\infty} ^{\infty} x(\tau)h(t-\tau)d\tau
=tx(τ)h(tτ)dτ+tx(τ)h(tτ)dτ=\int _{-\infty} ^t x(\tau)h(t-\tau)d\tau + \int _t ^{\infty} x(\tau)h(t-\tau) d\tau
위의  적분식에서  오른쪽  항은  미래  시간에  대한  식이므로  인과성을  갖기  위해서는위의\;적분식에서\;오른쪽\;항은\;미래\;시간에\;대한\;식이므로\;인과성을\;갖기\;위해서는
h(tτ)=0  for  tτ<h(t-\tau) = 0 \;for\;t \le \tau < \infty

따라서, 인과성의 필요충분조건은 다음과 같다.

h(t)=0    if  t<0\therefore h(t)=0 \;\;\textrm{if} \; t<0

3. 신호의 변환(transform)

신호의 확장

신호를 확장한다는 것은 같은 신호를 다른 기저로 표현한다는 것이다. 어떤 공간의 모든 원소를 선형 독립인 몇 개의 원소의 선형 조합으로 표현 가능할 때, 그 몇개의 원소를 그 공간의 기저라고 한다.

정현 및 여현파의 선형 독립

정현파 함수와 여현파 함수에는 다음과 같은 성질이 있다.

<sin(mx),sin(nx)>=ππsin(mx)sin(nx)dx=πδmn<\sin(mx), \sin(nx)> = \int _{-\pi} ^{\pi} \sin(mx)\sin(nx)dx = \pi \delta_{mn}
<cos(mx),cos(nx)>=ππcos(mx)cos(nx)dx=πδmn<\cos(mx), \cos(nx)> = \int _{-\pi} ^{\pi} \cos(mx)\cos(nx)dx = \pi \delta_{mn}
<sin(mx),cos(nx)>=ππsin(mx)cos(nx)dx=0<\sin(mx), \cos(nx)> = \int _{-\pi} ^{\pi} \sin(mx)\cos(nx)dx = 0
<sin(mx),1>=ππsin(mx)dx=0<\sin(mx), 1> = \int _{-\pi} ^{\pi} \sin(mx)dx = 0
<cos(nx),1>=ππcos(nx)dx=0<\cos(nx), 1> = \int _{-\pi} ^{\pi} \cos(nx)dx = 0

푸리에 계수

따라서 폐구간 [π,π][-\pi, \pi] 위에서 직교(orthogonal)하는 정현파 및 여현파 함수들을 이용해 다음과 같이 원본 연속 신호 ff를 확장할 수 있다.

f(x)=12a0+n=1ancos(nx)+bnsin(nx)f(x) = \frac{1}{2} a_0 + \sum _{n=1} ^{\infty} a_n \cos(nx) + b_n \sin(nx)

각 계수는 다음과 같이 구할 수 있다.

a0=1πππf(x)dxa_0 = \frac{1}{\pi} \int _{-\pi} ^{\pi} f(x)dx
an=1πππf(x)cos(nx)dxa_n = \frac{1}{\pi} \int _{-\pi} ^{\pi} f(x)\cos(nx)dx
bn=1πππf(x)sin(nx)dxb_n = \frac{1}{\pi} \int _{-\pi} ^{\pi} f(x)\sin(nx)dx

여기서 오일러 전개를 이용하면

cos(nx)=12(ejnx+ejnx)\cos(nx) = \frac{1}{2} (e^{jnx} + e^{-jnx} )
sin(nx)=12j(ejnxejnx)\sin(nx) = \frac{1}{2j} (e^{jnx} - e^{-jnx} )

이므로 cnc_n을 다음과 같이 정의하면

cn=12an12jbnc_n = \frac{1}{2}a_n - \frac{1}{2}jb_n
cn=12an+12jbnc_{-n} = \frac{1}{2}a_n + \frac{1}{2}jb_n

다음 식에 의해서

ancos(nx)+bnsin(nx)=(an2bn2j)ejnx+(an2+bn2j)ejnxa_n\cos(nx) + b_n \sin(nx) = \left(\frac{a_n}{2}-\frac{b_n}{2}j \right) e^{jnx} + \left(\frac{a_n}{2}+\frac{b_n}{2}j \right) e^{-jnx}

ff를 다음과 같이 다시 쓸 수 있다.

f(x)=n=cnejnxf(x) = \sum _{n= -\infty} ^{\infty} c_n e^{jnx}

푸리에 계수 cnc_nana_nbnb_n 성분을 모두 가지고 있다. 따라서 실수가 아닌 복소수로 존재할 수 있다. cn\vert c_n \vert은 각 주파수 성분의 진폭이 되고, cn\angle c_n은 각 주파수 성분의 위상이 된다.

푸리에 변환

일반적으로 연속 시간 위에서 정의되는 비주기 신호의 푸리에 분석을 연속 시간 푸리에 변환(CTFT: Continuous Time Fourier Transform)이라고 한다.

비주기 연속 신호의 푸리에 변환은 다음과 같이 계산한다.

X(jΩ)=x(t)ejΩtdtX(j\Omega) = \int _{-\infty} ^{\infty} x(t)e^{-j\Omega t} dt

이산 푸리에 변환

이산 푸리에 변환은 연속 푸리에 변환을 영차 홀드 근사를 이용해서 리만 근사한 것으로 다음과 같이 계산한다.

X[k]=n=0N1x[n]ej2π2πNnkX[k] = \sum _{n=0} ^{N-1} x[n] e ^ { - j \cdot 2\pi\cdot \frac{2\pi}{N} n k}

주파수 응답 함수

임펄스 응답 h[n]h[n]을 갖는 선형 시불변 이산 시스템은 다음과 같이 나타낼 수 있었다.

y[n]=x[n]h[n]=k=h[k]x[nk]y[n] = x[n]*h[n] = \sum _{k=-\infty} ^{\infty} h[k]x[n-k]

여기에 x[n]x[n]을 복소 지수 함수라고 생각하면 선형 시불변 시스템의 출력은 다음과 같이 표현된다.

x[n]=ejωnx[n] = e^{j\omega n}
y[n]=k=h[k]ejω(nk)=(k=h[k]ejωk)ejωny[n] = \sum _{k=-\infty} ^{\infty} h[k] e^{j\omega (n-k)} = \left ( \sum _{k=-\infty} ^{\infty} h[k]e^{-j\omega k} \right ) e^{j\omega n}

여기서 괄호로 묶은 부분은 임펄스 응답 h[k]h[k]에 대한 푸리에 변환이다. 따라서 이 계수를 H(ejω)H(e^{j\omega})로 대체하면 다음과 같이 다시 쓸 수 있다.

y[n]=H(ejω)ejωny[n] = H(e^{j\omega}) e^{j\omega n}

이 계수는 nn에 대하여 독립이므로 이는 복소 상수로 볼 수 있고, 이렇게 입력의 상수배가 되면서 출력을 만들어낼 수 있는 함수를 그 함수의 고유 함수(eigen function)라고 한다. 따라서 복소 지수 함수 ejωne^{j\omega n}은 LTI 시스템의 고유 함수가 된다.

이 때, H(ejω)H(e^{j\omega})주파수 응답 함수라고 한다.

무한 임펄스 응답 저주파 패스 필터(IIR LPF: Infinite Impulse Response Low Pass Filter)

주파수 대역에서 이상적인 저주파 패스 필터를 설계하면 다음과 같은 주파수 응답 함수를 생각할 수 있다.

H(ejω)={1(ω<ωc)0otherwiseH(e^{j\omega}) = \begin{cases} 1 & (|\omega| < \omega_c)\\ 0 & otherwise \end{cases}

이 함수의 푸리에 역변환인 임펄스 응답 h[n]h[n]은 다음과 같다. (이는 구형파 신호의 푸리에 변환이 sincsinc함수인 것과 푸리에 변환 결과에 한 번 더 푸리에 변환을 수행한 결과와 원본 신호 간의 관계를 따져 보면 알 수 있다.)

h[n]=sin(ωcn)πnh[n] =\frac{\sin(\omega_c n)}{\pi n}

이 때, X(jΩ)=X(ejω)X(j \Omega) = X(e^{j \omega }) 에서 w=ΩTw= \Omega T임을 고려하자. 주파수 NsN_s 이상을 거르고 싶다면, fc=NcNf_c = \frac{N_c}{N}이고, T=NT=N, wc=2πfcw_c =2\pi f_c이므로 따라서 실습에서는 임펄스 응답 hnh_nwcw_c를 다음과 같이 잡았다.

wc=2πNcNw_c = \frac{2\pi N_c}{N}
# IIR 임펄스 응답
def h(n: int):

    f_c = 600
    w_c = 2*pi*f_c / SAMPLE_RATE

    if n==0:
        return w_c / pi
    else:
        return sin(w_c * n) / pi / n

실습 파일 (Github)
https://www.github.com/ChlorUpload/iir-filter

1개의 댓글

comment-user-thumbnail
2021년 2월 19일

유튜브만 하시다가 velog도 하시는군요! 포스팅 꾸준히 보겠습니다:)

답글 달기