この計算機でできること
巡回畳み込み計算機は、2つの離散時間信号の巡回畳み込み(循環畳み込み・サーキュラーコンボリューション)を求めるツールです。これはデジタル信号処理(DSP)における基本演算のひとつです。線形畳み込みとは異なり、巡回畳み込みでは数列が周期 \(N\) に沿って「折り返し(ラップアラウンド)」されます。これはまさに、2つの信号の離散フーリエ変換(DFT)を掛け合わせてから逆変換したときに起こる現象と同じです。数列を入力すれば、出力される結果の数列に加えて、その最大値と最小値もすぐに確認できます。
入力する値
- 1つ目の数列:入力信号 \(x\) です。カンマ区切りの数値で入力します(例:
1, 2, 3, 4)。 - 2つ目の数列:もう一方の信号 \(h\) です。同じくカンマ区切りで入力します(例:
1, 1, 1)。
2つの数列の長さが異なる場合、短い方の数列はゼロで埋められ(ゼロパディング)、長い方の数列の長さ \(N\) にそろえられます。その上で、両方とも周期 \(N\) の周期信号として扱われます。
計算式
巡回畳み込みは次のように定義されます。
$$y[n] = \sum_{k=0}^{N-1} x[k] \cdot h\big[(n - k) \bmod N\big]$$
線形畳み込みとの最大の違いは、添字に mod N(\(N\) を法とする剰余)が使われている点です。\((n - k)\) が負になると、ゼロを返すのではなく数列の末尾へと折り返されます。この仕組みがあるため、結果の数列は常にちょうど \(N\) サンプル、つまり長い方の入力と同じ長さになります。
計算例
\(x = [1, 2, 3, 4]\)、\(h = [1, 1, 1, 1]\)(どちらも長さ \(N = 4\))としてみましょう。各出力を計算すると次のようになります。
- $$y[0] = 1\cdot1 + 2\cdot1 + 3\cdot1 + 4\cdot1 = 10$$
- $$y[1] = 1\cdot1 + 2\cdot1 + 3\cdot1 + 4\cdot1 = 10$$
- \(y[2] = 10\)、\(y[3] = 10\)
結果は [10, 10, 10, 10] となり、最大値・最小値はともに 10 です。\(h\) がすべて 1 なので、どの出力値も \(x\) の総和と等しくなります。これは計算が正しいかどうかを確かめる便利なチェックになります。
よくある質問
線形畳み込みとは何が違うのですか?線形畳み込みでは長さ \((\text{len}(x) + \text{len}(h) - 1)\) の数列が得られ、折り返しは起こりません。一方、巡回畳み込みでは長さが \(N\) に保たれ、はみ出した部分は先頭へと折り返されます。これは DFT を用いたフィルタリングの結果と一致します。
数列の長さが違う場合はどうなりますか?短い方の数列が長い方の長さ \(N\) に合わせてゼロパディングされるため、畳み込みの前に両者の長さがそろえられます。
負の数や小数も使えますか?はい、使えます。入力値は小数として解釈されるため、-1.5, 0.25, 3 のような値も問題なく扱えます。