Radar Signal Processing Graph

This demonstration shows the complete radar signal processing graph, from LFM waveform generation through to range-Doppler map creation. Each stage is visualized with interactive Plotly plots.

Processing Flow Diagram

The following diagram shows the complete signal processing flow. This is generated automatically from the graph structure without executing any operations:

Configuration

Radar system parameters and target characteristics for this simulation:

Parameter Value Unit
Number of Pulses 128 pulses
Sample Rate 10 MHz
Pulse Duration 10 μs
Bandwidth 5 MHz
Pulse Repetition Interval (PRI) 1 ms
Pulse Repetition Frequency (PRF) 1000 Hz
Max Unambiguous Doppler ±500 Hz
Target Delay 1.00 μs
Target Range 150 m
Target Doppler 200.0 Hz
Noise Power 0.010 relative

Code Example

Here's how to reproduce this processing graph using sigchain:


import staticdash as sd
from sigexec import Graph
from sigexec.blocks import LFMGenerator, StackPulses, RangeCompress, DopplerCompress
from sigexec.diagnostics import plot_timeseries, plot_pulse_matrix, plot_range_profile, plot_range_doppler_map

page = sd.Page('radar', 'Radar Processing')
page.add_header("Radar Signal Processing Graph", level=1)

result = (Graph("Radar")
    .add(LFMGenerator(num_pulses=128, target_delay=1e-06, 
                       target_doppler=200.0))
    .tap(lambda s: page.add_header("Stage 1: Signal Generation", level=2))
    .tap(lambda s: page.add_plot(plot_timeseries(s, title="Generated LFM Pulse")))
    
    .add(StackPulses())
    .tap(lambda s: page.add_header("Stage 2: Pulse Stacking", level=2))
    .tap(lambda s: page.add_plot(plot_pulse_matrix(s, title="Stacked Pulses")))
    
    .add(RangeCompress(window='hamming', oversample_factor=2))
    .tap(lambda s: page.add_header("Stage 3: Range Compression", level=2))
    .tap(lambda s: page.add_plot(plot_range_profile(s, title="Range Profile")))
    
    .add(DopplerCompress(window='hann', oversample_factor=2))
    .tap(lambda s: page.add_header("Stage 4: Doppler Compression", level=2))
    .tap(lambda s: page.add_plot(plot_range_doppler_map(s, title="Range-Doppler Map")))
    .run()
)

Processing Graph

Stage 1: LFM Signal Generation

Generate Linear Frequency Modulated (LFM) chirp pulses with simulated target return (delayed and Doppler shifted) plus noise.

Stage 2: Pulse Stacking

Organize the pulses into a 2D matrix (pulses × samples) for coherent processing.

Stage 3: Range Compression

Apply matched filtering using the transmitted waveform. A Hamming window is applied to reduce sidelobe levels.

Stage 4: Doppler Compression

Apply FFT along the pulse dimension to resolve Doppler frequency. This creates the final Range-Doppler Map (RDM).

Processing Summary

Metric Value Unit
True Target Range 0.150 km
Detected Peak Range 0.150 km
Range Error 0.0 m
True Target Doppler 200.0 Hz
Detected Peak Doppler 199.2 Hz
Doppler Error 0.8 Hz
Estimated SNR 60.0 dB