Chirp filter / correlator

This document describes an experimental "chirp filter", implemented in each of Spectrum Lab's DSP Blackboxes.


  1. Introduction
  2. Parameters
  3. Implementation of the chirp filter / correlator
  4. Sample application: Chirped HF / VHF backscatter radar


The chirp filter actually compresses a chirped pulse back into a "short, sharp pulse" by means of correlation with a known reference.

There are at least two sample configurations for the chirp filter, contained in the installation archive:

Chirp Filter Parameters

To configure any of the four chirp filters available in Spectrum Lab, open the circuit window, and click on one of the DSP blackboxes (the small squares in the signal paths, usually labelled with a '?') :

Clicking on a blackbox in this diagram opens a popup menu, in which the blackbox (which includes the chirp filter) can be parametrized:


The following parameters can be individually configured for each chirp filter.

Note: Don't make the chirp time longer than necessary, because this may cause a large computational load. Consider this:

To correlate a 1-second reference signal at 48 kSamples/second, the length of the reference signal is 48000 samples. For reasons explained below, the correlator will need calculate a lot of 131072-point-FFTs every 1.73 seconds, which causes a decent CPU load (works ok with a 1.7 GHz CPU, though). It also causes an unavoidable delay of a few seconds between the filter's input and output, dictated by the principle (not by the CPU speed).

Implementation Details about the Chirp Filter / Correlator

To correlate the short 'known reference' with an endless, continuous signal uses a technique known as 'overlap-save' or 'overlap-scrap', which is frequently used to implement very long FIR filters (using the forward and inverse FFT). The principle is as follows:

  1. Upon initialisation, the known 'reference signal' is padded with zeroes for a power of two. Then, a forward FFT is calculated, and the result stored away in memory.
    For example, a reference signal which is 400 samples long will be padded with 624 zeroes, so 1024-point FFTs can be used in all other calculations.
  2. The continuously received signal is broken up into into overlapping segments. For the given example, a segment is processed after every 625 samples read from the input, but 1024 samples are processed for each FFT. This means, there is an overlap of 399 (!) samples between two consecutive segments.
  3. The segment (consisting of 625 'new', and 399 'overlapped' samples) is transformed into the frequency domain, using a 1024-point FFT.
  4. That FFT is multiplied with the conjungate complex FFT of the known reference (which has been calculated in step 1).
  5. The inverse FFT of the product from step 4 is calculated. 625 points from the IFFT are emitted as "output" from the filter, and 399 points are discarded ("scrapped") for reasons explained in textbooks about the 'overlap-scrap' aka 'overlap-save' method, which is commonly used for convolution of long FIR filter kernels (here: correlation, but the principle remains almost the same).

Sounds like overkill ? Consider this: If we were to correlate a one-second reference signal at 48000 samples/second directly (entirely in the time domain), 48000 points would have to be correlated for each input sample. Because the chirp reference signal is complex, this requires 2*48000 floating point multiplications per input sample(!), or 2*48000*48000 = 4608 million multiplications per second ! The FFT-based correlation is much more effective for 'long' reference signals, but it still has its limiations. On the author's 1.7 GHz Centrino Duo (notebook), a 1-second chirp at 96 kHz sample rate was impossible to process (continuously, in real time).

A sample application for the Chirp Filter : Chirped Bistatic HF / VHF Backscatter Radar

This configuration was added 2010-02 for experiments with a bistatic(*), chirped, backscatter radar for amateur radio use on HF or VHF. It is based on ideas presented by Andrew Martin (VK3OE) on the VK Logger forum .

To use this configuration, select Quick Settings .. Other Amateur Radio Modes .. Chirp Radar Receiver  from Spectrum Lab's main menu. If you have a software defined radio like SDR-IQ or Perseus, select that device for input (instead of the soundcard) after loading. The time domain scope was used as a 'graphic frontend' for the radar receiver.

Chirp filter output, displayed in the time domain

The chirp is 1 second long, endlessly repeated, and sweeps from 500 Hz (audio) to 2500 Hz. At the receiver site, it is de-chirped with one of the chirp filters (part of SL's DSP blackboxes). The curve above shows the chirp filter's output in the time domain (on the time domain scope). The chirp was compressed into a pulse which is less than a millisecond wide. More 'compression', resulting in a better spatial resolution could be achieved at higher sampling rates, and larger frequency sweep ranges (which is impossible with a normal "SSB" transceiver with 3 kHz bandwidth). The periodic chirp can be generated by a dedicated, or with SL's test signal generator. To turn the 'Transmitter' (chirp generator) on or off, click on the programmable button labelled 'Radar: Receiving' / 'Radar: Transmitting'. It toggles between receive and transmit. The TX-signal will be fed to the soundcard's output. You can use this for off-air-tests with the PC's speaker and microphone (acoustic radar).

As long as we don't know the precise timing of the transmitted pulses, the time domain scope's display buffer must be made large enough to capture one second of data (which is the chirp radar's repetition interval). Initially, after starting the chirp 'receiver', zoom out to see the entire 1-second interval on the scope's screen.

How to zoom out:
Repeatedly click on the scope's 'zoom out' button (on the left side of the scope window) until the scope screen show the complete 1-second interval.
If you need a longer interval, increase the size of the scope's display buffer.

Hopefully you will find the 'direct' pulse (which took the shortest path from transmitter to receiver, usually the line-of-sight). Depending on the location and conditions, this pulse will be the strongest of all, and also be the most narrow pulse (least dispersion). If you cannot spot the 'direct' signal, make a guess, or wait until a more sophisticated way to synchronize the transmitter and receiver has been developed ... something like GPS locking or similar.

After identifiying the pulse with the direct signal, zoom into the important range. To do this, drag a marker frame with the mouse around the 'interesting' area, with the leading pulse on the left edge of the marker.

A radio signal takes about 130 milliseconds to travel around the earth, so the marked range will hardly be wider. At least not for "terrestrial" radio signals..

When releasing the mouse button (after dragging the red marker frame), a popup menu opens in the scope's graphic window. Select the item 'Zoom in (into selection)'. The time domain graph will be redrawn, zooming in on the marked area. You can also fine-tune the horizontal and/or vertical scroll position as explained here .

If the soundcard's sampling rate has been properly calibrated, the position of the display should not 'wander around' while the receiver keeps running. If it does, try to calibrate the soundcard's sampling rate as explained here.

By default, the 'Chirp Radar' configuration uses a logarithmic dB scale, with 0 dB = "full scale". You can modify this (for example, use a linear scale) in the time domain scope settings. The chirp filter itself always produces a linear output (proportional to the input).

<ToDo: Complete this....>

(*) bistatic radar:
A radar with separated transmitter and receiver sites. Otherwise (without some very elaborate and super-fast RX/TX switching) the transmitter would block the receiver.

See also: Spectrum Lab's main index , time domain scopeprogrammable frequency markers , spectrum displays , main frequency scale .

back to top