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 witht
.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 isNone
,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 ofpulses
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 aspulses
waveform_mod (list[dict]) –
Waveform modulation properties for each channel. {
enabled
(bool) – Enable waveform modulationvar
(numpy.1darray) – Variance of the modulationt
(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
orreal
. Deafult iscomplex
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]