SOFUS ..
Classes | Typedefs | Functions

SOFUS interfaces and implementations. More...

Classes

class  AperturePulses
 
class  focus_line_t
 
struct  proj_limit_dist_t
 
struct  sysparm_t
 
struct  TransmissionTypeNS
 

Typedefs

template<class T >
using ApertureData = fnm::ApertureData< T >
 
typedef TransmissionTypeNS::Value TransmissionType
 
typedef SOFUS_ImpulseTypeNS::ImpulseType_Value ImpulseType
 
typedef FNM_ExcitationTypeNS::ExcitationType_Value ExcitationType
 
typedef SOFUS_TimeDomainCalcTypeNS::Value TimeDomainCalcType
 
typedef SOFUS_TimeDomainIntOrderNS::Value TimeDomainIntOrder
 

Functions

template<class T >
int calcProjectionAndLimits (const sysparm_t< T > &__restrict sysparm, const sps::element_rect_t< T > &__restrict element, const sps::point_t< T > &__restrict point, const T &__restrict delay, proj_limit_dist_t< T > *__restrict limits)
 
template<class T >
int calcProjectionAndBoundaries (const sysparm_t< T > &sysparm, const sps::element_rect_t< T > &element, const sps::point_t< T > &point, const T &delay, T *u, T *v, T *dist2plane, T(*arrivalTimes)[3], T(*vdists)[4])
 
template<typename T >
bool calcProjectionAndIntegrationLimitsSIMD (const sysparm_t< T > &sysparm, const sps::element_rect_t< T > &element, const sps::point_t< T > &point, const T delay, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_hwhw, __m128 *v_vdists, T *fSampleStart, T *fSampleStop)
 
template<typename T >
bool calcProjectionAndIntegrationLimitsSIMD2 (const sysparm_t< T > &sysparm, const sps::element_rect_t< T > &element, const sps::point_t< T > &point, const T delay, __m256d *v_vuvu, __m256d *v_dist2plane, __m256d *v_hwhw, __m256d *v_vdists, T *fSampleStart, T *fSampleStop)
 
template<>
bool calcProjectionAndIntegrationLimitsSIMD (const sysparm_t< double > &sysparm, const sps::element_rect_t< double > &element, const sps::point_t< double > &point, const double delay, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_hwhw, __m128 *v_vdists, double *fSampleStart, double *fSampleStop)
 
template<>
bool calcProjectionAndIntegrationLimitsSIMD (const sysparm_t< float > &sysparm, const sps::element_rect_t< float > &element, const sps::point_t< float > &point, const float delay, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_hwhw, __m128 *v_vdists, float *fSampleStart, float *fSampleStop)
 
template<>
bool calcProjectionAndIntegrationLimitsSIMD2 (const sysparm_t< double > &sysparm, const sps::element_rect_t< double > &element, const sps::point_t< double > &point, const double delay, __m256d *v_vuvu, __m256d *v_dist2plane, __m256d *v_hwhw, __m256d *v_vdists, double *fSampleStart, double *fSampleStop)
 
template<typename T >
int calcArrivalTimesSIMD (const sysparm_t< T > &sysparm, const sps::element_rect_t< T > &element, const sps::point_t< T > &point, const T &delay, __m128 *v_hwhw, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_vdists, T(*arrivalTimes)[9])
 
template<>
int calcArrivalTimesSIMD (const sysparm_t< double > &sysparm, const sps::element_rect_t< double > &element, const sps::point_t< double > &point, const double &delay, __m128 *v_hwhw, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_vdists, double(*arrivalTimes)[9])
 
template<>
int calcArrivalTimesSIMD (const sysparm_t< float > &sysparm, const sps::element_rect_t< float > &element, const sps::point_t< float > &point, const float &delay, __m128 *v_hwhw, __m128 *v_vuvu, __m128 *v_dist2plane, __m128 *v_vdists, float(*arrivalTimes)[9])
 
template<>
int calcProjectionAndLimits (const sysparm_t< double > &__restrict sysparm, const sps::element_rect_t< double > &__restrict element, const sps::point_t< double > &__restrict point, const double &__restrict delay, proj_limit_dist_t< double > *__restrict limits)
 
