USML
spreading_hybrid_gaussian Class Reference
Collaboration diagram for spreading_hybrid_gaussian:

Constructor & Destructor Documentation

spreading_hybrid_gaussian ( wave_queue wave)
protected

Normalize each wavefront cell by the surface area it takes up one meter from source.

\[ A_{DE}(n) = ( DE_{n+1}-DE_n ) \]

\[ A_{AZ}(n,m) = \frac{ ( sin(DE_{n+1})-sin(DE_n) )(AZ_{m+1}-AZ_m) } { DE_{n-1} - DE_n } \]

Note that in this implementation the $ \sqrt{ 2 \pi } $ term from the gaussian() method is folded into the normalization coefficients so that it can be computed a single time, during initialization.

Parameters
waveWavefront object associated with this model.
virtual ~spreading_hybrid_gaussian ( )
inlineprotectedvirtual

Virtual destructor.

Member Function Documentation

vector<double> gaussian ( double  d,
double  w,
double  A 
)
inlineprotected

Compute the Gaussian contribution from a single wavefront cell.

\[ \frac{A}{w\sqrt{2\pi}} exp\left( - \frac{d^2}{2w^2} \right) \]

The width of each Gaussian beam consists of two components: a frequency independent cell width and a frequency-dependent evanescent spreading term. If we assume that these two effects combine like the convolution of two Gaussians, then the square of total width will be the sum of squares of each term.

\[ w^2_{total} = w^2_{spread} + w^2_{width} \]

Note that in this implementation the $ \sqrt{ 2 \pi } $ term is folded into the normalization calculation so that it can be computed a single time, during initialization.

Parameters
dDistance from field point to center of profile.
wHalf-width this cell in the wavefront.
ANormalization coefficient.
References:
Weisstein, Eric W. "Convolution." From MathWorld–A Wolfram Web Resource. http://mathworld.wolfram.com/Convolution.html
const vector< double > & intensity ( const wposition1 location,
unsigned  de,
unsigned  az,
const vector< double > &  offset,
const vector< double > &  distance 
)
protectedvirtual

Estimate intensity as the product of Gaussian contributions in the D/E and AZ directions.

It assumes that the the divergence can be characterized in terms of independent D/E and AZ terms and that Gaussian beam cross terms are unimportant.

Parameters
locationTarget location.
deDE index of closest point of approach.
azAZ index of closest point of approach.
offsetOffsets in time, DE, and AZ at collision.
distanceOffsets in distance units.
Returns
Intensity of ray at this point.

Implements spreading_model.

void intensity_az ( unsigned  de,
unsigned  az,
const vector< double > &  offset,
const vector< double > &  distance 
)
private

Summation of Gaussian beam contributions from all cells in the AZ direction.

Iteration stops when lowest frequency contribution makes less than a THRESHOLD difference relative to the overall result.

Parameters
deDE index of contributing cell.
azAZ index of contributing cell.
offsetOffsets in time, DE, and AZ at collision.
distanceOffsets in distance units.
Returns
Intensity of ray at this point.
void intensity_de ( unsigned  de,
unsigned  az,
const vector< double > &  offset,
const vector< double > &  distance 
)
private

Summation of Gaussian beam contributions from all cells in the D/E direction.

Iteration stops when lowest frequency contribution makes less than a THRESHOLD difference relative to the overall result.

Parameters
deDE index of contributing cell.
azAZ index of contributing cell.
offsetOffsets in time, DE, and AZ at collision.
distanceOffsets in distance units.
Returns
Intensity of ray at this point.
double width_az ( unsigned  de,
unsigned  az,
const vector< double > &  offset 
)
private

Interpolate the half-width of a cell in the AZ direction.

At each DE, compute the distance between the AZ corner and the AZ+1 corner. Use the D/E offset to linearly interpolate between these sides. Then repeat this process with the next (or previous) wavefront and use the time offset to linearly interpolate between times.

Parameters
deDE index of contributing cell.
azAZ index of contributing cell.
offsetOffsets in time, DE, and AZ at collision.
Returns
Half-width of cell in the AZ direction.
double width_de ( unsigned  de,
unsigned  az,
const vector< double > &  offset 
)
private

Interpolate the half-width of a cell in the D/E direction.

At each AZ, compute the distance between the D/E corner and the D/E+1 corner. Use the AZ offset to linearly interpolate between these sides. Then repeat this process with the next (or previous) wavefront and use the time offset to linearly interpolate between times.

Parameters
deDE index of contributing cell.
azAZ index of contributing cell.
offsetOffsets in time, DE, and AZ at collision.
Returns
Half-width of cell in the DE direction.

Friends And Related Function Documentation

friend class wave_queue
friend

Member Data Documentation

vector<double> _beam_width
private

Combination of cell width and spreading.

(temp workspace)

matrix<bool> _duplicate
private
vector<double> _intensity_az
private

Intensity contribution in azimuthal direction.

(temp workspace)

vector<double> _intensity_de
private

Intensity contribution in D/E direction.

(temp workspace)

matrix<double> _norm_az
private

Normalization in azimuthal direction.

vector<double> _norm_de
private

Normalization in depression/elevation direction.

const double OVERLAP = 2.0
staticprivate

Minimum percentage that each Gaussian beam can be expected spread into neighboring beams.

When the frequency is very high, the summation across Gaussian beams can have non-physical "ripples" in it. Follow the GRAB example of 50% overlap.

const double SPREADING_WIDTH = TWO_PI
staticprivate

Number of wavelengths that each Gaussian beam can be expected spread into neighboring beams.

Equivalent to the $ 2 \pi \lambda $ minimum width term in the GRAB model.

const double THRESHOLD = 1.002305238
staticprivate

Limits the extent of the search for Gaussian beam contributions.

Iteration stops when new contribution makes less than a 0.01 dB contribution to the overall result.