Decoding WWVB

I've been playing with decoding WWVB. I have a random wire antenna connected to my sound card's line in jack. The sound card is a Realtek ALC1150 built into the motherboard and can do 192ksamples/second. I've made a 100 seconds long recording of WWVB in SDR# in CW mode, with 60Khz translated to 600Hz.

Loading the recording in gnuradio's GRC, I have the following blocks setup:

WWVB gnuradio

The Taps setting is set to filter to 2Hz:

firdes.low_pass(gain, samp_rate, 2, 0.5)

The center frequency was chosen by a FFT covering ~10 seconds worth of data.

The resulting waterfall of all 100 seconds:

WWVB waterfall

Below shows the transitions between phase angles (the BPSK encoding) for 38 out of 91 seconds. I've excluded the seconds without phase changes, and I've moved the starting 100ms to have a median angle of 90 degrees or -90 degrees. Each line is one second worth of data, and each sample is 2ms (decoding at 500 samples per second). The starting point of the data was roughly aligned to the top of the second (+/-100ms) using the AM data. Eyeballing it, the transition between phases are seen at around 134ms +/- 30ms.


Here is the AM data during the same time with the same alignment. The minimum signal strength is at around 122ms into the second.


The AM signal goes low for either 200ms, 500ms, or 800ms and then goes high for the remainder of the second. You can see the three different symbols pretty clearly.