Monday, February 18, 2019

WBHF (1)

Below are a 16QAM and 64QAM constellation diagrams picked up from a KiwiSDR in ECNA:

16QAM constellation

16QAM constellation diagram
64QAM constellation

All processing, i.e, symbol timing alignment and doppler offset correction, were done manually in GNU Octave.

Tuesday, February 12, 2019

KiwiSDR IQ data streams with >20.25 kHz bandwidth (3)

This is a follow-up to this recent blog post. In order to further verify the method of combining KiwiSDR IQ streams described before, an extreme example was considered: a STANAG 4285 signal centered on the border between two streams, see below.

Combination of three KiwiSDR IQ streams @8kHz into one @32kHz.

As before IQ wav files with GNSS timestamps were recorded using on three center frequencies: f0-8kHz, f0, f0+8kHz. While the results obtained before using CODAR and other FMCW radar signals were promising, the fist results obtained with unmodified code were not satisfactory: the frame structure of STANAG 4285 was clearly visible when looking at abs(IQ), but the obtained constellation diagram was not in a good shape and it looked like there was a time-varying phase offset between the three input streams.

Note that the sampling rate of IQ samples from KiwiSDRs is eventually derived from a Quartz oscillator which is subject to temperature drift, so the actual sampling rate in the example shown here is 12001.18217 Hz instead of 12000 Hz. While the local oscillator center frequencies are set taking into account the deviation of the local oscillator (using GNSS position+time solutions) and are exact, the sampling frequency is not. Therefore streams #2 and #0 had to be shifted in frequency by ±8000 Hz × (12001.18217/12000-1) = ± 0.7881 Hz (this is a phase shift of  ±284 degrees per second) in order to avoid "frequency overlap" and this solved the problem. Thanks to GNU Radio shifting streams of IQ samples in frequency takes only a few clicks in gnuradio-companion.

Below symbol phases vs. symbol number and the constellation diagram are shown for a time interval of 2.5 seconds while ionospheric propagation was stable. For this all processing was done using GNU Octave, manually correcting for doppler offset and symbol timing, i.e., no adaptive filter was used.

STANAG4285 symbol phase vs. symbol number.

IQ display for the STANAG 4285 signal integrated over 2.5 seconds.

While all this looks promising more tests are needed.

Tuesday, February 5, 2019

Chirp sounder measurements with KiwiSDRs (1)

The plots below show measurements of the chirp sounders from Cyprus (RAF Aktrotiri). There are two chirps (100kHz/sec) separated by 5 seconds and repeating each 5 minutes. In G3PLX notation they are called 300:240 and 300:245

Using GNSS timestamped IQ samples from the KiwiSDR @IU8CRI, tuned to 13,200 kHz, a pair of chirps was analyzed in terms of instantaneous frequency and of propagation time delays obtained from the FFT of the de-chirped signals.

Top: instantaneous frequency; bottom: propagation time delay obtained form the FFT of the de-chirped signal

In this earlier blog post a time offset of about δt=0.3±0.03 msec w.r.t. start time at the beginning of a given UTC second of the chirp signals from Cyprus was found in the chirp monitoring data from the U Twente WebSDR. This offset is also found in the KiwiSDR measurements, i.e., without applying this offset, the first peak in the propagation time delays would be below the equivalent time of propagation along the great-circle distance at the speed of light.

It would be very interesting to implement a more systematic monitoring of chirp sounders using KiwiSDRs.

Tuesday, January 29, 2019

KiwiSDR IQ data streams with >20.25 kHz bandwidth (2)

This is a follow-up on the last blog post. Since then a compensation for the roll-off of the CIC filters in the KiwiSDR FPGA has been implemented in v2.162.

The plot below shows the correction w.r.t. normalized frequency for the 12kHz (20.25kHz) modes in blue (magenta). It is interesting that the main component is in both cases sinc(f)-5 and that the softening of the correction near f=0.5 can be modeled by an exponential function.

KiwiSDR CIC filter compensation
Another improvement w.r.t. before is to use ±4kHz out of the ±6kHz IQ bandwidth in order to avoid alias images from frequencies below and from above, so the GNURadio flow graph looks now like this:
GNURadio flow graph
This flow graph and the code for the KiwiSDR IQ wav file sources and for the stream align block can be found on GitHub (gr-kiwisdr).

In order to verify that the combination of three IQ data streams@8kHz each to an IQ datastream @32kHz does indeed work, two signals were recorded and processed with the above flow graph:
  1.  OTHR signal from Cyprus

    Cyprus OTHR on 14370 kHz @IS0KYB
    As is well-known this signal has a bandwidth of 20kHz and uses a FMCW waveform repeating each 0.02 seconds. When plotting the instantaneous frequency vs. time the FMCW sweeps can be see to be perfectly continuous, i.e., both the alignment of the IQ data streams and the PFB synchronizer work as expected.
    Cyprus OTHR on 14370 kHz @IS0KYB


    The two plots below show a local CODAR signal recorded on a KiwiSDR in Newport, OR. Also in this case the frequency sweeps can be nicely seen. However it is not clear if the second component in the instantaneous frequency having negative slope is due to interference or due to aliasing in the KiwiSDR downconversion processing.

    Local CODAR signal on 4875 kHz @Newport, OR
    Local CODAR signal on 4875 kHz @Newport, OR

