|TNKS1407 解説
← 解説一覧へ

重ね合わせ ── 一発の応答を、足し合わせる

2026.06.14

一発叩いたときの返事(インパルス応答)さえ分かれば、どんな複雑な入力への答えも、その返事の足し算で出てしまう。畳み込みとフーリエ ── ふたつの“足し算”で、波も回路も場も解く。そして最後に「なぜ足し算でいいのか」を問う。

▶ 畳み込みスライダ/フーリエ スケッチブックで遊ぶ

前回 は、点をひとつ叩くと丸い波が広がること(点源の応答)、そしてそれを並べて足すと干渉・ホイヘンス・ビームフォーミングになることを見た。今日は、その「足す」を、もっと素朴で、もっと強力な道具として正面から掴む。

底にあるのは、たったひとつの考えだ ── 一発叩いたときの返事さえ分かっていれば、どんなに複雑な入力に対する答えも、その返事の“足し算”で出てしまう。 これが 重ね合わせ。波でも、回路でも、場でも、同じ手が効く。

一発の応答 ── インパルス応答

まず「一発叩く」を決める。ごく短く、鋭く、一回だけ突く。これを インパルス(撃力)という。── インパルスというと数学っぽく聞こえるけれど、要するに「一瞬だけ、どんと入れる」ことだ。現実に無限に細い針が刺さる、という意味じゃなくて、短いクリックや、ハンマーの一撃を理想化したものだと思えばいい。それに対するシステムの返事が インパルス応答 hh だよ。

システムごとに、この「一発の返事 hh」の形は違う。でも、いったん hh が分かると ── 次がすごいんだ。

なぜ「比例」じゃ足りないのか

ここで素朴な疑問が出る。線形なら、出力は入力に比例して y(t)=kx(t)y(t) = k\,x(t) ── ただの定数倍でいいんじゃないの?

そうならないのは、hh が一瞬で終わらないから だ。一発叩いた返事は、たいてい 尾を引く

例1:コンデンサ(RC回路)

抵抗 RR とコンデンサ CCRCローパス(入力電圧 → コンデンサ電圧)を考える。ごく短い入力をひと突き入れると、コンデンサの電圧はスッと立ち上がり、そのあと RR を通して ゆっくり放電 していく。その返事(インパルス応答)は

h(t)=1RCet/RC(t0)h(t) = \frac{1}{RC}\,e^{-t/RC}\qquad(t\ge 0)

時定数 RCRC で減っていく尾 ── これが 記憶 だ。RCRC が長いほど、過去を長く引きずる。ためしに一定の入力 x(t)=Xx(t)=X を入れて、過去について足し合わせる(畳み込む)と、

y(t)=0tX1RCe(tτ)/RCdτ=X(1et/RC)y(t) = \int_0^{t} X\cdot\frac{1}{RC}\,e^{-(t-\tau)/RC}\,d\tau = X\bigl(1 - e^{-t/RC}\bigr)

あの見慣れた 充電カーブ が出てくる。これは「過去の入力 × まだ残っている応答」を足した、畳み込みそのもの。y=kxy=k\,x では、この“じわっと立ち上がる”形は絶対に出ない。

例2:部屋の残響

手をパンと叩くと、直接音のあとに、壁で反射した音が遅れて届き、それがまた反射して…と、だんだん小さくなりながら続く。応答は「減衰するこだまの列」:

h(t)=δ(t)+aδ(tT)+a2δ(t2T)+(0<a<1)h(t) = \delta(t) + a\,\delta(t-T) + a^2\,\delta(t-2T) + \cdots\qquad(0<a<1)

δ\delta は“一発の叩き”そのもの=無限に細いスパイク。TT は反射1回ぶんの遅れ、aa は1回ごとの減衰。)これを入力 xx と畳み込むと、

y(t)=x(t)+ax(tT)+a2x(t2T)+y(t) = x(t) + a\,x(t-T) + a^2\,x(t-2T) + \cdots

つまり 原音 + 遅れて小さくなったコピーの足し算。部屋が音に“残響を足す”操作は、そのまま畳み込みだ。離散の和でも、なめらかな積分でも、やっているのは同じ『過去の返事を足す』だよ。

この「尾を引く=記憶」が肝だ。記憶があると、いまの出力は いまの入力だけ では決まらない。少し前に叩いたぶん、もっと前に叩いたぶんの “まだ残っている返事” が、いまも効いている。だから y(t)y(t) は、過去のすべての叩きの「いまだ残っているぶん」を足し合わせたものになる ── ただの比例じゃ済まず、積分 になるのは、これが理由だ。

