Return to KLUBNL.PL main page

rsgb_lf_group
[Top] [All Lists]

LF: How to obtain EbNaut decodes from SpecLab txt files

To: [email protected]
Subject: LF: How to obtain EbNaut decodes from SpecLab txt files
From: Markus Vester <[email protected]>
Date: Sun, 1 Jan 2017 17:25:23 -0500
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mx.aol.com; s=20150623; t=1483309524; bh=MV8C06m23OWGwuW+oSpUAgWdyL0Uev+on0Ph4lLPdE8=; h=From:To:Subject:Message-Id:Date:MIME-Version:Content-Type; b=FBCsY2ZKxrHukJ9Bzcq9xMDtCik56kjff9YRRgpeOknx5+GlkMRheAU7T8GdZpFsv KrgEmMXuBDi0BSnOVqGFjPXykUPmmliKItx0cmTHJLZKAHdAh+425j6LJpF/+iZV18 AB/BsMhZZfjKwAswO39JlZrOf0/6IRKfzhj+qCP0=
In-reply-to: <[email protected]>
Reply-to: [email protected]
Sender: [email protected]
Hi Joe, LF,
this should be a step-by-step guide to obtain EbNaut decodes from your .txt files.

If you haven't done already, download the Windows decoder ebnaut-rx.exe (either 32 or 64 bit version) from Paul's website
 http://abelian.org/ebnaut/software_ms.shtml
and my auxiliary utilities from
 http://df6nm.bplaced.net/VLF/fec_tests/df6nm_ebnaut_utilities.zip .
Place the following files into a single directory:
 ebnaut-rx.exe
 ebnaut_ifft3a.exe
 show_rawsyms3b.exe
 sr.txt
together with your SpecLab data export file(s), e.g.
 12310712.txt
 12310612.txt

Next you should edit sr.txt, which will be used by ifft3a to write the correct metadata into the wav file header. It contains four numbers: the audio samplerate, the pre-FFT decimation factor from SpecLab'S FFT settings, the FFT length, and the RF center frequency. Replace the first entry (12000) by your calibrated samplerate. So the file content should now be "11999.7658 48 524288 137500" (without the quotes). Save this file.

Then in Windows Explorer, drag-and-drop 12310712.txt over ebnaut_ifft3a.exe to initiate the file conversion. A console window will blink up shortly and a file 12310712.wav will be written. There will also be a temporary fft.dat file which can be deleted.

Now it's time to start the decoder by double-clicking ebnaut-rx.exe. Fill in the symbol period (2), filename (12310712.wav), and CPUs (1 or 2) fields. We don't yet know the proper values for the start offset and freq offset fields so initially leave them at zero. Press "Run" at the bottom, and then abort the decoder already after a couple of seconds by pressing "Stop" again.

Now under "Signal file", you will find the meta information from the wav header, which is based on sr.txt and the timestamp in the SpecLab data file. Here the file start time is shown as 06:55:17.4 UT. With the knowledge that my transmission started 0.2 seconds after the hour, ie. 07:00:00.2 UT, you can calculate the time difference as 4 min 42.8 sec, or 282.8 s. Enter this value into the start offset field, and run and abort the decoder again.

The decoder has written a file rawsyms.txt, containing the complex amplitudes of the 896 two-second symbols. This can be inspected by doubleclicking on the show_rawsyms3b.exe utility. A window with four graphs will pop up: A symbol-phase and a vector constellation plot at the top, a red spectrum in the middle, and a blue spectrum-of-squares at the bottom. For information, ebnaut-utilities.zip contains an annotated screenshot explaining the meaning of the graphs.

We will now look for your pilot tone in the red spectrum. With 2 s symbols, this spectrum is 1/2 Hz wide, ie. from -0.25 to +0.25 Hz with 50 mHz per box. As the pilot is not far from the center frequency, we indeed find it's ~ 25 dB peak at about 1.8 boxes right of the middle, or +0.09 Hz.

But we need the frequency with better precision, so we will do a few run-stop-showrawsyms iterations to accurately bring it to the middle. The next round using 0.09 Hz as freq offset already brings the peak into the small red zoomed graph on the right. The phase points are gathered around a slightly upwards-sloping trendline. This means that the QRG is almost right but still slightly higher. In this example, the carrier is strong enough that it is also the highest peak in the blue plot, so the frequency readout at the bottom is valid: +0.00058 Hz/2 suggests that we should try 0.00029 Hz higher. Rounding to the nearest 0.1 mHz, we start the decoder again with 0.0903 Hz offset. This produces properly centered peaks and a horizontal trendline for the phase dots, so we hit it right. Let the decoder run a few seconds longer and observe the 13-asterisk "decode" from the pilot carrier.

