이 계산기의 기능
순환 컨볼루션 계산기는 두 이산 시간 신호 수열의 순환(원형, cyclic) 합성곱을 계산해 줍니다. 디지털 신호 처리(DSP)에서 가장 기본이 되는 연산이죠. 선형 컨볼루션과 달리 순환 컨볼루션은 일정한 주기 N을 기준으로 수열이 끝과 처음을 맞물려 감기는(wrap-around) 방식으로 동작합니다. 이는 두 신호의 이산 푸리에 변환(DFT)을 곱한 뒤 다시 역변환했을 때 정확히 나타나는 결과와 같습니다. 수열만 입력하면 결과 출력 수열은 물론, 빠른 분석을 위한 최댓값과 최솟값까지 즉시 확인할 수 있습니다.
입력값
- 첫 번째 수열: 입력 신호 x로, 쉼표로 구분한 숫자로 입력합니다(예:
1, 2, 3, 4). - 두 번째 수열: 두 번째 신호 h로, 마찬가지로 쉼표로 구분해 입력합니다(예:
1, 1, 1).
두 수열의 길이가 다르면, 계산기가 더 짧은 쪽을 0으로 채워(zero-padding) 더 긴 수열의 길이 \(N\)에 맞춥니다. 그런 다음 두 수열 모두 주기 \(N\)을 갖는 주기 신호로 처리됩니다.
계산 공식
순환 컨볼루션은 다음과 같이 정의됩니다.
$$y[n] = \sum_{k=0}^{N-1} x[k] \cdot h\big[(n - k)\bmod N\big]$$
선형 컨볼루션과의 핵심 차이는 modulo N(N으로 나눈 나머지) 인덱스입니다. \((n - k)\)가 음수가 되면 0이 되는 대신 수열의 끝부분으로 다시 감겨 들어옵니다. 그래서 결과 수열의 길이는 항상 정확히 \(N\)개의 샘플, 즉 더 긴 입력과 동일한 길이를 갖습니다.
예제로 살펴보기
x = [1, 2, 3, 4], h = [1, 1, 1, 1]이라고 하겠습니다(둘 다 길이 \(N = 4\)). 각 출력을 계산하면 다음과 같습니다.
- \(y[0] = 1\cdot 1 + 2\cdot 1 + 3\cdot 1 + 4\cdot 1 = 10\)
- \(y[1] = 1\cdot 1 + 2\cdot 1 + 3\cdot 1 + 4\cdot 1 = 10\)
- \(y[2] = 10\), \(y[3] = 10\)
결과는 [10, 10, 10, 10]이며 최댓값은 10, 최솟값도 10입니다. h가 전부 1이므로 모든 출력값이 x의 합과 같아지는데, 이는 계산이 제대로 됐는지 확인하기에 유용한 검산법입니다.
자주 묻는 질문
선형 컨볼루션과 무엇이 다른가요? 선형 컨볼루션은 감겨 들어오는 부분 없이 길이가 \((\text{len}(x) + \text{len}(h) - 1)\)인 수열을 만듭니다. 반면 순환 컨볼루션은 길이를 \(N\)으로 유지하면서 넘치는 부분을 앞쪽으로 되돌려 접어 넣습니다. 이것이 DFT 기반 필터링과 정확히 일치하는 방식입니다.
두 수열의 길이가 다르면 어떻게 되나요? 더 짧은 수열을 더 긴 길이 \(N\)에 맞춰 0으로 채우므로, 컨볼루션 전에 두 수열이 정렬됩니다.
음수나 소수도 입력할 수 있나요? 네. 입력값은 소수로 해석되므로 -1.5, 0.25, 3 같은 값도 문제없이 처리됩니다.