In the comments to my DCF77 library Karol Babioch asks for a DCF77 module that comes with my code included. Unfortunately I see absolutely no way to put something like this together and sell it at any reasonable price.
But if you definitely need one you may build it on your own. The Super Filter experiment devliers exactly the necessary code to implement this.
With regard to the library I am planning to push its noise resilence at least two notches further. One notch for even better SNR and another one to deal with signal fading. Ian Castleton provided me with some logs that show how poor the signal is in London. The insights are very interesting. It took about 30 minutes to sync for the first time at 23:30:43 CEST. Then it takes till 23:45:55 to alter between synced and locked. So in total it takes almost 45 minutes to settle to synced. Obviously there is a lot of noise in the signal. Then it stays synced till 14-08-12 2 06:50:00 when it unlocks. It then toggles between lockend and unlocked and arives at 06:50:10 in the state “free”. At 07:19:37 it resyncs. See the details of the log at the end of the article. The point here is that although the signal is very noisy the library easily decodes it. Howevr there is a period of almost an hour where it picks up no reasonable signal at all. Obviously no issue for the clock as it can continue to run on the local crystal. However it is an issue for the frequency auto tune since it requires very lengthy periods where the clock is synced.
This gives me something to ponder about. I am already scratching my head on how to fix this issue. Actually it should be not hard to implement. The real issue is testing this stuff as by now some of the involved time constants are longer than a day.
The log also shows some interesting thing that I did not really think about. As soon as the clock unlocks the convolution bins are of marginal quality at best. It follows that a transition to free is almost unavoidable. Originally I hoped that it might be able to stay in unlocked mode for quite a while. So the original goal at fast recovery of at least the locked state is almost never reached. On the other hand the code is fully tested and performs quite well. One more thing I have to think about. Maybe I should change the conditions for the unlocked -> free and the unlocked -> locked transitions.
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (2-0:0)(6-0:2)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)0,0,0,255
Clock state: useless
Tick: 347
…
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5802-4:255)(69-13:9)(105-83:3)(96-76:3)(34-26:1)(68-62:0)(56-49:1)(50-43:1)26,5,13,255
Clock state: useless
Tick: 28462
Decoded time: 14-08-11 1 23:30:43 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (5804-12:255)(69-13:9)(105-83:3)(96-76:3)(34-26:1)(73-66:1)(56-49:1)(50-43:1)26,5,13,255
Clock state: synced
Tick: 13
…
Decoded time: 14-08-11 1 23:31:42 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (5889-12:255)(61-18:8)(112-88:3)(103-81:3)(37-28:1)(73-66:1)(60-52:1)(53-46:1)28,4,14,255
Clock state: synced
Tick: 13
Decoded time: 14-08-11 1 23:31:43 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5893-30:255)(61-18:8)(112-88:3)(103-81:3)(37-28:1)(77-71:0)(60-52:1)(53-46:1)28,4,14,255
Clock state: locked
Tick: 13
…
Decoded time: 14-08-11 1 23:31:44 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5873-12:255)(61-18:8)(112-88:3)(103-81:3)(37-28:1)(77-71:0)(60-52:1)(53-46:1)28,4,14,255
Clock state: locked
Tick: 13
…
Decoded time: 14-08-11 1 23:34:42 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5914-6:255)(131-69:8)(133-105:3)(123-95:4)(46-34:2)(85-79:0)(74-63:1)(60-55:1)30,3,15,25
Clock state: locked
Tick: 13
Decoded time: 14-08-11 1 23:34:43 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (5918-22:255)(131-69:8)(133-105:3)(123-95:4)(46-34:2)(91-84:1)(74-63:1)(60-55:1)30,3,15,25
Clock state: synced
Tick: 13
…
Decoded time: 14-08-11 1 23:36:54 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (5839-0:255)(184-115:9)(147-115:4)(136-106:4)(54-41:2)(103-94:1)(89-75:2)(66-61:1)32,1,17,22
Clock state: synced
Tick: 13
Decoded time: 14-08-11 1 23:36:55 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5841-14:255)(184-115:9)(147-115:4)(136-106:4)(54-41:2)(103-94:1)(89-75:2)(68-62:0)32,1,17,22
Clock state: locked
Tick: 13
…
Decoded time: 14-08-11 1 23:45:54 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (5748-0:255)(171-22:20)(207-161:6)(194-152:5)(77-57:3)(149-135:1)(120-101:3)(90-88:0)44,4,26,20
Clock state: locked
Tick: 13
Decoded time: 14-08-11 1 23:45:55 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (5770-6:255)(171-22:20)(207-161:6)(194-152:5)(77-57:3)(149-135:1)(120-101:3)(94-88:1)44,4,26,20
Clock state: synced
Tick: 14
…
Decoded time: 14-08-12 2 06:49:59 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (16-0:2)(180-25:21)(248-12:33)(249-19:32)(252-2:35)(252-13:33)(252-6:34)(252-11:33)64,50,50,8
Clock state: synced
Tick: 14
Decoded time: 14-08-12 2 06:50:00 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (14-0:1)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,8
Clock state: unlocked
Tick: 13
…
Decoded time: 14-08-12 2 06:50:04 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (23-0:2)(6-6:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: unlocked
Tick: 10
Decoded time: 14-08-12 2 06:50:05 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (51-0:6)(6-6:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: locked
Tick: 11
Decoded time: 14-08-12 2 06:50:06 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (23-0:2)(6-6:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: locked
Tick: 12
Decoded time: 14-08-12 2 06:50:07 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (4-0:1)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: unlocked
Tick: 10
Decoded time: 14-08-12 2 06:50:08 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (21-0:2)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: locked
Tick: 12
Decoded time: 14-08-12 2 06:50:09 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: unlocked
Tick: 10
Decoded time: 14-08-12 2 06:50:10 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 0 (0-0:0)(6-0:2)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)(0-0:0)64,50,50,10
Clock state: free
Tick: 10
…
Decoded time: 14-08-12 2 07:19:37 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 1 (4086-0:255)(157-0:22)(108-84:3)(79-67:1)(38-25:2)(77-66:1)(64-51:2)(50-43:1)90,64,64,39
Clock state: free
Tick: 11
Decoded time: 14-08-12 2 07:19:37 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 2 (4079-0:254)(157-0:22)(108-84:3)(86-72:2)(38-25:2)(77-66:1)(64-51:2)(50-43:1)90,64,64,39
Clock state: synced
Tick: 13
…
Decoded time: 14-08-12 2 09:07:31 CEST ..
Quality (p,s,m,h,wd,d,m,y,st,tz,ls,pm): 14 (4612-0:255)(183-0:25)(252-58:27)(254-40:30)(254-135:16)(253-154:13)(255-134:17)(252-156:13)16,8,8,43
Clock state: synced
Tick: 14
[\code]