DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื”ืขืœื ื”ืื‘ืจ.

ืžื™ืกื˜ืึธืžืข ืคื™ืœืข ื•ื•ืืก ืงื•ื™ืคืŸ ืึท ื•ื•ืึทืš ืึธื“ืขืจ ื•ื•ืขื˜ืขืจ ืกื˜ืึทื ืฆื™ืข ื”ืึธื‘ืŸ ื’ืขื–ืขืŸ ื“ื™ ืจืึทื“ื™ืึธ ืงืึทื ื˜ืจืึธื•ืœื“ ื–ื™ื™ื’ืขืจ ืึธื“ืขืจ ืืคื™ืœื• ืึทื˜ืึธืžื™ืฉืข ื–ื™ื™ื’ืขืจ ืœืึธื’ืึธ ืื•ื™ืฃ ื“ื™ ืคึผืึทืงืงืึทื’ื™ื ื’. ื“ืึธืก ืื™ื– ื–ื™ื™ืขืจ ื‘ืึทืงื•ื•ืขื, ื•ื•ื™ื™ึทืœ ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื–ื™ื™ื’ืขืจ ืื•ื™ืฃ ื“ื™ ื˜ื™ืฉ, ืื•ืŸ ื ืึธืš ืึท ื‘ืฉืขืช ืขืก ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืกื˜ืจื•ื™ืขืจืŸ ืฆื• ื“ื™ ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜.
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื–ืืœ ืก ืคื™ื’ื•ืจ ืื•ื™ืก ื•ื•ื™ ืขืก ืึทืจื‘ืขื˜ ืื•ืŸ ืฉืจื™ื™ึทื‘ืŸ ืึท ื“ื™ืงืึธื•ื“ืขืจ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ.

ืขืก ื–ืขื ืขืŸ ืคืึทืจืฉื™ื“ืขื ืข ืฆื™ื™ื˜ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืกื™ืกื˜ืขืžืขืŸ. ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ืื™ืŸ ืื™ื™ืจืึธืคึผืข ืื™ื– ื“ื™ ื“ื™ื™ึทื˜ืฉ ืกื™ืกื˜ืขื DCF-77, ื™ืึทืคึผืึทืŸ ื”ืื˜ ื–ื™ื™ึทืŸ ืื™ื™ื’ืŸ ืกื™ืกื˜ืขื JJY, ืื™ืŸ ื“ื™ USA ืขืก ืื™ื– ืึท ืกื™ืกื˜ืขื ื•ื•ื•ื•ื•ื•ื‘, ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ. ื•ื•ื™ื™ึทื˜ืขืจ, ื“ื™ ื’ืขืฉื™ื›ื˜ืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ืขื’ืŸ DCF77, ื•ื•ื™ ื“ื™ ืžืขืจืกื˜ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืื•ืŸ ืฆื•ื˜ืจื™ื˜ืœืขืš ืคึฟืึทืจ ืึธืคึผื˜ืจืึธื’ ืื™ืŸ ืขื˜ืœืขื›ืข ืขืจื˜ืขืจ ืื™ืŸ ื“ื™ ืื™ื™ืจืืคืขื™ืฉืข ื˜ื™ื™ืœ ืคื•ืŸ ืจื•ืกืœืึทื ื“ ืื•ืŸ ืืจื•ืžื™ืงืข ืœืขื ื“ืขืจ (ืจืขื–ื™ื“ืึทื ืฅ ืคื•ืŸ ื“ื™ ืคืึทืจ ืžื–ืจื— ืงืขืŸ ื”ืึธื‘ืŸ ื“ื™ ืคืึทืจืงืขืจื˜ ืžื™ื™ื ื•ื ื’, ืึธื‘ืขืจ, ื–ื™ื™, ืื™ืŸ ืงืขืจ, ืงืขื ืขืŸ ื‘ืึทืงื•ืžืขืŸ ืื•ืŸ ืคื•ื ืึทื ื“ืขืจืงืœื™ื™ึทื‘ืŸ ื“ื™ ื™ืึทืคึผืึทื ื™ืฉ ืกื™ื’ื ืึทืœ;).

ืึทืœืฅ ื’ืขืฉืจื™ื‘ืŸ ืื•ื ื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ืขื’ืŸ ื“ื™ DCF77.

ืกื™ื’ื ืึทืœ ืึธืคึผื˜ืจืึธื’

