Wideband Module#
The wideband module provides functions for analyzing and compensating beam squint effects in wideband phased arrays using true time delay (TTD) and hybrid phase/TTD architectures.
Beam Squint Analysis#
- phased_array.compute_beam_squint(x, y, theta0_deg, phi0_deg, center_frequency, frequencies, steering_mode='phase', architecture=None, n_points=361)[source]#
Compute beam squint (pointing error) vs frequency.
- Parameters:
x (
ndarray) – Element x-positions in metersy (
ndarray) – Element y-positions in meterstheta0_deg (
float) – Intended steering angle in degreesphi0_deg (
float) – Intended azimuth angle in degreescenter_frequency (
float) – Center frequency in Hz (where weights are computed)frequencies (
ndarray) – Frequencies to evaluate in Hzsteering_mode (
str) – ‘phase’ - phase-only steering (maximum squint) ‘ttd’ - true-time delay (no squint) ‘hybrid’ - TTD at subarray + phase at elementarchitecture (
SubarrayArchitecture, optional) – Required for ‘hybrid’ moden_points (
int) – Number of angle points for pattern computation
- Returns:
results – ‘frequencies’ : Frequency values (Hz) ‘beam_angles’ : Actual beam pointing angle at each frequency (deg) ‘squint’ : Pointing error (deg), positive = beam moved towards broadside ‘relative_gain’ : Gain relative to center frequency (dB)
- Return type:
Examples
Analyze beam squint for a phase-steered array:
>>> import numpy as np >>> import phased_array as pa >>> wavelength = 0.03 # 10 GHz center frequency >>> geom = pa.create_rectangular_array(16, 16, dx=0.5, dy=0.5, wavelength=wavelength) >>> freqs = np.linspace(9e9, 11e9, 11) # 9-11 GHz >>> results = pa.compute_beam_squint( ... geom.x, geom.y, ... theta0_deg=30, phi0_deg=0, ... center_frequency=10e9, ... frequencies=freqs, ... steering_mode='phase' ... ) >>> results['squint'].shape (11,)
Compare steering modes:
>>> # Phase steering: beam squint increases with bandwidth >>> # TTD steering: no beam squint (squint ~ 0) >>> results_ttd = pa.compute_beam_squint( ... geom.x, geom.y, 30, 0, 10e9, freqs, steering_mode='ttd' ... )
- phased_array.analyze_instantaneous_bandwidth(x, y, theta0_deg, phi0_deg, center_frequency, squint_tolerance_deg=0.5, steering_mode='phase', architecture=None)[source]#
Analyze instantaneous bandwidth for given squint tolerance.
- Parameters:
x (
ndarray) – Element x-positions in metersy (
ndarray) – Element y-positions in meterstheta0_deg (
float) – Steering angle in degreesphi0_deg (
float) – Azimuth angle in degreescenter_frequency (
float) – Center frequency in Hzsquint_tolerance_deg (
float) – Maximum acceptable beam squint in degreessteering_mode (
str) – ‘phase’, ‘ttd’, or ‘hybrid’architecture (
SubarrayArchitecture, optional) – Required for ‘hybrid’ mode
- Returns:
results – ‘ibw_hz’ : Instantaneous bandwidth in Hz ‘ibw_percent’ : Bandwidth as percentage of center frequency ‘ibw_ratio’ : Bandwidth ratio (f_high / f_low)
- Return type:
- phased_array.compute_pattern_vs_frequency(x, y, theta0_deg, phi0_deg, center_frequency, frequencies, steering_mode='phase', architecture=None, n_points=181, phi_cut_deg=None)[source]#
Compute radiation pattern at multiple frequencies.
- Parameters:
x (
ndarray) – Element x-positions in metersy (
ndarray) – Element y-positions in meterstheta0_deg (
float) – Steering angle in degreesphi0_deg (
float) – Azimuth angle in degreescenter_frequency (
float) – Center frequency in Hzfrequencies (
ndarray) – Frequencies to compute patterns atsteering_mode (
str) – ‘phase’, ‘ttd’, or ‘hybrid’architecture (
SubarrayArchitecture, optional) – Required for ‘hybrid’ moden_points (
int) – Number of angle pointsphi_cut_deg (
float, optional) – Phi angle for cut (default: phi0_deg)
- Returns:
results – ‘angles’ : Theta angles in degrees ‘frequencies’ : Frequency values ‘patterns’ : 2D array of patterns (n_freq x n_angles) in dB
- Return type:
True Time Delay Steering#
- phased_array.steering_vector_ttd(x, y, theta0_deg, phi0_deg, frequency, c=299792458.0)[source]#
Compute true-time delay (TTD) steering vector.
TTD provides frequency-independent beam pointing by applying actual time delays rather than phase shifts.
- Parameters:
x (
ndarray) – Element x-positions in metersy (
ndarray) – Element y-positions in meterstheta0_deg (
float) – Steering elevation angle in degrees (from broadside)phi0_deg (
float) – Steering azimuth angle in degreesfrequency (
float) – Operating frequency in Hzc (
float, optional) – Speed of light in m/s (default: 299792458)
- Returns:
weights – Complex steering weights with TTD phases
- Return type:
ndarray
Notes
- The time delay for each element is:
tau_n = (x_n * sin(theta) * cos(phi) + y_n * sin(theta) * sin(phi)) / c
The phase is: phi_n = -2 * pi * f * tau_n
This is equivalent to phase steering at the given frequency, but the key difference is that the TIME DELAY is what’s physically implemented, so the beam points correctly at all frequencies.
Examples
TTD steering for a 10 GHz array with physical positions:
>>> import numpy as np >>> import phased_array as pa >>> # Array positions in meters (e.g., 16x16 at half-wavelength for 10 GHz) >>> wavelength = 0.03 # 10 GHz >>> geom = pa.create_rectangular_array(16, 16, dx=0.5, dy=0.5, wavelength=wavelength) >>> weights_ttd = pa.steering_vector_ttd( ... geom.x, geom.y, ... theta0_deg=30, phi0_deg=0, ... frequency=10e9 ... ) >>> weights_ttd.shape (256,)
Compare TTD vs phase steering beam squint:
>>> # TTD maintains beam direction across bandwidth >>> # Phase steering causes beam squint at off-center frequencies >>> squint = pa.compute_beam_squint( ... geom.x, geom.y, theta0_deg=30, phi0_deg=0, ... center_freq=10e9, bandwidth=2e9, n_freqs=11 ... )
Hybrid Phase/TTD Steering#
- phased_array.steering_vector_hybrid(geometry, architecture, theta0_deg, phi0_deg, frequency, c=299792458.0)[source]#
Compute hybrid TTD + phase steering vector.
True-time delay is applied at the subarray level (coarse steering), and phase shifters provide fine adjustment within each subarray. This is the most common architecture for wideband phased arrays.
- Parameters:
geometry (
ArrayGeometry) – Array geometry with element positionsarchitecture (
SubarrayArchitecture) – Subarray partitioningtheta0_deg (
float) – Steering elevation angle in degreesphi0_deg (
float) – Steering azimuth angle in degreesfrequency (
float) – Operating frequency in Hzc (
float, optional) – Speed of light in m/s
- Returns:
weights – Complex steering weights
- Return type:
ndarray
Notes
For each element: 1. TTD is computed based on subarray center position 2. Phase shift compensates for element offset from subarray center
This reduces beam squint compared to phase-only steering, with squint now determined by subarray size rather than array size.
- phased_array.compute_subarray_delays_ttd(architecture, theta0_deg, phi0_deg, c=299792458.0)[source]#
Compute TTD values for each subarray.
- Parameters:
architecture (
SubarrayArchitecture) – Subarray partitioning with center positionstheta0_deg (
float) – Steering elevation angle in degreesphi0_deg (
float) – Steering azimuth angle in degreesc (
float, optional) – Speed of light in m/s
- Returns:
delays – Time delay for each subarray in seconds (shape: n_subarrays,)
- Return type:
ndarray
- phased_array.compute_subarray_weights_hybrid(geometry, architecture, theta0_deg, phi0_deg, frequency, amplitude_taper=None, ttd_quantization_bits=None, phase_quantization_bits=None, c=299792458.0)[source]#
Compute hybrid TTD + phase weights with optional quantization.
- Parameters:
geometry (
ArrayGeometry) – Array geometryarchitecture (
SubarrayArchitecture) – Subarray partitioningtheta0_deg (
float) – Steering elevation angle in degreesphi0_deg (
float) – Steering azimuth angle in degreesfrequency (
float) – Operating frequency in Hzamplitude_taper (
ndarray, optional) – Amplitude weights for each elementttd_quantization_bits (
int, optional) – Bits for TTD quantization (e.g., 6 bits = 64 delay steps)phase_quantization_bits (
int, optional) – Bits for phase shifter quantizationc (
float, optional) – Speed of light
- Returns:
results – ‘weights’ : Complex element weights ‘subarray_delays’ : TTD value for each subarray (seconds) ‘element_phases’ : Phase shift for each element (radians)
- Return type:
Comparison#
- phased_array.compare_steering_modes(geometry, architecture, theta0_deg, phi0_deg, center_frequency, bandwidth_percent=20.0, n_freq_points=11)[source]#
Compare beam squint for different steering modes.
- Parameters:
geometry (
ArrayGeometry) – Array geometryarchitecture (
SubarrayArchitecture) – Subarray partitioningtheta0_deg (
float) – Steering angle in degreesphi0_deg (
float) – Azimuth angle in degreescenter_frequency (
float) – Center frequency in Hzbandwidth_percent (
float) – Total bandwidth as percentage of center frequencyn_freq_points (
int) – Number of frequency points to evaluate
- Returns:
results – Results for each steering mode (‘phase’, ‘hybrid’, ‘ttd’)
- Return type: