DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рд╣реЕрд▓реЛ рд╣реЕрдмреНрд░.

рдШрдбреНрдпрд╛рд│ рдХрд┐рдВрд╡рд╛ рд╡реЗрджрд░ рд╕реНрдЯреЗрд╢рди рдЦрд░реЗрджреА рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЕрдиреЗрдХрд╛рдВрдиреА рдкреЕрдХреЗрдЬрд┐рдВрдЧрд╡рд░ рд░реЗрдбрд┐рдУ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдбреНрдпрд╛рд│ рдХрд┐рдВрд╡рд╛ рдЕрдЧрджреА рдЕрдгреБ рдШрдбреНрдпрд╛рд│рд╛рдЪрд╛ рд▓реЛрдЧреЛ рдкрд╛рд╣рд┐рд▓рд╛ рдЕрд╕реЗрд▓. рд╣реЗ рдЦреВрдк рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдШрдбреНрдпрд╛рд│ рдЯреЗрдмрд▓рд╡рд░ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдХрд╛рд╣реА рдХрд╛рд│рд╛рдирдВрддрд░ рддреЗ рдЖрдкреЛрдЖрдк рдЕрдЪреВрдХ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛрдИрд▓.
DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рдЪрд▓рд╛ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рддреЗ рд╢реЛрдзреВ рдЖрдгрд┐ рдкрд╛рдпрдердирдордзреНрдпреЗ рдбреАрдХреЛрдбрд░ рд▓рд┐рд╣реВ.

рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡реЗрд│ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдЖрд╣реЗрдд. рдпреБрд░реЛрдкрдордзреНрдпреЗ рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд░реНрдорди рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ DCF-77, рдЬрдкрд╛рдирдЪреА рд╕реНрд╡рддрдГрдЪреА рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ рдЬреЗрдЬреЗрд╡рд╛рдп, рдпреВрдПрд╕рдП рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрд╡реАрдмреА, рдЖрдгрд┐ рдЕрд╕реЗрдЪ. рдкреБрдвреЗ, рдХрдерд╛ DCF77 рдмрджреНрджрд▓ рдЕрд╕реЗрд▓, рдХрд╛рд░рдг рд░рд╢рд┐рдпрд╛рдЪреНрдпрд╛ рдпреБрд░реЛрдкрд┐рдпрди рднрд╛рдЧрд╛рдд рдЖрдгрд┐ рд╢реЗрдЬрд╛рд░реАрд▓ рджреЗрд╢рд╛рдВрдордзреАрд▓ рдХрд╛рд╣реА рдард┐рдХрд╛рдгреА рд░рд┐рд╕реЗрдкреНрд╢рдирд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕рдВрдмрдВрдзрд┐рдд рдЖрдгрд┐ рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдЖрд╣реЗ (рд╕реБрджреВрд░ рдкреВрд░реНрд╡реЗрддреАрд▓ рд░рд╣рд┐рд╡рд╛рд╢рд╛рдВрдЪреЗ рдЙрд▓рдЯ рдордд рдЕрд╕реВ рд╢рдХрддреЗ, рддрдерд╛рдкрд┐, рддреЗ, рдпрд╛рдордзреВрди, рдкреНрд░рд╛рдкреНрдд рдХрд░реВ рд╢рдХрддрд╛рдд. рдЖрдгрд┐ рдЬрдкрд╛рдиреА рд╕рд┐рдЧреНрдирд▓рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рд╛;).

рдЦрд╛рд▓реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ DCF77 рдмрджреНрджрд▓ рдЕрд╕реЗрд▓.

рд╕рд┐рдЧреНрдирд▓ рд░рд┐рд╕реЗрдкреНрд╢рди

