こんにちは、たひです。
最近、個人プロジェクトで ウェアラブル聴覚拡張システム を作っています。 カフェやパーティのような騒がしい環境で「話している人の声だけ」をクリアに聞き取るためのデバイスです。
本記事はそのシリーズ第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