ここで τ\tau は「過去のいつ叩いたか」、h(tτ)h(t-\tau) は「その叩き(時刻 τ\tau)が、いま(時刻 tt)でも“齢 tτt-\tau”としてどれだけ残っているか」を表す。τ\tau を過去ぜんぶ走らせて足す ── それが、次の畳み込みだ。

(逆に、hh が叩いた瞬間だけで消える=記憶ゼロのシステムなら、過去は効かず、本当に y(t)=kx(t)y(t)=k\,x(t) で済む。それは畳み込みの“いちばん簡単な特別な場合” ── hh が一点に尖ったスパイクのとき、だよ。)

どんな入力も、応答の足し算

ひとつ前提を置く。同じ叩き方をすれば、いつ叩いても同じ形の返事が返ってくる システム(これを 時間不変 という)を考える。叩く時刻が違っても、返事の形は同じ ── ただ位置がずれるだけ。だから「τ\tau の時刻に叩いた返事」は、基準の応答 hh をそのまま τ\tau だけずらした h(tτ)h(t-\tau) で書ける。

複雑な入力は、たくさんの小さなインパルスの列 だと思える。各瞬間に、その時の強さだけ突いている、と。

ここで使うのは「各インパルスの返事を、ただ足せばいい」という一手だ。各インパルスが、自分の強さ倍した hh のコピーを、自分のタイミングに置く。それを全部足したものが、出力 ── そう思える。(この“足せる”がいつ成り立つのか、その条件は最後にちゃんと詰めるよ。)

① 入力 = インパルス(一発の叩き)の列。高さ=強さ。 ② 各インパルスが、応答 h のコピーを その強さ倍・その位置に置く。 ③ 全部足すと、出力。これが「畳み込み」。
どんな入力も「一発の応答 h」を強さ倍して並べ、足し合わせれば出力になる。これが重ね合わせ=畳み込み。

これを式にしてみよう。まず入力を、幅 Δτ\Delta\tau の細い短冊に刻む。ここでひとつ引っかかりやすいのは、「なぜ高さ x(τ)x(\tau) だけでなく Δτ\Delta\tau も掛けるの?」という所。インパルスの“強さ”は、高さそのものじゃなくて、その一瞬でどれだけ入れたか、つまり面積 だからだ。だから時刻 τ\tau の短冊は、高さ x(τ)x(\tau) に幅 Δτ\Delta\tau を掛けた 強さ x(τ)Δτx(\tau)\,\Delta\tau のインパルス1本 とみなせる。

その1本が作る返事は、応答 hh をその強さ倍して、τ\tau だけ遅れて始める:

x(τ)Δτh(tτ)x(\tau)\,\Delta\tau \cdot h(t-\tau)

h(tτ)h(t-\tau) の「tτt-\tau」は、τ\tau に始まった返事を、観測時刻 tt では“齢 tτt-\tau”の所で見ている、という意味だよ。たとえば、2秒の所で叩いた返事を5秒の時点で見るなら、叩いてから3秒たっている ── だから読むのは h(3)h(3)。これを文字で書くと h(tτ)h(t-\tau) になる(叩いてから経った時間ぶん、応答カーブの先を読んでいる、というだけ)。

「足せばいい」なら、出力はすべての短冊の返事の和だ:

y(t)    τx(τ)h(tτ)Δτy(t) \;\approx\; \sum_{\tau} x(\tau)\,h(t-\tau)\,\Delta\tau

刻みを細かくすると、とびとびの和がなめらかな積分になる
短冊(とびとびの和 Σ)を、刻みを細かくしていくと ── なめらかな積分 ∫ になる。

あとは短冊を無限に細くする(Δτ0\Delta\tau \to 0)。和はなめらかな積分に化けて、

y(t)=x(τ)h(tτ)dτy(t) = \int x(\tau)\,h(t-\tau)\,d\tau

読めなくても大丈夫。 この式の中身は、ずっと『応答 hh を、強さ倍して、ずらして、足す』のまま ── それを記号に翻訳しただけだ。\int は、その“細かい足し算”の印。これが 畳み込み(コンボリューション)。突然わいてきた式じゃなくて、鎖を波動方程式にした ときと同じ「細かく刻んだ和 → 積分」の手なんだよ。

ここで、少し見方が変わる。さっきまでは「各時刻 τ\tau に置いた返事 h(tτ)h(t-\tau) を、τ\tau について足す」と見ていた。いっぽう、観測時刻 tt のほうを固定して τ\tau を動かすと、h(tτ)h(t-\tau)τ\tau に対して 左右反転した形 に見える。だから教科書では「hh を反転して滑らせる」と言う ── 同じ式を、別の向きから眺めているだけなんだ。