DCF77 рд╣реЗ 77.5 kHz рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реЗ рдЖрдгрд┐ рдЕреЕрдореНрдкреНрд▓реАрдЯреНрдпреВрдб рдореЙрдбреНрдпреБрд▓реЗрд╢рдирдордзреНрдпреЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгрд╛рд░реЗ рд▓рд╛рдВрдмрд▓рд╣рд░реА рд╕реНрдЯреЗрд╢рди рдЖрд╣реЗ. 50KW рд╕реНрдЯреЗрд╢рди рдлреНрд░рдБрдХрдлрд░реНрдЯрдкрд╛рд╕реВрди 25 рдХрд┐рдореА рдЕрдВрддрд░рд╛рд╡рд░ рдЖрд╣реЗ, рддреЗ 1959 рдордзреНрдпреЗ рд╕реБрд░реВ рдЭрд╛рд▓реЗ рдЖрдгрд┐ 1973 рдордзреНрдпреЗ рддрд╛рд░реАрдЦ рдорд╛рд╣рд┐рддреА рдЕрдЪреВрдХ рд╡реЗрд│реЗрдд рдЬреЛрдбрд▓реА рдЧреЗрд▓реА. 77 KHz рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрдЪреА рддрд░рдВрдЧрд▓рд╛рдВрдмреА рдЦреВрдк рд▓рд╛рдВрдм рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЕрдБрдЯреЗрдирд╛ рдлреАрд▓реНрдбрдЪреЗ рдкрд░рд┐рдорд╛рдг рджреЗрдЦреАрд▓ рдЦреВрдк рд╕рднреНрдп рдЖрд╣реЗрдд (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛рд╡рд░реАрд▓ рдлреЛрдЯреЛ):
DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рдЕрд╢рд╛ рдЕрдБрдЯреЗрдирд╛ рдЖрдгрд┐ рдкреЙрд╡рд░ рдЗрдирдкреБрдЯрд╕рд╣, рд░рд┐рд╕реЗрдкреНрд╢рди рдХреНрд╖реЗрддреНрд░ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкреВрд░реНрдг рдпреБрд░реЛрдк, рдмреЗрд▓рд╛рд░реВрд╕, рдпреБрдХреНрд░реЗрди рдЖрдгрд┐ рд░рд╢рд┐рдпрд╛рдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рд╡реНрдпрд╛рдкрддреЛ.

DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рдХреЛрдгреАрд╣реА рд╕рд┐рдЧреНрдирд▓ рд░реЗрдХреЙрд░реНрдб рдХрд░реВ рд╢рдХрддреЛ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рдСрдирд▓рд╛рдЗрди рд░рд┐рд╕реАрд╡реНрд╣рд░рд╡рд░ рдЬрд╛ http://websdr.ewi.utwente.nl:8901/, рддреЗрдереЗ рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ 76.5KHz рдЖрдгрд┐ USB рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдирд┐рд╡рдбрд╛. рдПрдХ рдкреНрд░рддрд┐рдорд╛ рдЙрдШрдбрд▓реА рдкрд╛рд╣рд┐рдЬреЗ рдЬреА рдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рддреЗ:

DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рддреЗрдереЗ рдЖрдореНрд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдмрдЯрдг рджрд╛рдмрддреЛ рдЖрдгрд┐ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдЪрд╛ рддреБрдХрдбрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рддреЛ. рдирдХреНрдХреАрдЪ, рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ 77.5KHz рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд░рд┐рд╕реАрд╡реНрд╣рд░ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рддреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдЕрд░реНрдерд╛рдд, рдЗрдВрдЯрд░рдиреЗрдЯрджреНрд╡рд╛рд░реЗ рд░реЗрдбрд┐рдУ рдЯрд╛рдЗрдо рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрди, рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд░реЛрдЦрд░ рдЕрдЪреВрдХ рд╡реЗрд│ рдорд┐рд│рдгрд╛рд░ рдирд╛рд╣реА - рд╕рд┐рдЧреНрдирд▓ рд╡рд┐рд▓рдВрдмрд╛рдиреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдкрд░рдВрддреБ рдЖрдордЪреЗ рдзреНрдпреЗрдп рдлрдХреНрдд рд╕рд┐рдЧреНрдирд▓рдЪреА рд░рдЪрдирд╛ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╣реЗ; рдпрд╛рд╕рд╛рдареА, рдЗрдВрдЯрд░рдиреЗрдЯ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рдд, рдЕрд░реНрдерд╛рддрдЪ, рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдгреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдбреАрдХреЛрдбрд┐рдВрдЧрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддрд╛рдд; рддреНрдпрд╛рдВрдЪреА рдЦрд╛рд▓реА рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓.

рддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ рдЖрд╣реЗ, рдЪрд▓рд╛ рддреНрдпрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░реВрдпрд╛.

рд╕рд┐рдЧреНрдирд▓ рдбреАрдХреЛрдбрд┐рдВрдЧ

рдкрд╛рдпрдерди рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░реВ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рд░рдЪрдирд╛ рдкрд╛рд╣реВ:

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: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╣рд┐рд▓реНрдмрд░реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдо рд╡рд╛рдкрд░реВрди рд╕рд┐рдЧреНрдирд▓ рд▓рд┐рдлрд╛рдлрд╛ рдШреЗрдК:

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 рд▓рд╛рдВрдм, рдмрд┐рдЯ рдХреНрд░рдо рд╢реВрдиреНрдпрд╛рд╡рд░ рд░реАрд╕реЗрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рднрд░рдгреЗ рд╕реБрд░реВ рд╣реЛрддреЗ.

рд╡рд░реАрд▓ рдЧреЛрд╖реНрдЯреА рдкрд╛рдпрдердирдордзреНрдпреЗ рд▓рд┐рд╣рд┐рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ.

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: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

рдмрд┐рдЯреНрд╕ рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛, рдЖрдгрд┐ рддреЗ рдЦреВрдк рдЙрддреНрд╕реБрдХ рдЖрд╣реЗрдд. рдЪреЗрддрд╛рд╡рдгреА рдкреНрд░рдгрд╛рд▓реА рдЖрдгрд┐ рдирд╛рдЧрд░реА рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЕрд╕рд▓реА рддрд░реАрд╣реА рдкрд╣рд┐рд▓реЗ 15 рдмрд┐рдЯ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдд рдирд╛рд╣реАрдд. рдмрд┐рдЯ A1 рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдкреБрдвреАрд▓ рддрд╛рд╕рд╛рдд рдШрдбреНрдпрд╛рд│ рдбреЗрд▓рд╛рдЗрдЯ рд╕реЗрд╡реНрд╣рд┐рдВрдЧ рдЯрд╛рдЗрдордордзреНрдпреЗ рдмрджрд▓реЗрд▓. рдмрд┐рдЯ A2 рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЭреЗрдк рд╕реЗрдХрдВрдж, рдЬреЗ рдХрдзреАрдХрдзреА рдкреГрдереНрд╡реАрдЪреНрдпрд╛ рдкрд░рд┐рднреНрд░рдордгрд╛рдиреБрд╕рд╛рд░ рд╡реЗрд│ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЙрд░реНрд╡рд░рд┐рдд рдмрд┐рдЯреНрд╕ рддрд╛рд╕, рдорд┐рдирд┐рдЯреЗ, рд╕реЗрдХрдВрдж рдЖрдгрд┐ рддрд╛рд░реАрдЦ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛рдд.

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 рдмрд┐рдЯреНрд╕ рдЬрдорд╛ рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдирд┐рдЯрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдЪреВрдХ рд╡реЗрд│ рдорд┐рд│рддреЛ. рдЯрд╛рдЗрдо рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирдЪреНрдпрд╛ рдЗрддрд░ рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд (GPS, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрд┐рдВрд╡рд╛ God forbid, Internet:), рдЕрд╢рд╛ рд░реЗрдбрд┐рдУ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирд▓рд╛ рдЕрдХреНрд╖рд░рд╢рдГ рд╡реАрдЬ рд▓рд╛рдЧрдд рдирд╛рд╣реА - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 2 AA рдмреЕрдЯрд░реАрд╡рд░ рдПрдХ рдирд┐рдпрдорд┐рдд рд╣реЛрдо рд╡реЗрджрд░ рд╕реНрдЯреЗрд╢рди рд╕реБрдорд╛рд░реЗ рдПрдХ рд╡рд░реНрд╖ рдЪрд╛рд▓рддреЗ. рдореНрд╣рдгреВрди, рдЕрдЧрджреА рдордирдЧрдЯреА рдШрдбреНрдпрд╛рд│реЗ рд░реЗрдбрд┐рдУ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирд╕рд╣ рдмрдирд╡рд┐рд▓реА рдЬрд╛рддрд╛рдд, рдЕрд░реНрдерд╛рддрдЪ, рднрд┐рдВрддреАрд╡рд░реАрд▓ рдШрдбреНрдпрд╛рд│реЗ рдХрд┐рдВрд╡рд╛ рд╕реНрдЯреНрд░реАрдЯ рд╕реНрдЯреЗрд╢рди рдШрдбреНрдпрд╛рд│реЗ.

