ノイズキャンセリングの音波干渉(逆位相合成の数学)
外来騒音に180度反転させた逆位相の音波をぶつけて完全消音する三角関数と波動力学
- 1
- アクティブノイズキャンセリング(ANC)は、外来ノイズと同じ振幅で位相が180度ズレた「逆位相波」をリアルタイム生成してぶつけることで音を消す技術
- 2
- 三角関数の加法定理 より、2つの波を足し合わせると理論上完全にゼロになる破壊的干渉を利用している
- 3
- 現代のイヤホンや航空機・自動車では、デジタルシグナルプロセッサ(DSP)がマイクロ秒単位で音波をサンプリングし、逆位相波をスピーカーから出力している
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
航空機のコックピットや騒音環境下でパイロットの聴力を守り、通信をクリアにするため「騒音に逆の音をぶつけて相殺する」逆位相の発想から生まれた。
身につく武器・思考力
三角関数の加法定理や和積の公式、フーリエ解析が「日常生活の静寂(AirPods等のANC)」を生み出す魔法の道具であることを直感・実装できる。
実社会・ITでの活躍現場
- •Apple AirPods ProやSonyワイヤレスヘッドホンのアクティブノイズキャンセリング(ANC)
- •航空機・新幹線・高級EV車の車内静粛化アクティブノイズコントロールシステム
- •潜水艦のソナー音響ステルス遮蔽技術
- •病院の手術室やMRI室内での患者向け騒音低減システム
Layer 1 — 直感・シミュレーター
騒音波(赤)と消音波(青)の振幅・位相スライダーを動かしてみよう。「消音波の位相ズレ」を (3.14)に合わせ、振幅を騒音と同じにすると、耳に届く合成音(緑)が完全に水平な直線になり、騒音がゼロになる瞬間を体感できる。
騒音波 を完全に打ち消すために、ANCスピーカーが出力すべき音波 はどれか?
Layer 2 — 定義・受験・証明
定義
音波などの線形媒質中を伝搬する波動には「重ね合わせの原理(Superposition Principle)」が成立する。時刻 、位置 における2つの音波 と が出会ったとき、合成波 は単純な代数和として表される。
振幅が等しく()、位相差が奇数倍の半波長()のとき、
となり、波が完全に打ち消し合う「破壊的干渉(Destructive Interference)」が発生する。
公式・数理モデル
証明・導出
三角関数の和積の公式による干渉振幅の導出:
振幅が等しい2つの波 と の合成を考える。 三角関数の和積の公式 を適用すると、
合成波の振幅 は、位相差 のみの関数となる。
1. 【強め合う干渉(Constructive)】: のとき、 より振幅は最大 (音量が2倍・音圧エネルギー4倍)。 2. 【弱め合う干渉(Destructive)】: のとき、 より振幅は (完全消音)。
実際の現実空間では、周囲の騒音は単一正弦波ではなく様々な周波数の合成音であるため、マイクで拾った音を高速フーリエ変換(FFT)で周波数成分ごとに分解し、各成分に対して逆位相・同一振幅の信号を瞬時に計算(フィードフォワード・フィードバック制御)してスピーカーから再生している。
押さえておきたいポイント
- アクティブノイズキャンセリング(ANC)は、音に「逆の音」を足すことで静寂を生み出す数学的イノベーションである
- 低周波騒音(電車の走行音、飛行機のエンジン音、エアコンのファン)は波長が長く位相合わせが容易なため、ANCの効果が極めて高くなる
- 高周波(人の話し声や食器の当たる音)は波長がミリ単位と極めて短く、わずか数十マイクロ秒の遅延でも逆位相が同位相(騒音倍増)に化けるリスクがあるため、イヤーピースによる物理遮音(パッシブノイズキャンセリング)と組み合わせて処理される
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
DSP(デジタル信号プロセッサ)によるリアルタイムANCアルゴリズム
参照マイクで拾った外来騒音 に対し、適応型デジタルフィルタ(LMSアルゴリズム等)を用いてスピーカーから耳までの音響伝達特性(セカンダリパス)を補正した逆位相音 を計算・出力する。耳元のエラーマイクで残留騒音 を監視し、消音誤差が最小になるようフィルタ係数を毎秒数万回自己更新する。
1// リアルタイムANC(適応型LMSフィルタによる外来音打ち消し)2class SimpleActiveNoiseCanceller {3 private filterWeights: number[];4 private learningRate: number; // 更新ステップサイズ mu56 constructor(filterOrder: number = 8, learningRate: number = 0.05) {7 this.filterWeights = new Array(filterOrder).fill(0);8 this.learningRate = learningRate;9 }1011 // 1ステップのノイズ低減処理12 // referenceNoise: 外側のマイクが拾った騒音の過去履歴バッファ13 // actualNoiseAtEar: 実際に耳元に到達した騒音14 public processSample(noiseHistory: number[], actualNoiseAtEar: number) {15 // 逆位相消音波の生成: y = sum(w_i * x_i)16 let antiNoise = 0;17 for (let i = 0; i < this.filterWeights.length; i++) {18 antiNoise += this.filterWeights[i] * noiseHistory[i];19 }2021 // 耳に届く音(残留騒音エラー): e = actualNoise - antiNoise22 const residualError = actualNoiseAtEar - antiNoise;2324 // LMSアルゴリズムによる重み更新(二乗誤差最小化)25 // w[i] = w[i] + 2 * mu * error * x[i]26 for (let i = 0; i < this.filterWeights.length; i++) {27 this.filterWeights[i] += 2 * this.learningRate * residualError * noiseHistory[i];28 }2930 return { antiNoise, residualError };31 }32}3334// シミュレーション実行35const anc = new SimpleActiveNoiseCanceller(4, 0.1);36const noiseBuffer = [0, 0, 0, 0];3738console.log("=== ノイズキャンセリング学習開始 ===");39for (let step = 0; step < 10; step++) {40 const noise = Math.sin(step * 0.5); // 周期的な低周波騒音41 noiseBuffer.unshift(noise);42 noiseBuffer.pop();4344 const { antiNoise, residualError } = anc.processSample(noiseBuffer, noise);45 console.log(46 `Step ${step}: 騒音=${noise.toFixed(2)}, 消音波=${antiNoise.toFixed(2)}, 残留音=${residualError.toFixed(2)}`47 );48}
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元