합성곱 계산기 쉽게 이해하기 — 개념과 원리
이 계산기는 신호와 필터 커널처럼 길이가 유한한 두 수열의 이산 합성곱을 구합니다. 출력 수열 전체, 그 길이, 가장 큰 값과 위치, 처음 몇 항의 계산 과정을 보여 줍니다. 신호 처리 숙제, 자료 평활화, 계수를 이용한 다항식 곱셈에 쓸 수 있습니다.
계산 방법
y[n] = Σₖ x[k] · h[n − k], 두 항이 모두 존재하는 모든 k에 대해 더함
출력 길이 = N + M − 1, n = 0 … N + M − 2
- N은 x의 길이, M은 h의 길이이며 둘 다 0번 인덱스부터 시작합니다.
- 검산: sum(y) = sum(x) × sum(h)
- 합성곱은 교환법칙이 성립해 x와 h를 바꿔도 y가 같습니다.
원리
h를 어떤 시스템에 크기 1인 펄스 하나를 넣었을 때의 응답이라고 생각해 봅시다. 신호는 크기를 바꾸고 위치를 옮긴 펄스들의 합이며, 선형이고 시간에 따라 변하지 않는 시스템이라면 출력은 같은 방식으로 크기와 위치를 바꾼 응답들의 합입니다. 이 합을 적으면 합성곱 공식이 됩니다. 실제로는 커널을 뒤집어 신호 위로 밀면서, 위치마다 겹치는 값끼리 곱해 더합니다. 다항식 곱셈도 같은 계산입니다. (1 + 2t + 3t² + 4t³)(0.5 + t + 0.5t²)의 계수가 바로 이 합성곱입니다.
예제 풀이
기본값: x = 1, 2, 3, 4, h = 0.5, 1, 0.5.
- 길이는 4, 3이므로 출력은 4 + 3 − 1 = 6개입니다.
- y[0] = 1·0.5 = 0.5, y[1] = 1·1 + 2·0.5 = 2, y[2] = 1·0.5 + 2·1 + 3·0.5 = 4입니다.
- y[3] = 2·0.5 + 3·1 + 4·0.5 = 6, y[4] = 3·0.5 + 4·1 = 5.5, y[5] = 4·0.5 = 2입니다.
- 결과는 y = 0.5, 2, 4, 6, 5.5, 2, 가장 큰 값은 3번 위치의 6입니다.
- 검산: sum(y) = 20, sum(x) × sum(h) = 10 × 2 = 20입니다.
결과 해석
0.5, 1, 0.5 같은 커널은 각 값을 이웃과 섞는 평활화 필터입니다. 가중치의 합이 2라서 전체 크기도 두 배가 되는데, 커널을 그 합으로 나누면 크기가 유지됩니다. 앞뒤에 덧붙은 값들은 커널이 신호와 일부만 겹치는 구간이며, 필터에서는 흔히 이 가장자리를 잘라 내거나 채워 넣어 처리합니다.
흔한 실수
- 커널을 뒤집지 않아 합성곱이 아니라 상관을 계산하는 경우
- 출력 길이가 입력과 같을 것이라 기대하는 경우
- 인덱스를 0이 아니라 1부터 세는 경우
- 같은 길이로 거른 신호와 비교하며 가장자리 값을 무시하는 경우
자주 묻는 질문
이산 합성곱이란?
뒤집은 커널을 신호 위로 밀며 곱해 더하는 y[n] = Σ x[k] h[n − k]입니다.
합성곱 결과의 길이는?
길이가 N과 M인 수열이면 N + M − 1개입니다.
다항식 곱셈과 어떤 관계인가요?
두 다항식을 곱한 결과의 계수가 각 계수 목록의 합성곱입니다.
출처: S. W. Smith, The Scientist and Engineer's Guide to Digital Signal Processing, Ch. 6 "Convolution"