The IQ streams used above were recorded using with commands similar to the  following:
./ -s,, -p 8073 -f 14362,14370,14378 -m iq -g 55 -w -L -4000 -H +4000 --log-level=info --dt-sec=60 --station=IS0KYB

Tuesday, January 15, 2019

KiwiSDR IQ data streams with >20.25 kHz bandwidth

Recently I got to implement a way of recording data from KiwiSDRs at more than 12 kHz (or 20.25 kHz) by combining streams of IQ data using a polyphase filter bank (PFB) synthesizer. Luckily the two most complicated blocks, the PFB synthesizer and delay blocks, are already available in GNURadio.

What was missing was a block reading KiwiSDR IQ data with GNSS timestamps and a block determining the delays of between the different IQ sources. As all of these come from the same KiwiSDR running the same ADC clock, the offsets are multiples of samples.

For testing I started with a CODAR signal centered around 4820kHz using the AB1BD KiwiSDR. IQ wav files with GNSS timestamps were recorded on 4808, 4820, 4832 kHz, each with 12kHz bandwidth. In order to avoid wrapping around one of the inputs, a PFB synthesizer with 4 channels and 3 inputs was used:

GNURadio flowgraph

The screenshot below shows the three input signals samples with 12kHz and the reconstructed signal @48kHz:
  • Gain vs. frequency for the input signals is not flat. This is a known feature of the KiwiSDR FPGA code (missing CIC filter compensation filters). As a consequence there are dips in the combined spectrum
  • Nevertheless the CODAR sweeps can be seen to be continuous in the combined waterfall display

Top: waterfall diagrams for three IQ streams @12kHz; bottom: combined IQ stream @48kHz

Another test is to look at the instantaneous frequency in the combined IQ data stream @48kHz which looks fine:
Instantaneous frequency vs. time for the combined IQ data @48kHz

Obviously this has more applications than CODAR data analysis, as it opens up the possibility to analyze signals with up to 36kHz bandwidths. When a PFB synthesizer with 6 channels is used, up to 5 KiwiSDR IQ streams can be combined which enlarges the bandwidth to 60 kHz. Instead of using prerecorded wav files, the KiwiSDR GNURadio block can be used to combine streams of IQ samples in realtime.

The code for this will be made available as part of gr-kiwisdr after some cleanup.

Sunday, January 13, 2019

Radar 4980 kHz US East Coast (2)

Here is a small update on the HF radar signals which can be received on KiwiSDRs located in the US east-coast area
  • The center frequency seems to be close to 4900 kHz and the bandwidth is 50-60kHz
  • The signals are active every few minutes for about 40 seconds
  • Up to four trains of pulses can be seen. These pulses repeat every 0.01 sec but the autocorrelation function peaks at 0.02 sec indicating that the pulses are phase modulated
  • The phase of all pulses is flipped by 180 degrees in each 0.02 sec slot
  • Each pulse train consists of at least 5 pulses
  • The fast pulse repetition rate suggests this is a radar for fast-moving targets, as opposed to, e.g., CODAR

abs(IQ) in 0.02 sec frames

abs(IQ) in 0.02 sec frames (zoom)

pulse trains w.r.t. GPS time

pulse trains w.r.t. GPS time (zoom)

arg(IQ) zoom in 0.01 sec frames, ×2 resampling

abs(IQ) zoom in 0.01 sec frames, ×2 resampling

arg(IQ) for two consecutive 0.01 sec frames, ×2 resampling

Tuesday, January 8, 2019

Radar 4980 kHz US East Coast

While monitoring WBHF signals on 4950 kHz, a radar-like signal was spotted around 4980 kHz. Note that its bandwidth exceeds the maximum bandwidth of the used KiwiSDR (20250kHz), so the full characteristics of this signal cannot be determined. It was active every few minutes but I was not patient enough to determine its schedule. Within the limited bandwidth the following can be seen:

1) The auto-correlation has peaks at multiples of 405/20250Hz = 0.02 sec = 1/50Hz:


2) Plotting abs(IQ) in frames of 1/50Hz reveals a pair of pulses, each apparently consisting of three separate sub-pulses:

abs(IQ) in terms of 1/50Hz frames

3) TDoA analysis locates this is a real signal somewhere in upstate NY (and demonstrates that it is not local QRM):
KiwiSDR TDoA 4980 kHz
(This is an example of successfully using KiwiSDRs with different sampling rate in TDoA, cf.,

If anyone knows what kind of HF radar signal this is I would be grateful to know.