Attached are some more renderings of John Seamons' WWVB data. This is what one might expect from a receiver that knows when the phase reversals happen and takes them out noiselessly---re-reversing the out-of-phase bursts to recover an approximation of the usual WWVB signal.
The first plot shows the entire interval of the recording, about 210 seconds. The Y axis is phase in radians. Whenever the phase was greater than 90 degrees or less than -90 degrees, that sample was assumed to be part of a phase-reversed segment, and 180 degrees was added to bring it into alignment. The spikes are the phase reversals. The phase-modulation test ends at around 138 seconds, and there is an interval of no signal, during which the phase is random. Finally the old WWVB picks up at around 158 seconds. The interesting thing here is the phase jitter during the test, which seems significantly worse than the normal WWVB signal. The short spikes can be ignored---it's the performance during the bulk of any given one-second interval that's important. The phase is jumping around on a second-by-second basis by 0.1 radians or so (about 0.3 microseconds). The normal WWVB signal, by contrast, is nice and smooth. The second plot shows a closeup. Around the 85-second mark, for example, the phase is clearly jumping around. Also attached is the Octave code that produced the plots (Octave is a free-software system similar to Matlab). Cheers, Peter
<<attachment: wwvb-phase1.png>>
<<attachment: wwvb-phase2.png>>
y = wavread('wwvb.post.process.8k.16b.wav'); # read in the WAV file x = y(:,1); # extract the first channel (containing the raw samples) n = length(x); # total number of samples t = 0:(n-1)'; # time vector fs = 8000; # sample rate phase0 = 0.1; # carrier parameters freq0 = 0.23121151; drift0 = 2.0e-13; p = phase0 + t.*(freq0+t*drift0); # vector of carrier phases c = exp(2*pi*i*p)'; # synthesize the carrier z = c.*x; # multiply by carrier to downconvert to complex baseband zf = filter(ones(1,15),[1],z); # simple boxcar lowpass filter zf = zf/1.67; # rescale so the peak is near 1.0 #plot(real(zf(277000:365000))); # plot a segment of the waveform #grid on; #plot(zf(1:1e6)); # plot a constellation diagram of the PM part of the test q = arg(zf); # extract the phase q(q>pi/2) -= pi; # remove 180-degree phase reversals q(q<-pi/2) += pi; plot(t/fs,q); # plot the result
_______________________________________________ time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts and follow the instructions there.