AWP Profiling

Planning helpers for the Aerosol Wind Profiler (AWP).

Instrument model

class AerosolWindProfiler[source]

Bases: Sensor

NASA Langley Aerosol Wind Profiler (AWP).

A coherent Doppler wind lidar that alternates between two line-of-sight (LOS) directions to recover a vector wind profile, plus a nadir dwell. The abstraction captures the planning geometry needed to answer questions like:

  • How far apart are valid vector retrievals along track?

  • Where do the LOS footprints intersect the surface?

  • How much straight-and-level flight is needed before vector retrievals become valid?

All constructor parameters default to the airborne AWP configuration described by Bedka et al. (2024) and Bedka (2025):

  • wavelength: 2052.92 nm

  • 30° off nadir

  • dual LOS at ±45° azimuth from the aircraft nose

  • 200 Hz pulse rate

  • 500 MHz digitization rate

  • 65528 samples per pulse

  • common airborne mode of 3 s per LOS + 1 s nadir

  • QC limits of 3° roll and 0.5 km altitude change per profile

References

Bedka, K., Marketon, J., Henderson, S., and Kavaya, M. (2024). “AWP: NASA’s Aerosol Wind Profiler Coherent Doppler Wind Lidar.” In Space-based Lidar Remote Sensing Techniques and Emerging Technologies. Springer. https://doi.org/10.1007/978-3-031-53618-2_3

Bedka, K. (2025). 3-D Lidar Wind Airborne Profiling Using A Coherent-Detection Doppler Wind Lidar Designed For Space-Based Operation. NOAA BAA final project report.

__init__(name='Aerosol Wind Profiler', *, wavelength=<Quantity(2052.92, 'nanometer')>, off_nadir_angle=30.0, los_azimuths_relative=(-45.0, 45.0), pulse_rate=<Quantity(200, 'hertz')>, digitization_rate=<Quantity(5e+08, 'hertz')>, samples_per_pulse=65528, dwell_time_per_los=<Quantity(3, 'second')>, nadir_dwell_time=<Quantity(1, 'second')>, blind_zone=<Quantity(200, 'meter')>, max_roll_angle=<Quantity(3, 'degree')>, max_heading_change=<Quantity(3, 'degree')>, max_altitude_change=<Quantity(0.5, 'kilometer')>, nominal_airspeed=<Quantity(225.0, 'meter / second')>)[source]
Parameters:
property sample_period: Quantity

ADC sample period.

max_slant_range()[source]

Maximum recorded LOS range from pulse digitization.

Return type:

Quantity

max_vertical_range()[source]

Maximum vertical profiling extent for the configured off-nadir view.

Return type:

Quantity

vertical_bin_spacing(fft_samples=256)[source]

Vertical bin spacing implied by an FFT window length.

The range gate spans fft_samples digitized points. Converting the two-way light-travel time to slant range and projecting by the off-nadir angle reproduces the 66-132 m planning values cited for AWP in Bedka et al. (2024) and the Bedka (2025) final report for 256-512 sample windows.

Return type:

Quantity

Parameters:

fft_samples (int)

los_ground_distance(altitude_agl)[source]

Ground distance from nadir to the LOS surface intercept.

Return type:

Quantity

Parameters:

altitude_agl (Quantity)

los_orientations(track_heading)[source]

Return absolute LOS azimuths (degrees true) for a given track heading.

Return type:

Tuple[float, float]

Parameters:

track_heading (float)

los_surface_separation(altitude_agl)[source]

Surface separation between the two LOS intercepts.

For AWP’s default ±45° azimuth pair the included angle is 90°, so at 12 km altitude and 30° off nadir this is about 9.8 km, matching the ~10 km separation described by Bedka (2025).

Return type:

Quantity

Parameters:

altitude_agl (Quantity)

los_ground_intercepts(latitude, longitude, track_heading, altitude_agl)[source]

Ground intercepts of the two LOS beams for a platform location.

Return type:

dict[str, dict[str, float]]

Parameters:
vector_profile_time_spacing(*, dwell_time_per_los=None, nadir_dwell_time=None)[source]

Nominal time spacing between vector wind profiles.

This follows the AWP airborne concept of operations described by Bedka et al. (2024) and Bedka (2025): a vector retrieval is assigned at the LOS1→LOS2 switch, producing a spacing of 2 * dwell_time_per_los + nadir_dwell_time.

Return type:

Quantity

Parameters:
profile_assignment_offset(ground_speed=None, *, dwell_time_per_los=None, nadir_dwell_time=None)[source]

Distance from the start of a stable leg to the first vector profile.

Return type:

Quantity

Parameters:
vector_profile_spacing(ground_speed=None, *, dwell_time_per_los=None, nadir_dwell_time=None)[source]

Along-track spacing between adjacent vector profiles.

Return type:

Quantity

Parameters:
is_stable_segment(*, heading_change=0.0, altitude_change=0.0, roll_angle=0.0)[source]

Return True when a segment satisfies AWP stability heuristics.

Return type:

bool

Parameters:

Planning helpers

flag_awp_stable_segments(plan, sensor=None)[source]

Annotate a flight plan with AWP stability flags.

Bedka (2025) gives explicit QC limits for roll (3°) and profile-to-profile altitude changes (0.5 km). HyPlan does not carry per-sample roll, so this helper uses segment heading change as a planning proxy for turns and unstable aircraft attitude.

Return type:

GeoDataFrame

Parameters:
awp_profile_locations_for_flight_line(flight_line, *, sensor=None, ground_speed=None, start_time=None, altitude_agl=None, dwell_time_per_los=None, nadir_dwell_time=None, terrain_aware=False, dem_file=None, terrain_precision=30.0)[source]

Predict AWP vector-profile sample locations along a single flight line.

The spacing and LOS geometry follow the AWP observing concept summarized by Bedka et al. (2024) and Bedka (2025). When terrain_aware=True the LOS intercepts are computed by ray-terrain intersection against a DEM and the returned altitude_agl_m varies with local terrain beneath the line.

Return type:

GeoDataFrame

Parameters:
awp_profile_locations_for_plan(plan, *, sensor=None, takeoff_time=None, dwell_time_per_los=None, nadir_dwell_time=None, stable_only=True, terrain_aware=False, dem_file=None, terrain_precision=30.0, wind_aware=False)[source]

Predict AWP vector-profile locations along stable segments of a plan.

This combines the AWP LOS geometry from Bedka et al. (2024) with the stable-flight planning heuristics summarized in Bedka (2025). When terrain_aware=True, LOS intercepts are ray-traced into terrain using a DEM. When wind_aware=True, aircraft heading uses plan crab-angle metadata (crab_angle_deg or wind_corrected_heading) when present, so the LOS geometry follows the crabbed aircraft heading rather than the nominal ground track.

Return type:

GeoDataFrame

Parameters: