컨벌루션은 보통의 곱셈처럼 순서를 바꿔도(교환), 덧셈에 나눠 걸어도(분배), 묶는 순서를 바꿔도(결합) 결과가 같다. 그래서 LTI 시스템을 줄줄이 이은 것은 임펄스 응답을 컨벌루션한 시스템 하나로, 나란히 이은 것은 임펄스 응답을 더한 시스템 하나로 바꿔 생각할 수 있다. 줄줄이 이은 LTI 시스템은 순서를 바꿔도 전체 결과가 같다. 이 성질들은 두 시스템이 모두 LTI일 때만 쓸 수 있다.
예시로 보기
마이크 신호를 잡음 제거기와 증폭기에 차례로 통과시킨다고 하자. 둘 다 LTI라면 잡음 제거를 먼저 하든 증폭을 먼저 하든 결과는 같다. 두 기계를 하나로 합친 장치의 임펄스 응답은 두 임펄스 응답의 컨벌루션 \(h_1 * h_2\)다(그림 2.25)1.
정의
이산 시간과 연속 시간 모두에서
| 성질 | 식 | 시스템으로 보면 |
|---|---|---|
| 교환법칙 | \(x * h = h * x\) | 입력과 임펄스 응답의 역할을 바꿔도 출력이 같다 |
| 분배법칙 | \(x * (h_1 + h_2) = x * h_1 + x * h_2\) | 병렬 연결 = 임펄스 응답이 \(h_1 + h_2\)인 시스템 하나 |
| 결합법칙 | \(x * (h_1 * h_2) = (x * h_1) * h_2\) | 직렬 연결 = 임펄스 응답이 \(h_1 * h_2\)인 시스템 하나 |
교환과 결합을 함께 쓰면, 직렬 연결된 LTI 시스템의 순서를 바꿔도 전체 임펄스 응답이 같다.
flowchart LR
subgraph S["직렬 연결"]
direction LR
A["x"] --> B["h₁"] --> C["h₂"] --> D["y"]
end
subgraph S2["하나로 합친 시스템"]
direction LR
E["x"] --> F["h₁ * h₂"] --> G["y"]
end
flowchart LR
subgraph P["병렬 연결"]
direction LR
H["x"] --> I["h₁"] --> K(("+"))
H --> J["h₂"] --> K
K --> L["y"]
end
subgraph P2["하나로 합친 시스템"]
direction LR
M["x"] --> N["h₁ + h₂"] --> O["y"]
end
각 그림의 두 묶음은 같은 \(x\)에 같은 \(y\)를 낸다. 상자가 모두 LTI일 때만 이렇게 바꿔 그릴 수 있다.
분배법칙은 입력 쪽으로도 통한다: \((x_1 + x_2) * h = x_1 * h + x_2 * h\). 두 입력의 합에 대한 응답은 각 응답의 합이라는 뜻이다.
증명
교환법칙(이산): \(r = n - k\)로 바꾸면 \(k = n - r\)이고, \(k\)가 모든 정수를 돌 때 \(r\)도 모든 정수를 돈다.
\[x[n] * h[n] = \sum_{k}x[k]h[n-k] = \sum_{r}x[n-r]h[r] = h[n] * x[n]\]교환법칙(연속): \(u = t - \tau\)로 바꾸면 \(d\tau = -du\)이고 적분 범위가 뒤집혀 부호가 상쇄된다.
\[(f * g)(t) = \int_{\infty}^{-\infty}f(t-u)g(u)(-du) = \int_{-\infty}^{\infty}g(u)f(t-u)du = (g * f)(t)\]결합법칙(연속)
- \(((f*g)*h)(t) = \int\left[\int f(u)g(\tau - u)du\right]h(t-\tau)d\tau\) (안쪽 정의를 대입)
- 적분 순서를 바꾼다: \(= \int f(u)\left[\int g(\tau-u)h(t-\tau)d\tau\right]du\) (적분 순서를 바꿀 수 있다고 가정)
- 안쪽에서 \(v = \tau - u\)로 바꾸면 \(\int g(v)h(t - u - v)dv = (g*h)(t-u)\)
- 그래서 \(= \int f(u)(g*h)(t-u)du = (f*(g*h))(t)\).
분배법칙은 합과 적분이 덧셈에 대해 나눠지는 성질에서 바로 나온다1.
예제
예제 2.10 \(x[n] = (\frac12)^n u[n] + 2^n u[-n]\), \(h[n] = u[n]\)
- 분배법칙으로 나눈다: \(x_1 = (\frac12)^n u[n]\), \(x_2 = 2^n u[-n]\).
- \(y_1 = x_1 * h\)는 예제 2.3에서 \(\alpha = \frac12\): \(2 - (\frac12)^n\) (\(n \ge 0\)).
- \(y_2 = x_2 * h\)는 예제 2.5: \(2\) (\(n \ge 0\)), \(2^{n+1}\) (\(n < 0\)).
- 더하면 \(y[n] = 4 - (\frac12)^n\) (\(n \ge 0\)), \(2^{n+1}\) (\(n < 0\)). 값은 \(y[-3] = \frac14\), \(y[-1] = 1\), \(y[0] = 3\), \(y[1] = 3.5\), \(y[2] = 3.75\)로 4에 다가간다(그림 2.24).
\(y_1\)은 \(n \ge 0\)에서만 값이 있고, \(y_2\)는 음의 \(n\)에서도 값이 있다. 둘을 더한 맨 아래 줄이 4(점선)로 다가간다2.
비선형 시스템에서는 통하지 않는다. \(y[n] = (x[n] + x[n-1])^2\)나 \(y[n] = \max(x[n], x[n-1])\)은 \(x[n] + x[n-1]\)과 비슷한 모양이지만 LTI가 아니라 임펄스 응답으로 나타낼 수 없다. max의 예: 행렬 \(m_1 = \begin{bmatrix}0&1\\2&3\end{bmatrix}\), \(m_2 = \begin{bmatrix}4&5\\0&1\end{bmatrix}\)에서 \(\max(m_1 - m_2) = 2\)이지만 \(\max m_1 - \max m_2 = -2\)다(딥러닝의 맥스 풀링).
활용
- 복잡한 신호 처리 사슬을 하나의 임펄스 응답으로 미리 합쳐 두면, 입력마다 계산을 한 번만 하면 된다1.
- 계산할 때 더 쉬운 쪽을 뒤집어 민다(교환법칙). 보통 모양이 단순한 쪽을 뒤집는 것이 편하다.
연결
- 선수: 컨벌루션 적분, 시스템과 시스템 연결
- 다음: 임펄스 응답으로 본 LTI 시스템의 성질
확인 문제
C1 입력이 \(h_1\)과 \(h_2\)인 두 LTI 시스템에 나란히 들어가 출력이 더해진다. 이어서 그 결과가 \(h_3\) 시스템을 지난다. 전체 임펄스 응답을 식으로 쓰라.
답: \((h_1 + h_2) * h_3\). 분배법칙으로 \(h_1 * h_3 + h_2 * h_3\)과 같다.
C2 직렬 연결된 두 LTI 시스템의 순서를 바꿔도 되는 이유를 성질 이름으로 설명하라.
답: 결합법칙으로 전체 출력은 \(x * (h_1 * h_2)\)이고, 교환법칙으로 \(h_1 * h_2 = h_2 * h_1\)이다. 그래서 \(x * (h_2 * h_1)\), 곧 순서를 바꾼 연결과 같다.
C3 순서를 바꾸면 결과가 달라지는 두 시스템의 직렬 연결 예를 들라.
답: “제곱하기”와 “2배 하기”. 입력 1을 넣으면 제곱 → 2배는 2, 2배 → 제곱은 4다. 제곱이 선형이 아니라 컨벌루션으로 나타낼 수 없기 때문이다.
-
20_convolution-properties_plot.py로 그렸고, 같은 코드로 다음을 확인했다: 정의대로 계산한 컨벌루션과 닫힌 꼴이 같고, \(y[-3] = \frac14\), \(y[-1] = 1\), \(y[0] = 3\), \(y[1] = 3.5\), \(y[2] = 3.75\). ↩