Skip to content

VBM

Velocity bin masking (VBM) electronic attack slow-time modulations.

Provides slow-time phase noise functions that a DRFM jammer can apply to spread energy across Doppler bins, masking the true target velocity. Includes LFM, random-phase, and sinusoidal modulation strategies.

logger = logging.getLogger(__name__) module-attribute

calc_f_delta(fcar, rdot_delta)

Calculates the Doppler frequency spread from a range-rate spread.

This function converts a spread in target radial velocities (range-rate delta) into a corresponding Doppler frequency bandwidth.

Parameters:

Name Type Description Default
fcar float

The carrier frequency of the radar in Hertz.

required
rdot_delta float

The spread in range-rates (radial velocities) in meters/second.

required

Returns:

Type Description
float

The corresponding frequency spread (f_delta) in Hertz.

Source code in src/rad_lab/vbm.py
129
130
131
132
133
134
135
136
137
138
139
140
141
142
def calc_f_delta(fcar: float, rdot_delta: float) -> float:
    """Calculates the Doppler frequency spread from a range-rate spread.

    This function converts a spread in target radial velocities (range-rate delta)
    into a corresponding Doppler frequency bandwidth.

    Args:
        fcar: The carrier frequency of the radar in Hertz.
        rdot_delta: The spread in range-rates (radial velocities) in meters/second.

    Returns:
        The corresponding frequency spread (f_delta) in Hertz.
    """
    return 2 * fcar / c.C * rdot_delta

slowtime_noise(N_pulses, fcar, rdot_delta, prf, noise_fun=_lfm_phase)

Generates a slow-time noise sequence for Velocity Band Modulation (VBM).

This function acts as a wrapper to generate various types of complex noise sequences applied across pulses (slow-time). It first calculates the required Doppler frequency spread from the given range-rate spread and then calls the specified noise generation function.

Parameters:

Name Type Description Default
N_pulses int

The total number of pulses in the coherent processing interval.

required
fcar float

The radar's carrier frequency in Hertz.

required
rdot_delta float

The desired spread in range-rates (radial velocities) in m/s, which defines the VBM bandwidth.

required
prf float

The Pulse Repetition Frequency in Hertz.

required
noise_fun Callable

The function to use for generating the noise sequence. Defaults to _lfm_phase.

_lfm_phase

Returns:

Type Description
ndarray

A 1D numpy array representing the complex slow-time noise sequence.

Notes

Available noise_fun choices include: - _random_phase: Broadband random phase noise. - _uniform_bandwidth_phase: Noise with a uniform spectral distribution. - _gaussian_bandwidth_phase: Noise with a Gaussian spectral distribution. - _gaussian_bandwidth_phase_normalized: Gaussian noise with time-domain normalization. - _lfm_phase: A deterministic LFM sweep across the Doppler band (cleanest).

Source code in src/rad_lab/vbm.py
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
def slowtime_noise(
    N_pulses: int, fcar: float, rdot_delta: float, prf: float, noise_fun: Callable = _lfm_phase
) -> np.ndarray:
    """Generates a slow-time noise sequence for Velocity Band Modulation (VBM).

    This function acts as a wrapper to generate various types of complex noise
    sequences applied across pulses (slow-time). It first calculates the required
    Doppler frequency spread from the given range-rate spread and then calls the
    specified noise generation function.

    Args:
        N_pulses: The total number of pulses in the coherent processing interval.
        fcar: The radar's carrier frequency in Hertz.
        rdot_delta: The desired spread in range-rates (radial velocities) in m/s,
            which defines the VBM bandwidth.
        prf: The Pulse Repetition Frequency in Hertz.
        noise_fun: The function to use for generating the noise sequence.
            Defaults to `_lfm_phase`.

    Returns:
        A 1D numpy array representing the complex slow-time noise sequence.

    Notes:
        Available `noise_fun` choices include:
        - `_random_phase`: Broadband random phase noise.
        - `_uniform_bandwidth_phase`: Noise with a uniform spectral distribution.
        - `_gaussian_bandwidth_phase`: Noise with a Gaussian spectral distribution.
        - `_gaussian_bandwidth_phase_normalized`: Gaussian noise with time-domain normalization.
        - `_lfm_phase`: A deterministic LFM sweep across the Doppler band (cleanest).
    """
    f_delta = calc_f_delta(fcar, rdot_delta)
    slowtime_noise = noise_fun(N_pulses, f_delta, prf)

    logger.debug("\nBand Noise:")
    logger.debug(f"\t{norm(slowtime_noise)=}")
    logger.debug(f"\t{slowtime_noise.size=}")
    logger.debug(f"\t{np.mean(abs(slowtime_noise))=}")
    logger.debug(f"\t{np.var(abs(slowtime_noise))=}")
    logger.debug(f"\t{np.mean(np.angle(slowtime_noise))=}")
    logger.debug(f"\t{np.sqrt(np.var(np.angle(slowtime_noise)))=}")

    return slowtime_noise