DCF77 ืื™ื– ืึท ืœืึทื ื’ ื›ื•ื•ืึทืœื™ืข ืกื˜ืึทื ืฆื™ืข ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ืžื™ื˜ ืึท ืึธืคื˜ืงื™ื™ึทื˜ ืคื•ืŸ 77.5 ื›ื– ืื•ืŸ ื˜ืจืึทื ืกืžื™ื˜ื™ื ื’ ืกื™ื’ื ืึทืœื– ืื™ืŸ ืึทืžืคึผืœื™ื˜ื•ื“ ืžืึทื“ื–ืฉืึทืœื™ื™ืฉืึทืŸ. ื“ื™ 50KW ืกื˜ืื ืฆื™ืข ื’ืขืคื™ื ื˜ ื–ื™ืš 25 ืงื™ืœืืžืขื˜ืขืจ ืคื•ืŸ ืคืจืื ืงืคื•ืจื˜, ื–ื™ ื”ืื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ ืืคืขืจื™ืจืŸ ืื™ืŸ 1959, ืื•ืŸ ืื™ืŸ 1973 ืื™ื– ื“ืื˜ื•ื ืื™ื ืคืืจืžืืฆื™ืข ืฆื•ื’ืขืœื™ื™ื’ื˜ ื’ืขื•ื•ืืจืŸ ืฆื• ื“ื™ ื’ืขื ื•ื™ ืฆื™ื™ื˜. ื“ื™ ื•ื•ื™ื™ื•ื•ืœืขื ื’ื˜ ื‘ื™ื™ ืึท ืึธืคื˜ืงื™ื™ึทื˜ ืคื•ืŸ 77 KHz ืื™ื– ื–ื™ื™ืขืจ ืœืึทื ื’, ืึทื–ื•ื™ ื“ื™ ื“ื™ืžืขื ืฉืึทื ื– ืคื•ืŸ ื“ื™ ืึทื ื˜ืขื ืข ืคืขืœื“ ื–ืขื ืขืŸ ืื•ื™ืš ื’ืึทื ืฅ ืœื™ื™ึทื˜ื™ืฉ (ืคืึธื˜ืึธ ืคึฟื•ืŸ ื•ื•ื™ืงื™ืคึผืขื“ื™ืข):
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืžื™ื˜ ืึทื–ืึท ืึทืŸ ืึทื ื˜ืขื ืข ืื•ืŸ ืžืึทื›ื˜ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘, ื“ืขืจ ืึธืคึผื˜ืจืึธื’ ื’ืขื’ื ื˜ ืงืึธื•ื•ืขืจืก ื›ึผืžืขื˜ ืึทืœืข ืคื•ืŸ โ€‹โ€‹ืื™ื™ืจืึธืคึผืข, ื‘ืขืœืึทืจื•ืก, ืื•ืงืจื™ื™ื ื ืื•ืŸ ื˜ื™ื™ืœ ืคื•ืŸ ืจื•ืกืœืึทื ื“.

DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื•ื•ืขืจ ืขืก ื™ื– ืงืขื ืขืŸ ืจืขืงืึธืจื“ื™ืจืŸ ืึท ืกื™ื’ื ืึทืœ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื ืึธืจ ื’ื™ื™ืŸ ืฆื• ื“ื™ ืึธื ืœื™ื™ืŸ ื•ืคื ืขืžืขืจ http://websdr.ewi.utwente.nl:8901/, ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื“ื™ ืึธืคื˜ืงื™ื™ึทื˜ 76.5KHz ืื•ืŸ ื•ืกื‘ ืžืึทื“ื–ืฉืึทืœื™ื™ืฉืึทืŸ ื“ืึธืจื˜. ื ื‘ื™ืœื“ ื–ืึธืœ ืขืคืขื ืขืŸ ื•ื•ืึธืก ืงื•ืงื˜ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื“ืึธ ืžื™ืจ ื“ืจื™ืงืŸ ื“ื™ ืืจืืคืงืืคื™ืข ืงื ืขืคึผืœ ืื•ืŸ ืจืขืงืึธืจื“ื™ืจืŸ ืึท ืคืจืึทื’ืžืขื ื˜ ืขื˜ืœืขื›ืข ืžื™ื ื•ื˜ ืœืึทื ื’. ื“ืึธืš, ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืึท "ืคืึทืงื˜ื™ืฉ" ื•ืคื ืขืžืขืจ ื•ื•ืึธืก ืื™ื– ื‘ื™ื›ื•ืœืช ืฆื• ืจืขืงืึธืจื“ื™ืจืŸ ื“ื™ 77.5KHz ืึธืคื˜ืงื™ื™ึทื˜, ืื™ืจ ืงืขื ื˜ ื ื•ืฆืŸ ื“ืึธืก.

