Holo

Holoは多焦点を生成するためのGainである.

Install

cargo add autd3-gain-holo
target_link_libraries(<TARGET> PRIVATE autd3::gain::holo)

メインライブラリに含まれている.

メインライブラリに含まれている.

メインライブラリに含まれている.

APIs

多焦点を生成するアルゴリズムが幾つか提案されており, SDKには以下のアルゴリズムが実装されている.

  • Naive - 単一焦点解の重ね合わせ
  • GS - Gershberg-Saxon
  • GSPAT - Gershberg-Saxon for Phased Arrays of Transducers
  • LM - Levenberg-Marquardt
  • Greedy - Greedy algorithm and Brute-force search

また, 各手法は計算Backendを選べるようになっている. (GreedyのみBackendの指定はない.) SDKには以下のBackendが用意されている

  • NalgebraBackend - Nalgebraを使用
  • CUDABackend - CUDAを使用, GPUで実行 (Rust版のみ)
  • ArrayFireBackend - ArrayFireを使用 (Rust版のみ)

NOTE: CUDABackendArrayFireBackendは高速化を目的としているが, ほとんどの場合, NalgebraBackendで十分である. 使用時は, 必ずベンチマークを取ること.

振幅制約

各アルゴリズムの計算結果の振幅は最終的に振動子が出力できる範囲に制限する必要がある. これはオプションのEmissionConstraintで制御でき, 以下の4つのいずれかを指定する必要がある.

  • Normalize: 振幅の最大値ですべての振動子の振幅を割り, 規格化する.
  • Uniform: すべての振動子の振幅を指定した値にする.
  • Clamp: 振幅を指定の範囲にクランプする.
  • Multiply: 規格化後, 所定の値を乗算する.