시작하기 전에 LTI system에 관해 정리한 글을 먼저 참조하기 바란다.
1. LTI system과 convolution
만일 시스템이 메모리가 있는 경우, 시스템의 출력이 현재 입력에 의해서만 결정되는 것이 아닌 이전 입력(causal system 이라면, casual system : 인과 관계가 있는 system)에 의해서도 영향을 받기 때문에 그에 대한 출력을 나타내기 위해 하는 연산이다.
예를 들어 종(鍾)을 LTI(Liner Time Invariant) 시스템이라고 가정한다면 종을 한번 치면 그 소리가 치는 순간만 나는게 아니라 치는 순간에 소리가 크게 났다가 점점 소리가 감쇄되며 작아진다.
그런데 종을 한번 치고 다시 치면 어떨까? 이 때는 종소리를 Linear system으로 가정했기 때문에 이전의 입력에 의해 나고 있는 소리에 현재 입력에 의해 나는 소리가 더해져 나타난다. 그리고 이것은 impulse 입력과 종소리의 convolution 과 같은 결과가 나올 것이다.
따라서 convolution은 한 LTI 시스템에 대해 현재와 이전의 입력에 대한 출력을 계산하기 위해 수행하는 것이다.
LTI system에서의 수식을 바탕으로 설명하자면 현재 시간에 시스템에 입력이 있고 이에 대한 출력이 있고, 일정 시간이 지난 후에 똑같이 입력이 있고 이에 대한 출력이 있을 경우 일정 시간 지난 후의 출력은 이전의 입력에 대한 출력과 합쳐져서 중첩되어 나타나므로 이를 계산하기 위해 convolution 연산이 필요한 것이다.
2. 이산 Convolution
convolution에 이산 시간에 대한 convolution과 이를 확장한 연속 시간에 대한 convolution을 생각해 볼 수 있는데, 둘 다 기본 개념은 같고 단지 입력되는 시간 도메인을 이산 구간으로 볼 것이냐 연속 구간으로 볼 것이냐의 차이인데 이산 구간이 기본 베이스이고 이해하기가 좀 더 수월하기 때문에 이산 시간에 대해서 설명한다.
2.1 이산 컨볼루션의 유도
단위 임펄스는 좌, 우로 평행이동이 가능하다. 가령 δ[n−2]는 δ[n]을 오른쪽으로 2만큼 shift시킨 것이다.
이 개념을 조금만 더 확장해보면 임펄스를 이용해 임의의 신호를 분해해 표현할 수 있게 된다. 아래의 임의의 이산 신호 x[n]을 보자.
이 이산 신호는 δ[n] 및 이것을 좌우로 shift한 함수들을 이용해 다음과 같이 표현할 수 있다.
x[n]=⋯+x[−2]δ[n+2]+x[−1]δ[n+1]+x[0]δ[n]+x[1]δ[n−1]+x[2]δ[n−2]+⋯(1)=k=−∞∑∞x[k]δ[n−k](2)
즉 x[n]이라는 임의의 함수를 δ[n−k]라는 함수를 이용해서 분해할 수 있다.
아래 그림은 x[−2],x[−1],x[0],x[1],x[2],⋯,x[7] 일 때의 입력 신호 x[n]을 그래프로 표시한 것이다.
식 (1)은 x[n]을 단위 임펄스 함수로 분해한 것으로 볼 수도 있고, 상수가 곱해진 신호열의 합으로 볼 수도 있다.
여기서 상수는 x[k]를 의미한다. x[k]는 k번째 함수값(x[0], x[1] 같은...)이라는 의미이기 때문에 더 이상 함수가 아닌 상수이다.
식 (1) 또는 (2)는 다음과 같이 기호로 표기하기도 한다.
⇒x[n]∗δ[n]
여기서 ∗ 연산을 convolution이라고 부른다.
지금까지 이산 입력 신호를 convolution으로 나타내는 방법에 대해 다루었다. 다음에는 이러한 입력 신호가 들어왔을 때 출력 신호는 어떻게 되는지 설명한다.
2.2 LTI system에서 출력 신호의 유도
입력 x[n]과 출력 y[n]과의 관계를 다음과 같이 생각해 보자. 출력 y[n]을 입력 x[n]의 어떠한 변환이라고 생각한다면, y[n]=T(x[n])이라고 생각할 수 있다.
만약, 현재 고려하는 시스템이 LTI 시스템이라고 한다면 선형성에 의해 다음이 성립한다.
T(k=−∞∑∞ckxk[n])=k=−∞∑∞ckT(xk[n])=k=−∞∑∞ckyk[n]
또 시불변성에 의해 다음이 성립한다.
T(x[n−k])=y[n−k]
그렇다면, 다시 한번 식 (1)을 이용하여 아래의 식을 좀 더 전개해보자.
y[n]=T(x[n])=T(⋯+x[−2]δ[n+2]+x[−1]δ[n+1]+x[0]δ[n]+x[1]δ[n−1]+x[2]δ[n−2]+⋯)=T(k=−∞∑∞x[k]δ[n−k])
이 때 x[k]는 n에 대해서는 함수가 아닌 상수이기 때문에 선형성에 의해서 위 식은 다음과 같다.
⇒k=−∞∑∞(x[k]T(δ[n−k]))
라고 할 수 있다. 이 때 h[n]=T(δ[n])이라고 하자.
그러면 시불변성에 의해서,
⇒k=−∞∑∞(x[k]T(δ[n−k]))=k=−∞∑∞(x[k]h[n−k])
따라서,
y[n]=T(x[n])=k=−∞∑∞(x[k]h[n−k])
이 때
h[n]=k=−∞∑∞h[k]δ[n−k]
이 h[n]식이 중요한데, 의미는 특정 입력(x[0],x[1],...과 같은)에 대해 모든 범위에서의 출력값을 말한다. 예를 들어 h[n]은 입력 x[0]일 때 모든 범위의 출력이고, h[n−1]은 입력 x[1]일 때(x[0]이 오른쪽으로 1칸 shift), h[n]이 오른쪽으로 1칸씩 shift될 때의 출력을 말한다.
여기서 h[n]=T(δ[n])는 δ[n]을 입력으로 했을 때의 변환이므로 해당 시스템에 대해 임펄스 입력을 줬을 때의 응답이다. 이를 임펄스 응답(impulse Response)이라고 부른다.
다시 말해 다루고자 하는 시스템이 LTI 시스템이라면 입력과 임펄스 응답(h[n])의 이산 컨볼루션으로 시스템의 입출력 관계를 표현할 수 있다. 이 의미 그대로 convolution 기호로 표기하면 x[n]∗h[n]이 된다.
2.2.1 이산 convolution의 예제
위의 y[n]의 식을 풀어서 전개하면 다음과 같다.
y[n]=T(x[n])=k=−∞∑∞(x[k]h[n−k])=⋯+x[−2]h[n+2]+x[−1]h[n+1]+x[0]h[n]+x[1]h[n−1]+x[2]h[n−2]+⋯
여기서 각 항을 차례로 전개해 보면,
x[0]h[n]=x[0](⋯+h[−1]δ[n+1]+h[0]δ[n]+h[1]δ[n−1]+⋯)
즉 x[0]입력에 대해 모든 범위의 출력(−∞∼∞)을 나타낸다.
h[n]에서 n=0일 때 h[0]이 나오고 n=1일 때 h[1]이 나온다.
다음 x[−1]h[n+1]의 경우는 앞의 h[n]을 왼쪽으로 한 칸 shift시킨 경우이다. 즉 다음과 같다.
x[−1]h[n+1]=x[−1](⋯+h[−1]δ[n+2]+h[0]δ[n+1]+h[1]δ[n]+h[2]δ[n−1]⋯)
즉 x[−1]입력에 대해 모든 범위의 출력을 나타낸는데 h[n+1]에서 n=0일 때 h[1]이 나오고 n=1일 때 h[2]이 나온다.
마찬가지로 x[1]h[n−1]의 경우는 앞의 h[n]을 오른쪽으로 한 칸 shift시킨 경우이다. 즉 다음과 같다.
x[1]h[n−1]=x[1](⋯+h[−1]δ[n]+h[0]δ[n−1]+h[1]δ[n−2]⋯)
즉 x[1]입력에 대해 모든 범위의 출력을 나타낸는데 h[n−1]에서 n=0일 때 h[−1]이 나오고 n=1일 때 h[0]이 나온다.
지금까지의 것을 정리하면 다음과 같다.
x[−2]h[n+2]=x[−2](⋯+h[−1]δ[n+3]+h[0]δ[n+2]+h[1]δ[n+1]+⋯)x[−1]h[n+1]=x[−1](⋯+h[−1]δ[n+2]+h[0]δ[n+1]+h[1]δ[n]+⋯)x[0]h[n]=x[0](⋯+h[−1]δ[n+1]+h[0]δ[n]+h[1]δ[n−1]+⋯)x[1]h[n−1]=x[1](⋯+h[−1]δ[n]+h[0]δ[n−1]+h[1]δ[n−2]+⋯)x[2]h[n−2]=x[2](⋯+h[−1]δ[n−1]+h[0]δ[n−2]+h[1]δ[n−3]+⋯)
y[n]은 위의 값들을 모두 합한 것이다.
즉 모든 입력에 대해 각각의 입력에 해당하는 모든 출력을 합친것이다.(이해하기 쉽게 2차원 배열로 생각하면 된다. row가 입력, column이 각 입력에 대한 출력으로 보자.)
좀 더 이해하기 쉽게 그림으로 표현해 보았다.
예를 들어 Y[0]은 0지점에서 모든 입력에 대한 출력의 합이다. 위 표에서 특정 n에 대해 모든 행(row)의 값을 합한 것이다.
y[0]=⋯+x[−2]h[2]+x[−1]h[1]+x[0]h[0]+x[1]h[−1]+x[2]h[−2]+⋯
같은 원리로
y[−2]=⋯+x[−2]h[0]+x[−1]h[−1]+x[0]h[−2]+x[1]h[−3]+x[2]h[−4]+⋯
y[−1]=⋯+x[−2]h[1]+x[−1]h[0]+x[0]h[−1]+x[1]h[−2]+x[2]h[−3]+⋯
y[0]=⋯+x[−2]h[2]+x[−1]h[1]+x[0]h[0]+x[1]h[−1]+x[2]h[−2]+⋯
y[1]=⋯+x[−2]h[3]+x[−1]h[2]+x[0]h[1]+x[1]h[0]+x[2]h[−1]+⋯
y[2]=⋯+x[−2]h[4]+x[−1]h[3]+x[0]h[2]+x[1]h[1]+x[2]h[0]+⋯
2.2.2 예제 1(Example 1)
위의 그림과 같이 입력 x[n]과 입펄스 응답 h[n]을 갖는 LTI 시스템이 있다고 하자. 이 때 이 시스템에 입력 x[n]가 입력될 때의 시스템의 출력(응답)을 그래프로 표시하시오.
⇒
입력이 x[0], x[1]에만 값이 있고 나머지는 모두 0이기에 y[n]은 다음과 같다.
y[n]=k=−∞∑∞(x[k]h[n−k])=x[0]h[n]+x[1]h[n−1]=0.5h[n]+2h[n−1]
0.5h[n]와2h[n−1]를 각각 그려보면 다음과 같다.
이 둘을 합치면 다음과 같이 나온다.
2.2.3 예제 2(Example 2)
h(n)=21(δ[n]+δ[n−1])={0.5n=0,10otherwise
x(n)={1n=0,1,20otherwise
위와 같이 입력 x[n]과 임펄스 응답 h[n]을 가지는 LTI 시스템이 있을 경우 이 때의 LTI 시스템의 출력을 계산하시오.(그래프로 표시)
⇒
일반적인 시스템의 출력은 다음과 같다.
y[n]=x[n]∗h[n]=k=−∞∑∞(x[k]h[n−k])
이 때 입력이 x[0],x[1],x[2]일 때만 출력값이 있고 나머지는 출력이 모두 0이므로 y[n]은 다음과 같다.
y[n]=x[0]h[n]+x[1]h[n−1]+x[2]h[n−2]=1⋅h[n]+1⋅h[n−1]+1⋅h[n−2]
h[n]=k=−∞∑∞(h[k]δ[n−k])=⋯+h[−1]δ[n+1]+h[0]δ[n]+h[1]δ[n−1]+⋯
⋯h[−2]=0h[−1]=0h[0]=0.5h[1]=0.5h[2]=0⋯
h[n]은 h[0],h[1]일 때만 값(0.5)을 가지고 나머지는 모두 0이다.
h[n−1],h[n−2]는 h[n]에서 오른쪽으로 1, 2씩 shift한 것과 같다. 따라서 각각을 그래프로 그려보면 다음과 같다.
이 셋을 합치면 시스템 응답 y[n]은 다음과 같다.
2.2.4 예제 3(Example 3)
입력 x[n]과 임펄스 응답 h[n]이 다음과 같다.(참고로 u[n]은 unit step function(단위계단함수)이다.)
x[n]=αnu[n](0<α<1)
h[n]=u[n]
이 신호들을 그래프로 표시하면 아래와 같다.
이러한 입력과 임펄스 응답의 조건에서 시스템의 출력을 계산하시오.
⇒
y[n]=x[n]∗h[n]=k=−∞∑∞(x[k]h[n−k])에서
y[n]=k=−∞∑∞αku[k]u[n−k]
여기서,
u[k]=1∀{k≥0}
u[n−k]=1∀{n−k≥0}→∀{n≥k}
u[k]u[n−k]=1∀{0≤k≤n}
따라서
k=−∞∑−1αku[k]u[n−k]=0
k=0∑nαku[k]u[n−k]=k=0∑nαk=1−α1−αn
(등비 수열의 합 공식 유도 과정을 참고하면 이렇게 식이 유도되는 것을 알 수 있다.)
이 둘을 합치면 y[n]이 나온다.
y[n]=1−α1−αnu[n]
그래프로 표시하면 아래와 같다.
y[n]=x[n]∗h[n]=k=−∞∑∞(x[k]h[n−k])에서
x[k]와 h[n−k]을 그래프로 표시하면 다음과 같다.
그림(a)는 x[k]를 나타내고,
그림 (b)~(e)는 h[n−k]를 나타낸다.
그림 (b)~(e)에서 k<0 영역은 0으로 계산된다.
(a)와 (b)~(e)의 그래프를 convolution한 결과가 Figure 2.7의 그래프이다.
혹시 이해가 안될까봐 수식으로 풀어서 전개해 보았다.
y[n]=k=0∑n(x[k]h[n−k])=x[0]h[n]+x[1]h[n−1]+x[2]h[n−2]+x[3]h[h−3]+⋯
각 항을 풀어서 전개해 보면,
x[0]h[n]x[1]h[n−1]x[2]h[n−2]x[3]h[n−3]⋮=x[0](h[0]δ[n]+h[1]δ[n−1]+h[2]δ[n−2]+h[3]δ[n−3]+⋯)=x[1](h[0]δ[n−1]+h[1]δ[n−2]+h[2]δ[n−3]+⋯)=x[2](h[0]δ[n−2]+h[1]δ[n−3]+⋯)=x[3](h[0]δ[n−3]+⋯)
위의 항들을 모두 합하면 시스템의 응답(출력)인 y[n]이 나온다.
1) n = 0일 때 k = 0에서만 값이 있다.
y[0]=x[0]h[0]
2) n = 1일 때 k = 0, 1에서만 값이 있다.
y[1]=x[0]h[1]+x[1]h[0]
2) n = 2일 때 k = 0, 1, 2에서만 값이 있다.
y[2]=x[0]h[2]+x[1]h[1]+x[2]h[0]
2) n = 3일 때 k = 0, 1, 2, 3에서만 값이 있다.
y[3]=x[0]h[3]+x[1]h[2]+x[2]h[1]+x[3]h[0]
이런씩으로 전개된다.
2.2.5 예제 4(Example 4)
다음과 같이 입력 w[t]와 임펄스 응답 h[t]가 주어졌을 때 입력에 대한 LTI 시스템의 응답을 구하시오.
기호 햇갈리지 않도록 여기에서 t는 앞에서의 n에 해당하고 τ는 k에 해당한다.
y(t)는 특정 t에서 모든 τ값을 합치므로 w(t) 영역과 겹치는 부분에서 h(t−τ)를 적분해 주면 된다.
이를 그림으로 풀어서 정리하면 다음과 같다.
t가 입력(w(t))이 유효한 0∼b 범위에 있을 때, h(t−τ)값을 적분하면 된다.
각 영역에서 적분 결과는 다음과 같다.
y(t) 및 y(t)의 그래프도 마지막에 표현되어 있다.
참고로 적분 유도 과정을 정리하면 다음과 같다.
y(t)=∫0te−a(t−τ)⋅1dτ=a1[e−a(t−τ)]0t=a1(1−e−at)=a1−e−at
y(t)=∫0be−a(t−τ)⋅1dτ=a1[e−a(t−τ)]0b=a1(e−a(t−b)−e−at)=a1(e−a(t−b)−e−a(t−b)⋅e−ab)=a1−e−abe−a(t−b)
2.3 이산 convolution의 성질
2.3.1 교환 법칙
convolution은 두 신호 x[n]과 h[n]에 대해서 교환법칙이 성립한다.
x[n]∗h[n]=h[n]∗x[n]
아래의 convolution의 정의를 보면 한쪽 신호를 뒤집어 줘서 합해주는 것을 알 수 있는데, 교환 법칙이 성립한다는 것은 두 신호 중 어떤 것을 뒤집더라도 결과는 같다는 것을 말해준다.
y[n]=x[n]∗h[n]=k=−∞∑∞(x[k]h[n−k])
즉, 계산이 편해지는 쪽의 신호를 뒤집어서 연산을 수행해주면 된다.
이를 시스템적인 관점에서 접근하자면 입력 신호와 시스템의 임펄스 응답의 역할을 바꾸어도 시스템의 출력이 여전히 같다는 것을 의미한다.
이산 컨볼루션의 교환 법칙이 성립한다는 것은 입력 신호와 임펄스 응답의 역할이 바뀌어도 시스템은 출력이 유지된다는 것을 의미한다.
또, 다른 해석으로는 두 개의 시스템이 직렬로 연결되는 경우 연결 순서를 바꾸어도 전체 시스템은 동일하다는 것 또한 생각해볼 수 있다.
이산 컨볼루션의 교환 법칙이 성립한다는 것은 연속 적용되는 시스템의 순서를 바꾸어도 전체 시스템은 동일하다는 것을 의미한다.
2.3.2 결합 법칙
convolution은 셋 또는 그 이상의 신호에 대해 조합된 컨볼루션의 계산 순서에 영향을 받지 않는다.
(x[n]∗h1[n])∗h2[n]=x[n]∗(h1[n]∗h2[n])
예를 들어 두 개의 시스템이 직렬로 연결되어 있는 경우, 두 개의 시스템을 컨볼루션으로 결합한 시스템 하나로 두 개 시스템의 결합을 대체할 수 있다는 것을 의미한다.
이산 컨볼루션의 결합 법칙의 의미. 두 시스템을 컨볼루션으로 합쳐 하나의 시스템처럼 다룰 수 있다.
2.3.3 분배 법칙
컨볼루션 연산은 다음과 같이 덧셈에 대한 분배법칙을 만족한다.
x[n]∗(h1[n]+h2[n])=x[n]∗h1[n]+x[n]∗h2[n]
분배 법칙은 두 개의 시스템이 병렬로 연결되어 있을 경우 각 시스템의 임펄스 응답을 더한 것으로 전체 시스템을 대체할 수 있다는 것을 의미한다.
3. 임펄스(Impulse) 응답
3.1 임펄스 응답의 물리적 의미
임펄스 응답은 이산 컨볼루션을 유도해내는 과정에서 나오게된 결과로써, 임펄스를 입력으로 줬을 때 시스템에서 보여주는 출력이다.
하지만, 임펄스 응답은 이보다 더 큰 의미를 갖는다. 임펄스 응답은 과거의 입력 값들이 현재의 출력 값에 기여하는 정도가 얼마인지 알려주는 가중치의 역할을 한다.
그러다보니 임펄스 응답 하나만을 가지고 시스템의 특성을 파악할 수 있다.
또, 임펄스를 입력으로 넣어주는 것은 시스템에 일종의 시동을 걸어주는 것 처럼 볼 수 있다.
n=0 인 시점에 임펄스 입력을 넣어줌으로써 n>0 인 시점에서 시스템이 작동하는데,
이것은 외부 입력에 의한 응답이라기 보다는 시스템의 내부적인 특성을 반영한 출력이기 때문에 시스템의 특성에 관한 정보를 임펄스 응답을 통해서 알 수 있게 되는 것이다.
앞의 시스템 응답에 관한 convolution 수식과 결부지어서 생각하면,
y[n]=T(x[n])=k=−∞∑∞(x[k]h[n−k])h[n]=k=−∞∑∞h[k]δ[n−k]
n지점에서 입력이 주어지면 현재시점의 출력(k=0) 뿐 아니라 이전 시점의 출력(k=...,-2, -1)과 미래 시점의 출력(k=...1, 2, ...)이 겹치는 지점의 출력이 모두 합쳐지는 것이다.