コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.14.x を参照.

Holo

Holo は複数の焦点 (制御点) を同時に生成するための Pattern 計算群. 各振動子の位相・振幅を最適化し, 指定した複数点で目標音圧が得られるようにする.

提供するアルゴリズムは以下の通り.

  • Naive — 単一ステップの逆伝搬
  • GS — Gerchberg-Saxton 法
  • GS-PAT — GS-PAT 法
  • Greedy — 位相を貪欲に決定する組合せ最適化

焦点を表す構造体. 位置 point と目標振幅 amplitude を持つ.

目標振幅 Amplitude は, f32 に振幅単位を掛けて構築する.

最適化で得られた振幅は, そのままでは振動子では出力できない強度の可能性がある. そこで, 最適化で得た振幅を, 出力する振動子強度へ変換するための制約を指定する.

Multiply(f32) 最大値で正規化した後に係数を掛けてクランプする
Clamp(Intensity, Intensity) 振幅を指定範囲にクランプする

各 Option の constraint フィールドで指定する. デフォルトは naive / gs / gspat とも Clamp(Intensity::MIN, Intensity::MAX). greedy は振幅を最適化しないので constraint を持たず, 振幅は入力として与える.

振動子の指向性モデル. 無指向性の Sphere (デフォルト) , または, 実機指向性の T4010A1 から選べる. 各 Option の directivity フィールドで指定する.

最適化に含める振動子を選択する. naive / gs / gspat の各 Option の mask フィールドで指定する (デフォルトは AllEnabled). greedy は mask を持たず, 振幅 0 の振動子が探索から外れる.

  • TransducerMask::AllEnabled — 全振動子を使う (デフォルト).
  • TransducerMask::Masked(&[Vec<bool>]) — 各振動子ごとに有効/無効を指定する.

naive / gs / gspat は線形代数演算を LinAlgBackend トレイトに委譲する. 標準実装としてCPUで計算する NalgebraBackend を用いる. バックエンドは各関数の第 1 引数で渡す.

greedy は行列演算を使わないためバックエンドを取らない.

Python / C# は NalgebraBackend に固定しており, バックエンドの引数を取らない.

GPUで計算するバックエンドとして WgpuBackend を用意している (Rust のみ).