[time-nuts] New WWVB modulation format receivers

Clint Turner turner at ussc.com
Thu Feb 20 20:42:13 EST 2014

Several years ago I spotted a clever PIC-based software (DSP-ish) 
approach to WWVB modulation - but it has thusfar defied my attempts to 
find it via Google.  It was from the late 90's, early 2000's - and I may 
have it in an archive somewhere.

The exact details escape me, but I believe that it sampled at 8 kHz and 
was fed a crystal-filtered WWVB signal at 60 kHz, putting this 
bandwidth-limited, AGC-leveled signal directly into the PIC's A/D.

If I've done my math correctly, that would yield a frequency-inverted 
alias at 4 kHz.  The A/D was then mixed and/or decimated significantly 
and a simple software-based carrier recovery scheme (a Costas loop, 
maybe?) was implemented in this rather low-end PIC.  Because the TRF 
bandwidth was on the order of just a few Hertz, it took a fairly trivial 
amount of horsepower to implement.

Presumably, at just one baud it should be practical to do this on more 
modern PICs and AVRs using the same scheme.  The trick to homebrewing 
this is to find a 60.003 kHz crystal - but one of these could be swiped 
from a WWVB receiver module, or, perhaps, a source-follower could be 
used to recover the phase component of the received carrier, tapping off 
the signal from the BPF itself and making it available to the processor.

* * *

Another scheme - one that I believe was poo-poohed a while back on this 
list - is to simply take a bandpass filtered sample of around 60 kHz and 
throw it into a four-quadrant multiplier to yield a 120 kHz signal sans 
phase shift.  I believe that the initial critique of this was that this 
was not a particularly good way to recover a weak signal, but I found it 
to be quite useful on a project some (15) years ago.

On this project, I had a 100 kHz pilot carrier modulated with NRZ BPSK 
telemetry data and this same carrier was used to convey the reference 
frequency to multiple, simulcast transmitters via a 33cm microwave 
link.  At 100 kHz, I simply had an L/C bandpass filter that was roughly 
3-5 kHz wide on the transmit (to control the occupied bandwidth when 
XOR-gate modulated) and a similar filter on the receive end.  
"Listening" to this 100 kHz center frequency, 3-5 kHz bandwidth was a 
1496 configured as a multiplier, the output of which was passed through 
a simple filter constructed using 200 kHz crystals. The 200 kHz from the 
doubler output was then divided-by-two and used to synchronously 
demodulate the BPSK data (after being filtered with either a Bessel or 
Gaussian LPF) and this same recovered 100 kHz signal was then made 
available to the master 10 MHz frequency reference for locking.

What impressed me was the fact that my input signal S/N could go about 
40 dB below the detection bandwidth of the BPSK signal and still 
maintain perfect lock on the 100 kHz carrier, despite the fact that the 
1496 - which really doesn't make all that great of a doubler compared 
with other available (but more expensive!) devices was being pelted with 
3-5 kHz of garbage when the S/N was purposely compromised.  IIRC, the 
detection bandwidth of the crystal-based carrier recover filter was on 
the order of a few 10ths of Hz.  Yes, the phase did vary with 
temperature, but the rate-of-change was fairly slow and this fact was 
inconsequential in our application.

* * *

The upshot of this is that it should be quite easy to do a simple 
doubler-based carrier recovery system at 120 kHz (or something else, if 
it's frequency-converted) and, since it may be a bit tricky to find a 
cheap 120.006 kHz crystal, use an SCF clocked from a VCXO (or a simple 
fractional divider/DDS implemented in software) to provide a very narrow 
detection bandwidth that would satisfy the dynamics associated with the 
usable signal range over which the WWVB carrier could be reconstructed 
and the phase data could likely be recovered.  The AM output of a 
standard WWVB clock module could then be used to aid in the windowing of 
a synchronous demodulator integrate-and-dump filter to recover the phase 
information and make these two pieces available to something like a PIC 
or an AVR/Arduino for crunching.

In the (likely!) event of a signal that was too weak to recover the 
amplitude information from the broader-bandwidth WWVB receiver module it 
should be practical to oversample (say, by 8x) the output of the 
synchronous demodulator and then infer the timing of the phase change 
over a period of time since the minimum period of this is well known (1 
second!) and such timing could be (initially) autonomously applied with 
very good stability until the timing of the phase change resolved itself 
- something that could be correlated with a statistical analysis of the 
output of the amplitude detector, as well.

To a large degree, this sounds like a candidate for a "front end" 
consisting of good old 4000 CMOS logic and a few op amps with the output 
handed off to a fairly low-end, cheap processor module!



More information about the time-nuts mailing list