Phased Array & Radar DOA Simulator

Appearance:

3D Beamforming, Radar DOA & Antenna Tool

Explore phased array beam steering and simple radar/receive DOA estimation directly in the browser. This interactive RF engineering tool visualizes antenna array geometry, element spacing, steering direction, 3D radiation lobes, simplified mutual coupling and prescribed-current Huygens-style/Fraunhofer behavior.

The simulator is designed for learning and experimentation: instead of relying only on fixed 2D antenna pattern pictures, it uses vector-based field calculations to show how antenna elements combine in 3D space.

phased array simulator antenna array visualizer beamforming tool 3D radiation pattern RF engineering radar DOA estimation
Source code: inspect, fork or improve the project on GitHub.

What is a phased array simulator?

A phased array simulator is an interactive tool for visualizing how multiple antenna elements combine their electromagnetic fields. By changing phase shifts, steering angle, element spacing and amplitude taper, you can see how the main beam, sidelobes, nulls and radiation pattern change in 3D.

This browser-based antenna array simulator is useful for students, RF engineers and makers who want to understand beamforming without starting with a full electromagnetic solver. The visualization connects the array factor, Fraunhofer far-field approximation and simplified prescribed-current Huygens-style field model in one place.

The same antenna position vectors can also be used for receive and radar direction-of-arrival experiments. The simulator can generate noisy complex antenna samples, compare them with many possible reference responses, and show the estimated target direction as a DOA correlation map.

Beamforming and steering

Beamforming works by applying a progressive phase shift to each antenna element. Mathematically this phase is based on the projection of the element position onto the steering direction. In the desired direction, the geometric phase differences cancel and the fields add constructively.

Vector array geometry

The array is defined by real antenna position vectors r_n = [x_n, y_n, z_n]. You can use rectangular, circular, spiral, parabolic or manual coordinate layouts instead of only a fixed checkbox grid.

Radar and receive DOA

The radar/receive mode creates noisy complex antenna samples, builds reference responses for many possible target directions and estimates the direction with the highest matched-filter correlation.

Element spacing and grating lobes

Element spacing strongly affects the array pattern. Around half-wavelength spacing is commonly used because it helps avoid strong grating lobes, while very small spacing increases mutual coupling and changes the real element currents.

Simplified mutual coupling

An optional coupling estimate modifies the complex element currents with a rough nearest-neighbour matrix. It is useful for intuition, but it is not a replacement for FEM, MoM, FDTD or measured S-parameters.

Linear and dB radiation patterns

Linear scale is intuitive for beginners, while normalized dB scale makes sidelobes and nulls easier to compare. For field amplitude the correct form is 20 log10(|AF|/max|AF|); for power it is 10 log10(P/Pmax).

What you can test with this tool

3D view settings & controls
300 px
3D background:
3D controls: Left mouse: rotate Right mouse: move Scroll: zoom Double-click: fullscreen
Sticky 2D + 3D preview (tap to collapse)

Visualisierungseinstellungen

Steuerungsrichtung (Beam Steering)

° 10°
° 75°
Steuerungspunkt anzeigen:
λ 100λ

Fraunhofer: distanzunabhängig · Huygens: kleine R/λ zeigen Nah-/Fresnel-Effekte.

Radar target follows this steering direction and Distance R / λ by default.

Phase fronts:
rₙ / R−rₙ vectors:
Feldmuster:
Muster normalisieren:
dB ≈0.45

Disabled by default. Enable the checkbox to apply the rough element-current coupling estimate.

Berechnungsmethode:
× 3x3

Radar target, steering and receiver test

Steering, target direction, radar scene and receive/DOA test are linked here. Unlock target direction or range only when you want a separate test.

Radar / receive test
What the simulator does
Receive signaturegₙ(d)=E(d)·exp(j·α·k·rₙ·d)
Noisy samplesy=g(d_true)·s+n
Direction searchP(d₀)=|g(d₀)ᴴy|²
Phase factorα=1 one-way, α=2 radar round-trip
°
30°
°
10°
dB
20 dB
°

Default: the radar target follows the steering azimuth, elevation and distance. Unlock it only for an independent receive/DOA test.

FMCW radar scene target

Define a simple reflecting object. The shape is visual; the radar calculation uses a point target with configurable RCS.

range + Doppler

Antenna / radar frequency

This sets the physical wavelength λ = c / f_c. Array distances stay in λ; meter and mm values are derived from this frequency.

λ--
100λ--
Estimated RCS--Rough teaching estimate, not full-wave scattering.
Chirp frequencies----
--
Estimated range
--
--
Range FFT estimate
--
--
Estimated radial speed
--
--
Estimated speed magnitude
--
--
Doppler FFT estimate
--
--
Estimated direction
--
Angular error: --
Correlation quality
--
Peak/second: --
Range-Doppler map from the expected FFT bins. Bright spot = target.
Range FFT magnitude over fast-time samples
Doppler FFT magnitude over chirps at the selected range bin
DOA correlation map: azimuth × elevation. Bright peak = estimated direction.
Received antenna samples: phase and amplitude after noise
Azimuth correlation cut at estimated elevation
Elevation correlation cut at estimated azimuth

