REMI Lab강의 노트

Signals and Systems L03

3장 연속시간 시스템과 컨볼루션

임펄스 응답과 컨볼루션

임펄스를 하나 넣어 얻은 응답으로 다른 입력의 출력까지 계산할 수 있을까? 있다면 그 계산은 어떤 모양일까?

임펄스 응답

임펄스를 넣었을 때 시스템이 내는 출력을 임펄스 응답(impulse response)이라고 한다. 여기에는 시간이 둘 있다. 출력을 보는 시각 tt와 임펄스를 넣은 시각 τ\tau이다. 시각 τ\tau에 넣은 임펄스의 응답을 h(t,τ)h(t,\tau)로 쓴다(hτ(t)h_\tau(t)로 쓰기도 한다).

h(t,τ)=H{δ(t−τ)}h(t,\tau)=\mathcal H\{\delta(t-\tau)\}

일반적인 시스템에서는 τ\tau마다 응답의 모양이 다를 수 있다. 시불변 시스템에서는 임펄스를 늦게 넣으면 같은 응답이 늦게 나올 뿐이다.

시불변이면h(t,τ)=h(t−τ,0)≡h(t−τ)\text{시불변이면}\quad h(t,\tau)=h(t-\tau,0)\equiv h(t-\tau)

따라서 시불변 시스템은 t=0t=0에 넣은 임펄스의 응답 h(t)=H{δ(t)}h(t)=\mathcal H\{\delta(t)\} 하나만 알면 된다.

출력 v(t)v(t)가 v′(t)+a(t) v(t)=x(t)v'(t)+a(t)\,v(t)=x(t)를 따르는 1차 시스템에서, 임펄스를 넣기 전 상태가 0이면 면적 1인 임펄스가 vv를 1만큼 올린다. 그 뒤에는 v′=−a(t)vv'=-a(t)v이므로 임펄스 응답은 다음과 같다.

h(t,τ)=e−∫τta(s) ds u(t−τ)h(t,\tau)=e^{-\int_\tau^t a(s)\,ds}\,u(t-\tau)

aa가 시간에 따라 바뀌면 그 변화는 임펄스를 옮겨도 같은 시각에 일어나므로, 일반적으로 h(t,τ)≠h(t−τ,0)h(t,\tau)\ne h(t-\tau,0)이다. 늦게 넣은 임펄스의 응답이 먼저 넣은 응답을 옮긴 모양과 다르다.

같은 임펄스를 t=0t=0과 t=τt=\tau에 넣은 두 1차 시스템의 응답을 비교한다. 시불변 시스템은 감쇠율 aa가 늘 1 s−11\ \text{s}^{-1}이고, 시변 시스템은 t=2t=2 s에 aa가 3 s−13\ \text{s}^{-1}로 바뀐다. 커패시터에 전류를 넣고 전압 vv를 보는 회로에서 병렬 저항을 t=2t=2 s에 스위치로 1/3로 줄이면 이런 시변 시스템이 된다(xx는 전류를 CC로 나눈 값). 두 그림 모두 붉은 선이 τ\tau에 넣은 임펄스의 응답 h(t,τ)h(t,\tau)이고, 점선은 0에 넣은 응답을 τ\tau만큼 옮긴 h(t−τ,0)h(t-\tau,0)이다. 시불변 그림에서는 두 선이 늘 겹친다. 시변 그림에서는 τ\tau를 옮겨도 붉은 선이 꺾이는 곳이 t=2t=2 s에 머물러, 두 선이 어긋난다.

면적 1인 임펄스가 v를 1로 올리고, 그 뒤 v는 h(t, τ) = exp(−∫τt a(s) ds)로 줄어든다. 흐린 선은 0에 넣은 응답 h(t, 0)이고, 색칠한 곳이 h(t, τ)와 h(t − τ, 0)의 차이이다.

