Radar Model

radarsimpy.Transmitter

class radarsimpy.Transmitter(f, t, tx_power=0, pulses=1, prp=None, f_offset=None, pn_f=None, pn_power=None, channels=[{'location': (0, 0, 0)}])

Bases: object

A class defines basic parameters of a radar transmitter

Parameters:
  • f (float or numpy.1darray) –

    Waveform frequency (Hz). If f is a single number, radar transmits a single-tone waveform.

    For linear modulation, specify f with [f_start, f_stop].

    f can alse be a 1-D array of an arbitrary waveform, specify the time with t.

  • t (float or numpy.1darray) – Timing of each pulse (s).

  • tx_power (float) – Transmitter power (dBm)

  • pulses (int) – Total number of pulses

  • prp (float) –

    Pulse repetition period (s). prp >= pulse_length. If it is None, prp = pulse_length.

    prp can alse be a 1-D array to specify different repetition period for each pulse. In this case, the length of the 1-D array should equals to the length of pulses

  • f_offset (numpy.1darray) – Frequency offset for each pulse (Hz). The length must be the same as pulses.

  • pn_f (numpy.1darray) – Frequency of the phase noise (Hz)

  • pn_power (numpy.1darray) – Power of the phase noise (dB/Hz)

  • channels (list[dict]) –

    Properties of transmitter channels

    [{

    • location (numpy.1darray) –

      3D location of the channel [x, y, z] (m)

    • polarization (numpy.1darray) –

      Antenna polarization [x, y, z]. default = [0, 0, 1] (vertical polarization)

    • delay (float) –

      Transmit delay (s). default 0

    • azimuth_angle (numpy.1darray) –

      Angles for azimuth pattern (deg). default [-90, 90]

    • azimuth_pattern (numpy.1darray) –

      Azimuth pattern (dB). default [0, 0]

    • elevation_angle (numpy.1darray) –

      Angles for elevation pattern (deg). default [-90, 90]

    • elevation_pattern (numpy.1darray) –

      Elevation pattern (dB). default [0, 0]

    • pulse_amp (numpy.1darray) –

      Relative amplitude sequence for pulse’s amplitude modulation. The array length should be the same as pulses. default 0

    • pulse_phs (numpy.1darray) –

      Phase code sequence for pulse’s phase modulation (deg). The array length should be the same as pulses. default 0

    • mod_t (numpy.1darray) –

      Time stamps for waveform modulation (s). default None

    • phs (numpy.1darray) –

      Phase scheme for waveform modulation (deg). default None

    • amp (numpy.1darray) –

      Relative amplitude scheme for waveform modulation. default None

    }]

Variables:
  • fc_vect (numpy.1darray) – Center frequency array for the pulses (Hz)

  • fc_frame (float) – Center frequency of the whole frame (Hz)

  • bandwidth (float) – Bandwith of each pulse (Hz), calculated from max(f) - min(f)

  • pulse_length (float) – Dwell time of each pulse (s), calculated from t[-1] - t[0]

  • channel_size (int) – Number of transmitter channels

  • locations (numpy.2darray) – 3D location of the channels. Size of the aray is [channel_size, 3 <x, y, z>] (m)

  • delay (numpy.1darray) – Delay for each channel (s)

  • polarization (numpy.1darray) –

    Antenna polarization [x, y, z].

    • Horizontal polarization: [1, 0, 0]

    • Vertical polarization: [0, 0, 1]

  • az_angles (list[numpy.1darray]) – Angles for each channel’s azimuth pattern (deg)

  • az_patterns (list[numpy.1darray]) – Azimuth pattern for each channel (dB)

  • el_angles (list[numpy.1darray]) – Angles for each channel’s elevation pattern (deg)

  • el_patterns (list[numpy.1darray]) – Elevation pattern for each channel (dB)

  • az_func (list) – Azimuth patterns’ interpolation functions

  • el_func (list) – Elevation patterns’ interpolation functions

  • antenna_gains (numpy.1darray) – Antenna gain for each channel (dB). Antenna gain is max(az_pattern)

  • pulse_mod (list[numpy.1darray]) – Complex modulation code sequence for phase modulation. Lentgh of pulse_mod is the same as pulses

  • waveform_mod (list[dict]) –

    Waveform modulation properties for each channel. {

    enabled (bool) – Enable waveform modulation var (numpy.1darray) – Variance of the modulation t (numpy.1darray) – Time stamps for waveform modulation

    }

  • box_min (numpy.1darray) – Minimum location of the transmitter box (m)

  • box_max (numpy.1darray) – Maximum location of the transmitter box (m)

Waveform

|                       prp
|                  +-----------+
|
|            +---f[1]--->  /            /            /
|                         /            /            /
|                        /            /            /
|                       /            /            /
|                      /            /            /     ...
|                     /            /            /
|                    /            /            /
|                   /            /            /
|      +---f[0]--->/            /            /
|
|                  +-------+
|                 t[0]    t[1]
|
|    Pulse         +--------------------------------------+
|    modulation    |pulse_amp[0]|pulse_amp[1]|pulse_amp[2]|  ...
|                  |pulse_phs[0]|pulse_phs[1]|pulse_phs[2]|  ...
|                  +--------------------------------------+
|
|    Waveform      +--------------------------------------+
|    modulation    |           amp / phs / mod_t          |  ...
|                  +--------------------------------------+

