目次
こんにちは、たひです。
最近、個人プロジェクトでウェアラブル聴覚拡張システムを作っています。カフェやパーティのような騒がしい環境で「話している人の声だけ」をクリアに聞き取るためのデバイスです。
本記事はそのシリーズ第1回として、プロジェクト全体像を紹介します。このあとの連載では中核ハードウェアであるマルチチャンネルUSBマイクの設計を、回路選定からドライバ実装まで順を追って書いていく予定です。
なぜ作ろうと思ったか
複数人で会話するとき、特に騒がしい場所だと「目の前の人の声」が周囲のノイズに紛れて聞き取れないことがあります。特に同時に複数人が話す状況では、人間の聴覚でも対象話者を選別するのは負荷が大きい作業です。
最初は「ノイズキャンセリングイヤホンで何とかなるのでは?」と思っていたのですが、
- ノイキャンは「全方向のノイズを下げる」ものなので、話者の声も同時に減衰してしまう
- 騒がしい場所では結局聞こえない
- 補聴器系のデバイスは高価で、しかも「話者選別」までは踏み込んでいない
ということに気付き、
マイクアレイで指向性を絞り、その方向だけを強調すればいけるのでは?
という発想で自作することにしました。
何を作っているのか
ざっくり言うと、
- 複数のマイクを配置したセンサユニットを頭部(メガネ側)に
- 顔検出と音源方向推定でいま誰が話しているかを特定
- ビームフォーミングでその方向に指向性を絞り、他をカット
- ニューラルノイズリダクションでさらにノイズを除去
- 仕上がった音声をイヤホンに送って耳に届ける
という処理パイプラインです。
構成は「センサユニット — 処理ユニット — イヤホン」の3ブロックで、センサ側にカメラと多chマイクを載せ、USB-C 1本で処理ユニット(小型SBC)に流し込み、最後はBluetoothでイヤホンに飛ばします。
実際の信号フローはこんな感じです。

左側のLuckFox HATが「マルチチャンネルUSBマイク」にあたる部分で、MEMSマイク → CODEC → USBガジェットというハードスタックになっています。本シリーズではこの左側のブロックを掘り下げていきます。
なぜ「マルチチャンネルUSBマイク」を自作するのか
このシステムの肝はマイクアレイです。ビームフォーミング(音の指向性制御)には少なくとも4ch、できれば6ch以上のマイクが必要で、しかも各マイク間の位置関係が既知かつ正確に固定されている必要があります。
「だったら市販のマイクアレイを使えばいいのでは?」と最初は考えました。Seeed StudioのreSpeakerなどは有名どころです。
ただ実際に検証してみると、
- 形状の自由度が低い — メガネフレームに沿った配置は不可能
- ホストインターフェースが固定 — 自分の処理パイプラインに繋ぎにくい
- マイクの素性 — SNR、AOP、位相マッチングが選定基準と合わない
といった理由で、結局カスタム設計が必要になりました。
要件をまとめると、
| 項目 | 要件 |
|---|---|
| 有効周波数下限 | 1kHz以下(母音の F0 を含む) |
| 空間エイリアシング上限 | 4kHz以上(子音帯域をカバー) |
| DoA推定精度 | 5°以下(話者分離に必要) |
| チャンネル数 | 6〜8ch |
| 総重量 | マイク+基板で5g以下 |
| 消費電力 | 50mW以下(USBバスパワー動作) |
| ホストI/F | USB Audio Class 2.0(ドライバレス) |
これを満たす専用のマルチチャンネルUSBマイクを、ハードウェアからファームウェアまで作っているのがこのプロジェクトです。
ハードウェア構成
USBマイク部分のスタックは次のようになっています。
| 役割 | 部品 | 備考 |
|---|---|---|
| マイク(音響センサ) | Infineon IM72D128VV01 ×6 | PDM出力、SNR 71.5dB(A)、AOP 128dB SPL |
| CODEC | Texas Instruments TLV320ADC5140 | PDM 6ch 入力 → I2S TDM 8ch 出力 |
| ブリッジSoC | LuckFox Pico Ultra (Rockchip RV1106G3) | Cortex-A7 + Linux、USB OTG |
| ホストI/F | USB-C / f_uac2ガジェット | UAC2.0 Class、ドライバレスで認識 |
PDMマイク → ADC5140でTDMにまとめ → RV1106で受けて → USB Audio Class 2.0でホストに流す、という構成です。
ホスト側(NanoPC-T6, RK3588)はUSBマイクとして見えるだけなので、特殊ドライバは不要です。普通のLinux PCでもarecord -D plughw:CARD=...で8chを取れるようになります。
開発フェーズ
このプロジェクトは段階的に進めています。
| Phase | 状態 | 内容 |
|---|---|---|
| Phase 1 | 完了 | アルゴリズム検証(Windows)— ノイズリダクションと音源方向推定の PoC |
| Phase 2 | 完了 | エッジ検証(RK3588)— CPU/NPU 性能実測、顔追跡実装 |
| Phase 3.1 | 完了 | LuckFox HAT検証機 — UAC2パイプライン、C daemon、MVDR、LED、ASR |
| Phase 3.2 | 着手前 | RV1106 カスタム基板 — 専用 PCB、骨伝導 VAD、TSE 話者分離 |
現状(2026-05時点)はPhase 3.1完了で、市販開発ボード(LuckFox Pico Ultra)の上にMEMSマイク基板をHATとして載せた検証機が動いている段階です。ここまででUSB Audio Class 2.0経由で8ch 96kHzの音声が取れていて、ビームフォーミング・ニューラルノイズ除去・顔追跡・ASRまで一通り回っています。
連載で書く予定の内容
このシリーズはUSBマイク部分にフォーカスして、設計過程を順番に書いていきます。
- #2: MEMSマイク選定とアレイ設計 — IM72D128の選定理由、メガネフレームに沿った6mic配置、Directivity IndexとSII(音声了解度指数)でのシミュレーション
- #3: TLV320ADC5140まわり — PDM入力設定、I2S TDM 8ch出力、Biquad HPF、ASI Master動作
- #4: RV1106でUSB Audio Class 2.0を動かす —
f_uac2ガジェット、カーネルパッチ、Device Tree Overlay、ブート初期化 - #5: 検証 — UAC2安定性、ALSAタイミング、消費電流の実測
各回は独立して読めるように、必要な背景知識から書く予定です。
ここまでで書きたかったこと
- 「特定の話者の声だけ強調する」ウェアラブルデバイスを作っている
- そのために多chカスタムUSBマイクが必要で、市販品では条件が合わなかった
- 構成はMEMS x6 → ADC5140 → RV1106 → USB Audio Class 2.0
- 次回以降、それぞれを掘り下げていく
ハードウェアからファームウェア、信号処理、機械学習まで横断する幅の広いネタですが、各回でなるべく設計判断の根拠が伝わるように書ければと思っています。
組み込みオーディオまわりに興味がある方の参考になれば嬉しいです。
参考リンク
- reSpeaker XVF3800 USB 4-Mic Array — 比較対象にした市販マイクアレイ
- Infineon IM72D128VV01 — 採用MEMSマイク
- TI TLV320ADC5140 Datasheet
- LuckFox Pico Ultra (RV1106) — ブリッジ用SBC
- USB Audio Class 2.0 Specification