해 보기

  1. τ=0\tau=0이면 두 그림에서 붉은 선과 점선이 어떻게 되는지 보고, 이것만으로 시변인지 알 수 있는지 생각해 보라.
    관찰

    두 그림 모두 붉은 선과 점선이 겹친다. 0에 넣은 응답끼리 비교하므로 차이가 없다. 시변인지는 τ\tau를 옮겨야 드러난다.

  2. τ=1\tau=1 s에서 시변 그림의 붉은 선과 점선이 꺾이는 시각을 비교하라.
    관찰

    붉은 선은 t=2t=2 s에서 꺾이고 점선은 t=3t=3 s에서 꺾인다. 시스템이 바뀌는 시각이 시계에 묶여 있어서, 늦게 넣은 임펄스의 응답은 먼저 넣은 응답을 옮긴 모양이 아니다. 시불변 그림에서는 두 선이 겹친다.

  3. τ=2.5\tau=2.5 s이면 시변 시스템의 응답이 어떻게 되는지, 두 그림의 차이를 비교하라.
    관찰

    시변 시스템에서는 t=2t=2 s 뒤에 넣은 임펄스라 처음부터 a=3 s−1a=3\ \text{s}^{-1}로 빠르게 줄고, 차이의 최댓값이 0.38이다. 시불변 그림의 차이는 여전히 0이다.

연속시간 임펄스 δ(t)\delta(t)는 2장의 디랙 델타 함수로, 높이가 아니라 면적이 1이다. 이산시간 임펄스 δ[n]\delta[n]은 n=0n=0에서 값이 1이고 나머지에서 0인 단위 샘플(unit sample)이다. 두 경우 모두 "크기 1짜리 임펄스를 넣었을 때의 응답"이라는 뜻은 같다.

LTI 시스템의 출력

선형이고 시불변인 시스템을 LTI 시스템이라고 한다. LTI 시스템의 출력은 입력과 임펄스 응답의 컨볼루션이다. 입력을 임펄스로 쪼개면 이 결과가 나온다.

먼저 2장의 sifting 성질에서 나온 대로, 입력을 가중·이동 임펄스의 합으로 쓴다. 시각 τ\tau마다 면적 x(τ) dτx(\tau)\,d\tau인 임펄스가 하나씩 있다고 보면 된다.

x(t)=∫−∞∞x(τ) δ(t−τ) dτx(t)=\int_{-\infty}^{\infty}x(\tau)\,\delta(t-\tau)\,d\tau

이 입력을 시스템에 넣는다.

y(t)=H{∫−∞∞x(τ) δ(t−τ) dτ}y(t)=\mathcal H\left\{\int_{-\infty}^{\infty}x(\tau)\,\delta(t-\tau)\,d\tau\right\}

적분은 가중치 x(τ) dτx(\tau)\,d\tau를 곱한 임펄스들의 합의 극한이다. 선형 시스템에서는 합과 배율이 시스템 밖으로 나오므로 H\mathcal H를 적분 안으로 옮긴다.

y(t)=∫−∞∞x(τ) H{δ(t−τ)} dτ=∫−∞∞x(τ) h(t,τ) dτ\begin{aligned} y(t)&=\int_{-\infty}^{\infty}x(\tau)\,\mathcal H\{\delta(t-\tau)\}\,d\tau\\ &=\int_{-\infty}^{\infty}x(\tau)\,h(t,\tau)\,d\tau \end{aligned}

여기까지는 선형성만 썼으므로 시변 시스템에서도 성립한다. 다만 τ\tau마다 다른 응답 h(t,τ)h(t,\tau)를 모두 알아야 한다. 여기에 시불변성을 더하면 h(t,τ)=h(t−τ)h(t,\tau)=h(t-\tau)가 되어 식이 단순해진다.

y(t)=∫−∞∞x(τ) h(t−τ) dτ=(x∗h)(t)y(t)=\int_{-\infty}^{\infty}x(\tau)\,h(t-\tau)\,d\tau=(x*h)(t)

