[time-nuts] Receiving the MSF time signal on cheap radio modules

Poul-Henning Kamp phk at phk.freebsd.dk
Tue Feb 6 15:22:13 EST 2018

In message <CAHDZN8n=pKMnve=L-i539tiHo214Ev80Oe0gD_eXdhgmk+jy+g at mail.gmail.com>
, Ruslan Nabioullin writes:
>On Tue, Feb 6, 2018 at 2:37 PM, Poul-Henning Kamp <phk at phk.freebsd.dk> wrote:

>> If you look in http://phk.freebsd.dk/phkrel/NTPns.20080902.tgz
>> you will find a file called dcf77_blame.c with my code,

>How difficult would it be to complete these modules and integrate them
>with the rest of NTP, as NTP decoder modules?  So instead of an AM HF
>receiver, the setup for these signals would be:

Well, NTPns *is* a NTP server program, but a very special one.

If you really want to receive VLF for NTP purposes, you should hook
a 1M sample/sec ADC to your antenna and implement _all_ the
demodulation in software.

(The BeagleBoneBlack with its two PRU units would be close to
a perfect platform for this)

The more stable your sample frequency your ADC has, the easier
the software will be to write.

You can carrier-track DCF77, 162kHz France, MSF and Loran-C in one
go, by simply averaging the raw antennasignal in a long enough
circular buffer, then multiply by a suitable SIN/COS complex signal.

For signals on kHz spacing (50, 162, 198 any other you care for)
you can make a single one millisecond (ie: 1000 samples) circular
buffer, and extract all the phases from that buffer, by multiplying
by suitable SIN/COS and averaging the result to DC.

For 77.5 kHz you will need a 2 millisecond buffer.

If you want to recover the phase modulation on 162 kHz you can
use the phase from the first buffer as your reference.

(See: http://phk.freebsd.dk/loran-c/SW)

If you want to recover the PRNG phase on DCF77 you will need to
do the full early/prompt/late correlation, but that is also
pretty cheap as you can pre-generate the sequence to compare with
at compile time.

Alternatively make a full-second buffer and average into that with
polarity suitably swapped based on AM pulse width, and do the
early/prompt/later about once a minute or so in high-level software.

Loran-C is the same basic story, I did that on a 32bit ARM
some years ago.

(See: http://phk.freebsd.dk/AducLoran/)

So much code to write and so little time...

Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.

More information about the time-nuts mailing list