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

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

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

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

рддреЗрдереЗ рдЖрдореНрд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдмрдЯрдг рджрд╛рдмрддреЛ рдЖрдгрд┐ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдЪрд╛ рддреБрдХрдбрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рддреЛ. рдирдХреНрдХреАрдЪ, рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ 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()
рдЖрдореНрд╣реА рдард░рд╛рд╡рд┐рдХ рдореЛрдареЗрдкрдгрд╛ рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдкрд╛рд╣рддреЛ:

рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╣рд┐рд▓реНрдмрд░реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдо рд╡рд╛рдкрд░реВрди рд╕рд┐рдЧреНрдирд▓ рд▓рд┐рдлрд╛рдлрд╛ рдШреЗрдК:
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
рд╡рд╛рдврд╡рд▓реЗрд▓рд╛ рдкрд░рд┐рдгрд╛рдо:

рд▓реЛ-рдкрд╛рд╕ рдлрд┐рд▓реНрдЯрд░ рд╡рд╛рдкрд░реВрди рдзреНрд╡рдиреА рдЙрддреНрд╕рд░реНрдЬрди рд╕реБрд░рд│реАрдд рдХрд░реВрдпрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рд╕рд░рд╛рд╕рд░реА рдореВрд▓реНрдп рдореЛрдЬреВ, рдЬреЗ рдирдВрддрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓.
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
рдкрд░рд┐рдгрд╛рдо (рдкрд┐рд╡рд│реА рд░реЗрд╖рд╛): рдЬрд╡рд│рдЬрд╡рд│ рдЪреМрд░рд╕ рд▓рд╣рд░реА рд╕рд┐рдЧреНрдирд▓ рдЬреНрдпрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ.

рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдкреНрд░рдердо рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдмрд┐рдЯ рдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╕рд┐рдЧреНрдирд▓рдЪреА рд░рдЪрдирд╛ рд╕реНрд╡рддрдГрдЪ рдЦреВрдк рд╕реЛрдкреА рдЖрд╣реЗ.

рдбрд╛рд│реА рджреБрд╕рд▒реНрдпрд╛ рдЕрдВрддрд░рд╛рдиреЗ рд╡рд┐рднрд╛рдЧрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдЬрд░ рдХрдбрдзрд╛рдиреНрдпрд╛рдВрдордзреАрд▓ рдЕрдВрддрд░ 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 рдмрд┐рдЯреНрд╕ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдордзреНрдпреЗ рдмрд░реАрдЪ рдорд╛рд╣рд┐рддреА рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ:

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

рдЬреНрдпрд╛рдВрдирд╛ рд╕реНрд╡рддрдГ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЛрдб рд╕реНрдкреЙрдпрд▓рд░ рдЕрдВрддрд░реНрдЧрдд рджрд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ.
рд╕реНрддреНрд░реЛрдд рдХреЛрдб
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 рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрдВрдЯреНрд░реЛрд▓рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

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

"рд░реЗрдбрд┐рдУ рдХрдВрдЯреНрд░реЛрд▓реНрдб рдореВрд╡реНрд╣рдореЗрдВрдЯ" рд╣реЗ рдХреАрд╡рд░реНрдб рд╡рд╛рдкрд░реВрди рддреБрдореНрд╣реА eBay рд╡рд░ рд╢реЛрдзреВ рд╢рдХрддрд╛.
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЬреНрдпрд╛рдВрдиреА рдЗрдердкрд░реНрдпрдВрдд рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд╛рдЗрдл рд╣реЕрдХ. рдЬрд░реА рджреЛрди рд╣рдЬрд╛рд░ рдХрд┐рд▓реЛрдореАрдЯрд░рдЪреНрдпрд╛ рдкрд░рд┐рд╕рд░рд╛рдд рдПрдХрд╣реА рд░реЗрдбрд┐рдУ рдЯреНрд░рд╛рдиреНрд╕рдореАрдЯрд░ рдирд╕рд▓рд╛ рддрд░реА, рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдЧреВрдЧрд▓ рдкреНрд▓реЗрд╡рд░ 'DCF77 Emulator' рдирд╛рд╡рд╛рдЪреЗ рдПрдХ ре▓рдк рдЖрд╣реЗ, рдЬреЗ рд╣реЗрдбрдлреЛрдиреНрд╕рдирд╛ рд╕рд┐рдЧреНрдирд▓ рдкрд╛рдард╡рддреЗ. рддреНрдпрд╛рдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдЪрд╛ рджрд╛рд╡рд╛ рдЖрд╣реЗ рдХреА, рдЬрд░ рддреБрдореНрд╣реА рд╣реЗрдбрдлреЛрдирдЪреА рдХреЗрдмрд▓ рдШрдбреНрдпрд╛рд│рд╛рднреЛрд╡рддреА рдЧреБрдВрдбрд╛рд│рд▓реА, рддрд░ рддреЗ рд╕рд┐рдЧреНрдирд▓ рдкрдХрдбреЗрд▓ (рдорд▓рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯрддреЗ рдХреА рд╣реЗ рдХрд╕реЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдХрд╛рд░рдг рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрдлреЛрдиреНрд╕ ренрен kHz рд╕рд┐рдЧреНрдирд▓ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реАрдд, рдкрдг рд╣реЗ рдХрджрд╛рдЪрд┐рдд рд╣рд╛рд░реНрдореЛрдирд┐рдХреНрд╕рдореБрд│реЗ рдЕрд╕рд╛рд╡реЗ). рдорд╛рдЭреНрдпрд╛ рдШрдбреНрдпрд╛рд│рд╛рд╡рд░... Android рдкреНрд░реЛрдЧреНрд░рд╛рдо реп рдЕрдЬрд┐рдмрд╛рдд рдЪрд╛рд▓рд▓рд╛ рдирд╛рд╣реАтАФрдЖрд╡рд╛рдЬрдЪ рдпреЗрдд рдирд╡реНрд╣рддрд╛ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдорд▓рд╛рдЪ рддреЛ рдРрдХреВ рдпреЗрдд рдирд╕реЗрд▓тАФрд╢реЗрд╡рдЯреА рддреЗ ренрен kHz рдЖрд╣реЗ. :)), рдкрдг рдХрджрд╛рдЪрд┐рдд рджреБрд╕рд▒реНрдпрд╛ рдХреЛрдгрд╛рд▓рд╛ рддрд░реА рдЕрдзрд┐рдХ рдпрд╢ рдорд┐рд│реЗрд▓. рддрдерд╛рдкрд┐, рдХрд╛рд╣реА рд▓реЛрдХ рд╕реНрд╡рддрдГрдЪрд╛ рдПрдХ рд╕рдВрдкреВрд░реНрдг DCF рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╡рддрд╛рдд, рдЬреЛ Arduino рдХрд┐рдВрд╡рд╛ ESP32 рд╡рд╛рдкрд░реВрди рд╕рд╣рдЬ рдмрдирд╡рддрд╛ рдпреЗрддреЛ:

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