이 적분을 컨볼루션 적분(convolution integral)이라고 한다. 선형성과 시불변성이 모두 있어야 이 식이 나온다. 선형성만 있으면 h(t,τ)h(t,\tau)가 남고, 시불변성만 있으면 H\mathcal H를 적분 안으로 옮길 수 없다.

이산시간에서도 같은 과정을 거친다. x[n]=∑kx[k] δ[n−k]x[n]=\sum_k x[k]\,\delta[n-k]로 쪼개고 각 조각의 응답 x[k] h[n−k]x[k]\,h[n-k]를 더하면 y[n]=∑kx[k] h[n−k]y[n]=\sum_k x[k]\,h[n-k]이다.

샘플 세 개짜리 입력 x[n]x[n]을 같은 색의 가중 임펄스 세 개로 쪼개고, 각 임펄스를 같은 시스템에 넣은 응답을 같은 nn끼리 더하면 전체 출력 y[n]y[n]이 된다. n=1n=1에서는 세 응답의 값을 더해 y[1]=0.5+2+0=2.5y[1]=0.5+2+0=2.5이다. 입력 샘플 하나의 높이를 바꾸면 그 색의 응답만 따라 커지고 작아진다.

시스템은 y[n] = x[n] + a·x[n−1]이고 처음 상태에서 a = 0.5이다. a = −1이면 앞 절의 차분 시스템이다.

해 보기

  1. 앞 절의 차분 시스템에 같은 입력을 넣었을 때 출력을 구하고, n=2n=2의 합을 차분 행렬의 계산과 비교하라.
    관찰

    응답이 [1,−1][1,-1]이 되고 출력은 [1, 1, −3, 1][1,\,1,\,-3,\,1]이다. n=2n=2의 합 0+(−2)+(−1)=−30+(-2)+(-1)=-3은 차분 행렬의 행 2 [0, −1, 1][0,\,-1,\,1]을 이 입력 [1, 2, −1][1,\,2,\,-1]에 곱하는 계산과 같다.

  2. 입력이 가운데 샘플 하나뿐이면 출력이 응답과 어떤 관계인지 확인하라.
    관찰

    입력이 n=1n=1에 놓인 임펄스 하나라서, 출력은 응답 [1, 0.5][1,\,0.5]를 샘플 하나만큼 옮긴 [0, 1, 0.5, 0][0,\,1,\,0.5,\,0]이다.

  3. 세 샘플이 모두 1인 입력을 차분 시스템에 넣으면 출력이 어떻게 되는지, n=1n=1에서 무엇이 지워지는지 확인하라.
    관찰

    출력이 [1, 0, 0, −1][1,\,0,\,0,\,-1]이다. n=1n=1에서 x[0]x[0]의 응답 −1-1과 x[1]x[1]의 응답 11이 서로 지운다.

컨볼루션 적분 읽기

컨볼루션 적분은 한 시각의 출력을 어떤 순서로 계산할까?

(x∗h)(t)=∫−∞∞x(τ) h(t−τ) dτ(x*h)(t)=\int_{-\infty}^{\infty}x(\tau)\,h(t-\tau)\,d\tau

이 식에서 tt는 출력을 알고 싶은 시각이고, 적분하는 동안에는 고정되어 있다. 움직이는 변수는 τ\tau이다. τ\tau축 위에서 h(t−τ)h(t-\tau)를 그리면 원래 h(τ)h(\tau)를 좌우로 뒤집은 h(−τ)h(-\tau)를 오른쪽으로 tt만큼 옮긴 모양이 된다. τ\tau가 커질수록 t−τt-\tau는 작아지기 때문이다. 한 출력 시각 tt에서의 계산 순서는 다음과 같다.

  1. h(τ)h(\tau)를 뒤집어 h(−τ)h(-\tau)를 만든다.
  2. tt만큼 옮겨 h(t−τ)h(t-\tau)를 만든다. t<0t<0이면 왼쪽으로 옮긴다.
  3. x(τ)x(\tau)와 곱한다. 두 함수가 겹치지 않는 곳에서는 곱이 0이다.
  4. 곱을 τ\tau에 대해 적분한다. 그 면적이 y(t)y(t)이다.

