MCP로 연결 →

계산 입력

공식

광고

결과

순환 컨볼루션

31, 31, 28

첫 번째 수열 1,2,3
두 번째 수열 4,5,6
최댓값 31
최솟값 28

이 계산기의 기능

순환 컨볼루션 계산기는 두 이산 시간 신호 수열의 순환(원형, 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\)개의 샘플, 즉 더 긴 입력과 동일한 길이를 갖습니다.

광고
순환 합성곱을 위해 샘플을 정렬한 원 위의 두 수열
순환 합성곱은 인덱스를 모듈로 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의 합과 같아지는데, 이는 계산이 제대로 됐는지 확인하기에 유용한 검산법입니다.

순환 합성곱의 샘플별 곱셈과 합산을 보여주는 단계별 격자
각 출력 \(y[i]\)는 정렬된 샘플 곱의 합이며, 순환 인덱싱으로 계산됩니다.

자주 묻는 질문

선형 컨볼루션과 무엇이 다른가요? 선형 컨볼루션은 감겨 들어오는 부분 없이 길이가 \((\text{len}(x) + \text{len}(h) - 1)\)인 수열을 만듭니다. 반면 순환 컨볼루션은 길이를 \(N\)으로 유지하면서 넘치는 부분을 앞쪽으로 되돌려 접어 넣습니다. 이것이 DFT 기반 필터링과 정확히 일치하는 방식입니다.

두 수열의 길이가 다르면 어떻게 되나요? 더 짧은 수열을 더 긴 길이 \(N\)에 맞춰 0으로 채우므로, 컨볼루션 전에 두 수열이 정렬됩니다.

음수나 소수도 입력할 수 있나요? 네. 입력값은 소수로 해석되므로 -1.5, 0.25, 3 같은 값도 문제없이 처리됩니다.

최종 업데이트: