SOFUS ..
|
Fast Nearfield Method interfaces and implementations. More...
Classes | |
class | Aperture |
Aperture class. More... | |
class | ApertureData |
ApertureData structure. More... | |
struct | bla |
class | CircularAperture |
struct | CircularApertureData |
struct | GLQuad1D |
GL (Gauss-Legendre) structure. More... | |
struct | GLQuad2D |
GL (Gauss-Legendre) structure. More... | |
class | HanningWeightedPulse |
HanningWeightedPulse. More... | |
class | Identity |
struct | sysparm_t |
Forward-declare sysparm_t. More... | |
class | TimeSpaceDecompositions |
class | ToneBurst |
ToneBurst. More... | |
Typedefs | |
typedef void | ProgIF |
template<class T > | |
using | element_array = sps::unique_aligned_multi_array< sps::element_rect_t< T >, 2 > |
template<class T > | |
using | point_array = sps::unique_aligned_array< sps::point_t< T > > |
typedef FNM_ExcitationTypeNS::ExcitationType_Value | ExcitationType |
typedef FNM_FocusingTypeNS::FocusingType_Value | FocusingType |
typedef FNM_ApodizationTypeNS::ApodizationType_Value | ApodizationType |
typedef RwParamTypeNS::RwParamType_Value | RwParamType |
typedef FNM_TypeNS::Type_Value | Type |
Functions | |
template<class T , template< typename > class A> | |
T | CalcCircularTransientFieldRefZeroDelay (const fnm::sysparm_t< T > *sysparm, const fnm::CircularApertureData< T > &data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples) |
template<class T > | |
int | CalcCircularCwFieldRef (const fnm::sysparm_t< T > *sysparm, const fnm::CircularApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
void | MatrixArray (const size_t nRows, const size_t nCols, const T rowWidth, const T rowKerf, const T colWidth, const T colKerf, element_array< T > &&elements) |
template<class T > | |
void | FocusedLinearArray (const size_t nElements, const size_t nSubH, const size_t nSubW, const T width, const T kerf, const T height, const T eFocus, const int arcPlacement, element_array< T > &&elements) |
template<class T > | |
void | FocusedConvexArray (const size_t nElements, const size_t nSubH, const size_t nSubW, const T width, const T kerf, const T height, const T radius, const T eFocus, const int arcPlacement, element_array< T > &&elements) |
template<class T > | |
std::complex< T > | CalcHz (const T &s, const T &l, const T &z, const T &k, const GLQuad2D< T > *gl) |
template<class T > | |
int | CalcCwFieldRef (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata, void *pBar) |
template<class T > | |
int | CalcCwFieldFourRef (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
int | CalcCwFocusNaiveFast (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
std::complex< T > | CalcSingleFast (const T &s1, const T &s2, const T &l, const T &z, const T &k, const T *uxs, const T *uweights, const size_t nUs) |
template<class T > | |
int | CalcCwTimeReversal (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *pData0, const ApertureData< T > *pData1, const T *pos, const size_t nPositions, const std::complex< T > *pFieldValues, const size_t nComplexValues, std::complex< T > **odata, sps::ProgressBarInterface *pBar) |
template<class T > | |
int | CalcCwBackThreaded (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, const std::complex< T > *pWeights, const size_t nWeights, std::complex< T > **odata, sps::ProgressBarInterface *pbar) |
template<class T > | |
int | CalcCwThreaded (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata, sps::ProgressBarInterface *pbar) |
template<class T > | |
void | CalcCwField (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
int | CalcCwFocus (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
int | CalcCwFocusRef (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata) |
template<class T > | |
void | CalcWeightsAndAbcissae (const sysparm_t< T > *sysparm, sps::unique_aligned_array< T > &&uxs, sps::unique_aligned_array< T > &&uweights, sps::unique_aligned_array< T > &&vxs, sps::unique_aligned_array< T > &&vweights) |
template<class T > | |
void | CalcWeightsAndAbcissaeScaled (const sysparm_t< T > *sysparm, const sps::element_rect_t< T > &element, sps::unique_aligned_array< T > &&uxs, sps::unique_aligned_array< T > &&uweights, sps::unique_aligned_array< T > &&vxs, sps::unique_aligned_array< T > &&vweights) |
template<class T > | |
void | CalcWeightsAndAbcissaeSIMD (const sysparm_t< T > *sysparm, T **__restrict uv_xs, T **__restrict uv_ws) |
template<class T > | |
void | CalcWeightsAndAbcissaeScaledSIMD (const sysparm_t< T > *sysparm, const sps::element_rect_t< T > *pElement, sps::unique_aligned_array< T > &&uv_xs, sps::unique_aligned_array< T > &&uv_ws) |
template<class T > | |
int | PythagoreanFocusDelays (const sps::point_t< T > *pElementPositions, const size_t &nElements, const sps::point_t< T > &focus, const sps::point_t< T > ¢erFocus, const size_t &nDelays, T *pDelays) |
template<class T > | |
int | PytDelays0 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > ¢erFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false) |
template<class T > | |
int | PytDelays1 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > ¢erFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false) |
template<class T > | |
int | PytDelays2 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > ¢erFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false) |
template<typename T , template< typename > class A> | |
void | FnmResponse (const sysparm_t< T > *pSysparm, const ApertureData< T > *pData, const GLQuad2D< T > *pGL, const T &litude, const sps::point_t< T > &point, const int &iSampleSignalStart, const size_t &nSamples, T *pOdata, const int mask=0x1F) |
template<class T , template< typename > class A> | |
T | TransientSingleRect (const sysparm_t< T > *pSysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples, int mask=0x1F) |
template<class T > | |
T | CalcFdTransientRef (const sysparm_t< T > *pSysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, const size_t nDim, T **odata, size_t *nSignals, size_t *nSamples) |
template<class T > | |
T | FourDirect (const sps::element_rect_t< T > *element, const sofus::proj_limit_dist_t< T > *limit, const GLQuad2D< T > *uv) |
template<class T , template< typename > class A> | |
void | DirectWaveSingle (const sysparm_t< T > *pSysparm, const sps::element_rect_t< T > *element, const GLQuad2D< T > *uv, const T &scale, const sofus::proj_limit_dist_t< T > *pld, const T delay, const int iSampleSignalStart, const size_t nSamples, T *odata) |
template<typename T , template< typename > class A> | |
void | EdgeResponse (const sysparm_t< T > *pSysparm, const sps::element_rect_t< T > *element, const T &scale, const size_t iEdge, const sofus::proj_limit_dist_t< T > *pld, const GLQuad1D< T > *pGL, const T &delay, const int &iSampleSignalStart, const size_t &nSamples, T *odata) |
template<class T , template< typename > class A> | |
T | CalcPwFnmThreaded (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples, int mask, sps::ProgressBarInterface *pBar) |
template<class T > | |
unsigned int __stdcall | CalcPwFnmThreadFunc (void *ptarg) |
Variables | |
template<class T > | |
constexpr element_array< T >(* | element_array_create )(size_t m, size_t n) |
template<class T > | |
constexpr element_array< T >(* | point_array_create )(size_t m) |
Fast Nearfield Method interfaces and implementations.
using element_array = sps::unique_aligned_multi_array<sps::element_rect_t<T>, 2> |
Type-alias for a unique two-dimensional array of elements
using point_array = sps::unique_aligned_array<sps::point_t<T> > |
typedef void ProgIF |
typedef FNM_TypeNS::Type_Value Type |
int CalcCircularCwFieldRef | ( | const fnm::sysparm_t< T > * | sysparm, |
const fnm::CircularApertureData< T > & | data, | ||
const T * | pos, | ||
const size_t | nPositions, | ||
std::complex< T > ** | odata | ||
) |
Compute CW field from circular transducer
sysparm | |
data | |
pos | |
nPositions | |
odata |
T CalcCircularTransientFieldRefZeroDelay | ( | const fnm::sysparm_t< T > * | sysparm, |
const fnm::CircularApertureData< T > & | data, | ||
const T * | pos, | ||
const size_t | nPositions, | ||
T ** | odata, | ||
size_t * | nSamples | ||
) |
Transient field computed. The result is in units of [Pa]. The tone burst used is +/- 1.0 V.
sysparm | |
data | Data describing the transducer |
pos | |
nPositions | |
odata | |
nSamples |
T CalcFdTransientRef | ( | const sysparm_t< T > * | pSysparm, |
const ApertureData< T > * | data, | ||
const T * | pos, | ||
const size_t | nPositions, | ||
const size_t | nDim, | ||
T ** | odata, | ||
size_t * | nSignals, | ||
size_t * | nSamples | ||
) |
T CalcPwFnmThreaded | ( | const sysparm_t< T > * | sysparm, |
const ApertureData< T > * | data, | ||
const T * | pos, | ||
const size_t | nPositions, | ||
T ** | odata, | ||
size_t * | nSamples, | ||
int | mask, | ||
sps::ProgressBarInterface * | pBar | ||
) |
unsigned int __stdcall CalcPwFnmThreadFunc | ( | void * | ptarg | ) |
void CalcWeightsAndAbcissae | ( | const sysparm_t< T > * | sysparm, |
sps::unique_aligned_array< T > && | uxs, | ||
sps::unique_aligned_array< T > && | uweights, | ||
sps::unique_aligned_array< T > && | vxs, | ||
sps::unique_aligned_array< T > && | vweights | ||
) |
sysparm | |
uxs | |
uweights | |
vxs | |
vweights |
void CalcWeightsAndAbcissaeScaled | ( | const sysparm_t< T > * | sysparm, |
const sps::element_rect_t< T > & | element, | ||
sps::unique_aligned_array< T > && | uxs, | ||
sps::unique_aligned_array< T > && | uweights, | ||
sps::unique_aligned_array< T > && | vxs, | ||
sps::unique_aligned_array< T > && | vweights | ||
) |
Weight and abscissa are scaled, but abcissa are not shifted
sysparm | |
element | |
uxs | |
uweights | |
vxs | |
vweights |
void CalcWeightsAndAbcissaeScaledSIMD | ( | const sysparm_t< T > * | sysparm, |
const sps::element_rect_t< T > * | pElement, | ||
sps::unique_aligned_array< T > && | uv_xs, | ||
sps::unique_aligned_array< T > && | uv_ws | ||
) |
void CalcWeightsAndAbcissaeSIMD | ( | const sysparm_t< T > * | sysparm, |
T **__restrict | uv_xs, | ||
T **__restrict | uv_ws | ||
) |
void DirectWaveSingle | ( | const sysparm_t< T > * | pSysparm, |
const sps::element_rect_t< T > * | element, | ||
const GLQuad2D< T > * | uv, | ||
const T & | scale, | ||
const sofus::proj_limit_dist_t< T > * | pld, | ||
const T | delay, | ||
const int | iSampleSignalStart, | ||
const size_t | nSamples, | ||
T * | odata | ||
) |
Compute direct response for rectangle
pSysparm | |
element | |
scale | |
pld | |
uv | |
delay | |
iSampleSignalStart | |
nSamples | |
odata |
void EdgeResponse | ( | const sysparm_t< T > * | pSysparm, |
const sps::element_rect_t< T > * | element, | ||
const T & | scale, | ||
const size_t | iEdge, | ||
const sofus::proj_limit_dist_t< T > * | pld, | ||
const GLQuad1D< T > * | pGL, | ||
const T & | delay, | ||
const int & | iSampleSignalStart, | ||
const size_t & | nSamples, | ||
T * | odata | ||
) |
Compute edge response for rectangle
Note: Uses scaled Gauss-Legendre weights and abcissae
pSysparm | |
element | |
scale | |
iEdge | |
pld | |
pGL | |
delay | |
iSampleSignalStart | |
nSamples | |
odata |
void FnmResponse | ( | const sysparm_t< T > * | pSysparm, |
const ApertureData< T > * | pData, | ||
const GLQuad2D< T > * | pGL, | ||
const T & | amplitude, | ||
const sps::point_t< T > & | point, | ||
const int & | iSampleSignalStart, | ||
const size_t & | nSamples, | ||
T * | pOdata, | ||
const int | mask = 0x1F |
||
) |
void FocusedConvexArray | ( | const size_t | nElements, |
const size_t | nSubH, | ||
const size_t | nSubW, | ||
const T | width, | ||
const T | kerf, | ||
const T | height, | ||
const T | radius, | ||
const T | eFocus, | ||
const int | arcPlacement, | ||
element_array< T > && | elements | ||
) |
Compute focused convex array
[in] | nElements | |
[in] | nSubH | sub-elements: elevation |
[in] | nSubW | sub-elements: azimuth |
[in] | width | |
[in] | kerf | |
[in] | height | |
[in] | radius | |
[in] | eFocus | elevation focus |
[in] | arcPlacement | 0 = outside, 1 = inside |
[out] | elements |
void FocusedLinearArray | ( | const size_t | nElements, |
const size_t | nSubH, | ||
const size_t | nSubW, | ||
const T | width, | ||
const T | kerf, | ||
const T | height, | ||
const T | eFocus, | ||
const int | arcPlacement, | ||
element_array< T > && | elements | ||
) |
Compute focused linear array
[in] | nElements | |
[in] | nSubH | |
[in] | nSubW | |
[in] | width | |
[in] | kerf | |
[in] | height | |
[in] | eFocus | |
[in] | arcPlacement | 0 = outside, 1 = inside |
[out] | elements |
T FourDirect | ( | const sps::element_rect_t< T > * | element, |
const sofus::proj_limit_dist_t< T > * | limit, | ||
const GLQuad2D< T > * | uv | ||
) |
Note: Uses scaled Gauss-Legendre weights and abcissae
element | |
limit | Projection and limits for sphere intersecting element |
uv | Gauss-Legendre weights and abcissae scaled by hw (for u) and hh (for v) |
void MatrixArray | ( | const size_t | nRows, |
const size_t | nCols, | ||
const T | rowWidth, | ||
const T | rowKerf, | ||
const T | colWidth, | ||
const T | colKerf, | ||
element_array< T > && | elements | ||
) |
Create Matrix array
[in] | nRows | |
[in] | nCols | |
[in] | rowWidth | |
[in] | rowKerf | |
[in] | colWidth | |
[in] | colKerf | |
[out] | elements |
int PytDelays0 | ( | const sps::unique_aligned_array< sps::point_t< T > > & | positions, |
const size_t & | nElements, | ||
const sps::point_t< T > & | centerFocus, | ||
const sps::point_t< T > & | focus0, | ||
const sps::point_t< T > & | focus1, | ||
const T & | c, | ||
sps::unique_aligned_array< T > & | delays, | ||
bool | allPositive = false |
||
) |
int PytDelays1 | ( | const sps::unique_aligned_array< sps::point_t< T > > & | positions, |
const size_t & | nElements, | ||
const sps::point_t< T > & | centerFocus, | ||
const sps::point_t< T > & | focus0, | ||
const sps::point_t< T > & | focus1, | ||
const T & | c, | ||
sps::unique_aligned_array< T > & | delays, | ||
bool | allPositive = false |
||
) |
int PytDelays2 | ( | const sps::unique_aligned_array< sps::point_t< T > > & | positions, |
const size_t & | nElements, | ||
const sps::point_t< T > & | centerFocus, | ||
const sps::point_t< T > & | focus0, | ||
const sps::point_t< T > & | focus1, | ||
const T & | c, | ||
sps::unique_aligned_array< T > & | delays, | ||
bool | allPositive = false |
||
) |
int PythagoreanFocusDelays | ( | const sps::point_t< T > * | pElementPositions, |
const size_t & | nElements, | ||
const sps::point_t< T > & | focus, | ||
const sps::point_t< T > & | centerFocus, | ||
const size_t & | nDelays, | ||
T * | pDelays | ||
) |
T TransientSingleRect | ( | const sysparm_t< T > * | pSysparm, |
const ApertureData< T > * | data, | ||
const T * | pos, | ||
const size_t | nPositions, | ||
T ** | odata, | ||
size_t * | nSamples, | ||
int | mask = 0x1F |
||
) |
|
constexpr |
|
constexpr |