DCF рдЪреА рд╕реЛрдп рдЖрдгрд┐ рд╕рд╛рдзреЗрдкрдгрд╛ рджреЗрдЦреАрд▓ DIY рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдХрд╛рдВрдирд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ. рдлрдХреНрдд $10-20 рдордзреНрдпреЗ рддреБрдореНрд╣реА рд░реЗрдбреАрдореЗрдб рд░рд┐рд╕реАрд╡реНрд╣рд░ рдЖрдгрд┐ TTL рдЖрдЙрдЯрдкреБрдЯ рдЕрд╕рд▓реЗрд▓реЗ рд░реЗрдбреАрдореЗрдб рдЕрдБрдЯреЗрдирд╛ рдореЙрдбреНрдпреВрд▓ рдЦрд░реЗрджреА рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗ Arduino рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрдВрдЯреНрд░реЛрд▓рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

Arduino рд╕рд╛рдареА рдЖрдзреАрдЪ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ рддрдпрд╛рд░ рд▓рд╛рдпрдмреНрд░рд░реА. рддрдерд╛рдкрд┐, рд╣реЗ рдЖрдзреАрдЪ рдЬреНрдЮрд╛рдд рдЖрд╣реЗ рдХреА рдЖрдкрдг рдорд╛рдпрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░рд╡рд░ рдХрд╛рд╣реАрд╣реА рдХреЗрд▓реЗ рддрд░реАрд╣реА, рдЖрдкрдг рдПрдХрддрд░ рдШрдбреНрдпрд╛рд│ рдХрд┐рдВрд╡рд╛ рд╣рд╡рд╛рдорд╛рди рд╕реНрдЯреЗрд╢рдирд╕рд╣ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛. рдЕрд╢рд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╕рд╣, рдЕрдЪреВрдХ рд╡реЗрд│ рдорд┐рд│рд╡рдгреЗ рдЦрд░реЛрдЦрд░ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЕрд░реНрдерд╛рддрдЪ, рдЖрдкрдг рд░рд┐рд╕реЗрдкреНрд╢рди рдХреНрд╖реЗрддреНрд░рд╛рдд рдЖрд╣рд╛рдд. рдмрд░рдВ, рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдШрдбреНрдпрд╛рд│рд╛рд╡рд░ тАЬрдЕрдгреБ рдШрдбреНрдпрд╛рд│тАЭ рд╣рд╛ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдЯрд╛рдВрдЧреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдкреНрд░рддреНрдпреЗрдХрд╛рд▓рд╛ рд╕рдордЬрд╛рд╡реВрди рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛ рдХреА рдЕрдгреБ рдШрдбреНрдпрд╛рд│ рд╡рд╛рдкрд░реВрди рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЦрд░реЛрдЦрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рдЬреНрдпрд╛рдВрдирд╛ рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ рддреЗ рд░реЗрдбрд┐рдУ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирд╕рд╣ рдирд╡реАрди рдпрдВрддреНрд░рдгрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрди рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рдЖрдЬреАрдЪреЗ рдШрдбреНрдпрд╛рд│ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реВ рд╢рдХрддрд╛рдд:

DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?