Antenna array configuration

Antenna position vectors

Choose a geometry preset or edit the coordinates directly. Presets only generate vectors in this editor.

Rectangular grid active
5
5
λ 0.50λ
Taper:
dB 25 dB
Chebyshev taper changes amplitudes, not phases. For a 2D array this demo uses separable weights: w(x,z)=w_x(x)·w_z(z). More elements make the main lobe narrower; tapering mainly controls sidelobes.

Write positions as [x, y, z]. Multiple vectors can sit on one line.

Coordinate editor active

Beobachtungspunkt-Info:

Beobachtungspunkt

° 10°
° 75°
Beobachtung = Steuerung:
Beobachtungspunkt anzeigen:

Richtung: θ=75°, φ=10°

Displayed field value: 1.0

Re(A) Huygens model: 0.0

Antenna feed phase shifts:

$$A(\vec{R}) = \sum_{n=1}^N \frac{e^{ik(\vec{r}_n\cdot\hat{s})}}{N_P} \sum_{p=1}^{N_P} F_p(\hat{r}_{n,p})\,\frac{e^{ik|\vec{R}-\vec{r}_{n,p}|}}{|\vec{R}-\vec{r}_{n,p}|}$$

$$A_{\text{Fraunhofer}}(\hat{d}-\hat{s}) = \frac{e^{ikR}}{R} F(\hat{d}) \sum_{n=1}^N e^{-ik\left((\hat{d}-\hat{s})\cdot\vec{r}_n\right)}$$

$$E_{\text{phys}}(t)=\operatorname{Re}\left\{\tilde E(\vec R)e^{i\omega t}\right\}=|\tilde E(\vec R)|\cos(\omega t+\angle\tilde E)$$

$$\left\langle E_{\text{phys}}^2(t)\right\rangle_t=\frac{1}{2}|\tilde E(\vec R)|^2$$

$$AF_{dB}=20\log_{10}\left(\frac{|AF|}{|AF|_{max}}\right)=10\log_{10}\left(\frac{|AF|^2}{|AF|^2_{max}}\right)$$

$$\phi_n(\text{steer}) = k(\vec{r}_n \cdot \hat{s})$$

$$A_n(\hat{d}) = A_n \cdot e^{-ik(\hat{d}\cdot\vec{r}_n)} e^{ik(\vec{r}_n\cdot\hat{s})} = A_n \cdot e^{-ik\left((\hat{d}-\hat{s})\cdot\vec{r}_n\right)}$$

$$\text{This page uses } e^{i\omega t}\text{ and outgoing }G(R)\propto e^{ikR}/R.$$

$$AF(\hat{d}) = \sum_{n=1}^{N} a_n e^{-i k (\hat{d} \cdot \vec{r}_n)}$$

Radar / Receive DOA calculation

This section describes exactly what the radar/receive test does. The DSP does not know the true target direction. It generates noisy antenna samples for a chosen target and then tests many possible directions until the expected phase pattern matches the measurement best.

1. Antenna positions

Each antenna element has a known position vector.

$$\vec r_n=[x_n,y_n,z_n]$$

2. Direction vector

A possible target direction is represented by a unit vector.

$$\hat d=[d_x,d_y,d_z],\quad \|\hat d\|=1$$

3. Receive signature

For each test direction the simulator computes the complex reference response of every antenna.

$$g_n(\hat d)=E_\text{element}(\hat d)\,e^{j\alpha k(\vec r_n\cdot\hat d)}$$

4. One-way vs. radar phase

One-way receive uses alpha = 1. Monostatic radar round-trip uses alpha = 2 because the wave travels to the target and back.

$$k=\frac{2\pi}{\lambda},\quad \alpha=1\text{ or }2$$

5. Noisy measurement

The measured vector is the true array response multiplied by a complex echo amplitude plus complex receiver noise.

$$\vec y=\vec g(\hat d_\text{true})s+\vec n$$

6. Noise model

Noise is added independently to the real and imaginary part of each antenna sample.

$$n_n=\frac{\sigma}{\sqrt2}(a_n+j b_n),\quad a_n,b_n\sim\mathcal N(0,1)$$

7. SNR to noise amplitude

For unit signal amplitude the SNR slider controls the complex noise amplitude.

$$\sigma=10^{-\mathrm{SNR}_{dB}/20}$$

8. LUT direction search

For every candidate direction the simulator correlates the measured vector with the stored reference response.

$$z(\hat d_{cand})=\vec g(\hat d_{cand})^H\vec y=\sum_n g_n(\hat d_{cand})^*y_n$$

9. Power map