tt를 바꿔 가며 이 과정을 되풀이하면 출력 곡선 전체가 나온다. 모든 tt에서 같은 hh를 옮겨 쓰기만 하면 되는 것은 시불변성 덕분이다.

예를 들어 밑변이 [−1,1][-1,1]이고 t=0t=0에서 높이가 1인 삼각 펄스 x(t)=max⁡(1−∣t∣,0)x(t)=\max(1-|t|,0)와 h(t)=e−2tu(t)h(t)=e^{-2t}u(t)를 컨볼루션하면, t=−1.75t=-1.75에서는 두 함수가 겹치지 않아 출력이 0이다. 0≤t≤10\le t\le1에서는 삼각 펄스가 꺾이는 τ=0\tau=0에서 적분을 나누어 다음을 얻는다.

y(t)=∫−10(1+τ)e−2(t−τ) dτ+∫0t(1−τ)e−2(t−τ) dτ=3−2t−(2−e−2)e−2t4\begin{aligned} y(t)&=\int_{-1}^0(1+\tau)e^{-2(t-\tau)}\,d\tau\\ &\quad+\int_0^t(1-\tau)e^{-2(t-\tau)}\,d\tau\\ &=\frac{3-2t-(2-e^{-2})e^{-2t}}4 \end{aligned}

구간을 나누는 방법은 아래 '컨볼루션 계산'의 예제에서 자세히 다룬다. y(t)=∫−∞tx(τ)e−2(t−τ) dτy(t)=\int_{-\infty}^{t}x(\tau)e^{-2(t-\tau)}\,d\tau를 미분하면 y′(t)=x(t)−2y(t)y'(t)=x(t)-2y(t)이다. t>1t>1에서는 x=0x=0이라 y′=−2y<0y'=-2y<0로 줄고, −1<t<0-1<t<0에서는 y′=12(1−e−2(t+1))>0y'=\tfrac12\bigl(1-e^{-2(t+1)}\bigr)>0로 는다. 최댓값에서는 y′=0y'=0, 곧 y=x/2=(1−t)/2y=x/2=(1-t)/2이고, 위 식과 같게 두면 t=12ln⁡(2−e−2)≈0.31t=\frac12\ln(2-e^{-2})\approx0.31, y≈0.34y\approx0.34이다.

그림의 ① 작은 두 그림이 뒤집기이고, ②에서 뒤집은 hh를 tt만큼 옮겨 고정된 x(τ)x(\tau)와 겹친다. ③이 둘의 곱과 그 면적이고, ④의 출력 곡선은 그 면적 y(t)y(t)를 지나온 tt마다 이은 것이라 지금의 tt까지만 그려진다. 폭 1인 두 사각 펄스에서는 h(t−τ)h(t-\tau)가 오른쪽으로 지나가는 동안 곱의 면적이 자랐다가 줄고, 출력 곡선도 그 면적을 따라 올랐다가 내려온다.

처음 상태는 0 ≤ τ < 1에서 높이 1인 두 사각 펄스이다. 출력은 그려진 곱을 수치 적분한 값이다.

