前回 は、点をひとつ叩くと丸い波が広がること(点源の応答)、そしてそれを並べて足すと干渉・ホイヘンス・ビームフォーミングになることを見た。今日は、その「足す」を、もっと素朴で、もっと強力な道具として正面から掴む。
底にあるのは、たったひとつの考えだ ── 一発叩いたときの返事さえ分かっていれば、どんなに複雑な入力に対する答えも、その返事の“足し算”で出てしまう。 これが 重ね合わせ。波でも、回路でも、場でも、同じ手が効く。
一発の応答 ── インパルス応答
まず「一発叩く」を決める。ごく短く、鋭く、一回だけ突く。これを インパルス(撃力)という。── インパルスというと数学っぽく聞こえるけれど、要するに「一瞬だけ、どんと入れる」ことだ。現実に無限に細い針が刺さる、という意味じゃなくて、短いクリックや、ハンマーの一撃を理想化したものだと思えばいい。それに対するシステムの返事が インパルス応答 だよ。
もう少し正確に。 その理想化された「一瞬」を、数学では (ディラックのデルタ)と書く ── 幅ゼロ・高さ無限で、面積(入れた総量)だけが 1 の“一発”だ。その を入れたときの出力こそが、厳密な意味でのインパルス応答 。現実に完全な は作れないけれど、応答 の尾(立ち上がりや減衰)に比べて十分に短い一撃なら、それで十分よく近似できる。だから「ハンマーの一撃に対する返事」でちゃんと正しいんだ。
- 水面をちょん、と突けば → 丸い波紋が広がる。
- 鐘を一回叩けば → ポーンと、決まった音で鳴って減衰する。
- ばね玉の鎖 の一個を弾けば → 波が走って、端で跳ね返る。
- コンデンサに一瞬だけ電流を流せば → スッと充電して、ゆっくり放電する。
システムごとに、この「一発の返事 」の形は違う。でも、いったん が分かると ── 次がすごいんだ。
なぜ「比例」じゃ足りないのか
ここで素朴な疑問が出る。線形なら、出力は入力に比例して ── ただの定数倍でいいんじゃないの?
実際、そういうシステムもある。たとえば 抵抗器:電圧と電流は で、いまこの瞬間の入力だけで出力が決まる。ばねも(ゆっくり動かすうちは) で、引いた長さに比例した力がその場で返る。これらは 返事がその場で終わる ── 過去を引きずらないから、ほんとうに で済む。
でも、世の中の多くはそうじゃない。一発叩いた返事が、すぐには終わらず、尾を引く からだ。鐘はポーンとしばらく鳴り続けるし、部屋の残響は遅れて何度も返ってくる。その「尾」── 過去に入れたぶんが、いまもまだ残っている ── こそが応答 の正体で、ただの比例では捕まえられない所なんだ。下で、その尾を持つ代表例を2つ見てみよう。
例1:コンデンサ(RC回路)
抵抗 とコンデンサ の RCローパス(入力電圧 → コンデンサ電圧)を考える。ごく短い入力をひと突き入れると、コンデンサの電圧はスッと立ち上がり、そのあと を通して ゆっくり放電 していく。その返事(インパルス応答)は
時定数 で減っていく尾 ── これが 記憶 だ。 が長いほど、過去を長く引きずる。
ためしに一定の入力 を入れて、過去について足し合わせる(畳み込む)と、
あの見慣れた 充電カーブ が出てくる。これは「過去の入力 × まだ残っている応答」を足した、畳み込みそのもの。 では、この“じわっと立ち上がる”形は絶対に出ない。
例2:部屋の残響
手をパンと叩くと、直接音のあとに、壁で反射した音が遅れて届き、それがまた反射して…と、だんだん小さくなりながら続く。応答は「減衰するこだまの列」:
( は“一発の叩き”そのもの=無限に細いスパイク。 は反射1回ぶんの遅れ、 は1回ごとの減衰。)これを入力 と畳み込んでみよう。鍵は、デルタの ふるい分け(sifting) ── と畳み込むことは、ただ「そのぶん時間をずらす」ことに等しい:
(積分は の一点だけを“拾い出す”からだ。)あとは項ごとにこれを当てるだけ:
つまり 原音 + 遅れて小さくなったコピーの足し算。部屋が音にこだまを重ねていく、その操作の正体が畳み込みなんだ。畳み込みの本質は、まさにここにある ── 過去に入れた一つひとつに、いまもまだ残っている応答を掛けて、足し合わせる。離散の和でも、なめらかな積分でも、やっているのは同じ『過去の返事を足す』だよ。
この「尾を引く=記憶」が肝だ。記憶があると、いまの出力は いまの入力だけ では決まらない。少し前に叩いたぶん、もっと前に叩いたぶんの “まだ残っている返事” が、いまも効いている。だから は、過去のすべての叩きの「いまだ残っているぶん」を足し合わせたものになる ── ただの比例じゃ済まず、積分 になるのは、これが理由だ。
ここで は「過去のいつ叩いたか」、 は「その叩き(時刻 )が、いま(時刻 )でも“齢 ”としてどれだけ残っているか」を表す。 を過去ぜんぶ走らせて足す ── それが、次の畳み込みだ。
(逆に、 が叩いた瞬間だけで消える=記憶ゼロのシステムなら、過去は効かず、本当に で済む。それは畳み込みの“いちばん簡単な特別な場合” ── が一点に尖ったスパイクのとき、だよ。)
どんな入力も、応答の足し算
ひとつ前提を置く。同じ叩き方をすれば、いつ叩いても同じ形の返事が返ってくる システム(これを 時間不変 という)を考える。叩く時刻が違っても、返事の形は同じ ── ただ位置がずれるだけ。だから「 の時刻に叩いた返事」は、基準の応答 をそのまま だけずらした で書ける。
複雑な入力は、たくさんの小さなインパルスの列 だと思える。各瞬間に、その時の強さだけ突いている、と。
ここで使うのは「各インパルスの返事を、ただ足せばいい」という一手だ。各インパルスが、自分の強さ倍した のコピーを、自分のタイミングに置く。それを全部足したものが、出力 ── そう思える。(この“足せる”がいつ成り立つのか、その条件は最後にちゃんと詰めるよ。)
これを式にしてみよう。まず入力を、幅 の細い短冊に刻む。ここでひとつ引っかかりやすいのは、「なぜ高さ だけでなく も掛けるの?」という所。インパルスの“強さ”は、高さそのものじゃなくて、その一瞬でどれだけ入れたか、つまり面積 だからだ。だから時刻 の短冊は、高さ に幅 を掛けた 強さ のインパルス1本 とみなせる。
その1本が作る返事は、応答 をその強さ倍して、 だけ遅れて始める:
の「」は、 に始まった返事を、観測時刻 では“齢 ”の所で見ている、という意味だよ。たとえば、2秒の所で叩いた返事を5秒の時点で見るなら、叩いてから3秒たっている ── だから読むのは 。これを文字で書くと になる(叩いてから経った時間ぶん、応答カーブの先を読んでいる、というだけ)。
「足せばいい」なら、出力はすべての短冊の返事の和だ:
あとは短冊を無限に細くする()。和はなめらかな積分に化けて、
この式、新しいことは何ひとつ言っていない。 中身は、ずっと『応答 を、強さ倍して、ずらして、足す』のまま ── それを記号に翻訳しただけだ。 は、その“細かい足し算”の印。これが 畳み込み(コンボリューション)。突然わいてきた式じゃなくて、鎖を波動方程式にした ときと同じ「細かく刻んだ和 → 積分」の手なんだよ。
ここで、少し見方が変わる。さっきまでは「各時刻 に置いた返事 を、 について足す」と見ていた。いっぽう、観測時刻 のほうを固定して を動かすと、 は に対して 左右反転した形 に見える。だから教科書では「 を反転して滑らせる」と言う ── 同じ式を、別の向きから眺めているだけなんだ。
結局やっていることは、 を反転して、入力の上を滑らせ、重なりを掛けて足す、これだけ。下の「畳み込みスライダ」で、その「滑らせて足す」を手で動かせる。画像なら、小さなカーネル(=2次元の )を写真の上で滑らせる『畳み込みを一歩ずつ』も、まったく同じことだよ。
▶ 畳み込みスライダを触る ↗ 画像の畳み込みを一歩ずつ ↗
もうひとつの足し算 ── フーリエ
さっきのインパルスは、複雑な入力を 「時間の一点」ごと に分けて足す方法だった。じつは線形システムには、もうひとつ“相性のいい”分け方がある ── 「振動数ごと」 に分ける、サインの波 だ。どちらも、複雑なものを単純な部品に分けて、あとで足し戻す ── 同じ作戦の、ものさし違いなんだ。
なぜサインなのか。時間で性質が変わらない線形システム(叩く時刻によらず同じ振る舞いをする = さっきの“線形かつ時間不変”)にサインを1本入れると、定常状態では、出てくるのも同じ振動数のサイン(大きさと位相が変わるだけ)。形も振動数も変わらない。サインは、こういうシステムを“素通り”できる特別な形なんだ。
「時間で性質が変わらないシステムなんて、あるの?」と身構えるかもしれないけれど、身近なものは、たいていそうだ ── ギターの弦は、いつ弾いても同じ高さで鳴る。RCフィルタも、部屋の響きも、スピーカーも、朝でも夜でも同じ振る舞いをする。そこに純音(1本のサイン)を入れると、返ってくるのは、大きさや位相こそ変われ 同じ高さのサイン だ。ラの音を入れたのにドが返ってくる楽器なんて、ない。むしろ逆に、入れた音の振動数そのものを変えてしまうもの(歪ませたギターアンプ、無線の周波数逓倍器)のほうが特殊で珍しい ── それらは線形でないか、時間不変でないかの、どちらかなんだ。「振動数が変わらない」は、当たり前すぎて気づかないけれど、サインを主役に押し上げている当の性質だよ。
だから入力を サインの足し算 に分けておくと、システムの仕事は『各サインを、決まった倍率で大きく/小さくするだけ』になって、これ以上ないほど簡単になる。波・回路・場のいたる所にフーリエが顔を出すのは、これが理由だよ。
そして嬉しいことに、かなり広い範囲の形は、いろいろな振動数のサインを足し合わせれば作れる。── では、何のためにサインへ分けるのか。さっきの一手があるからだ:システムは各サインを、決まった倍率で変えるだけ。だから入力をサインに分けておけば、出力は「各振動数を、決まったゲインで強めたり弱めたりした」結果として、すぐ書ける。手強い畳み込みが、振動数ごとの 掛け算 に化けるんだ。
これは実用そのものだ。オーディオの イコライザ(トーンコントロール)は、低音・高音のサインを選んで持ち上げ/削っている。フィルタが「ある周波数を通し、別を遮る」のも、各サインに違う倍率を掛けているだけ。共鳴 は、システムが自分の得意な振動数のサインだけを大きく返す現象だ。どれも「サインに分ける → 振動数ごとに倍率をかける → 足し戻す」で見通せる。『Fourier スケッチブック』に好きな形を描くと、それが回る円(=サイン)の重ね合わせに組み立て直されていくのが見える。点(インパルス)で足すか、サインで足すか ── ものさし(基底)が違うだけで、やることは同じ「単純な部品に分けて、ひとつずつ解いて、足し戻す」。ただ、線形システムにとっては、サインの方が“仕事が楽”な分け方なんだ。
(この「各サインがただ倍率を受ける」を畳み込みの言葉で言い直すと、“畳み込み=ただの掛け算”になる。なぜそんなに綺麗になるのかは、信号の回にとっておくよ。)
なぜ足し算でいいのか
ここまで「足せばいい」を、当たり前のように使ってきた。最後に、その“足せる”の正体に触れておきたい。
うっかり「足せるのは線形だから。線形とは足せること」と言うと、ただの堂々巡りになる。だから、足し算を持ち出さずに言い直そう。あるシステムが、次の 2つの振る舞い を持つとき、それを 線形 と呼ぶ:
- 比例:叩く強さを2倍にすると、返事もきっかり2倍になる(3倍なら3倍、半分なら半分。歪まない)。
- 独立:2か所を同時に叩いても、片方の返事は、もう片方の存在を気にしない(互いに干渉せず、ただ並ぶ)。
この2つは、口で言うだけでなく 実際に試せる。たとえばアンプ ── 入力電圧を2倍にして、出力もきっかり2倍になるか(歪み始めるまでは、なる)。あるいは2つの純音を同時に鳴らして、聞こえるのはその2音だけか、それとも元になかった“濁った”音が湧くか。前者なら比例と独立が生きている=線形、後者なら線形が破れている印だ。そして、この2つが成り立つとき “だけ”、複雑な入力を部品に分けて足し戻す、というあの手が使える。つまり「足し算でいい」は線形の言い換えじゃなくて、比例と独立という、確かめられる2つの事実から出てくる帰結 なんだ。
(もうひとつ。 と“ずらして”書けたのは、この節のはじめに置いた 時間不変(いつ叩いても同じ形の返事)のおかげだ。正確に言うと、畳み込みでぜんぶ表せるのは、線形で、かつ時間不変 なシステム。この2つが揃って初めて、あの手が回る。)
そして、この2つが破れる世界もある。非線形 ── 大波が崩れる所、歪むほど鳴らしたスピーカー、乱流。そこでは2つの波が混ざって、元になかった新しい振動数が生まれたり、足し算があっさり壊れたりする。1と2を一緒に入れても、返事は「1の返事 + 2の返事」にならない。
だから「足し算でいい」は、世界からの 贈り物 みたいなものだ。波や場が、こんなに素直に分解して足せるのは、その多くが(少なくとも小さく叩くうちは)比例と独立を守る = 線形だから。
そして、足し算が効くということは ── たった一発の応答 さえ知れば、そのシステムの“ぜんぶ”が分かる、ということでもある。スピーカーのインパルス応答を測れば、どんな曲をどう鳴らすか予測できる。建物の揺れの応答が分かれば、どんな地震波で共振するかが読める。実際に録った部屋の を音に畳み込めば、その部屋の残響を“着せ替え”できる(畳み込みリバーブ)。レーダーやソナーは、送った一発のエコー= を読んで、相手の形や距離を当てている。一発の返事が、未来ぜんぶの台本になる ── これが重ね合わせの底力だよ。次は、この考えを「場」に持ち込む。空っぽの空間に、源をひとつ置いたときの“返事”を覚えて、それをたくさん足し合わせる ── やることは、今日とまったく同じだ。ただ、その足し算の向こうに、自然界をいちばん深く貫く骨(保存)が見えてくる。