Source code for radarx.fundamentals.beam

"""
Beam Geometry and Resolution
============================

Functions related to radar beamwidth and spatial resolution.

.. autosummary::
   :nosignatures:
   :toctree: generated/

   azimuthal_resolution
   beamwidth_to_radians
   compute_azimuth_resolution
   compute_beamwidth
   compute_volume_resolution
   volume_resolution

References
----------
- Doviak, R. J., & Zrnić, D. S. (1993). Doppler Radar and Weather Observations. Academic Press.
"""

__all__ = [
    "azimuthal_resolution",
    "beamwidth_to_radians",
    "compute_azimuth_resolution",
    "compute_beamwidth",
    "compute_volume_resolution",
    "volume_resolution",
]


[docs] def compute_beamwidth(wavelength, antenna_diameter): """ Compute the beamwidth of a radar. Parameters ---------- wavelength : float Radar wavelength [m]. antenna_diameter : float Diameter of the radar antenna [m]. Returns ------- float Beamwidth in radians. References ---------- - Doviak and Zrnić (1993), Eq. 3.5.2 """ return 1.22 * wavelength / antenna_diameter
[docs] def compute_azimuth_resolution(range_m, beamwidth_rad): """ Compute azimuthal resolution (cross-range resolution). Parameters ---------- range_m : float Radar range [m]. beamwidth_rad : float Beamwidth [radians]. Returns ------- float Azimuthal resolution [m]. References ---------- - Doviak and Zrnić (1993), Section 3.5 """ return range_m * beamwidth_rad
[docs] def compute_volume_resolution(range_m, beamwidth_rad, pulse_length): """ Compute radar volume resolution. Parameters ---------- range_m : float Radar range [m]. beamwidth_rad : float Beamwidth [radians]. pulse_length : float Pulse length [m]. Returns ------- float Radar sampling volume [m^3]. References ---------- - Doviak and Zrnić (1993), Eq. 3.5.7 """ az_res = compute_azimuth_resolution(range_m, beamwidth_rad) return az_res * az_res * pulse_length
[docs] def beamwidth_to_radians(beamwidth_deg): """ Convert beamwidth from degrees to radians. Parameters ---------- beamwidth_deg : float Beamwidth in degrees. Returns ------- float Beamwidth in radians. """ import numpy as np return np.deg2rad(beamwidth_deg)
[docs] def azimuthal_resolution(range_m, beamwidth_deg): """ Compute azimuthal resolution given beamwidth in degrees. Parameters ---------- range_m : float Radar range [m]. beamwidth_deg : float Beamwidth [degrees]. Returns ------- float Azimuthal resolution [m]. """ bw_rad = beamwidth_to_radians(beamwidth_deg) return compute_azimuth_resolution(range_m, bw_rad)
[docs] def volume_resolution(range_m, bw_h_deg, bw_v_deg, pulse_length): """ Compute radar volume resolution using horizontal and vertical beamwidth in degrees. Parameters ---------- range_m : float Radar range [m]. bw_h_deg : float Horizontal beamwidth [degrees]. bw_v_deg : float Vertical beamwidth [degrees]. pulse_length : float Pulse length [m]. Returns ------- float Radar sampling volume [m^3]. """ import numpy as np bw_h_rad = np.deg2rad(bw_h_deg) bw_v_rad = np.deg2rad(bw_v_deg) return range_m**2 * bw_h_rad * bw_v_rad * pulse_length / (4 * np.log(2))