-------- In message <[email protected]>, John Ackermann N8UR writes:
>While everyone's been talking :-) , I recorded some WWVB IQ data for >folks to play with. You can download it from >http://febo.com/pages/wwvb/ > >The receiver ran at 48 ksps and was centered on 80 kHz (to allow a 20 >kHz IF to move away from 0 Hz crud). The data was taken in early >afternoon in Dayton, Ohio. WWVB was easily visible in an FFT. Here is a bit of python3 code to show how simple this is and to get people started: import struct from math import sin, cos, atan2, hypot PI = 3.14159265 # Sample rate SR = 48.00009351e3 # Target frequency = (80) -20kHz TF = -20e3 fi = open( "n8ur_rx_center=0.08MHz_rate=48ksps_start=2018.12.05.13.57.54.bin", "rb") fi.read(512) fo1 = open("out.txt", "w") n = 1 r = 0 o = 0.0 do = 2. * PI * (TF / SR) ali = 0.0 alq = 0.0 while True: a = fi.read(8) if not a: break i,q = struct.unpack("ff", a) ss = sin(o) cc = cos(o) o += do li = ss * i - cc * q lq = ss * q + cc * i ali += (li - ali) / n alq += (lq - alq) / n if n < 12000: n += 1 r += 1 if r % 480 == 0: fo1.write("%e %e %e\n" % (r / SR, hypot(ali, alq), atan2(ali,alq))) The output file ("out.txt") has three columns: time in seconds amplitude phase The "r % 480" gives an output line every 10 msec The "if n < 12000" is the averaging factor of an exponential average. A proper low-pass filter will give much sharper amplitude. Johns sample-rate appears to be almost 1000PPM fast and drifting, it it is trivial to adjust the "do" to keep either the ali or alq haunting zero. Enjoy... Poul-Henning -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 [email protected] | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. _______________________________________________ time-nuts mailing list -- [email protected] To unsubscribe, go to http://lists.febo.com/mailman/listinfo/time-nuts_lists.febo.com and follow the instructions there.
