Advertisements

Search Results for: wwvb

Monthly Science: WWVB Reception Sample

Further results from the SDR-based WWVB receiver:

60 kHz Receiver - preamp HIT N3 Pi3 - attic layout

60 kHz Receiver – preamp HIT N3 Pi3 – attic layout

Seven hours of mid-January RF, tight-zoomed in both frequency and amplitude, from 0350 to 1050 local:

WWVB waterfall - N3 - 2017-01-24 1050 - composite

WWVB waterfall – N3 – 2017-01-24 1050 – composite

The yellow line of the WWVB carrier comes out 2 ppm high, which means the local oscillator chain is 2 ppm low. We know the WWVB transmitter frequency is exactly 60.000 kHz, translated up by 125 MHz to the N3’s tuning range; you can, ahem, set your clock by it.

The blue band marks the loop antenna + preamp passaband, which isn’t quite centered around 60.000 kHz. Tweaking the mica compression caps just a bit tighter should remedy that situation.

Given that input, a very very tight bandpass filter should isolate the WWVB carrier and then it’s all a matter of fine tuning…

Advertisements

,

Leave a comment

WWVB Receiver: First Light!

All the blocks for a WWVB receiver, lined up on the attic floor:

60 kHz Receiver - preamp HIT N3 Pi3 - attic layout

60 kHz Receiver – preamp HIT N3 Pi3 – attic layout

The dramatis personae:

The headless Pi connects to the house WLAN through its built-in WiFi link, so I can run the whole mess from the Comfy Chair at my desk through Remmina / VNC.

Recording 24 hours of WWVB shows it works:

WWVB - 24 hr reception AGC - 2017-01-16 to 17 - cropped

WWVB – 24 hr reception AGC – 2017-01-16 to 17 – cropped

The wavy line along the left edge looks like a birdie formed by a local oscillator in the attic, because the frequency varies (inversely) with temperature. It’s probably a signal on the Pi board, rectified by some junction, and translated in-band by some Ham-It-Up harmonic. Whatever.

The other traces come out bar-straight, suggesting that the 0.5 ppm (presumably, per °C) temperature-compensated oscillators along the whole RF chain behave as they should.

There’s a slight frequency shift, on the order of a few parts-per-million, between the absolutely accurate WWVB carrier and the indicated display. Not a big deal.

The broad, albeit irregular, orange band down the middle shows the loop antenna / preamp bandwidth, which is on the order of 2 kHz at -3 dB and a few kilohertz more down to the noise level.

The broad horizontal gashes seem to come from the N3’s on-board hardware AGC reacting to signals far outside the waterfall. Various birdies appear & disappear, even in this limited view, so you can just imagine what’s happening off-screen; anything popping up within the SDR’s tuning range clobbers the gain, which becomes painfully visible when zoomed this far in along both frequency and amplitude. Turning AGC off should stabilize things; perhaps software can tweak the SDR gain based on a very narrowband filter around 60.000 kHz.

The upper half of the waterfall shows decent reception for most of the night. The bottom half shows there’s basically nothing goin’ down during the day, which is about what I’d expect based watching the Alpha Geek Clock for seven years.

In any event, another 24 hours with the AGC turned off looks better:

WWVB 24 hr waterfall - Thumbnet N3 - 2017-01-19

WWVB 24 hr waterfall – Thumbnet N3 – 2017-01-19

Various sources still clobber the receiver response, but it’s not quite so dramatic.

 

,

3 Comments

WWVB Synch Reliability

I have the WWVB clock set to synch after receiving four consecutive valid time frames, which is pretty restrictive. The question is: can it still synch every night?

Here’s six days with the antenna sitting 3 cm above the receiver board, in front of our living room window, aimed more-or-less broadside to Colorado. We’re in the Eastern Time Zone, which is currently UTC-5, so our midnight corresponds to UTC 0500.