"рд░реЗрдбрд┐рдУ рдХрдВрдЯреНрд░реЛрд▓реНрдб рдореВрд╡реНрд╣рдореЗрдВрдЯ" рд╣реЗ рдХреАрд╡рд░реНрдб рд╡рд╛рдкрд░реВрди рддреБрдореНрд╣реА eBay рд╡рд░ рд╢реЛрдзреВ рд╢рдХрддрд╛.

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЬреНрдпрд╛рдВрдиреА рд╣реЗ рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд╛рдЗрдл рд╣реЕрдХ. рдкреБрдврдЪреНрдпрд╛ рджреЛрди рд╣рдЬрд╛рд░ рдХрд┐рдореАрдордзреНрдпреЗ рдПрдХрд╣реА рд░реЗрдбрд┐рдУ рд╕рд┐рдЧреНрдирд▓ рдЯреНрд░рд╛рдиреНрд╕рдореАрдЯрд░ рдирд╕рд▓рд╛, рддрд░реА рдЕрд╕рд╛ рд╕рд┐рдЧреНрдирд▓ рд╕реНрд╡рдд: рддрдпрд╛рд░ рдХрд░рдгреЗ рдЕрд╡рдШрдб рдирд╛рд╣реА. Google Play рд╡рд░ тАЬDCF77 EmulatorтАЭ рдирд╛рд╡рд╛рдЪрд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрд╣реЗ рдЬреЛ рд╣реЗрдбрдлреЛрдирд▓рд╛ рд╕рд┐рдЧреНрдирд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЛ. рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рдорддреЗ, рдЬрд░ рддреБрдореНрд╣реА рд╣реЗрдбрдлреЛрдирдЪреА рд╡рд╛рдпрд░ рдШрдбреНрдпрд╛рд│рд╛рднреЛрд╡рддреА рдЧреБрдВрдбрд╛рд│рд▓реА рддрд░ рддреЗ рд╕рд┐рдЧреНрдирд▓ рдЙрдЪрд▓рддреАрд▓ (рд╣реЗ рдХрд╕реЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрдлреЛрди 77KHz рд╕рд┐рдЧреНрдирд▓ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рд░рд┐рд╕реЗрдкреНрд╢рди рдХрджрд╛рдЪрд┐рдд рд╣рд╛рд░реНрдореЛрдирд┐рдХреНрд╕рдореБрд│реЗ рд╣реЛрддреЗ). Android 9 рд╡рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдЕрдЬрд┐рдмрд╛рдд рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА - рдлрдХреНрдд рдХреЛрдгрддрд╛рд╣реА рдЖрд╡рд╛рдЬ рдирд╡реНрд╣рддрд╛ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдореА рддреЛ рдРрдХрд▓рд╛ рдирд╛рд╣реА - рд╣реЗ 77KHz рдЖрд╣реЗ, рд╢реЗрд╡рдЯреА :), рдкрд░рдВрддреБ рдХрджрд╛рдЪрд┐рдд рдПрдЦрд╛рджреНрдпрд╛рдЪреЗ рдирд╢реАрдм рдЪрд╛рдВрдЧрд▓реЗ рдЕрд╕реЗрд▓. рддрдерд╛рдкрд┐, рдХрд╛рд╣реА рд╕реНрд╡рдд: рд▓рд╛ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдбреАрд╕реАрдПрдл рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╡рддрд╛рдд, рдЬреЗ рддреНрдпрд╛рдЪ Arduino рдХрд┐рдВрд╡рд╛ ESP32 рд╡рд░ рдмрдирд╡рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ:

DCF77: рд╡реЗрд│ рд╕рд┐рдЧреНрдирд▓ рдпрдВрддреНрд░рдгрд╛ рдХрд╢реА рдХрд╛рдо рдХрд░рддреЗ?
(рд╕реНрддреНрд░реЛрдд sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

рдирд┐рд╖реНрдХрд░реНрд╖

рдбреАрд╕реАрдПрдл рдкреНрд░рдгрд╛рд▓реА рдЦрд░реЛрдЦрд░рдЪ рд╕реЛрдкреА рдЖрдгрд┐ рд╕реЛрдпреАрд╕реНрдХрд░ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ. рд╕реЛрдкреНрдпрд╛ рдЖрдгрд┐ рд╕реНрд╡рд╕реНрдд рд░рд┐рд╕реАрд╡реНрд╣рд░рдЪреНрдпрд╛ рдорджрддреАрдиреЗ, рдЖрдкрдг рдиреЗрд╣рдореАрдЪ рдЖрдгрд┐ рд╕рд░реНрд╡рддреНрд░ рдЕрдЪреВрдХ рд╡реЗрд│ рдШреЗрдК рд╢рдХрддрд╛, рдЕрд░реНрдерд╛рддрдЪ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреНрд╖реЗрддреНрд░рд╛рдд. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╡реНрдпрд╛рдкрдХ рдбрд┐рдЬрд┐рдЯрд▓рд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рдЧреЛрд╖реНрдЯреАрдВрдЪреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдЕрд╕реВрдирд╣реА, рдЕрд╢рд╛ рд╕реЛрдкреНрдпрд╛ рдЙрдкрд╛рдпрд╛рдВрдирд╛ рджреАрд░реНрдШрдХрд╛рд│ рдорд╛рдЧрдгреА рдЕрд╕реЗрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