結局やっていることは、hh を反転して、入力の上を滑らせ、重なりを掛けて足す、これだけ。下の「畳み込みスライダ」で、その「滑らせて足す」を手で動かせる。画像なら、小さなカーネル(=2次元の hh)を写真の上で滑らせる『畳み込みを一歩ずつ』も、まったく同じことだよ。

▶ 畳み込みスライダを触る ↗ 画像の畳み込みを一歩ずつ ↗

もうひとつの足し算 ── フーリエ

さっきのインパルスは、複雑な入力を 「時間の一点」ごと に分けて足す方法だった。じつは線形システムには、もうひとつ“相性のいい”分け方がある ── 「振動数ごと」 に分ける、サインの波 だ。どちらも、複雑なものを単純な部品に分けて、あとで足し戻す ── 同じ作戦の、ものさし違いなんだ。

なぜサインなのか。時間で性質が変わらない線形システム(叩く時刻によらず同じ振る舞いをする = さっきの“線形かつ時間不変”)にサインを1本入れると、定常状態では、出てくるのも同じ振動数のサイン(大きさと位相が変わるだけ)。形も振動数も変わらない。サインは、こういうシステムを“素通り”できる特別な形なんだ。だから入力を サインの足し算 に分けておくと、システムの仕事は『各サインを、決まった倍率で大きく/小さくするだけ』になって、これ以上ないほど簡単になる。波・回路・場のいたる所にフーリエが顔を出すのは、これが理由だよ。

そして嬉しいことに、かなり広い範囲の形は、いろいろな振動数のサインを足し合わせれば作れる。『Fourier スケッチブック』に好きな形を描くと、それが回る円(=サイン)の重ね合わせに組み立て直されていくのが見える。点(インパルス)で足すか、サインで足すか ── ものさし(基底)が違うだけで、やることは同じ「単純な部品に分けて、ひとつずつ解いて、足し戻す」。ただ、線形システムにとっては、サインの方が“仕事が楽”な分け方になっているんだ。

▶ Fourier スケッチブックで描く ↗

(この「各サインがただ倍率を受ける」を畳み込みの言葉で言い直すと、“畳み込み=ただの掛け算”になる。なぜそんなに綺麗になるのかは、信号の回にとっておくよ。)

なぜ足し算でいいのか

ここまで「足せばいい」を、当たり前のように使ってきた。最後に、その“足せる”の正体に触れておきたい。

うっかり「足せるのは線形だから。線形とは足せること」と言うと、ただの堂々巡りになる。だから、足し算を持ち出さずに言い直そう。あるシステムが、次の 2つの振る舞い を持つとき、それを 線形 と呼ぶ:

この2つは、口で言うだけでなく 実際に試せる ── 入力を2倍にして、出力は2倍か? 2つ一緒に入れて、出力はそれぞれの和か? そして、この2つが成り立つとき “だけ”、複雑な入力を部品に分けて足し戻す、というあの手が使える。つまり「足し算でいい」は線形の言い換えじゃなくて、比例と独立という、確かめられる2つの事実から出てくる帰結 なんだ。

(もうひとつ。h(tτ)h(t-\tau) と“ずらして”書けたのは、この節のはじめに置いた 時間不変(いつ叩いても同じ形の返事)のおかげだ。正確に言うと、畳み込みでぜんぶ表せるのは、線形で、かつ時間不変 なシステム。この2つが揃って初めて、あの手が回る。)

そして、この2つが破れる世界もある。非線形 ── 大波が崩れる所、歪むほど鳴らしたスピーカー、乱流。そこでは2つの波が混ざって、元になかった新しい振動数が生まれたり、足し算があっさり壊れたりする。1と2を一緒に入れても、返事は「1の返事 + 2の返事」にならない。

だから「足し算でいい」は、世界からの 贈り物 みたいなものだ。波や場が、こんなに素直に分解して足せるのは、その多くが(少なくとも小さく叩くうちは)比例と独立を守る = 線形だから。

そして、足し算が効くということは ── たった一発の応答 hh さえ知れば、そのシステムの“ぜんぶ”が分かる、ということでもある。次は、この考えを「場」に持ち込む。空っぽの空間に、源をひとつ置いたときの“返事”を覚えて、それをたくさん足し合わせる ── やることは、今日とまったく同じだ。ただ、その足し算の向こうに、自然界をいちばん深く貫く骨(保存)が見えてくる。