ืคื•ืŸ ืงื•ืจืก, ื“ื•ืจืš ืจื™ืกื™ื•ื•ื™ื ื’ ืจืึทื“ื™ืึธ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœื– ื“ื•ืจืš ื“ื™ ืื™ื ื˜ืขืจื ืขื˜, ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ื‘ืืžืช ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜ - ื“ืขืจ ืกื™ื’ื ืึทืœ ืื™ื– ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ืžื™ื˜ ืึท ืคืึทืจื”ืึทืœื˜ืŸ. ืึธื‘ืขืจ ืื•ื ื“ื–ืขืจ ืฆื™ืœ ืื™ื– ื‘ืœื•ื™ื– ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ื“ื™ ืกื™ื’ื ืึทืœ; ืคึฟืึทืจ ื“ืขื, ื“ื™ ืื™ื ื˜ืขืจื ืขื˜ ืจืขืงืึธืจื“ื™ื ื’ ืื™ื– ืžืขืจ ื•ื•ื™ ื’ืขื ื•ื’. ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืœืขื‘ืŸ, ืคื•ืŸ ืงื•ืจืก, ืกืคึผืขืฉืึทืœื™ื™ื–ื“ ื“ืขื•ื•ื™ืกืขืก ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ืจื™ืกื™ื•ื•ื™ื ื’ ืื•ืŸ ื“ื™ืงืึธื•ื“ื™ื ื’; ื–ื™ื™ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื“ื™ืกืงืึทืกื˜ ืื•ื ื˜ืŸ.

ืึทื–ื•ื™, ืžื™ืจ ื”ืึธื‘ืŸ ื‘ืืงื•ืžืขืŸ ื“ื™ ืจืขืงืึธืจื“ื™ื ื’, ืœืึธื–ืŸ ืื•ื ื“ื– ืึธื ื”ื™ื™ื‘ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืขืก.

ืกื™ื’ื ืึทืœ ื“ื™ืงืึธื•ื“ื™ื ื’

ืœืึธืžื™ืจ ืœืึธื“ืŸ ื“ื™ ื˜ืขืงืข ืžื™ื˜ Python ืื•ืŸ ื–ืขืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ:

from scipy.io import wavfile
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np

sample_rate, data = wavfile.read("dcf_websdr_2019-03-26T20_25_34Z_76.6kHz.wav")
plt.plot(data[:100000])
plt.show()

ืžื™ืจ ื–ืขืŸ ื˜ื™ืคึผื™ืฉ ืึทืžืคึผืœื™ื˜ื•ื“ ืžืึทื“ื–ืฉืึทืœื™ื™ืฉืึทืŸ:
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืฆื• ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ื“ื™ืงืึธื•ื“ื™ื ื’, ืœืึธื–ืŸ ืื•ื ื“ื– ื ืขืžืขืŸ ื“ื™ ืกื™ื’ื ืึทืœ ืงืึธื ื•ื•ืขืจื˜ ืžื™ื˜ ื“ื™ Hilbert ื™ื‘ืขืจืžืึทื›ืŸ:

analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])

ืคืืจื’ืจืขืกืขืจื˜ืข ืจืขื–ื•ืœื˜ืื˜:
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืœืึธืžื™ืจ ื•ื™ืกืžื™ื™ื“ืŸ ืจืึทืฉ ื™ืžื™ืฉืึทื ื– ืžื™ื˜ ืึท ื ื™ื“ืขืจื™ืง-ืคืึธืจืŸ ืคื™ืœื˜ืขืจ, ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ืจืขื›ืขื ืขืŸ ื“ื™ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ื•ื•ืขืจื˜, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืฉืคึผืขื˜ืขืจ ืคึฟืึทืจ ืคึผืึทืจืกื™ื ื’.

b, a = signal.butter(2, 20.0/sample_rate)
zi = signal.lfilter_zi(b, a)
A, _ = signal.lfilter(b, a, A, zi=zi*A[0])
avg = (np.amax(A) + np.amin(A))/2