Set: 10 015 05:14:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 05:25:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 05:28:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 06:15:59.9 Loc= 1 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 07:05:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 11:30:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 13:41:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 13:44:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 15:22:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 015 15:29:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
Set: 10 016 07:49:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
Set: 10 016 09:46:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
Set: 10 016 14:06:59.9 Loc= 9 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
Set: 10 017 04:54:59.9 Loc=11 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 05:15:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 05:20:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 09:42:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 10:04:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 10:37:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 10:42:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 10:45:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 11:38:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 11:56:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 017 20:44:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
Set: 10 018 01:26:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 03:49:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 08:30:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 09:47:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 11:11:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 11:34:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 12:10:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 12:13:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 018 16:10:59.9 Loc=11 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
Set: 10 019 05:52:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 05:55:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 06:59:59.9 Loc= 1 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 07:48:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 08:06:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 08:12:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 09:08:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 09:33:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 10:08:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 10:32:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 12:34:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 019 13:49:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
Set: 10 020 05:22:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 05:37:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 07:41:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 09:47:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 10:15:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 10:26:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 020 10:46:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
Set: 10 021 07:44:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=21

As you’d expect, WWVB synch is an overnight thing, with occasional synchs during the morning hours.

Winter has the absolute best RF propagation, so demanding four good frames probably isn’t going to work during the summer…

Leave a comment

WWVB: 7 dB More Modulation!

I read a whole stack of NIST doc on the WWVB transmitter & time code format last year, figuring out how to build a WWVB simulator and then the Totally Featureless Clock. The Circuit Cellar article on the simulator just appeared in print and a reader gave me a heads-up: the transmitter power now drops 17 dB during the low-power part of the PWM pulse.

The relevant doc is there.

How could I miss it? Well, all the doc is quite old and the change happened in 2006…

Fairly obviously, the C-Max WWVB receiver I’m using doesn’t have the mojo to track the signal during the day, no matter how fancy the modulation. Those pulses, the low-power part of the signal, just aren’t present amid all the other noise!

Also of interest: the WWVB transmitter has been running at half-power during the daylight hours since September 2009 while they do antenna maintenance. That’s supposed to be finished right about now, so the signal should be 3 dB better. I’ve got a nearly continuous record of the last month or so, which means a comparison will be in order after a few weeks.

Search for WWVB to find the other posts I’ve done on this topic…

Leave a comment

WWVB Antenna: Oops!

Ferrite inductor cores are notoriously fragile: they do not withstand much abuse at all. Given the amount of fiddling I’ve been doing with the Totally Featureless Clock, it was inevitable that I’d manage to drop the antenna…

Broken ferrite bar antenna

Broken ferrite bar antenna

Gluing it back together with cyanoacrylate demonstrated that some things just never work the same. The antenna depends on a continuous flux path through the winding and even the minute gap introduced by the adhesive is enough to ruin the antenna.

What they say about hearts and wheels is also true of ferrite bar antennas:

“Once you bend it, you can’t mend it…”

Leave a comment

More WWVB 3D Glitchiness

The next day of WWVB Glitchiness, with the “!” limit characters changed to “|” to move them above the plot where they belong… which really doesn’t make that much difference.

Gnuplot Glitchiness 2

Gnuplot Glitchiness 2

It’s worth mentioning that the WWVB transmitter is running in degraded mode during the day, down 3 dB, while they work on the antenna system. It probably doesn’t make much difference, given the noise around here, but you can see a definite jump as the frame marker pulses pop up off the floor.

The clock synched with WWVB nine times during the Valley of the Shadow of Night. Each synch requires four consecutive glitch-free minutes, which obviously doesn’t happen during daylight hours.

That’s with the antenna perched 3 cm over the top of the clock, aligned with the circuit board: the hardware seems quiet enough.

Leave a comment

WWVB Glitchiness Histogram in 3D

