Holo
Holo
は多焦点を生成するためのGain
である.
Install
cargo add autd3-gain-holo
target_link_libraries(<TARGET> PRIVATE autd3::gain::holo)
メインライブラリに含まれている.
メインライブラリに含まれている.
メインライブラリに含まれている.
APIs
多焦点を生成するアルゴリズムが幾つか提案されており, SDKには以下のアルゴリズムが実装されている.
Naive
- 単一焦点解の重ね合わせGS
- Gershberg-SaxonGSPAT
- Gershberg-Saxon for Phased Arrays of TransducersLM
- Levenberg-MarquardtGreedy
- Greedy algorithm and Brute-force search
また, 各手法は計算Backendを選べるようになっている. (Greedy
のみBackendの指定はない.)
SDKには以下のBackend
が用意されている
NalgebraBackend
- Nalgebraを使用CUDABackend
- CUDAを使用, GPUで実行 (Rust版のみ)ArrayFireBackend
- ArrayFireを使用 (Rust版のみ)
NOTE:
CUDABackend
やArrayFireBackend
は高速化を目的としているが, ほとんどの場合,NalgebraBackend
で十分である. 使用時は, 必ずベンチマークを取ること.
振幅制約
各アルゴリズムの計算結果の振幅は最終的に振動子が出力できる範囲に制限する必要がある.
これはオプションのEmissionConstraint
で制御でき, 以下の4つのいずれかを指定する必要がある.
- Normalize: 振幅の最大値ですべての振動子の振幅を割り, 規格化する.
- Uniform: すべての振動子の振幅を指定した値にする.
- Clamp: 振幅を指定の範囲にクランプする.
- Multiply: 規格化後, 所定の値を乗算する.