[time-nuts] Receiving the MSF time signal on cheap radio modules
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.
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.
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