This is the development version of the documentation. It may change before the next release. See 0.14.x for the latest release.
gspat
srcgspat is an algorithm that speeds up gs. The algorithm is based on the paper by Plasencia et al. (Plasencia et al., 2020).
gspat( &NalgebraBackend, &geometry, &foci, wavelength, &option, &mut phases, &mut intensities,)?;gspat(geometry, foci, wavelength, option, phases, intensities)Holo.Gspat(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 |
&GspatOption |
Additional options (see below) |
phases |
&mut [Vec<Phase>] |
Phase output buffer |
intensities |
&mut [Vec<Intensity>] |
Intensity output buffer |
The parameters are the same as gs.
GspatOption
Section titled “GspatOption”GspatOption { repeat, constraint, directivity, mask,}GspatOption( repeat, constraint, directivity, mask,)new GspatOption{ Repeat = repeat, Constraint = constraint, Directivity = directivity, Mask = mask,}| Field | Type | Default |
|---|---|---|
repeat |
NonZeroUsize |
100 |
constraint |
IntensityConstraint |
Clamp(MIN, MAX) |
directivity |
Directivity |
Sphere |
mask |
TransducerMask |
AllEnabled |
The options are the same as gs.
Example
Section titled “Example”use std::num::NonZeroUsize;
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, GspatOption, NalgebraBackend, Pa, gspat,};
let geometry = Geometry::new(vec![Autd3::default()]);
let mut phases = geometry.phase_buffer();let mut intensities = geometry.intensity_buffer();
gspat( &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), &GspatOption { repeat: NonZeroUsize::new(100).unwrap(), 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, GspatOption, Pa, gspat,)
geometry = Geometry([Autd3()])
phases = geometry.phase_buffer()intensities = geometry.intensity_buffer()
gspat( 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), GspatOption( repeat=100, 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.Gspat( 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 GspatOption { Repeat = 100, Constraint = IntensityConstraint.Clamp(Intensity.Min, Intensity.Max), Directivity = Directivity.Sphere, Mask = TransducerMask.AllEnabled, }, phases, intensities);