This is the development version of the documentation. It may change before the next release. See 0.14.x for the latest release.
naive
srcThe Naive method is an algorithm that applies back-propagation to the target sound pressure vector. It does not iterate and is fast, but it does not correct for interference between focal points, so a weak sound field may be generated.
naive( &NalgebraBackend, &geometry, &foci, wavelength, &option, &mut phases, &mut intensities,)?;naive(geometry, foci, wavelength, option, phases, intensities)Holo.Naive(geometry, foci, wavelength, option, phases, intensities);| Parameter | Type | Description |
|---|---|---|
geometry |
&Geometry |
Device layout |
foci |
&[AmplitudeTarget] |
Sequence of focal points (position and target amplitude) |
wavelength |
Length |
Wavelength |
option |
&NaiveOption |
Additional options (see below) |
phases |
&mut [Vec<Phase>] |
Phase output buffer |
intensities |
&mut [Vec<Intensity>] |
Intensity output buffer |
NaiveOption
Section titled “NaiveOption”NaiveOption { constraint, directivity, mask,}NaiveOption( constraint, directivity, mask,)new NaiveOption{ Constraint = constraint, Directivity = directivity, Mask = mask,}| Field | Type | Default |
|---|---|---|
constraint |
IntensityConstraint |
Clamp(MIN, MAX) |
directivity |
Directivity |
Sphere |
mask |
TransducerMask |
AllEnabled |
Example
Section titled “Example”use autd3_rs::geometry::{Autd3, Geometry, TransducerMask, 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, IntensityConstraint, NaiveOption, NalgebraBackend, Pa, naive,};
let geometry = Geometry::new(vec![Autd3::default()]);
let mut phases = geometry.phase_buffer();let mut intensities = geometry.intensity_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: IntensityConstraint::Clamp(Intensity::MIN, Intensity::MAX), directivity: Directivity::Sphere, mask: TransducerMask::AllEnabled, }, &mut phases, &mut intensities,)?;from autd3.geometry import Autd3, Geometry, offsetfrom autd3.units import m, mm, sfrom autd3.value import Intensityfrom autd3_pattern import TransducerMask, wavelengthfrom autd3_pattern_holo import ( AmplitudeTarget, Directivity, IntensityConstraint, NaiveOption, Pa, naive,)
geometry = Geometry([Autd3()])
phases = geometry.phase_buffer()intensities = geometry.intensity_buffer()
naive( 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 * m / s), NaiveOption( constraint=IntensityConstraint.Clamp(Intensity.MIN, Intensity.MAX), directivity=Directivity.Sphere, mask=TransducerMask.AllEnabled, ), phases, intensities,)using AUTD3;using AUTD3.Holo;using static AUTD3.Units;using static AUTD3.Holo.HoloUnits;
var geometry = new Geometry(new[] { new Autd3() });
var phases = geometry.PhaseBuffer();var intensities = geometry.IntensityBuffer();
Holo.Naive( geometry, new[] { new AmplitudeTarget(geometry.Center + Offset(-30.0f * mm, 0.0f * mm, 150.0f * mm), 2.5e3f * Pa), new AmplitudeTarget(geometry.Center + Offset(30.0f * mm, 0.0f * mm, 150.0f * mm), 2.5e3f * Pa), }, Pattern.Wavelength(340.0f * m / s), new NaiveOption { Constraint = IntensityConstraint.Clamp(Intensity.Min, Intensity.Max), Directivity = Directivity.Sphere, Mask = TransducerMask.AllEnabled, }, phases, intensities);