First week of coding period

First week of coding is now over!

I decided to start this project with a ‘cross correlator’ block, which calculates the cross correlation of two given signals. This block can be used to determine the time delay between two signals received by the passive radar, which in turn can be calculated as distance to target.

You can see this block in action on the image. On the image, the block calculates cross correlation between a random signal and a delayed copy of the same signal. The graph shows a clear spike at 200 samples, which is the correct delay.


There was a lot to learn! I had gone through the Out-Of-Tree-module tutorials of gnuradio before starting to code, but still it was quite different to really write my own block. A significant amount of time was spent on reading the documentation about VOLK and FFTW libraries and of course debugging very weird segmentation faults and unexpected results. Nevertheless, I got everything working quite nicely and I’m expecting to be able to code the next blocks a lot faster. The next step will be to expand the cross correlator block to also take Doppler-shift into account in order to calculate the velocity of a target.

I’m all set for the coding period!


My implementation of a passive radar can be divided in four sections: data from
two directional antennas, filter, correlator and plotting. The first antenna receives the reference signal directly from the transmitter (radio tower) and the second antenna is directed towards the possible targets.

On the first week I will be focusing on creating a simulation, which in this case means that the data from antennas is created by a simulator block.


flowgraph_simulator.pngThe simulator has to output a reference signal and an echo signal. Echo signal is a time-delayed, Doppler shifted and noisy copy of the reference signal, which is reflected from the distant target. The existing ‘channel model’ block will be a good starting point.


The biggest source of interference is the direct path signal from transmitter to both antennas. Most of this should be reduced by simply subtracting the reference signal from the echo signal. This can easily be done with the existing gnuradio blocks. Later on a better filter might be needed, but this is sufficient for the simulator.


flowgraph_correlator.pngThis is the most important and the most computationally demanding part. We need to find out the delay and Doppler shift between the reference and echo signals. If we know these, we can determine the range and speed of the target.

My initial approach will be to construct N amount of frequency shifted copies of the reference signal and for each I will calculate the cross correlation with the echo signal. The output will be a Doppler-range matrix, which has peak value(s) at the speed and range of the target(s). This matrix will be transferred onwards in a form of a tagged stream.

Integration time affects the amount of cross correlated samples and therefore has heavy impact on calculation time. On the other hand longer integration times reduce the effect of noise and allows more definitive detection. These calculations are done N times. N affects the resolution of velocity detection. My mentors suggested that one approach for reducing the amount of calculations would be to keep track of known target velocities and only calculate the Doppler shifts around the last known velocity. It is very likely that there are even more efficient solutions that I’m unaware of. After I complete coding this block, I can test how inefficient this solution actually is and how important it is to create a better one.



For plotting I will try to use the existing block in gr-radar, which is intended to give a nice plot of a Doppler-range matrix from a tagged stream. X-axis gives the range and y-axis gives the velocity of detected targets. This makes it easy to follow multiple targets at the same time.

As the passive radar is usually a bistatic radar, the range on the plot has to be scaled according to target azimuth and distance from radar to transmitter. This also means that if the targets are expected to be found from multiple azimuth angles, it gets quite difficult to show the correct ranges for each target. (Detecting multiple targets from a wider angle needs three or more antennas, which might be outside of the scope of this project.)

Feel free to post any comments! I’m only a beginner on this field and will gladly listen to any ideas and thoughts. If you have questions about passive radars, I can try to answer those aswell.


GSoC 2016 milestones



My name is Anton and this is my first blog post here.

As a part of Google Summer of Code 2016 I will be continuing Stefan’s work on gr-radar by adding support for passive radars. The timeline for GSoC is split in two parts: midterm evaluation is at the end of June and the final deadline is mid August.

In case you are unfamiliar with passive radars, here is a very brief explanation: unlike active radars, passive radars don’t have a transmitter and therefore rely completely on external signal sources. These sources include radio and television broadcasting or even GPS-signals.

