Holo
Holo は複数の焦点 (制御点) を同時に生成するための Pattern 計算群. 各振動子の位相・振幅を最適化し, 指定した複数点で目標音圧が得られるようにする.
提供するアルゴリズムは以下の通り.
AmplitudeTarget
Section titled “AmplitudeTarget”焦点を表す構造体. 位置 point と目標振幅 amplitude を持つ.
振幅単位 Pa / kPa / dB
Section titled “振幅単位 Pa / kPa / dB”目標振幅 Amplitude は, f32 に振幅単位を掛けて構築する.
IntensityConstraint
Section titled “IntensityConstraint”最適化で得られた振幅は, そのままでは振動子では出力できない強度の可能性がある. そこで, 最適化で得た振幅を, 出力する振動子強度へ変換するための制約を指定する.
Multiply(f32) |
最大値で正規化した後に係数を掛けてクランプする |
Clamp(Intensity, Intensity) |
振幅を指定範囲にクランプする |
各 Option の constraint フィールドで指定する.
デフォルトは naive / gs / gspat とも Clamp(Intensity::MIN, Intensity::MAX).
greedy は振幅を最適化しないので constraint を持たず, 振幅は入力として与える.
Directivity
Section titled “Directivity”振動子の指向性モデル.
無指向性の Sphere (デフォルト) , または, 実機指向性の T4010A1 から選べる.
各 Option の directivity フィールドで指定する.
TransducerMask
Section titled “TransducerMask”最適化に含める振動子を選択する.
naive / gs / gspat の各 Option の mask フィールドで指定する (デフォルトは AllEnabled).
greedy は mask を持たず, 振幅 0 の振動子が探索から外れる.
TransducerMask::AllEnabled— 全振動子を使う (デフォルト).TransducerMask::Masked(&[Vec<bool>])— 各振動子ごとに有効/無効を指定する.
LinAlgBackend (NalgebraBackend)
Section titled “LinAlgBackend (NalgebraBackend)”naive / gs / gspat は線形代数演算を LinAlgBackend トレイトに委譲する.
標準実装としてCPUで計算する NalgebraBackend を用いる.
バックエンドは各関数の第 1 引数で渡す.
greedy は行列演算を使わないためバックエンドを取らない.
Python / C# は NalgebraBackend に固定しており, バックエンドの引数を取らない.
GPU Backend (WgpuBackend)
Section titled “GPU Backend (WgpuBackend)”GPUで計算するバックエンドとして WgpuBackend を用意している (Rust のみ).