畳み込み

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
ファイル:Convolucion Funcion Pi.gif
2つの正方形による畳み込み。解として得る波形は三角波となる。黄色の領域で示されている面積が2つの方形波の合成積である。
ファイル:Convolucion de entrada con respuesta al impulso.gif
正方形がRC回路に入力された場合の出力信号波形を得るために、RC回路のインパルス応答と方形波の畳み込みを行っている。 黄色の領域で示されている面積が合成積である。

畳み込み(たたみこみ、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) は畳み込みで記述できる。例えば、ピントがぼけた写真は、ピントがあった仮想的な画像と、絞りの特性を示すとの畳み込みである。また被写体等の動きによるブレも、静止した仮想的な画像と動きの特性との畳み込みであり、グラフィックソフトウェアのモーションブラーはこの畳み込み演算を計算によりシミュレートすることで実現している。

画像認識においても、異なるスケールの画像を認識するにあたり、畳み込みでぶれをつくってから、画像処理することがある。

統計学

テンプレート:節stub

関連項目

外部リンク