radarsimpy.Receiver

class radarsimpy.Receiver(fs, noise_figure=10, rf_gain=0, load_resistor=500, baseband_gain=0, bb_type='complex', channels=[{'location': (0, 0, 0)}])

Bases: object

A class defines basic parameters of a radar receiver

Parameters:
  • fs (float) – Sampling rate (sps)

  • noise_figure (float) – Noise figure (dB)

  • rf_gain (float) – Total RF gain (dB)

  • load_resistor (float) – Load resistor to convert power to voltage (Ohm)

  • baseband_gain (float) – Total baseband gain (dB)

  • bb_type (string) – Baseband data type, complex or real. Deafult is complex

  • channels (list[dict]) –

    Properties of transmitter channels

    [{

    • location (numpy.1darray) –

      3D location of the channel [x, y, z] (m)

    • polarization (numpy.1darray) –

      Antenna polarization [x, y, z]. default = [0, 0, 1] (vertical polarization)

    • azimuth_angle (numpy.1darray) –

      Angles for azimuth pattern (deg). default [-90, 90]

    • azimuth_pattern (numpy.1darray) –

      Azimuth pattern (dB). default [0, 0]

    • elevation_angle (numpy.1darray) –

      Angles for elevation pattern (deg). default [-90, 90]

    • elevation_pattern (numpy.1darray) –

      Elevation pattern (dB). default [0, 0]

    }]

Variables:
  • noise_bandwidth (float) – Bandwidth in calculating the noise (Hz). noise_bandwidth = fs / 2

  • channel_size (int) – Total number of receiver channels

  • locations (numpy.2darray) – 3D location of the channels. Size of the aray is [channel_size, 3 <x, y, z>] (m)

  • polarization (numpy.1darray) –

    Antenna polarization [x, y, z].

    • Horizontal polarization: [1, 0, 0]

    • Vertical polarization: [0, 0, 1]

  • az_angles (list[numpy.1darray]) – Angles for each channel’s azimuth pattern (deg)

  • az_patterns (list[numpy.1darray]) – Azimuth pattern for each channel (dB)

  • el_angles (list[numpy.1darray]) – Angles for each channel’s elevation pattern (deg)

  • el_patterns (list[numpy.1darray]) – Elevation pattern for each channel (dB)

  • az_func (list) – Azimuth patterns’ interpolation functions

  • el_func (list) – Elevation patterns’ interpolation functions

  • antenna_gains (numpy.1darray) – Antenna gain for each channel (dB). Antenna gain is max(az_pattern)

  • box_min (numpy.1darray) – Minimum location of the transmitter box (m)

  • box_max (numpy.1darray) – Maximum location of the transmitter box (m)

Receiver noise

|           + n1 = 10*log10(Boltzmann_constant * Ts * 1000)
|           |      + 10*log10(noise_bandwidth)  (dBm)
|           v
|    +------+------+
|    |rf_gain      |
|    +------+------+
|           | n2 = n1 + noise_figure + rf_gain (dBm)
|           v n3 = 1e-3 * 10^(n2/10) (Watts)
|    +------+------+
|    |mixer        |
|    +------+------+
|           | n4 = sqrt(n3 * load_resistor) (V)
|           v
|    +------+------+
|    |baseband_gain|
|    +------+------+
|           | noise amplitude (peak to peak)
|           v n5 = n4 * 10^(baseband_gain / 20) * sqrt(2) (V)

radarsimpy.Radar

class radarsimpy.Radar(transmitter, receiver, location=(0, 0, 0), speed=(0, 0, 0), rotation=(0, 0, 0), rotation_rate=(0, 0, 0), time=0, interf=None, seed=None, **kwargs)

Bases: object

A class defines basic parameters of a radar system

Parameters:
  • transmitter (Transmitter) – Radar transmiter

  • receiver (Receiver) – Radar Receiver

  • location (numpy.1darray) – 3D location of the radar [x, y, z] (m). default [0, 0, 0]

  • speed (numpy.1darray) – Speed of the radar (m/s), [vx, vy, vz]. default [0, 0, 0]

  • rotation (numpy.1darray) – Radar’s angle (deg), [yaw, pitch, roll]. default [0, 0, 0]

  • rotation_rate (numpy.1darray) – Radar’s rotation rate (deg/s), [yaw rate, pitch rate, roll rate] default [0, 0, 0]

  • time – Radar firing time instances / frames :type time: float or numpy.1darray

  • interf (Radar) – Interference radar. default None

  • seed (int) – Seed for noise generator

Variables:
  • samples_per_pulse (int) – Number of samples in one pulse

  • channel_size (int) – Total number of channels. channel_size = transmitter.channel_size * receiver.channel_size

  • virtual_array (numpy.2darray) – Locations of virtual array elements. [channel_size, 3 <x, y, z>]

  • timestamp (numpy.3darray) –

    Timestamp for each samples. Frame start time is defined in time. [channes/frames, pulses, samples]

    Channel/frame order in timestamp

    [0] Frame[0] -- Tx[0] -- Rx[0]

    [1] Frame[0] -- Tx[0] -- Rx[1]

    [N] Frame[0] -- Tx[1] -- Rx[0]

    [N+1] Frame[0] -- Tx[1] -- Rx[1]

    [M] Frame[1] -- Tx[0] -- Rx[0]

    [M+1] Frame[1] -- Tx[0] -- Rx[1]