해 보기

  1. 앞 문단의 삼각 펄스와 e−2tu(t)e^{-2t}u(t)에서 t=−1.75t=-1.75일 때 곱과 출력이 어떻게 되는지 확인하라.
    관찰

    뒤집힌 지수가 모두 삼각 펄스의 왼쪽에 있어 곱이 0이고 y(−1.75)=0y(-1.75)=0이다. 출력 곡선도 아직 0에 머물러 있다.

  2. 같은 쌍에서 t=0.31t=0.31일 때 겹치는 구간과 출력을 확인하고, 곱의 면적이 언제 가장 큰지 생각해 보라.
    관찰

    겹침이 −1≤τ≤0.31-1\le\tau\le0.31이고 출력이 약 0.34이다. 뒤집힌 지수는 τ=t\tau=t에서 1이고 왼쪽으로 갈수록 줄어서, 삼각 펄스의 피크보다 조금 오른쪽에 tt가 있을 때 곱의 면적이 가장 크다. tt를 조금 더 옮기면 출력 곡선이 내려가기 시작하고, 최댓값 0.344가 표시된다.

  3. 처음 쌍에서 hh 대신 xx를 뒤집어도 y(0.5)y(0.5)가 같은지 확인하라.
    관찰

    이번에는 h(τ)h(\tau)가 고정되고 x(t−τ)x(t-\tau)가 움직이지만 y(0.5)=0.5y(0.5)=0.5로 같다. 어느 쪽을 뒤집어도 출력이 같은 이유는 다음 절의 교환법칙이다.

영상과 CNN

영상 처리와 CNN에서 말하는 convolution은 이 절의 컨볼루션과 같은 연산일까?

컨볼루션은 2차원 신호인 영상에도 그대로 쓴다. 작은 커널(kernel)을 영상 위로 옮겨 가며 겹친 셀끼리 곱해 더하면 출력 영상의 한 셀이 나온다. 합성곱 신경망(convolutional neural network, CNN)은 이런 층을 여러 겹 쌓아 영상에서 모서리나 무늬를 찾는다.

입력 영상의 한 3×33\times3 윈도우(창 함수)와 커널이 다음과 같다고 하자.

윈도우=[00750758007580]커널=[−1−2−1000121]\begin{gathered} \text{윈도우}=\begin{bmatrix}0&0&75\\0&75&80\\0&75&80\end{bmatrix}\\ \text{커널}=\begin{bmatrix}-1&-2&-1\\0&0&0\\1&2&1\end{bmatrix} \end{gathered}

같은 자리 원소끼리 곱해 더하면 (0+150+80)−(0+0+75)=155(0+150+80)-(0+0+75)=155이다. 이 계산은 커널을 뒤집지 않았으므로 엄밀히는 상호상관(cross-correlation)이다. 컨볼루션의 정의대로 커널을 180° 돌려 곱하면 −155-155가 된다. 머신러닝에서는 뒤집지 않는 이 연산도 convolution이라고 부른다. 커널 값을 학습으로 정하므로 뒤집힌 커널을 배우면 그만이기 때문이다. 신호처리에서 컨볼루션이라고 하면 뒤집는 연산이고, 커널이 비대칭이면 두 결과가 다르다.

1차원에서도 같은 차이가 나타난다. 커널 h=[−1, 0, 1]h=[-1,\,0,\,1](n=−1,0,1n=-1,0,1)을 뒤집지 않고 입력 xx 위에 옮겨 곱해 더한 합 r[n]r[n](검은 점)과, 뒤집어 계산한 컨볼루션 y[n]y[n](회색 빈 점)은 모든 nn에서 부호만 반대이다. '출력 쪽' 그림의 가운데 줄 h[k−n]h[k-n]에서 hh는 뒤집히지 않은 채 옮겨진다.

커널을 뒤집지 않고 계산한 상태이다. 반대칭 커널 h = [−1, 0, 1]에서는 뒤집지 않은 합(상호상관)이 컨볼루션과 부호만 반대이다.

해 보기

  1. 커널을 뒤집어 더한 합 y[1]y[1]을 뒤집지 않은 합 r[1]r[1]과 비교하라.
    관찰

    합이 컨볼루션 y[n]y[n]이 되고, '출력 쪽' 그림의 hh가 뒤집혀 놓인다. y[1]=−2y[1]=-2로, 뒤집지 않은 합 r[1]=2r[1]=2와 부호가 반대이다.

  2. 좌우 대칭인 커널 [1, 2, 1][1,\,2,\,1]에서 상호상관과 컨볼루션이 같은지 확인하라.
    관찰

    검은 점과 회색 빈 점이 겹친다. 뒤집어도 커널이 그대로라 상호상관과 컨볼루션이 같다.

  3. 대칭이 아닌 커널 [1, 0.5][1,\,0.5]에서 두 합이 겹치는지 확인하고, 언제 커널을 뒤집어야 하는지 생각해 보라.
    관찰

    두 합은 부호를 바꾸거나 옮겨도 겹치지 않는다. 커널을 학습으로 정하는 CNN에서는 뒤집지 않아도 되지만, 주어진 hh로 LTI 시스템의 출력을 구할 때는 뒤집어야 한다.

