sar_bulk_mocomp#
Apply bulk motion compensation to complex SAR phase-history data in the FX domain. sar_bulk_mocomp is currently in the matx::experimental namespace because its API is subject to change.
The operator is lazy, allocation-free, and composable with other MatX expressions. The final two FX dimensions are interpreted as pulse and frequency sample, and any leading dimensions are batches:
fx: [batch..., pulses, samples]
range_offset: [batch..., pulses]
result: [batch..., pulses, samples]
For sample index \(n\), the frequency is
where \(f_{\mathrm{ref}}\) is SarBulkMocompParams::phase_reference_frequency and \(\Delta f\) is SarBulkMocompParams::sample_frequency_spacing. For differential reference range \(\Delta R_p\), the applied correction is
The one-range overload assumes an initial reference range of zero. The two-range overload changes reference from initial_reference_range to target_reference_range and uses \(\Delta R_p = R_{\mathrm{target},p} - R_{\mathrm{initial},p}\).
Examples#
const experimental::SarBulkMocompParams params{
.phase_reference_frequency = 9.6e9,
.sample_frequency_spacing = 2.5e4,
.sgn = sgn,
};
auto compensated =
experimental::sar_bulk_mocomp(fx, range_to_mcp, params);
(output = compensated).run(exec);
Phase arithmetic follows the range-offset value type. Float ranges use
single-precision frequency, phase, and trigonometric arithmetic; double ranges
use double precision for phase construction and argument reduction. With CUDA,
when double ranges are combined with cuda::std::complex<float> FX data, the
bounded, reduced angle is converted to float for a fast single-precision
sincospif evaluation. Double-complex FX data retains the full double-precision
trigonometric path. The parameter frequencies are stored as double and narrowed
for the single-precision range path. Other range types, including fltflt and
half precision, are not currently supported. FX values must be
cuda::std::complex<float> or cuda::std::complex<double>.
Host, CUDA, and CUDAJIT executors are supported. Distributed expressions and dynamic-rank inputs are not currently supported.
Added in version head.
-
template<typename FxOp, typename TargetRangeOp>
__MATX_INLINE__ auto matx::experimental::sar_bulk_mocomp(const FxOp &fx, const TargetRangeOp &target_reference_range, const SarBulkMocompParams ¶ms)# Apply bulk motion compensation to SAR phase-history data in the FX domain.
The final two dimensions of
fxare interpreted as pulse and frequency sample. Every leading dimension is a batch dimension. The range offset must match all FX dimensions except the final frequency-sample dimension.Sample floor(num_samples / 2) has frequency
params.phase_reference_frequency. The operator applies exp(j * -sgn * 4*pi/c * frequency * target_reference_range) to every FX sample. Phase construction and reduction use the value type oftarget_reference_range, which must currently be float or double. On CUDA, double-range phase for complex<float> FX data uses a float trigonometric evaluation after double-precision argument reduction.- Template Parameters:
FxOp – FX tensor or operator type.
TargetRangeOp – Target-reference-range tensor or operator type.
- Parameters:
fx – Complex FX-domain data with shape [batch…, pulses, samples].
target_reference_range – Target per-pulse reference range with shape [batch…, pulses].
params – Frequency grid and phase-sign parameters.
- Returns:
A lazy, allocation-free motion-compensated operator.
-
template<typename FxOp, typename InitialRangeOp, typename TargetRangeOp>
__MATX_INLINE__ auto matx::experimental::sar_bulk_mocomp(const FxOp &fx, const InitialRangeOp &initial_reference_range, const TargetRangeOp &target_reference_range, const SarBulkMocompParams ¶ms)# Change the bulk motion-compensation reference of SAR FX data.
This overload can be used to effectively change the motion-compensation point. It applies compensation for target_reference_range minus initial_reference_range. Both range operators must have the same shape as all FX dimensions except its final frequency-sample dimension.
- Template Parameters:
FxOp – FX tensor or operator type.
InitialRangeOp – Initial-reference-range tensor or operator type.
TargetRangeOp – Target-reference-range tensor or operator type.
- Parameters:
fx – Complex FX-domain data with shape [batch…, pulses, samples].
initial_reference_range – Existing per-pulse reference range.
target_reference_range – Desired per-pulse reference range.
params – Frequency grid and phase-sign parameters.
- Returns:
A lazy, allocation-free reference-change operator.
-
struct SarBulkMocompParams#
Parameters for bulk motion compensation of SAR FX data.