なぜ自作しようと思ったか
SONYのWH-1000XMシリーズを使っていて、ふと「これどういう仕組みで音を消してるんだろう」と気になった。 調べ始めると想像より面白くて、気がついたら部品を注文していた。
完全に再現することは最初から目指していない。原理を手を動かして理解したかっただけ。 結果として、ちゃんと「ノイズが小さくなる」ものは作れた。市販品の足元にも及ばないけど。
ノイズキャンセリングの原理
ノイズキャンセリング(ANC: Active Noise Cancellation)は、入ってくる騒音と逆位相の音を生成して打ち消す技術だ。 音は波なので、同じ振幅で位相が 180° ずれた波を重ねると理論上は消える。
音波の重ね合わせの原理。山と谷がぴったり合うと振幅がゼロになる。
問題は「リアルタイムで逆位相を生成する」こと。音速はおよそ 343 m/s。 処理遅延が数ミリ秒あるだけで位相がズレて、むしろ音が大きくなることもある。 ここが難しいところで、市販品の DSP がいかに優秀かを実感することになった。
フィードフォワード型とフィードバック型
ANC の実装には大きく 2 種類ある。
フィードフォワード型(FF型)
マイクをイヤホンの外側に置き、騒音が耳に届く前に検出して逆位相を生成する方式。 外部騒音を先読みできるので、低遅延で処理しやすい。ただし、マイク位置がズレると効果が落ちる。
フィードバック型(FB型)
マイクをドライバーに近い内側(耳の近く)に置く方式。実際に耳元に届いた音を見て補正するので、 装着のズレに強い。ただし、制御ループの安定化が難しく、発振するリスクがある。
最近の高級機は両方を組み合わせたハイブリッド型が多い。今回は扱いやすいFF型から試した。
実際に回路を組んでみた
使ったもの:
- ECMマイク(秋月電子で購入、200円くらい)
- オペアンプ(LM358N、反転増幅回路を構成)
- ダイナミックイヤホンのユニット(ジャンク品から流用)
- ブレッドボードと電池ボックス
基本構成は「マイクで音を拾う → オペアンプで反転・増幅 → イヤホンで出力」。 マイクとイヤホンを物理的に近づけて、逆位相の音が重なるようにする。
マイク → マイクアンプ → 反転アンプ(×10) → イヤホン
↑
位相を 180° 反転
最初は盛大に発振した。マイクとイヤホンが近すぎてハウリングを起こしていた。 物理的に距離を取って、ゲインを下げたら落ち着いた。
結果と感想
低周波(エアコンのブーン音、電車の走行音)には効果があった。 高周波(人の声、キーボードの音)はほとんど消えない。 これは仕様で、FF型は高周波の打ち消しが難しいことが知られている。
市販品との差は歴然としているけど、「原理は理解した」という満足感がある。 SONYの WH-1000XM5 が2万円台で買えることの凄さが身に染みてわかった。
次にやること
- DSP(マイコン)を使ったデジタル処理に挑戦する
- フィードバック型も試してみる
- Raspberry Pi Pico でリアルタイム FFT をやってみたい
部品代は全部で 1,500 円くらい。失敗しても惜しくない金額で原理が理解できるのは楽しい。 次は DSP を使ってもう少しちゃんとした実装を試したい。