畳み込み
畳み込み(たたみこみ、convolution)とは関数 f を平行移動しながら関数 g を重ね足し合わせる二項演算である。畳み込み積分・合成積・重畳積分とも呼ばれる。
目次
定義
関数 f, g の畳み込みは f * g と書き、以下のように定義される:
- <math>(f * g)(t) = \int f(\tau) g(t - \tau)\, d\tau</math>
積分範囲は関数の定義域に依存する。通常は区間 (−∞, +∞) で定義される関数を扱うことが多いので、積分範囲は −∞ から +∞ で計算されることが多い。一方 f, g が有限区間でしか定義されない場合には、g(t - τ) が定義域内に入るように f, g を周期関数とみなして計算される。この周期関数とみなして畳み込みをすることを循環畳み込み(じゅんかんたたみこみ、cyclic convolution)と呼ぶ。
離散値で定義された関数に対する畳み込みは、積分のかわりに総和を使って同様に定義される:
- <math>(f * g)(m) = \sum_n {f(n) \, g(m - n)}</math>
総和の範囲も関数の定義域に依存し、関数が有限区間でしか定義されていない場合は周期関数とみなして畳み込み演算が行われる。また、離散系の場合、定義域外の値を 0 と定義し直した関数での畳み込みをよく行われる。これを線形畳み込みまたは直線畳み込み(せんけいたたみこみ/ちょくせんたたみこみ、linear convolution)と呼ぶ。なお離散系の場合は積分を使わずに総和を使うので、畳み込み積分・重畳積分とは呼ばず、畳み込み和・重畳和と呼ぶ。
性質
積分演算に由来する性質として以下の性質がある。
- 交換律
- <math>f*g = g*f</math>
- 結合律
- <math>(f*g)*h = f*(g*h)</math>
- 分配律
- <math>f*(g+h) = (f*g) + (f*h) </math>
- スカラー倍
- <math>a(f*g) = (a f)*g = f*(a g)</math>
- ただし、a は任意の実数または複素数。
- 微分
- <math>{\rm D}(f*g) = {\rm D}f*g = f*{\rm D}g</math>
- ただし、D は微分演算子(離散系の場合は Df(n) = f(n + 1) - f(n))。
畳み込み定理
- <math>\mathcal{F}(f * g) = \mathcal{F}(f) \cdot \mathcal{F}(g)</math>
ただし <math>\mathcal{F}(f)</math> は関数 f のフーリエ変換である。この定理はラプラス変換・Z変換やメリン変換 (Mellin transform) といった変換に対しても適用できる。
フーリエ変換を使って畳み込み演算を単純な掛け算に変換することが出来る。離散系での関数の場合、定義通りの畳み込み計算をしないで、関数 f, g の高速フーリエ変換 (FFT) を掛け算した結果を逆高速フーリエ変換 (IFFT) をすることで、高速に畳み込みの計算処理をするのが一般的である。
応用
確率測度における畳み込み
集合関数の一種である確率測度の畳み込みは次のように表現される。確率測度 μ1, μ2 において任意のボレル集合 B に対し、
- <math>(\mu_1 *\mu_2 )(B) = \int 1_B (x +y)\ \mu_1(dx)\mu_2(dy)</math>
と表現される。これは μ1, μ2 を集合関数として捉えて、変数変換することで求まる。これにより、μ1, μ2 を分布に持つ確率変数 X, Y においてその和 X + Y の分布が畳み込みにあたることがわかる。
多項式の掛け算
多項式の掛け算の結果の係数列は、元の多項式の係数列の線形畳み込みになる。実際
- <math>
\left(\sum_{i=0}^m a_i x^i \right)\left(\sum_{j=0}^l b_j x^j\right) = \sum_{k=0}^{m+l}\left(\sum_{i+j=k} a_i b_j \right)x^k = \sum_{k=0}^{m+l}\left(\sum_{i=0}^k a_i b_{k-i} \right)x^k
</math> であり、掛け算の結果の係数が a*b となる。
線形システム
電気回路といった古典的な時不変(シフト不変)線形システムは、任意の入力 x(t) に対する出力 y(t) が x(t) とインパルス応答 h(t) の畳み込みで記述できる:
- <math>y(t) = h(t) * x(t)</math>
ここで特に、入力 x(t) がデルタ関数 δ(t) のとき出力は h(t) そのものになる。
ここで上式の両辺をフーリエ変換もしくはラプラス変換(離散系の場合はZ変換)すると、#畳み込み定理より下式のようになる。
- <math>Y = H X</math>
ここで、
- <math>H = \frac{Y}{X}</math>
音響学
エコーは元の音波と、音を反射するさまざまな物体に因る特性(インパルス応答)との畳み込みで記述される。カラオケやシンセサイザーに搭載されているエコー機能は、この畳み込みの効果を電気回路もしくはコンピュータでシミュレートすることで実現している。
光学および画像処理
撮像時のブレなどの多くのぶれ (blur) は畳み込みで記述できる。例えば、ピントがぼけた写真は、ピントがあった仮想的な画像と、絞りの特性を示す円との畳み込みである。また被写体等の動きによるブレも、静止した仮想的な画像と動きの特性との畳み込みであり、グラフィックソフトウェアのモーションブラーはこの畳み込み演算を計算によりシミュレートすることで実現している。
画像認識においても、異なるスケールの画像を認識するにあたり、畳み込みでぶれをつくってから、画像処理することがある。
統計学
関連項目
- 逆畳み込み(Deconvolution)
- ブラインド・デコンボリューション
- インパルス応答 - 伝達関数
- フーリエ変換 - ラプラス変換
- 軟化子(Mollifier)
- 基本解
- 超関数
- 自己回帰移動平均モデル
- 巡回行列
- アナログ信号処理
- コーシー積
外部リンク
- The Joy of Convolution Java Applet を使った視覚的な畳み込みの説明
- Examples of sampled impulse responses to be used in convolution reverbs (Fokke Van Saane)
- Examples of impulse responses synthesized from oscillator spectra, to be used in convolution reverbs (Emmanuel Deruty)
- BruteFIR; A software for applying long FIR filters to multi-channel digital audio, either offline or in realtime.
- Freeverb3 Reverb Impulse Response Processor