Featured image of post ビームフォーミング聴覚拡張デバイスを作りたい #1 — 冒険のはじまり

ビームフォーミング聴覚拡張デバイスを作りたい #1 — 冒険のはじまり

こんにちは、たひです。

最近、個人プロジェクトで ウェアラブル聴覚拡張システム を作っています。 カフェやパーティのような騒がしい環境で「話している人の声だけ」をクリアに聞き取るためのデバイスです。

本記事はそのシリーズ第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
  • 次回以降、それぞれを掘り下げていく

ハードウェアからファームウェア、信号処理、機械学習まで横断する幅の広いネタですが、各回でなるべく 設計判断の根拠 が伝わるように書ければと思っています。

組み込みオーディオまわりに興味がある方の参考になれば嬉しいです。

参考リンク

Built with Hugo
Theme Stack designed by Jimmy