The DOA heatmap shows the squared magnitude of this matched-filter output.

$$P(\hat d_{cand})=|z(\hat d_{cand})|^2$$

10. Estimated direction

The direction with the largest correlation peak is reported as the estimated target direction.

$$\hat d_\text{est}=\arg\max_{\hat d_{cand}}P(\hat d_{cand})$$

Correct hypotheses align the antenna phases and add constructively. Wrong hypotheses leave residual phase errors, so the sum partly cancels. With low SNR the peak becomes wider or can jump to a wrong sidelobe.

FMCW radar scene: range, velocity and object geometry

This section explains the new radar scene options step by step. The object geometry is intentionally simple: sphere, box, plate or cylinder. It is used for visualization and a reflectivity/RCS setting; the first radar model treats the object as one point reflector.

1. Choose a simple object

The user selects a simple visual geometry. This keeps the UI understandable and avoids pretending to do full EM ray tracing.

$$\text{geometry}\in\{\text{sphere, box, plate, cylinder}\}$$

2. Convert range and angle to 3D position

The target is placed inside the 3D radar scene using the target range plus the azimuth/elevation from the DOA controls.

$$\vec p=R[\cos e\cos a,\sin e,\cos e\sin a]$$

3. Use RCS as echo strength

The radar cross section or reflectivity controls how strong the returned echo is. For this simplified scene it is a scalar amplitude factor.

$$A\propto\frac{\sqrt{\sigma_\text{RCS}}}{R^2}$$

4. Build one FMCW chirp

A chirp sweeps over bandwidth B during chirp time T. Its slope determines the beat frequency caused by range.

$$S=\frac{B}{T}$$

5. Range creates beat frequency

A target at range R returns later. After mixing transmit and receive signals, the delay appears as a beat frequency.

$$f_b=\frac{2SR}{c}$$

6. Fast-time samples become range bins

Samples inside one chirp are called fast-time samples. An FFT over those samples produces range bins.

$$Y_R[n,k,p]=\mathrm{FFT}_q\{Y[n,q,p]\}$$

7. Velocity creates Doppler phase

From chirp to chirp, a moving target adds a phase progression. Its frequency is the Doppler frequency.

$$f_D=\frac{2v}{\lambda}$$

8. Slow-time FFT becomes velocity bins

The chirp index is slow time. An FFT over chirps converts the Doppler phase progression into velocity bins.

$$Y_{RD}[n,k,l]=\mathrm{FFT}_p\{Y_R[n,k,p]\}$$

9. The full radar data cube

A real radar scene therefore needs antenna index, fast-time sample index and chirp index.

$$Y[n,q,p]$$

10. Add the antenna phase

At a selected range-Doppler bin, the remaining vector over antennas is used for the DOA angle estimate.

$$Y[n,q,p]\mathrel{+}=A e^{j2\pi f_b q/f_s}e^{j2\pi f_D pT}g_n(\hat d)$$

11. Optional TX steering gain

If the transmit beam is steered, the target echo is stronger when the target direction equals the steering direction. In this first model the TX side changes amplitude, not the receive DOA phase.

$$A_\text{eff}=A\,|w_\text{tx}^H a_\text{tx}(\hat d)|$$

12. Detect the peak

The range-Doppler map is formed by summing power over antennas. Peaks indicate possible targets.

$$P[k,l]=\sum_n |Y_{RD}[n,k,l]|^2$$

13. Estimate angle at that peak

For the chosen peak, take the antenna vector and run the same matched-filter DOA search as above.

$$\hat d=\arg\max_{\hat d_{cand}}|g(\hat d_{cand})^H y_{k,l}|^2$$

This is the correct first step for the website: simple visible objects, real radar concepts, no overcomplicated mesh reflection. Later the point target can be replaced by several scatterers for extended objects.

Symbol Definition
$A$
$\vec{r}_n$
$\hat{d}$
$\hat{s}$
$k = \frac{2\pi}{\lambda}$
$\phi_n$
$\phi_n(\text{steer})$
$F_p(\hat u_{n,p})$
$F(\hat r)$
$A_n$
$N$
$N_P$
$\lambda$
$\vec{r}_{n,p}$
$G(\vec r,\vec r')$
$\vec r$
$\vec r'$
$\vec R$
$S,\ dS'$
$J(\vec r')$
$\rho(\vec r')$
$\hat u$
$c$
$f_c$
$B$
$T$
$S=B/T$
$R$
$v$
$\sigma_{\mathrm{RCS}}$
$f_b$
$f_D$
$N_q$
$N_c$
$q$
$p$
$k_r$
$l$
$Y[n,q,p]$
$Y_R[n,k_r,p]$
$Y_{RD}[n,k_r,l]$
$\vec y$
$\vec g(\hat d)$
$z(\hat d_{cand})$
$P(\hat d_{cand})$
$\hat d_{est}$
$w_{tx}$
$a_{tx}(\hat d)$