선형이지만 시변인 시스템에서 아무 입력의 출력을 구하려면 무엇을 알아야 하는지 고르라.

  1. (가) 모든 τ\tau에 대한 h(t,τ)h(t,\tau)
  2. (나) 구할 수 없다. 선형성만으로는 출력을 적분으로 쓸 수 없다.
  3. (다) t=0t=0에 넣은 임펄스의 응답 h(t)h(t) 하나
  4. (라) 입력 하나와 그 출력 한 쌍
풀이

답 (가) 모든 τ\tau에 대한 h(t,τ)h(t,\tau)

  • (나) 선형성만으로 y(t)=∫x(τ) h(t,τ) dτy(t)=\int x(\tau)\,h(t,\tau)\,d\tau까지 온다.
  • (다) 시불변일 때만 충분하다. 시변이면 넣는 시각마다 응답의 모양이 다르다.
  • (라) 선형이라도 입력 하나의 출력으로는 다른 모양의 입력의 출력을 정할 수 없다.

입력을 가중 임펄스로 쪼개고 합과 배율을 H\mathcal H 밖으로 꺼내는 데는 선형성만 쓴다. 그 결과가 y(t)=∫x(τ) h(t,τ) dτy(t)=\int x(\tau)\,h(t,\tau)\,d\tau이다. 시불변성이 더해져야 h(t,τ)=h(t−τ)h(t,\tau)=h(t-\tau)가 되어 hh 하나로 줄어든다.

y(t)=∫−∞∞x(τ) h(t−τ) dτy(t)=\int_{-\infty}^{\infty}x(\tau)\,h(t-\tau)\,d\tau를 계산하는 동안 고정된 것과 움직이는 것을 바르게 고른 것을 고르라.

  1. (가) τ\tau는 고정되고, tt가 움직인다.
  2. (나) h(τ)h(\tau)를 τ\tau만큼 옮긴다.
  3. (다) tt는 고정되고, 적분하는 동안 τ\tau가 움직인다.
풀이

답 (다) tt는 고정되고, 적분하는 동안 τ\tau가 움직인다.

  • (가) τ\tau는 적분변수이다. tt는 출력을 알고 싶은 시각이라 적분 한 번 동안 바뀌지 않는다.
  • (나) τ\tau축 위에서 h(−τ)h(-\tau)를 tt만큼 옮긴 것이 h(t−τ)h(t-\tau)이다.

출력 한 점 y(t)y(t)를 구할 때 tt는 정해져 있고, τ\tau가 −∞-\infty에서 ∞\infty까지 움직이며 x(τ) h(t−τ)x(\tau)\,h(t-\tau)를 더한다. 출력 곡선 전체는 tt를 바꿔 가며 이 적분을 되풀이해 얻는다.

x[n]=[2, −1, 1]x[n]=[2,\,-1,\,1](n=0,1,2n=0,1,2)을 h[n]=[1, −1]h[n]=[1,\,-1](n=0,1n=0,1)인 LTI 시스템에 넣었다. y[1]y[1]을 구하라.

풀이

답 -3

y[1]=∑kx[k] h[1−k]=x[0] h[1]+x[1] h[0]=2⋅(−1)+(−1)⋅1=−3y[1]=\sum_k x[k]\,h[1-k]=x[0]\,h[1]+x[1]\,h[0]=2\cdot(-1)+(-1)\cdot1=-3이다.