ืจืขื–ื•ืœื˜ืึทื˜ (ื’ืขืœ ืฉื•ืจื”): ืึท ื›ึผืžืขื˜ ืงื•ื•ืึทื“ืจืึทื˜ ื›ื•ื•ืึทืœื™ืข ืกื™ื’ื ืึทืœ ื•ื•ืึธืก ืื™ื– ื’ืึทื ืฅ ื’ืจื™ื ื’ ืฆื• ืึทื ืึทืœื™ื™ื–.
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืคึผืึทืจืกื™ื ื’

ืขืจืฉื˜ืขืจ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื‘ื™ืกืœ ืกื™ืงื•ื•ืึทื ืก. ื“ืขืจ ืกื™ื’ื ืึทืœ ืกื˜ืจื•ืงื˜ื•ืจ ื–ื™ืš ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜.
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื“ื™ ืคึผืึทืœืกื™ื– ื–ืขื ืขืŸ ืฆืขื˜ื™ื™ืœื˜ ืื™ืŸ ืจื’ืข ื™ื ื˜ืขืจื•ื•ืึทืœื–. ืื•ื™ื‘ ื“ื™ ื“ื™ืกื˜ืึทื ืกืข ืฆื•ื•ื™ืฉืŸ ืคึผืึทืœืกื™ื– ืื™ื– 0.1 ืก (ื“"ื” ื“ื™ ืœืขื ื’ ืคื•ืŸ ื“ื™ ื“ื•ื™ืคืขืง ื–ื™ืš ืื™ื– 0.9 ืก), ืœื™ื™ื’ืŸ "0" ืฆื• ื“ื™ ื‘ื™ืกืœ ืกื™ืงื•ื•ืึทื ืก; ืื•ื™ื‘ ื“ื™ ื“ื™ืกื˜ืึทื ืกืข ืื™ื– 0.2 ืก (ื“"ื” ื“ื™ ืœืขื ื’ ืื™ื– 0.8 ืก), ืœื™ื™ื’ืŸ "1". ื“ืขืจ ืกื•ืฃ ืคื•ืŸ ื™ืขื“ืขืจ ืžื™ื ื•ื˜ ืื™ื– ืื ื’ืขื•ื•ื™ื–ืŸ ื“ื•ืจืš ืึท "ืœืึทื ื’" ื“ื•ื™ืคืขืง, 2 ืก ืœืึทื ื’, ื“ื™ ื‘ื™ืกืœ ืกื™ืงื•ื•ืึทื ืก ืื™ื– ื‘ืึทืฉื˜ืขื˜ื™ืง ืฆื• ื ื•ืœ, ืื•ืŸ ืคื™ืœื•ื ื’ ื”ื™ื™ื‘ื˜ ื•ื•ื™ื“ืขืจ.

ื“ื™ ืื•ื™ื‘ืŸ ืื™ื– ื’ืจื™ื ื’ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ.

sig_start, sig_stop = 0, 0
pos = 0
bits_str = ""
while pos < cnt - 4:
    if A[pos] < avg and A[pos+1] > avg:
        # Signal begin
        sig_start = pos
    if A[pos] > avg and A[pos+1] < avg:
        # Signal end
        sig_stop = pos

        diff = sig_stop - sig_start
    
        if diff < 0.85*sample_rate:
            bits_str += "1"
        if diff > 0.85*sample_rate and diff < 1.25*sample_rate:
            bits_str += "0"
        if diff > 1.5*sample_rate:
            print(bits_str)
            bits_str = ""

    pos += 1

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ืกื™ืงื•ื•ืึทื ืก ืคื•ืŸ ื‘ื™ื˜ืŸ, ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคึฟืึทืจ ืฆื•ื•ื™ื™ ืกืขืงื•ื ื“ืขืก ืขืก ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืขืก ืื™ื– ื˜ืฉื™ืงืึทื•ื•ืข ืึทื– ื“ืขืจ ืกื™ื’ื ืึทืœ ืื•ื™ืš ื”ืื˜ ืึท "ืจื’ืข ืฉื™ื›ื˜ืข" ืคื•ืŸ ื“ืึทื˜ืŸ. ื“ื™ ื‘ื™ืกืœ ืกื™ืงื•ื•ืึทื ืก ืื™ื– ืื•ื™ืš ืขื ืงืึธื•ื“ื™ื“ ื ื™ืฆืŸ ืคืึทืกืข ืžืึทื“ื–ืฉืึทืœื™ื™ืฉืึทืŸ. ืื™ืŸ ื˜ืขืึธืจื™ืข, ื“ืึธืก ื–ืึธืœ ืฆื•ืฉื˜ืขืœืŸ ืžืขืจ ื’ืขื–ื•ื ื˜ ื“ื™ืงืึธื•ื“ื™ื ื’ ืืคื™ืœื• ืื™ืŸ ื“ื™ ืคืึทืœ ืคื•ืŸ ืึท ื•ื•ื™ืงืึทื ื“ ืกื™ื’ื ืึทืœ.

ืื•ื ื“ื–ืขืจ ืœืขืฆื˜ืข ืฉืจื™ื˜: ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ื“ืึทื˜ืŸ. ื‘ื™ื˜ืŸ ื–ืขื ืขืŸ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ืึทืžืึธืœ ืคึผืขืจ ืกืขืงื•ื ื“ืข, ืึทื–ื•ื™ ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื’ืึทื ืฅ ืคื•ืŸ 59 ื‘ื™ื˜ืŸ, ืื™ืŸ ื•ื•ืึธืก ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ื– ืงืึธื“ืขื“:
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ื“ื™ ื˜ื™ื™ืœืŸ ื–ืขื ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ Wikipedia, ืื•ืŸ ื–ื™ื™ ื–ืขื ืขืŸ ื’ืึทื ืฅ ื˜ืฉื™ืงืึทื•ื•ืข. ื“ืขืจ ืขืจืฉื˜ืขืจ 15 ื‘ื™ื˜ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขื ื™ืฆื˜, ื›ืึธื˜ืฉ ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืคึผืœืึทื ื– ืฆื• ื ื•ืฆืŸ ื–ื™ื™ ืคึฟืึทืจ ื•ื•ืืจืขื ื•ื ื’ ืกื™ืกื˜ืขืžืขืŸ ืื•ืŸ ื™ื™ื“ืœ ืคืึทืจื˜ื™ื™ื“ื™ืงื•ื ื’. ื‘ื™ืกืœ A1 ื™ื ื“ื™ืงื™ื™ืฅ ืึทื– ื“ืขืจ ื–ื™ื™ื’ืขืจ ื•ื•ืขื˜ ื˜ื•ื™ืฉืŸ ืฆื• ื˜ืึธื’ืœื™ื›ื˜ ืฉืคึผืึธืจืŸ ืฆื™ื™ื˜ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉืขื”. ื‘ื™ืกืœ ืึท2 ื™ื ื“ื™ืงื™ื™ืฅ ืึทื– ืึทืŸ ื ืึธืš ืฉืคึผืจื™ื ื’ืขืŸ ืจื’ืข, ื•ื•ืืก ื•ื•ืขืจื˜ ืืžืืœ ื’ืขื ื•ืฆื˜ ืฆื• ืกื˜ืจื•ื™ืขืจืŸ ืฆื™ื™ื˜ ืœื•ื™ื˜ ื“ืขืจ ืขืจื“'ืก ืจืื˜ืืฆื™ืข. ื“ื™ ืจื•ืขืŸ ื‘ื™ื˜ืŸ ืงืึธื“ื™ืจืŸ ืฉืขื”, ืžื™ื ื•ื˜, ืกืขืงื•ื ื“ืขืก ืื•ืŸ ื“ืึทื˜ืข.

DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืฆื• ืขืงืกืคึผืขืจื™ืžืขื ื˜ ืื•ื™ืฃ ื–ื™ื™ืขืจ ืื™ื™ื’ืŸ, ื“ื™ ื“ื™ืงืึธื•ื“ื™ื ื’ ืงืึธื“ ืื™ื– ื’ืขื’ืขื‘ืŸ ืื•ื ื˜ืขืจ ื“ื™ ืกืคึผื•ื™ืœืขืจ.
ืžืงื•ืจ ืงืึธื“

def decode(bits):
    if bits[0] != '0' or bits[20] != '1':
        return
    
    minutes, hours, day_of_month, weekday, month, year = map(convert_block,
                                                             (bits[21:28], bits[29:35], bits[36:42], bits[42:45],
                                                              bits[45:50], bits[50:58]))
    days = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
    print('{dow}, {dom:02}.{mon:02}.{y}, {h:02}:{m:02}'.format(h=hours, m=minutes, dow=days[weekday],
                                                               dom=day_of_month, mon=month, y=year))


def convert_ones(bits):
    return sum(2**i for i, bit in enumerate(bits) if bit == '1')


def convert_tens(bits):
    return 10*convert_ones(bits)


def right_parity(bits, parity_bit):
    num_of_ones = sum(int(bit) for bit in bits)
    return num_of_ones % 2 == int(parity_bit)


def convert_block(bits, parity=False):
    if parity and not right_parity(bits[:-1], bits[-1]):
        return -1
    
    ones = bits[:4]
    tens = bits[4:]
    return convert_tens(tens) + convert_ones(ones)

ื•ื•ืขืŸ ืžื™ืจ ืœื•ื™ืคืŸ ื“ืขื ืคึผืจืึธื’ืจืึทื, ืžื™ืจ ื•ื•ืขืœืŸ ื–ืขืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืขื ืœืขืš ืฆื• ื“ืขื:

0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42

ืื™ืŸ ืคืึทืงื˜, ื“ืึธืก ืื™ื– ืึทืœืข ื“ื™ ืžืึทื’ื™ืฉ. ื“ื™ ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹ืึทื–ืึท ืึท ืกื™ืกื˜ืขื ืื™ื– ืึทื– ื“ื™ืงืึธื•ื“ื™ื ื’ ืื™ื– ื’ืึธืจ ืคึผืฉื•ื˜ ืื•ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืื•ื™ืฃ ืงื™ื™ืŸ, ืืคื™ืœื• ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจ. ืžื™ืจ ืคืฉื•ื˜ ืฆื™ื™ืœืŸ ื“ื™ ืœืขื ื’ ืคื•ืŸ ื“ื™ ืคึผืึทืœืกื™ื–, ืึธื ืงืœื™ื™ึทื‘ืŸ 60 ื‘ื™ื˜ืŸ, ืื•ืŸ ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื™ืขื“ืขืจ ืžื™ื ื•ื˜ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜. ืื™ืŸ ืคืืจื’ืœื™ื™ืš ืฆื• ืื ื“ืขืจืข ืžืขื˜ืื“ืŸ ืคื•ืŸ ืฆื™ื™ื˜ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ (ื’ืคึผืก, ืœืžืฉืœ, ืึธื“ืขืจ ื—ืœื™ืœื”, ื“ื™ ืื™ื ื˜ืขืจื ืขื˜:), ืึทื–ืึท ืจืึทื“ื™ืึธ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ื›ึผืžืขื˜ ืงื™ื™ืŸ ืขืœืขืงื˜ืจืข - ืœืžืฉืœ, ืึท ืจืขื’ื•ืœืขืจ ื”ื™ื™ื ื•ื•ืขื˜ืขืจ ืกื˜ืึทื ืฆื™ืข ืœื•ื™ืคื˜ ืคึฟืึทืจ ื•ื•ืขื’ืŸ ืึท ื™ืึธืจ ืื•ื™ืฃ 2 ืึทืึท ื‘ืึทื˜ืขืจื™ื–. ื“ืขืจื™ื‘ืขืจ, ืืคื™ืœื• ื•ื•ืจื™ืกื˜ื•ื•ืึทื˜ืฉื™ื– ื–ืขื ืขืŸ ื’ืขืžืื›ื˜ ืžื™ื˜ ืจืึทื“ื™ืึธ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ, ื ื™ื˜ ืฆื• ื“ืขืจืžืึธื ืขืŸ, ืคื•ืŸ ืงื•ืจืก, ื•ื•ืึทื ื˜ ื•ื•ืึทื˜ืฉื™ื– ืึธื“ืขืจ ื’ืึทืก ืกื˜ืึทื ืฆื™ืข ื•ื•ืึทื˜ืฉื™ื–.

ื“ื™ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืคื•ืŸ DCF ืื•ื™ืš ืฆื•ืฆื™ืขืŸ ื“ื™ื™ ืขื ื˜ื•ื–ื™ืึทืกืฅ. ืคึฟืึทืจ ื‘ืœื•ื™ื– $ 10-20 ืื™ืจ ืงืขื ืขืŸ ืงื•ื™ืคืŸ ืึท ืคืึทืจื˜ื™ืง ืึทื ื˜ืขื ืข ืžืึธื“ื•ืœืข ืžื™ื˜ ืึท ืคืึทืจื˜ื™ืง ื•ืคื ืขืžืขืจ ืื•ืŸ TTL ืจืขื–ื•ืœื˜ืึทื˜, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึธื ื ืขืงื˜ืขื“ ืฆื• ืึทืŸ Arduino ืึธื“ืขืจ ืื ื“ืขืจืข ืงืึธื ื˜ืจืึธืœืœืขืจ.
DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืคึฟืึทืจ Arduino ืคืึทืจื˜ื™ืง ื‘ื™ื‘ืœื™ืึธื˜ืขืง. ืึธื‘ืขืจ, ืขืก ืื™ื– ืฉื•ื™ืŸ ื‘ืืงืื ื˜ ืึทื– ืงื™ื™ืŸ ืขื ื™ืŸ ื•ื•ืึธืก ืื™ืจ ื˜ืึธืŸ ืื•ื™ืฃ ืึท ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจ, ืื™ืจ ืขื ื“ื™ืงืŸ ืžื™ื˜ ืึท ื–ื™ื™ื’ืขืจ ืึธื“ืขืจ ืึท ื•ื•ืขื˜ืขืจ ืกื˜ืึทื ืฆื™ืข. ืžื™ื˜ ืึทื–ืึท ืึท ืžื™ื˜ืœ, ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜ ืื™ื– ื˜ืึทืงืข ื’ืจื™ื ื’, ืฆื•ื’ืขืฉื˜ืขืœื˜, ืคื•ืŸ ืงื•ืจืก, ืื™ืจ ื–ืขื ื˜ ืื™ืŸ ื“ืขืจ ืึธืคึผื˜ืจืึธื’ ื’ืขื’ื ื˜. ื ื•, ืื™ืจ ืงืขื ืขืŸ ื”ืขื ื’ืขืŸ ื“ื™ ื™ื ืกืงืจื™ืคึผืฉืึทืŸ "ืึทื˜ืึธืžื™ืฉืข ื–ื™ื™ื’ืขืจ" ืื•ื™ืฃ ื“ื™ื™ืŸ ื•ื•ืึทืš, ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ื“ืขืจืงืœืขืจืŸ ืฆื• ืึทืœืขืžืขืŸ ืึทื– ื“ื™ ืžื™ื˜ืœ ืื™ื– ื˜ืึทืงืข ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ืžื™ื˜ ืึท ืึทื˜ืึธืžื™ืฉืข ื–ื™ื™ื’ืขืจ.

ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืงืขื ืขืŸ ืืคื™ืœื• ืึทืคึผื’ืจื™ื™ื“ ื–ื™ื™ืขืจ ืึทืœื˜ ื‘ืึธื‘ืข ืก ื•ื•ืึทืš ื“ื•ืจืš ื™ื ืกื˜ืึธืœื™ื ื’ ืึท ื ื™ื™ึทืข ืžืขืงืึทื ื™ื–ืึทื ืžื™ื˜ ืจืึทื“ื™ืึธ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ:

DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?

ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืื™ื™ื ืขืจ ืื•ื™ืฃ ืขื‘ื™ื™ึท ื ื™ืฆืŸ ื“ื™ ื˜ืขืจืžื™ื ืขืŸ "ืจืึทื“ื™ืึธ ืงืึทื ื˜ืจืึธื•ืœื“ ื‘ืึทื•ื•ืขื’ื•ื ื’".

ืื•ืŸ ืœืขืกืึธืฃ, ืึท ืœืขื‘ืŸ ื›ืึทืง ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื”ืึธื‘ืŸ ืœื™ื™ืขื ืขืŸ ืึทื–ื•ื™ ื•ื•ื™ื™ึทื˜. ืืคื™ืœื• ืื•ื™ื‘ ืขืก ืื™ื– ื ื™ืฉื˜ ืึท ืื™ื™ืŸ ืจืึทื“ื™ืึธ ืกื™ื’ื ืึทืœ ื˜ืจืึทื ืกืžื™ื˜ืขืจ ืื™ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืคึผืึธืจ ืคื•ืŸ ื˜ื•ื™ื–ื ื˜ ืงื™ืœืืžืขื˜ืขืจ, ืขืก ืื™ื– ื ื™ืฉื˜ ืฉื•ื•ืขืจ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืึทื–ืึท ืึท ืกื™ื’ื ืึทืœ ื–ื™ืš. ืขืก ืื™ื– ืึท ืคึผืจืึธื’ืจืึทื ืื•ื™ืฃ Google ืคึผืœื™ื™ึท ื’ืขืจื•ืคึฟืŸ "DCF77 ืขืžื•ืœืึทื˜ืึธืจ" ื•ื•ืึธืก ืึทื•ื˜ืคึผื•ืฅ ื“ื™ ืกื™ื’ื ืึทืœ ืฆื• ื›ืขื“ืคืึธื•ื ื–. ืœื•ื™ื˜ ื“ืขืจ ืžื—ื‘ืจ, ืื•ื™ื‘ ืื™ืจ ื™ื™ึทื ื•ื•ื™ืงืœืขืŸ ื“ื™ ื“ืจืึธื˜ ืคื•ืŸ ื“ื™ ื›ืขื“ืคืึธื•ื ื– ืึทืจื•ื ื“ื™ ื•ื•ืึทืš, ื–ื™ื™ ื•ื•ืขืœืŸ ื›ืึทืคึผืŸ ื“ืขื ืกื™ื’ื ืึทืœ (ืขืก ืื™ื– ื˜ืฉื™ืงืึทื•ื•ืข ื•ื•ื™, ื•ื•ื™ื™ึทืœ ืคึผืจืึธืกื˜ ื›ืขื“ืคืึธื•ื ื– ื•ื•ืขื˜ ื ื™ืฉื˜ ืคึผืจืึธื“ื•ืฆื™ืจืŸ ืึท 77 ื›ื– ืกื™ื’ื ืึทืœ, ืึธื‘ืขืจ ื“ืขืจ ืึธืคึผื˜ืจืึธื’ ืื™ื– ืžื™ืกื˜ืึธืžืข ืจืขื›ื˜ ืฆื• ื”ืึทืจืžืึธื ื™ืงืก). ืื•ื™ืฃ ืึทื ื“ืจื•ื™ื“ 9, ื“ื™ ืคึผืจืึธื’ืจืึทื ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืคึฟืึทืจ ืžื™ืจ - ืขืก ืื™ื– ืคืฉื•ื˜ ืงื™ื™ืŸ ื’ืขื–ื•ื ื˜ (ืึธื“ืขืจ ืืคึฟืฉืจ ืื™ืš ื”ืื˜ ื ื™ืฉื˜ ื”ืขืจืŸ ืขืก - ืขืก ืื™ื– 77 ื›ื–, ื ืึธืš ืึทืœืข:), ืึธื‘ืขืจ ืืคึฟืฉืจ ืขืžืขืฆืขืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ื‘ืขืกืขืจ ื’ืœื™ืง. ืขื˜ืœืขื›ืข, ืึธื‘ืขืจ, ืžืึทื›ืŸ ื–ื™ืš ืึท ืคื•ืœ-ืคืœืขื“ื–ืฉื“ DCF ืกื™ื’ื ืึทืœ ื’ืขื ืขืจืึทื˜ืึธืจ, ื•ื•ืึธืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ืžืึทื›ืŸ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ Arduino ืึธื“ืขืจ ESP32:

DCF77: ื•ื•ื™ ืึทืจื‘ืขื˜ ื“ื™ ืฆื™ื™ื˜ ืกื™ื’ื ืึทืœ ืกื™ืกื˜ืขื?
(ืžืงื•ืจ sgfantasitoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

ืกืึธืฃ

ื“ื™ DCF ืกื™ืกื˜ืขื ืื™ื– ื’ืขื•ื•ืขืŸ ื˜ืึทืงืข ื’ืึทื ืฅ ืคึผืฉื•ื˜ ืื•ืŸ ื‘ืึทืงื•ื•ืขื. ืžื™ื˜ ื“ืขืจ ื”ื™ืœืฃ ืคื•ืŸ ืึท ืคึผืฉื•ื˜ ืื•ืŸ ื‘ื™ืœื™ืง ื•ืคื ืขืžืขืจ, ืื™ืจ ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื“ื™ ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜ ืฉื˜ืขื ื“ื™ืง ืื•ืŸ ืื•ืžืขื˜ื•ื, ืคื•ืŸ ืงื•ืจืก ืื™ืŸ ื“ืขืจ ืึธืคึผื˜ืจืึธื’ ื’ืขื’ื ื˜. ืขืก ืžื™ื™ื ื˜ ืึทื– ืืคื™ืœื• ื˜ืจืึธืฅ ื•ื•ื™ื™ื“ืกืคึผืจืขื“ ื“ื™ื’ื™ื˜ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืื•ืŸ ื“ื™ ืื™ื ื˜ืขืจื ืขื˜ ืคื•ืŸ ื˜ื”ื™ื ื’ืก, ืึทื–ืึท ืคึผืฉื•ื˜ ืกืึทืœื•ืฉืึทื ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ืŸ ืคืึธื“ืขืจื•ื ื’ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’