template<>
int calcProjectionAndLimits (const sysparm_t< float > &__restrict sysparm, const sps::element_rect_t< float > &__restrict element, const sps::point_t< float > &__restrict point, const float &__restrict delay, proj_limit_dist_t< float > *__restrict limits)
 
template<class T >
void ComputeBoxTimes (const sysparm_t< T > &sysparm, const sps::bbox_t< T > &box, const T *points, const size_t nPoints, const T *delays, const T *apodizations, const size_t nElements, T *tStart, int *iStartSample, size_t *nSamples)
 

Detailed Description

SOFUS interfaces and implementations.

Todo:

: Use T* and restrict in prototypes and __builtin_assume_aligned inside function bodies

: Replace _mm256_dp_pd with _mm256_hsum_pd

Todo:
(JEM): Figure out how to expose msignal across DLL interface

Typedef Documentation

◆ ApertureData

Todo:
: Consider using a forward declaration

◆ ExcitationType

◆ ImpulseType

◆ TimeDomainCalcType

◆ TimeDomainIntOrder

◆ TransmissionType

Function Documentation

◆ calcArrivalTimesSIMD() [1/3]

int calcArrivalTimesSIMD ( const sysparm_t< double > &  sysparm,
const sps::element_rect_t< double > &  element,
const sps::point_t< double > &  point,
const double &  delay,
__m128 *  v_hwhw,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_vdists,
double(*)  arrivalTimes[9] 
)
inline

◆ calcArrivalTimesSIMD() [2/3]

int calcArrivalTimesSIMD ( const sysparm_t< float > &  sysparm,
const sps::element_rect_t< float > &  element,
const sps::point_t< float > &  point,
const float &  delay,
__m128 *  v_hwhw,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_vdists,
float(*)  arrivalTimes[9] 
)
inline

◆ calcArrivalTimesSIMD() [3/3]

int calcArrivalTimesSIMD ( const sysparm_t< T > &  sysparm,
const sps::element_rect_t< T > &  element,
const sps::point_t< T > &  point,
const T &  delay,
__m128 *  v_hwhw,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_vdists,
T(*)  arrivalTimes[9] 
)

◆ calcProjectionAndBoundaries()

int calcProjectionAndBoundaries ( const sysparm_t< T > &  sysparm,
const sps::element_rect_t< T > &  element,
const sps::point_t< T > &  point,
const T &  delay,
T *  u,
T *  v,
T *  dist2plane,
T(*)  arrivalTimes[3],
T(*)  vdists[4] 
)
inline

Compute distance to plane, projection, distance to vertices and sample interval

Parameters
sysparm
element
point
delay
uProjection, u-coordinate [m]
vProjection, v-coordinate [m]
dist2planeDistance to plane [m]
arrivalTimesArrivaltimes [s]
vdistsDistance to vertices [m]
Returns

References sysparm_t< T >::c, sps::dot(), element_rect_t< T >::hh, element_rect_t< T >::hw, and sps::norm().

Referenced by calcProjectionAndLimits().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calcProjectionAndIntegrationLimitsSIMD() [1/3]

bool calcProjectionAndIntegrationLimitsSIMD ( const sysparm_t< double > &  sysparm,
const sps::element_rect_t< double > &  element,
const sps::point_t< double > &  point,
const double  delay,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_hwhw,
__m128 *  v_vdists,
double *  fSampleStart,
double *  fSampleStop 
)
inline
Todo:
: Consider using aligned T* arguments and use __m256 to hold 4 vertex distances

References SPS_UNREFERENCED_PARAMETERS.

◆ calcProjectionAndIntegrationLimitsSIMD() [2/3]

bool calcProjectionAndIntegrationLimitsSIMD ( const sysparm_t< float > &  sysparm,
const sps::element_rect_t< float > &  element,
const sps::point_t< float > &  point,
const float  delay,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_hwhw,
__m128 *  v_vdists,
float *  fSampleStart,
float *  fSampleStop 
)
inline
Todo:
: Consider alias to __m128*
Todo:
: Consider introducing w = distuv[0]

