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

greedy

src

greedy は各振動子の位相を離散的な候補から 1 つずつ貪欲に選択していく組合せ最適化. アルゴリズムは Suzuki らの論文 (Suzuki et al., 2021) に基づく.

greedy(&geometry, &foci, wavelength, &option, &mut dst)?;
引数 説明
geometry &Geometry デバイス配置
foci &[AmplitudeTarget] 焦点列 (位置と目標振幅)
wavelength Length 波長
option &GreedyOption 追加オプション (下記参照)
dst &mut [[Emission; _]] 出力バッファ

共通要素 (AmplitudeTarget / TransducerMask など) は Holo 概要 を参照.

GreedyOption {
phase_quantization_levels,
constraint,
directivity,
objective_func,
mask,
}
フィールド デフォルト
phase_quantization_levels NonZeroU8 16
constraint EmissionConstraint Uniform(MAX)
directivity Directivity Sphere
objective_func fn(Complex<f32>, Amplitude) -> f32 abs_objective_func
mask TransducerMask AllEnabled
  • phase_quantization_levels — 位相候補の分割数. 大きいほど位相分解能が上がる.
  • objective_func — 各候補を評価する目的関数. デフォルトの abs_objective_func は, 合成音圧の 大きさと目標振幅の差の絶対値を返す.
    • Rust版のみ設定可能. 他の言語ではデフォルトの目的関数が使われる
  • constraint / directivity / mask の意味は Holo 概要 を参照.
use std::num::NonZeroU8;
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{m, mm, s};
use autd3_rs::value::Intensity;
use autd3_rs_pattern::wavelength;
use autd3_rs_pattern_holo::{
AmplitudeTarget, Directivity, EmissionConstraint, GreedyOption, Pa, TransducerMask,
abs_objective_func, greedy,
};
let geometry = Geometry::new(vec![Autd3::default()]);
let mut dst = geometry.pattern_buffer();
greedy(
&geometry,
&[
AmplitudeTarget {
point: geometry.center() + offset(-30.0 * mm, 0.0 * mm, 150.0 * mm),
amplitude: 2.5e3 * Pa,
},
AmplitudeTarget {
point: geometry.center() + offset(30.0 * mm, 0.0 * mm, 150.0 * mm),
amplitude: 2.5e3 * Pa,
},
],
wavelength(340.0 * m / s),
&GreedyOption {
phase_quantization_levels: NonZeroU8::new(16).unwrap(),
constraint: EmissionConstraint::Uniform(Intensity::MAX),
directivity: Directivity::Sphere,
objective_func: abs_objective_func,
mask: TransducerMask::AllEnabled,
},
&mut dst,
)?;