The midterm milestones are:

  • Simulator for FM-based passive radar

Before I start testing with real hardware, I want to make sure my implementation works in simulated environment.

  • Laboratory testing for FM-based passive radar

I will be conducting tests in controlled environment with three USRPs. Instead of using a separate radio tower, the third USRP shall act as a signal source. This way the noise and interference won’t be that large of an issue.

  • Simulator for other signal types, such as WiFi and DVB-T
  • Laboratory test for WiFi and DVB-T

As passive radars can, in theory, utilize any signal sources, I want to make sure my implementation can work with other signal types. WiFi should be quite interesting as it could be used to detect humans inside a building. However the interference from numerous WiFi-routers might make this quite difficult and it probably needs a slightly different approach than FM and DVB-T.

The final goal of this project is being able to detect planes from the sky by utilizing FM-radio signals or DVB-T (television) signals. I will also look into using RTL-SDRs instead of USRPs, as almost anyone could afford to build a passive radar with RTL-SDRs.

I will be posting updates on my progress here atleast once a week. Until the coding period starts, I will be busy checking hardware availability and getting a deeper knowledge on GNU Radio.

GSoC Work Summary

I want to do a short summary on what have been done during GSoC. Slides and poster from GRCon and the previous posts should cover almost everything but it is nice to have one place where all the stuff is written down.

Implemented radar types with example flowgraph:
CW (tested on hardware and simulation)
FSK (tested on hardware and simulation)
Dual CW (tested on hardware and simulation)
FMCW (only simulation)
OFDM (only simulation)

Output methods:
Command line output with inbuild file sink
Time plot (plots time progression of target property)
Scatter plot (combines two target properties, e. g. range/velocity plots)
Spectrogram plot (plots 2D spectra, e. g. OFDM matrices)

Peak detection algorithms:
Max power detection (single peak detection)
OS-CFAR (multi peak detection)
OS-CFAR 2D (multi peak detection, e. g. for OFDM matrices)

Hardware interface and simulator:
Echotimer (UHD interface) for two or one USRP (multi USRP support is in work)
Sync setup for measuring hardware delay
Simulator with multi target capability and range, velocity, rcs and azimuth as target property

Processing blocks:
Crop matrix
Transpose matrix
OFDM cyclic prefix remover
OFDM matrix devision with zeropadding and discarding carriers
Split packages for FMCW and FSK
FFT for tagged streams
Message manipulator and gate for target property messages

Additional blocks:
Single target tracking
RCS estimation
Trigger for command line statements

Dual CW Radar Demonstration

The next radar system has been set up! This time it is a Dual CW Radar. The processing is related to the previous FSK Radar but has a much clearer spectrum due to the lack of splitting the signal. Therefore you get better detections than the FSK Radar. In particular the DC peak is present only at the zero frequency bin. This allows detections of smaller velocities.

Dual CW Radar Stats:
Center frequency:       2.4 GHz
Sample rate:                14.25 MHz
Detection time:          150 ms
Velocity resolution:   0.4 m/s
Range resolution:       0.3 m (approx.)
Unambiguous range:  12.5 m

The signal processing is shown at the GNU Radio Companion flowgraph below.

Dual CW Flowgraph

Check out the demonstration video with the hardware setup, additional information and screen capturing of GUI output!

Realtime tracking with particle filter algorithm

The toolbox has a working realtime tracking algorithm for range and velocity measurements in single target cases! The implemented algorithm is a Generic Sequential Importance Resampling (SIR) Particle Filter. This is part of a bachelor thesis at the KIT Communications Engineering Lab about the research on tracking algorithms for radar signal processing.

This block can be inserted after any estimator block with range and velocity measurement. Look at the GNU Radio Companion flowgraph below with GUI blocks before and after tracking.

Check out full video example of target trajectory and screen capturing of GUI output for more information.

tracking flowgraph