References sysparm_t< T >::c, sysparm_t< T >::fs, element_rect_t< T >::hh, and element_rect_t< T >::hw.

◆ calcProjectionAndIntegrationLimitsSIMD() [3/3]

bool calcProjectionAndIntegrationLimitsSIMD ( const sysparm_t< T > &  sysparm,
const sps::element_rect_t< T > &  element,
const sps::point_t< T > &  point,
const T  delay,
__m128 *  v_vuvu,
__m128 *  v_dist2plane,
__m128 *  v_hwhw,
__m128 *  v_vdists,
T *  fSampleStart,
T *  fSampleStop 
)

Compute distance to plane, projection, distance to vertices and sample interval

Parameters
sysparm
element
point
delay
v_vuvuProjection [m]
v_dist2planeDistance to plane [m]
v_hwhwHalf width/height [m]
v_vdistsDistance to vertices [m]
fSampleStartFractional sample start
fSampleStopFractional sample stop
Returns

Referenced by calcProjectionAndLimits().

Here is the caller graph for this function:

◆ calcProjectionAndIntegrationLimitsSIMD2() [1/2]

bool calcProjectionAndIntegrationLimitsSIMD2 ( const sysparm_t< double > &  sysparm,
const sps::element_rect_t< double > &  element,
const sps::point_t< double > &  point,
const double  delay,
__m256d *  v_vuvu,
__m256d *  v_dist2plane,
__m256d *  v_hwhw,
__m256d *  v_vdists,
double *  fSampleStart,
double *  fSampleStop 
)
inline
Todo:
: Consider introducing w = distuv[0]

References sysparm_t< T >::c, sysparm_t< T >::fs, element_rect_t< T >::hh, and element_rect_t< T >::hw.

◆ calcProjectionAndIntegrationLimitsSIMD2() [2/2]

bool calcProjectionAndIntegrationLimitsSIMD2 ( const sysparm_t< T > &  sysparm,
const sps::element_rect_t< T > &  element,
const sps::point_t< T > &  point,
const T  delay,
__m256d *  v_vuvu,
__m256d *  v_dist2plane,
__m256d *  v_hwhw,
__m256d *  v_vdists,
T *  fSampleStart,
T *  fSampleStop 
)

◆ calcProjectionAndLimits() [1/3]

int calcProjectionAndLimits ( const sysparm_t< double > &__restrict  sysparm,
const sps::element_rect_t< double > &__restrict  element,
const sps::point_t< double > &__restrict  point,
const double &__restrict  delay,
proj_limit_dist_t< double > *__restrict  limits 
)
inline

◆ calcProjectionAndLimits() [2/3]

int calcProjectionAndLimits ( const sysparm_t< float > &__restrict  sysparm,
const sps::element_rect_t< float > &__restrict  element,
const sps::point_t< float > &__restrict  point,
const float &__restrict  delay,
proj_limit_dist_t< float > *__restrict  limits 
)
inline

◆ calcProjectionAndLimits() [3/3]

int calcProjectionAndLimits ( const sysparm_t< T > &__restrict  sysparm,
const sps::element_rect_t< T > &__restrict  element,
const sps::point_t< T > &__restrict  point,
const T &__restrict  delay,
proj_limit_dist_t< T > *__restrict  limits 
)
Parameters
sysparm
element
point
delay
limits
Returns

◆ ComputeBoxTimes()

void ComputeBoxTimes ( const sysparm_t< T > &  sysparm,
const sps::bbox_t< T > &  box,
const T *  points,
const size_t  nPoints,
const T *  delays,
const T *  apodizations,
const size_t  nElements,
T *  tStart,
int *  iStartSample,
size_t *  nSamples 
)

Compute boundary for signals at points from an aperture confined to a box. This can be used for allocating memory for a one-way response.

Parameters
sysparm
boxA box encapsulating the aperture
points
nPoints
delays
apodizations
nElements
tStart
iStartSample
nSamples