Site Overlay

ドップラー効果を波紋の幾何学から理解する — なぜ音源が動くと聞こえる高さが変わるのか

公開中のドップラー効果シミュレータでは、救急車のアイコン(音源)をマッハ数M(音速に対する速さの比)で走らせながら、音源が発する波紋(波面)がどう広がっていくかをその場で確認できます。観測者マーカーをドラッグして好きな位置に置くと、その位置で実際に聞こえる周波数を、理論値・実測値の両方でリアルタイムに見ることができます。

「救急車が近づくと音が高く、遠ざかると低く聞こえる」というドップラー効果は、高校物理で公式 \(f’=f_0 V/(V\mp V_s)\) として習いますが、この記事ではその公式がどこから来るのか、波紋の広がり方という幾何学から一歩ずつ導いてみようと思います。

👉 ドップラー効果シミュレータで試してみる


1. 波紋は「発生した瞬間の音源位置」に固定される — モデルの核

音源は固有周波数\(f_0\)(波紋発生間隔\(1/f_0\)の逆数。「音源自体の音の高さ」に相当し、これ自体は変化しません)で、一定間隔ごとに波紋を1つ発生させ続けます。ここで最も大事な前提はただ一つです。

各波紋は、発生した瞬間の音源の位置を中心に、音速Vで四方に広がり続ける。音源が動いても、すでに発生した波紋自体は動かない

波紋を「発生時刻・発生位置・広がる速さ」という3つの値だけで表し、半径を「速さ×(現在時刻−発生時刻)」として都度計算する(状態として半径そのものは持たない)という実装は、この前提をそのままコードにしたものです。音源自身が出している音の高さ(\(f_0\))は一切変化していないのに、聞こえ方だけが変わる——というこのシミュレーションの核心は、すべてこの1文から始まります。


2. 音源が観測者へまっすぐ近づく場合を考える

まずは一番簡単な場合、音源が観測者に向かって速さ\(V_s\)でまっすぐ進んでいる場面を考えます。時刻0に位置0から波紋を1つ、次の発生周期\(T=1/f_0\)後の時刻\(T\)に、位置\(V_s T\)(観測者に\(V_sT\)だけ近づいた位置)から次の波紋を発生させます。

観測者までの距離(時刻0時点)を\(D\)とすると、1つ目の波紋の到達時刻は

\[ t_1 = \frac{D}{V} \]

2つ目の波紋は、発生時刻\(T\)に加えて、残り距離\(D-V_sT\)を音速\(V\)で進む時間がかかるので、

\[ t_2 = T + \frac{D – V_sT}{V} \]

観測者にとっての到達間隔は、

\[ \Delta t = t_2 – t_1 = T – \frac{V_s T}{V} = T\cdot\frac{V-V_s}{V} \]

音源が近づく分だけ、次の波紋がより近い位置から発生するため、到達間隔は元の周期\(T\)より短くなります。これが観測者にとっての「1周期分の音」の長さなので、観測周波数はこの逆数です。

\[f’ = \frac{1}{\Delta t} = f_0\cdot\frac{V}{V-V_s}\]

