コンテンツにスキップ

naive

src

Naive 法は, 目標音圧ベクトルに逆伝搬をかけるアルゴリズム. 反復を行わず高速だが, 焦点間の干渉補正は行われないため, 弱い音場が生成される可能性がある.

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

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

NaiveOption {
constraint,
directivity,
mask,
parallel,
}
フィールド デフォルト
constraint EmissionConstraint Clamp(MIN, MAX)
directivity Directivity Sphere
mask TransducerMask AllEnabled
parallel bool true

各フィールドの意味は Holo 概要 を参照.

parallel は結果の量子化をホスト側で複数スレッドへ分散するかどうか (GPU バックエンドの場合は無視される).

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, NaiveOption, NalgebraBackend, Pa,
TransducerMask, naive,
};
let geometry = Geometry::new(vec![Autd3::default()]);
let mut dst = geometry.pattern_buffer();
naive(
&NalgebraBackend,
&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),
&NaiveOption {
constraint: EmissionConstraint::Clamp(Intensity::MIN, Intensity::MAX),
directivity: Directivity::Sphere,
mask: TransducerMask::AllEnabled,
parallel: true,
},
&mut dst,
)?;