Using our a-priori knowledge that your DDS pilot is 0.8 mHz below 137500, we know now that the real receiver center frequency was 137500 - 0.0008 - 0.0903 Hz or 0.0911 Hz below 137500 Hz.

Now let's have a go at the real signals! My transmission was exactly on 137490 Hz which should be -10 Hz offset. As your RX is already at -0.0911 Hz, we will enter only -9.9089 Hz freq offset. Run the decoder again - and watch Gizmo's message appear already after a couple of seconds. Show it to Tangles!

This signal is strong enough to show up in the rawsyms plot. Note that the phase dots are now assembled around two lines (0° and 180°), and due to the balance of PSK symbols the red carrier peak has completely vanished. The blue peak could still guide you to the right frequency, but this one will quickly be lost in the noise when the signal is weaker.

If you like you can tweak the offsets very slightly to improve the Eb/N0 result. In case of non-constant phase (e.g. due to propagation), you will sometimes have to let the decoder run through a number of phase combinations until it finally finishes at 25% status.

Now let's try to find Riccardo's 8-character message in your 12310612.txt file. In that file, the pilot is found at 0.0910 Hz and thus the RX center frequency was 0.0918 Hz low. Ric's TX frequency was 137485.0006 Hz, giving -14.9994 + 0.0918 = -14.9068 Hz freq offset. He was starting exactly on the hour without delay, so the time offset is 282.6 s. Let the decoder run through the phase iterations. Hmmm - no result for a long time, then a couple of gibberish answers with high rank numbers showing little significancy. And nothing but noise in the rawsyms plots. Give up?

We know that around sunrise, the ionosphere is pressed downwards, which shortens the path and creates a small positive Doppler shift. So let's try to increase the freq offset very slightly. 200 uHz up to -14.9070 Hz? Yes! The FBDECODE appears after a short while with phase pattern 0 0 30 30 degrees - apparently still with a slight phase slope. Another 200 uHz to -14.9072 Hz brings the message up instantly at flat phase, 180 180 180 180 degrees.

Well that was a long essay...

Want more exercise? I did send another 8-character 2-second message last night Jan 1st, hourly from 01 to 07 UT (plus 0.2 s TX latency). Can you decode it?

All the best,
Markus (DF6NM)


-----Ursprüngliche Mitteilung-----
Von: Markus Vester <[email protected]>
An: rsgb_lf_group <[email protected]>
Verschickt: Sa, 31 Dez 2016 11:36 pm
Betreff: LF: IW4DXW received by VO1NA

Joe, Riccardo,

here's your little New Year's present: Ric's 6 UT transmission could be decoded from Joe's 0612 file, with just enough SNR. Congratulations! This must be a new east-west distance record.

Gizmo's message to Tangles made it across the ocean three times. Thanks to Alex K. for reporting the decode from Moscow! I won't post a screenshots from Joe's files now, but rather provide more detailed explanations how to do it yourself. But that will have to wait till tomorrow, as we're already close to midnight. 

Happy New Year, and best wishes for 2017 to all in the group!

Markus (DF6NM)


EbNaut received by VO1NA on 2016 Dec 31
-------VO1NA------   ---------DF6NM----------   --------IW4DXW-----------
file   pilot   rx    foffs   start  sym  carr    foffs   start  sym  carr
hhmm    Hz     Hz     Hz       s     dB   dB       Hz      s     dB   dB
0312  .0968  .0976  -9.9024  282.8     nil
0412  .0935  .0943  -9.9057  282.8   7.1  8.6   -14.9051  282.6    nil
0512  .0917* .0925  -9.9075  282.8     nil      -14.9069  282.6    nil     *glitch?
0612  .0910  .0918  -9.9082  282.8   1.7  2.1   -14.9072* 282.6 -0.6 -0.3  *+0.4 mHz  
0712  .0904  .0912  -9.9088  282.8   8.2  8.9   -14.9082  282.6    nil
0812  .0899  .0907  -9.9093  282.8     nil

<Prev in Thread] Current Thread [Next in Thread>