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);