\(V_s < V\)なら分母は正で\(f'>f_0\)、つまり高く聞こえます。\(V_s\)が\(V\)に近づくほど分母が0に近づき、\(f’\)はどんどん大きくなっていきます。この「分母が0に近づく」という挙動は、第5節で扱う特異点の伏線でもあります。


3. 一般の位置関係へ拡張する — 視線方向成分と到達時刻の微分

実際には観測者は音源の進行方向の延長線上にいるとは限らず、シミュレータでは画面上の任意の位置にドラッグして配置できます。この場合に効いてくるのは音源の速さ\(V_s\)そのものではなく、「音源から観測者を見た方向」への速度成分(視線方向成分)だけです。

音源の位置を時刻\(\tau\)の関数\(\mathbf{x}(\tau)\)とすると、時刻\(\tau\)に発生した波紋が観測者\(\mathbf{P}\)に届く時刻\(t(\tau)\)は、

\[ t(\tau) = \tau + \frac{|\mathbf{P}-\mathbf{x}(\tau)|}{V} \]

と書けます(第2節の\(t_1,t_2\)の式を、任意の発生時刻\(\tau\)について一般化したものです)。これを\(\tau\)で微分すると、

\[ \frac{dt}{d\tau} = 1 – \frac{1}{V}\cdot\frac{\mathbf{V_s}\cdot(\mathbf{P}-\mathbf{x}(\tau))}{|\mathbf{P}-\mathbf{x}(\tau)|} = 1 – \frac{V_{s,\text{radial}}}{V} \]

となります。\(V_{s,\text{radial}}\)は、音源の速度ベクトル\(\mathbf{V_s}\)を「音源から観測者への方向」に正射影した量(観測者に近づく向きを正)です。音源は\(\tau\)方向に等間隔(周期\(T=1/f_0\))で波紋を発生させているので、観測者側での到達間隔\(\Delta t\)は、この\(dt/d\tau\)倍だけ伸び縮みします。

\[ \Delta t \approx \frac{dt}{d\tau}\cdot T = T\left(1-\frac{V_{s,\text{radial}}}{V}\right) \]

\[f’ = \frac{1}{\Delta t} = f_0\cdot\frac{V}{V-V_{s,\text{radial}}}\]

これが、シミュレータの理論周波数の計算がそのまま行っている式です(観測者は静止しているため、観測者側の視線方向速度\(V_{o,\text{radial}}\)の項は0として省略しています。観測者も動く場合は\(f’=f_0(V+V_{o,\text{radial}})/(V-V_{s,\text{radial}})\)という対称な形になりますが、シミュレータのUIからは音源しか動かせません)。第2節で見た「まっすぐ近づく」場合は、\(V_{s,\text{radial}}=V_s\)を代入すれば、ちょうど同じ式に一致することが確認できます。


4. マッハ数が1を超えると波面が重なり合う — マッハコーンの半頂角

マッハ数\(M=V_s/V\)が1を超える、つまり音源が音速より速く進むと、第3節の式では説明しきれない現象が起こります。音源自身が、自分が出した波紋よりも速く前に進んでしまうのです。

時刻0に原点で発生した波紋を考えます。時刻\(t\)でのこの波紋の半径は\(Vt\)です。一方、音源は直線移動しているので、同じ時刻\(t\)での原点からの音源の変位は\(V_st\)になります。

\(M>1\)のとき\(V_st>Vt\)なので、音源は自分が\(t=0\)に出した波紋の外側に出てしまっています。音源の現在位置から、半径\(Vt\)の円(\(t=0\)発生の波紋)に接線を引くと、音源の現在位置・接点・原点の3点で直角三角形ができます。斜辺が\(V_st\)(音源の変位)、対辺が\(Vt\)(波紋の半径)なので、

\[ \sin\theta = \frac{Vt}{V_st} = \frac{V}{V_s} = \frac{1}{M} \]

\[\theta = \arcsin\!\left(\frac{1}{M}\right)\]

これがマッハコーンの半頂角です。\(t=0\)に発生した波紋だけでなく、それ以前・それ以後に発生したすべての波紋についても同じ幾何関係が成り立つため、無数の波紋の接線が音源の後方に伸びる1本の円錐(2次元の画面上では2本の直線)として重なって見えます。シミュレータはこの包絡線を特別な描画ロジックで作っているわけではなく、多数の波紋を正しく重ねて描いた結果として自然に浮かび上がる模様として表現しています。


5. 衝撃波通過という特異点 — 分母がゼロ・負になる意味

第3節の式\(f’=f_0V/(V-V_{s,\text{radial}})\)を思い出すと、分母がゼロになるのは\(V_{s,\text{radial}}=V\)のとき、つまり音源が観測者に向かって音速ちょうどの速さの成分で近づいているときです。\(M\ge1\)で音源がほぼ正面から観測者に近づく瞬間、\(V_{s,\text{radial}}\)は\(V_s(\ge V)\)に近づくため、分母が0または負になり得ます。

これは計算上の欠陥ではなく、第4節のマッハコーンと表裏一体の物理現象です。観測者がちょうどマッハコーンの円錐面(第4節の接線)を通過する瞬間、それまで時間差をつけて音源から発生していた波紋の群れが、観測者の位置にほぼ同時に到達します。式の上ではこれが、到達間隔\(\Delta t\)がゼロに近づき、周波数\(f’=1/\Delta t\)が発散する、という形で現れます。

シミュレータはこの特異点の数値をそのまま表示せず、「衝撃波通過」という特別な表示に切り替えます(理論周波数を計算する関数は、分母が0以下のときは数値ではなく「値なし」を返す設計になっています)。実際の物理現象としても、この瞬間に聞こえるのは特定の高さの音ではなく、波紋が重なり合って生じる衝撃波(ソニックブーム)そのものであり、「周波数がいくつか」という問い自体が意味を持たなくなる瞬間だと言えます。


6. 実測値との照合 — 「モデルに依存しない」実測周波数

ここまでの式はすべて理論式(理論周波数)でした。シミュレータにはもう一つ、実測周波数という値があります。これは公式を一切使わず、波紋が実際に観測者へ到達した時刻の間隔から直接測る値です。

各波紋の半径は「速さ×経過時間」という式で解析的に決まるため、観測者への到達時刻も、アニメーションのコマ送りに頼ることなく、方程式を解いて厳密に求まります。実測周波数は、発生順で隣り合う2つの波紋の到達時刻の差から、

\[f_{\text{measured}} = \frac{1}{(\text{到達時刻の差})}\]

として計算されます。

理論周波数は「波紋を発生させた瞬間の音源の位置・速度」という1点のスナップショットに基づく近似式であるのに対し、実測周波数は隣り合う2発の波紋という有限の区間から求めた値です。通常はこの2つはほぼ一致しますが、音源が観測者のごく近くを通過する瞬間や、マッハコーン形成直後(波紋の到達順序が発生順と逆転する区間)には、この「瞬時値」と「有限区間」の違いが無視できなくなり、一時的に大きくずれることがあります。これは実装のバグではなく、2つの計算方法の構造的な違いによるものです。

シミュレータの理論値との照合グラフは、この2つの独立な計算方法——公式による理論値と、波紋の到達時刻という「実験結果」——がほとんどの区間でよく一致することを、まさにグラフとして確認できるようにしたものです。


まとめ

波紋の幾何学の要素対応するドップラー効果の量
波紋は発生位置に固定され、速さVで広がる独立した円の集合「実体の音の高さ」=固有周波数\(f_0\)は変化しない
音源が波紋の発生位置を追い越しながら移動進行方向側で波紋が密集(高く聞こえる)・後方で間隔拡大(低く聞こえる)
到達時刻\(t(\tau)=\tau+|\mathbf{P}-\mathbf{x}(\tau)|/V\)を\(\tau\)で微分観測周波数の一般公式 \(f’=f_0V/(V-V_{s,\text{radial}})\)
音源の変位\(V_st\)と波紋の半径\(Vt\)が作る直角三角形マッハコーンの半頂角 \(\theta=\arcsin(1/M)\)
分母\(V-V_{s,\text{radial}}\)が0以下になる特異点衝撃波通過(観測者がマッハコーンの面上にいる瞬間)
発生順で隣接する波紋の到達時刻差から算出実測周波数(モデルに依存しない解析的な値)

ドップラー効果のおもしろさは、「音源に近づくと高く、遠ざかると低く聞こえる」という日常の体感が、実は「発生位置に固定された円が音速で広がる」という、ごくシンプルな幾何学的事実だけから導けてしまうところにあると思います。到達時刻を音源の発生時刻で微分するだけで一般公式が出てきて、同じ幾何学をもう少し押し進めるとマッハコーンの角度や衝撃波通過という特異点まで、無理なく説明がつながります。

ぜひシミュレータでマッハ数や固有周波数のスライダーを動かしながら、この記事の式と見比べてみてください。

最後まで読んでいただきありがとうございます。ご質問やコメントはお問い合わせからよろしくおねがいします。