AWP Profiling¶
Planning helpers for the Aerosol Wind Profiler (AWP).
Instrument model¶
- class AerosolWindProfiler[source]¶
Bases:
SensorNASA 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:
name (str)
wavelength (Quantity)
off_nadir_angle (float)
pulse_rate (Quantity)
digitization_rate (Quantity)
samples_per_pulse (int)
dwell_time_per_los (Quantity)
nadir_dwell_time (Quantity)
blind_zone (Quantity)
max_roll_angle (Quantity)
max_heading_change (Quantity)
max_altitude_change (Quantity)
nominal_airspeed (Quantity)
- max_vertical_range()[source]¶
Maximum vertical profiling extent for the configured off-nadir view.
- Return type:
- vertical_bin_spacing(fft_samples=256)[source]¶
Vertical bin spacing implied by an FFT window length.
The range gate spans
fft_samplesdigitized 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.
- los_orientations(track_heading)[source]¶
Return absolute LOS azimuths (degrees true) for a given track heading.
- los_surface_separation(altitude_agl)[source]¶
Surface separation between the two LOS intercepts.
For AWP’s default
±45°azimuth pair the included angle is90°, so at 12 km altitude and 30° off nadir this is about 9.8 km, matching the~10 kmseparation described by Bedka (2025).
- los_ground_intercepts(latitude, longitude, track_heading, altitude_agl)[source]¶
Ground intercepts of the two LOS beams for a platform location.
- 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.
- 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.
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:
plan (GeoDataFrame)
sensor (AerosolWindProfiler | None)
- 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=Truethe LOS intercepts are computed by ray-terrain intersection against a DEM and the returnedaltitude_agl_mvaries with local terrain beneath the line.- Return type:
GeoDataFrame- Parameters:
flight_line (FlightLine)
sensor (AerosolWindProfiler | None)
ground_speed (Quantity | None)
start_time (datetime | None)
altitude_agl (Quantity | None)
dwell_time_per_los (Quantity | None)
nadir_dwell_time (Quantity | None)
terrain_aware (bool)
dem_file (str | None)
- 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. Whenwind_aware=True, aircraft heading uses plan crab-angle metadata (crab_angle_degorwind_corrected_heading) when present, so the LOS geometry follows the crabbed aircraft heading rather than the nominal ground track.- Return type:
GeoDataFrame- Parameters: