DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบชเบฐเบšเบฒเบเบ”เบต Habr.

เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบซเบผเบฒเบเบ„เบปเบ™เบ—เบตเปˆเบŠเบทเป‰เป‚เบกเบ‡เบซเบผเบทเบชเบฐเบ–เบฒเบ™เบตเบชเบฐเบžเบฒเบšเบญเบฒเบเบฒเบ”เป„เบ”เป‰เป€เบซเบฑเบ™เป‚เบกเบ‡เบ„เบงเบšเบ„เบธเบกเบงเบดเบ—เบฐเบเบธเบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เป‚เบฅเป‚เบเป‰เป‚เบกเบ‡เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบซเบธเป‰เบกเบซเปเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเบซเบผเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบงเบฒเบ‡เป‚เบกเบ‡เปƒเบชเปˆเป‚เบ•เบฐ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡, เบกเบฑเบ™เบˆเบฐเบ›เบฑเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.
DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบญเบญเบเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปเบฅเบฐเบ‚เบฝเบ™เบ•เบปเบงเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เปƒเบ™ Python.

เบกเบตเบฅเบฐเบšเบปเบš synchronization เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบญเบตเบฃเบปเบšเปเบกเปˆเบ™เบฅเบฐเบšเบปเบšเป€เบขเบเบฅเบฐเบกเบฑเบ™ DCF-77, เบ›เบฐเป€เบ—เบ”เบเบตเปˆเบ›เบธเปˆเบ™เบกเบตเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ เป€เบˆ, เปƒเบ™เบชเบฐเบซเบฐเบฅเบฑเบ”เบกเบตเบฅเบฐเบšเบปเบš WWBB, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ•เปเปˆเป„เบ›, เป€เบฅเบทเปˆเบญเบ‡เบˆเบฐเบเปˆเบฝเบงเบเบฑเบš DCF77, เป€เบ›เบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เป‰เบญเบ™เบฎเบฑเบšเปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เปƒเบ™เบžเบฒเบเป€เบญเบตเบฃเบปเบšเบ‚เบญเบ‡เบฅเบฑเบ”เป€เบŠเบเปเบฅเบฐเบ›เบฐเป€เบ—เบ”เป€เบžเบทเปˆเบญเบ™เบšเป‰เบฒเบ™ (เบœเบนเป‰เบ—เบตเปˆเบขเบนเปˆเบญเบฒเป„เบชเปƒเบ™เบ•เบฒเป€เบงเบฑเบ™เบญเบญเบเป„เบเบญเบฒเบ”เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš. เปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐเบชเบฑเบ™เบเบฒเบ™เบžเบฒเบชเบฒเบเบตเปˆเบ›เบธเปˆเบ™;).

เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบˆเบฐเบเปˆเบฝเบงเบเบฑเบš DCF77.

เบเบฒเบ™เบฎเบฑเบšเบชเบฑเบ™เบเบฒเบ™

DCF77 เป€เบ›เบฑเบ™เบชเบฐเบ–เบฒเบ™เบตเบ„เบทเป‰เบ™เบเบฒเบงเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡ 77.5 kHz เปเบฅเบฐเบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เปƒเบ™เป‚เบกเบ”เบนเบ™เบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เบ‚เบญเบ‡เบ‚เบงเบฒเบ‡. เบชเบฐเบ–เบฒเบ™เบต 50KW เบ•เบฑเป‰เบ‡เบขเบนเปˆเบซเปˆเบฒเบ‡เบˆเบฒเบ Frankfurt 25 เบเบดเป‚เบฅเปเบกเบฑเบ”, เบกเบฑเบ™เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ›เบต 1959, เปเบฅเบฐเปƒเบ™เบ›เบต 1973 เบ‚เปเป‰เบกเบนเบ™เบงเบฑเบ™เบ—เบตเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™. เบ„เบงเบฒเบกเบเบฒเบงเบ„เบทเป‰เบ™เบขเบนเปˆเบ—เบตเปˆเบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡ 77 KHz เปเบกเปˆเบ™เบเบฒเบงเบซเบผเบฒเบ, เบชเบฐเบ™เบฑเป‰เบ™ เบ‚เบฐเปœเบฒเบ”เบ‚เบญเบ‡เบชเบฐเปœเบฒเบกเบชเบฒเบเบญเบฒเบเบฒเบ”เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เปเบฒเบฐเบชเบปเบก (เบฎเบนเบšเบˆเบฒเบ Wikipedia):
DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ”เป‰เบงเบเป€เบชเบปเบฒเบญเบฒเบเบฒเบ”เปเบฅเบฐเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบžเบทเป‰เบ™เบ—เบตเปˆเบฎเบฑเบšเปเบ‚เบเบเบงเบกเป€เบญเบปเบฒเป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป€เบญเบตเบฃเบปเบš, เป€เบšเบฅเบฒเบฃเบนเบ”, เบขเบนเป€เบ„เบฅเบ™เปเบฅเบฐเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฑเบ”เป€เบŠเบ.

DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ—เบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบเบชเบฑเบ™เบเบฒเบ™เป„เบ”เป‰. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบฝเบ‡เปเบ•เปˆเป„เบ›เบซเบฒเบœเบนเป‰เบฎเบฑเบšเบญเบญเบ™เป„เบฅเบ™เปŒ http://websdr.ewi.utwente.nl:8901/, เป€เบฅเบทเบญเบเบ„เบงเบฒเบกเบ–เบตเปˆ 76.5KHz เปเบฅเบฐเป‚เบกเบ”เบนเบ™ USB เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบฎเบนเบšเบžเบฒเบšเบ„เบงเบ™เบˆเบฐเป€เบ›เบตเบ”เบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

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 transform:

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.1s (เป€เบŠเบฑเปˆเบ™: เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบเปเบฒเบกเบฐเบˆเบญเบ™เป€เบญเบ‡เปเบกเปˆเบ™ 0.9s), เป€เบžเบตเปˆเบก โ€œ0โ€ เปƒเบชเปˆเบฅเปเบฒเบ”เบฑเบšเบšเบดเบ”; เบ–เป‰เบฒเป„เบฅเบเบฐเบซเปˆเบฒเบ‡เปเบกเปˆเบ™ 0.2s (เป€เบŠเบฑเปˆเบ™: เบ„เบงเบฒเบกเบเบฒเบงเปเบกเปˆเบ™ 0.8s), เป€เบžเบตเปˆเบก โ€œ1โ€. เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบ™เบฒเบ—เบตเปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เป‚เบ”เบเบเปเบฒเบกเบฐเบˆเบญเบ™ "เบเบฒเบง", เบเบฒเบง 2s, เบฅเปเบฒเบ”เบฑเบšเบšเบดเบ”เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเป€เบ›เบฑเบ™เบชเบนเบ™, เปเบฅเบฐเบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เปƒเบ™ Python.

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

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡ bits, เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบงเบดเบ™เบฒเบ—เบตเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบฑเบ™เบเบฒเบ™เบเบฑเบ‡เบกเบต "เบŠเบฑเป‰เบ™เบ—เบตเบชเบญเบ‡" เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เบฅเปเบฒเบ”เบฑเบšเบšเบดเบ”เบเบฑเบ‡เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ เป‚เบกเบ”เบนเบ™เป„เบฅเบเบฐ. เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เบเบงเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบ™เบญเปˆเบญเบ™เบฅเบปเบ‡.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบˆเบดเบ‡. Bits เบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” 59 bits, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”:
DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบšเบดเบ”เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเปƒเบ™ Wikipedia, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡ curious. 15 เบšเบดเบ”เบ—เปเบฒเบญเบดเบ”เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเป€เบ•เบทเบญเบ™เป„เบžเปเบฅเบฐเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบžเบปเบ™เบฅเบฐเป€เบฎเบทเบญเบ™. Bit A1 เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเป‚เบกเบ‡เบˆเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ›เบฐเบขเบฑเบ”เปเบชเบ‡เบเบฒเบ‡เป€เบงเบฑเบ™เปƒเบ™เบŠเบปเปˆเบงเป‚เบกเบ‡เบ•เปเปˆเป„เบ›. Bit A2 เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก เบเป‰เบฒเบงโ€‹เบเบฐโ€‹เป‚เบ”เบ”โ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เบตโ€‹เบชเบญเบ‡โ€‹, เป€เบŠเบดเปˆเบ‡เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฑเบšเป€เบงเบฅเบฒเบ•เบฒเบกเบเบฒเบ™เบซเบกเบธเบ™เบ‚เบญเบ‡เป‚เบฅเบ. เบšเบดเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบŠเบปเปˆเบงเป‚เบกเบ‡, เบ™เบฒเบ—เบต, เบงเบดเบ™เบฒเบ—เบต เปเบฅเบฐเบงเบฑเบ™เบ—เบต.

DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เปƒเบซเป‰เบžเบฒเบเปƒเบ•เป‰ spoiler.
เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™

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

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™ magic เบ—เบฑเบ‡เบซเบกเบปเบ”. เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เบ—เบธเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ microcontroller เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ™เบฑเบšเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบเปเบฒเบกเบฐเบˆเบญเบ™, เบชเบฐเบชเบปเบก 60 bits, เปเบฅเบฐเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบ™เบฒเบ—เบตเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™. เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡ synchronization เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒ (GPS, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบผเบทเบžเบฃเบฐเป€เบˆเบปเป‰เบฒเบซเป‰เบฒเบก, เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”:), เบเบฒเบ™ synchronization เบงเบดเบ—เบฐเบเบธเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเป€เบเบทเบญเบšเบšเปเปˆเบกเบตเป„เบŸเบŸเป‰เบฒ - เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบฐเบ–เบฒเบ™เบตเบชเบฐเบžเบฒเบšเบญเบฒเบเบฒเบ”เป€เบฎเบทเบญเบ™เบ›เบปเบเบเบฐเบ•เบดเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฐเบกเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ›เบตเปƒเบ™ 2 เบซเบกเปเป‰เป„เบŸ AA. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ wristwatches เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบ”เป‰เบงเบเบเบฒเบ™ synchronization เบงเบดเบ—เบฐเบเบธ, เปเบ™เปˆเบ™เบญเบ™, เป€เบšเบดเปˆเบ‡เบเบฒเบซเบผเบทเบชเบฐเบ–เบฒเบ™เบตเบ–เบฐเบซเบ™เบปเบ™.

เบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเปเบฅเบฐเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡ DCF เบเบฑเบ‡เบ”เบถเบ‡เบ”เบนเบ”เบœเบนเป‰เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบฐเบ•เบทเบฅเบทเบฅเบปเป‰เบ™ DIY. เบชเปเบฒเบฅเบฑเบšเบžเบฝเบ‡เปเบ•เปˆ $ 10-20 เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบทเป‰เป‚เบกเบ”เบนเบ™เป€เบชเบปเบฒเบญเบฒเบเบฒเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบ—เบตเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ” TTL, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Arduino เบซเบผเบทเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบญเบทเปˆเบ™เป†.
DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ‚เบฝเบ™เปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบš Arduino เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเป‰เบญเบกเปเบฅเป‰เบง. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเปเบฅเป‰เบงเบงเปˆเบฒเบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ microcontroller, เบ—เปˆเบฒเบ™เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเป‚เบกเบ‡เบซเบผเบทเบชเบฐเบ–เบฒเบ™เบตเบชเบฐเบžเบฒเบšเบญเบฒเบเบฒเบ”. เบ”เป‰เบงเบเบญเบธเบ›เบฐเบเบญเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เปเบกเปˆเบ™เบ‡เปˆเบฒเบเปเบ—เป‰เป†, เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰, เปเบ™เปˆเบ™เบญเบ™, เบงเปˆเบฒเบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบฎเบฑเบš. เปเบฅเป‰เบง, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เบชเบฒเบเบ„เบณเบˆเบฒเบฅเบถเบ โ€œเป‚เบกเบ‡เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนโ€ เปƒเบชเปˆเป‚เบกเบ‡เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™เบเปเบญเบฐเบ—เบดเบšเบฒเบเปƒเบซเป‰เบ—เบธเบเบ„เบปเบ™เบฎเบนเป‰เบงเปˆเบฒเบญเบธเบ›เบฐเบเบญเบ™เบ–เบทเบ synchronized เปเบ—เป‰เป†เป‚เบ”เบเปƒเบŠเป‰เป‚เบกเบ‡เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน.

เบœเบนเป‰โ€‹เบ—เบตเปˆโ€‹เบ›เบฒเบ”โ€‹เบ–เบฐโ€‹เบซเบ™เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเบปเบโ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เป‚เบกเบ‡โ€‹เปเบกเปˆโ€‹เป€เบ–เบปเป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบเบปเบ™โ€‹เป„เบโ€‹เปƒเบซเบกเปˆโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™ synchronization เบงเบดโ€‹เบ—เบฐโ€‹เบเบธโ€‹:

DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบซเบ™เบถเปˆเบ‡เปƒเบ™ ebay เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™ "เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ„เบงเบšเบ„เบธเบกเบงเบดเบ—เบฐเบเบธ".

เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ, hack เบŠเบตเบงเบดเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เบญเปˆเบฒเบ™เบ™เบตเป‰เป„เบ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบงเบดเบ—เบฐเบเบธเบ”เบฝเบงเปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบžเบฑเบ™เบเบดเป‚เบฅเปเบกเบฑเบ”เบ•เปเปˆเป„เบ›, เบกเบฑเบ™เบšเปเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบขเบนเปˆเปƒเบ™ Google Play เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "DCF77 Emulator" เบ—เบตเปˆเบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เป„เบ›เบซเบฒเบซเบนเบŸเบฑเบ‡. เบญเบตเบ‡เบ•เบฒเบกเบœเบนเป‰เบ‚เบฝเบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบชเบฒเบเบ‚เบญเบ‡เบซเบนเบŸเบฑเบ‡เบขเบนเปˆเบฎเบญเบšเป‚เบกเบ‡, เบžเบงเบเบกเบฑเบ™เบˆเบฐเบˆเบฑเบšเบชเบฑเบ™เบเบฒเบ™ (เบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปเบ™เบงเปƒเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบซเบนเบŸเบฑเบ‡เบ—เปเบฒเบกเบฐเบ”เบฒเบˆเบฐเบšเปเปˆเบœเบฐเบฅเบดเบ”เบชเบฑเบ™เบเบฒเบ™ 77KHz, เปเบ•เปˆเบเบฒเบ™เบฎเบฑเบšเปเบกเปˆเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบ„เบงเบฒเบกเบเบปเบกเบเบฝเบงเบเบฑเบ™). เปƒเบ™ Android 9, เป‚เบ›เบฅเปเบเบฅเบกเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ - เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบกเบตเบชเบฝเบ‡ (เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบเบดเบ™ - เบกเบฑเบ™เปเบกเปˆเบ™ 77KHz, เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”:), เปเบ•เปˆเบšเบฒเบ‡เบ—เบตเบ„เบปเบ™เบญเบฒเบ”เบˆเบฐเป‚เบŠเบเบ”เบตเบเบงเปˆเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบšเบฒเบ‡เบ„เบปเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ•เบปเบงเป€เบญเบ‡เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบ™ DCF เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš, เป€เบŠเบดเปˆเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบ™ Arduino เบซเบผเบท ESP32 เบ”เบฝเบงเบเบฑเบ™:

DCF77: เบฅเบฐเบšเบปเบšเบชเบฑเบ™เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?
(เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

เบชเบฐเบซเบฅเบธเบš

เบฅเบฐเบšเบปเบš DCF เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบซเบผเบฒเบ. เบ”เป‰เบงเบเบ„เบงเบฒเบกเบŠเปˆเบญเบเป€เบซเบฅเบทเบญเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบฅเบฒเบ„เบฒเบ–เบทเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบชเบฐเป€เบซเบกเบตเปเบฅเบฐเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡, เปเบ™เปˆเบ™เบญเบ™เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบฎเบฑเบš. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เปเบœเปˆเบ‚เบฐเบซเบเบฒเบเบ”เบดเบˆเบดเบ•เบญเบ™เปเบฅเบฐเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‡เปˆเบฒเบเป†เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™