The character based Glitchiness histograms described there work pretty well for short time scales, but more than a screen full is too much. It turns out that Gnuplot can chew up the histograms and spit out a perfectly serviceable 3D map plot.

The trick is to extract the histogram characters into a file, then persuade Gnuplot to regard the file as a binary array, with the ASCII character values giving the Z height of the dot for each XY cell.

Click for bigger picture:

Gnuplot Glitchiness

Gnuplot Glitchiness

The axes:

  • Front edge = 51 pulse durations, 0 – 1 second, 20 ms resolution
  • Right edge = 1363 histograms = 22.7 hours of WWVB reception
  • Z axis = histogram counts

The flat plane has the vast majority of points having zero (or just a few) counts.

The three front-to-back hillocks show the durations of the binary-zero, binary-one, and frame markers within each second; the resolution is 20 ms per sample perpendicular to those lines.

The fuzzy mountain peaks along the left edge represent intense noise; you’re looking for the very few intervals of zero noise when the WWVB signal is readable. Those would be flat lines from the left to right edges, with just three bumps at the proper durations.

The valley between the mountain peaks is the nighttime reception, when the noise drops to bearable intensity and RF propagation brings in enough WWVB signal to make a difference. The fact that you can see the proper pulse widths through much of the day suggests the signal is in there, but it’s so noisy you (well, I) can’t make make much use of it.

How to get the graph…

The clock produces three lines of output every minute that look like this:

UTC: 10 013 16:36:00.0 Loc=11 Age=367   LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=13
Glitchiness:  268 Histogram: W!ieTHG3A35412132.11...............................
Light: 02CA Min=0005 Max=038B

Extract just the lines with histograms:

grep Histo 2010-01-12\ LR\ Window\ 80\ cm\ V\ on\ shelf\ -\ shield\ box.log > 1.txt

Chop out the histogram data, which has a leading space:

cut -d ':' -f 3 1.txt > 2.txt

Discard the leading space and put the histogram text in the final file:

cut -d ' ' -f 2 2.txt > histo.txt

The last few lines of that file look like this:

Q!njLDG896D6341...1................................
BpgcSHD7B35531311.21..1..2....2....................
L!jPQECA856231.221.....1.1................1........
W!ieTHG3A35412132.11...............................

You could do that all in one gargantuan Bash line, piping the results from one filter to the next, but that’s hard to explain.

Now, fire up Gnuplot and have at it:

gnuplot
set xyplane at 0
set zrange [0:128]
splot 'histo.txt' binary format="%uint8" record=52x1363 using 1 with points lt 3 pt 0

The doc suggests record=52xInf should work, but that draws a useless picture. If the record value is bigger than the number of actual records (found with wc -l histo.txt, the plot ends at the end of file; if it’s smaller, then you get only that many records. I suppose you could just use 99999; it’d work well enough.

The 52 comes from the number of characters in the line: 51 histogram bytes per line, plus a newline character at the end. The newline produces the distinct line below everything else along the right edge of the plot. You could get rid of the newline characters and turn it into a binary file before plotting, but that’s sort of cheating, I think.

You’ll recall the counting sequence in each histogram character:

  • “.” = 0
  • 1 through 9 = obvious
  • A through Z = 10 – 35
  • a through z = 36 – 61
  • ! = more than 61

Unfortunately, the “!” has a lower ASCII value than the other characters, so those are the dots below the plane on the left side; they should be along the top surface. I’ll change that to “|” and make the answer come out right.

From here on, it’s a matter of the usual Gnuplot futzing to get a decent-looking plot.

Rotating the view may be useful. For example, set view 60,80 produces this:

Gnuplot Glitchiness - rotated

Gnuplot Glitchiness - rotated

Now you’re looking more-or-less parallel to the samples for each minute. If you twiddled with the ranges, you could probably see the few valleys where it’d be possible to extract a valid time code.

The alert reader will note that I used record=52×4344 to generate those plots. Homework: why?

4 Comments