рд╣реЕрд▓реЛ рд╣реЕрдмреНрд░.
рдШрдбреНрдпрд╛рд│ рдХрд┐рдВрд╡рд╛ рд╡реЗрджрд░ рд╕реНрдЯреЗрд╢рди рдЦрд░реЗрджреА рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЕрдиреЗрдХрд╛рдВрдиреА рдкреЕрдХреЗрдЬрд┐рдВрдЧрд╡рд░ рд░реЗрдбрд┐рдУ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдбреНрдпрд╛рд│ рдХрд┐рдВрд╡рд╛ рдЕрдЧрджреА рдЕрдгреБ рдШрдбреНрдпрд╛рд│рд╛рдЪрд╛ рд▓реЛрдЧреЛ рдкрд╛рд╣рд┐рд▓рд╛ рдЕрд╕реЗрд▓. рд╣реЗ рдЦреВрдк рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдШрдбреНрдпрд╛рд│ рдЯреЗрдмрд▓рд╡рд░ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдХрд╛рд╣реА рдХрд╛рд│рд╛рдирдВрддрд░ рддреЗ рдЖрдкреЛрдЖрдк рдЕрдЪреВрдХ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛрдИрд▓.
рдЪрд▓рд╛ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рддреЗ рд╢реЛрдзреВ рдЖрдгрд┐ рдкрд╛рдпрдердирдордзреНрдпреЗ рдбреАрдХреЛрдбрд░ рд▓рд┐рд╣реВ.
рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡реЗрд│ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдЖрд╣реЗрдд. рдпреБрд░реЛрдкрдордзреНрдпреЗ рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд░реНрдорди рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ
рдЦрд╛рд▓реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ DCF77 рдмрджреНрджрд▓ рдЕрд╕реЗрд▓.
рд╕рд┐рдЧреНрдирд▓ рд░рд┐рд╕реЗрдкреНрд╢рди
DCF77 рд╣реЗ 77.5 kHz рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реЗ рдЖрдгрд┐ рдЕреЕрдореНрдкреНрд▓реАрдЯреНрдпреВрдб рдореЙрдбреНрдпреБрд▓реЗрд╢рдирдордзреНрдпреЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгрд╛рд░реЗ рд▓рд╛рдВрдмрд▓рд╣рд░реА рд╕реНрдЯреЗрд╢рди рдЖрд╣реЗ. 50KW рд╕реНрдЯреЗрд╢рди рдлреНрд░рдБрдХрдлрд░реНрдЯрдкрд╛рд╕реВрди 25 рдХрд┐рдореА рдЕрдВрддрд░рд╛рд╡рд░ рдЖрд╣реЗ, рддреЗ 1959 рдордзреНрдпреЗ рд╕реБрд░реВ рдЭрд╛рд▓реЗ рдЖрдгрд┐ 1973 рдордзреНрдпреЗ рддрд╛рд░реАрдЦ рдорд╛рд╣рд┐рддреА рдЕрдЪреВрдХ рд╡реЗрд│реЗрдд рдЬреЛрдбрд▓реА рдЧреЗрд▓реА. 77 KHz рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрдЪреА рддрд░рдВрдЧрд▓рд╛рдВрдмреА рдЦреВрдк рд▓рд╛рдВрдм рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЕрдБрдЯреЗрдирд╛ рдлреАрд▓реНрдбрдЪреЗ рдкрд░рд┐рдорд╛рдг рджреЗрдЦреАрд▓ рдЦреВрдк рд╕рднреНрдп рдЖрд╣реЗрдд (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛рд╡рд░реАрд▓ рдлреЛрдЯреЛ):
рдЕрд╢рд╛ рдЕрдБрдЯреЗрдирд╛ рдЖрдгрд┐ рдкреЙрд╡рд░ рдЗрдирдкреБрдЯрд╕рд╣, рд░рд┐рд╕реЗрдкреНрд╢рди рдХреНрд╖реЗрддреНрд░ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкреВрд░реНрдг рдпреБрд░реЛрдк, рдмреЗрд▓рд╛рд░реВрд╕, рдпреБрдХреНрд░реЗрди рдЖрдгрд┐ рд░рд╢рд┐рдпрд╛рдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рд╡реНрдпрд╛рдкрддреЛ.
рдХреЛрдгреАрд╣реА рд╕рд┐рдЧреНрдирд▓ рд░реЗрдХреЙрд░реНрдб рдХрд░реВ рд╢рдХрддреЛ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рдСрдирд▓рд╛рдЗрди рд░рд┐рд╕реАрд╡реНрд╣рд░рд╡рд░ рдЬрд╛
рддреЗрдереЗ рдЖрдореНрд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдмрдЯрдг рджрд╛рдмрддреЛ рдЖрдгрд┐ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдЪрд╛ рддреБрдХрдбрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рддреЛ. рдирдХреНрдХреАрдЪ, рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ 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 рдмрд┐рдЯреНрд╕ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдордзреНрдпреЗ рдмрд░реАрдЪ рдорд╛рд╣рд┐рддреА рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ:
рдмрд┐рдЯреНрд╕ рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ
рдЬреНрдпрд╛рдВрдирд╛ рд╕реНрд╡рддрдГ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЛрдб рд╕реНрдкреЙрдпрд▓рд░ рдЕрдВрддрд░реНрдЧрдд рджрд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ.
рд╕реНрддреНрд░реЛрдд рдХреЛрдб
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 рд╡рд░ рд╢реЛрдзреВ рд╢рдХрддрд╛.
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЬреНрдпрд╛рдВрдиреА рд╣реЗ рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд╛рдЗрдл рд╣реЕрдХ. рдкреБрдврдЪреНрдпрд╛ рджреЛрди рд╣рдЬрд╛рд░ рдХрд┐рдореАрдордзреНрдпреЗ рдПрдХрд╣реА рд░реЗрдбрд┐рдУ рд╕рд┐рдЧреНрдирд▓ рдЯреНрд░рд╛рдиреНрд╕рдореАрдЯрд░ рдирд╕рд▓рд╛, рддрд░реА рдЕрд╕рд╛ рд╕рд┐рдЧреНрдирд▓ рд╕реНрд╡рдд: рддрдпрд╛рд░ рдХрд░рдгреЗ рдЕрд╡рдШрдб рдирд╛рд╣реА. Google Play рд╡рд░ тАЬDCF77 EmulatorтАЭ рдирд╛рд╡рд╛рдЪрд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрд╣реЗ рдЬреЛ рд╣реЗрдбрдлреЛрдирд▓рд╛ рд╕рд┐рдЧреНрдирд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЛ. рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рдорддреЗ, рдЬрд░ рддреБрдореНрд╣реА рд╣реЗрдбрдлреЛрдирдЪреА рд╡рд╛рдпрд░ рдШрдбреНрдпрд╛рд│рд╛рднреЛрд╡рддреА рдЧреБрдВрдбрд╛рд│рд▓реА рддрд░ рддреЗ рд╕рд┐рдЧреНрдирд▓ рдЙрдЪрд▓рддреАрд▓ (рд╣реЗ рдХрд╕реЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрдлреЛрди 77KHz рд╕рд┐рдЧреНрдирд▓ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рд░рд┐рд╕реЗрдкреНрд╢рди рдХрджрд╛рдЪрд┐рдд рд╣рд╛рд░реНрдореЛрдирд┐рдХреНрд╕рдореБрд│реЗ рд╣реЛрддреЗ). Android 9 рд╡рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдЕрдЬрд┐рдмрд╛рдд рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА - рдлрдХреНрдд рдХреЛрдгрддрд╛рд╣реА рдЖрд╡рд╛рдЬ рдирд╡реНрд╣рддрд╛ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдореА рддреЛ рдРрдХрд▓рд╛ рдирд╛рд╣реА - рд╣реЗ 77KHz рдЖрд╣реЗ, рд╢реЗрд╡рдЯреА :), рдкрд░рдВрддреБ рдХрджрд╛рдЪрд┐рдд рдПрдЦрд╛рджреНрдпрд╛рдЪреЗ рдирд╢реАрдм рдЪрд╛рдВрдЧрд▓реЗ рдЕрд╕реЗрд▓. рддрдерд╛рдкрд┐, рдХрд╛рд╣реА рд╕реНрд╡рдд: рд▓рд╛ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдбреАрд╕реАрдПрдл рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╡рддрд╛рдд, рдЬреЗ рддреНрдпрд╛рдЪ Arduino рдХрд┐рдВрд╡рд╛ ESP32 рд╡рд░ рдмрдирд╡рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ:
(рд╕реНрддреНрд░реЛрдд
рдирд┐рд╖реНрдХрд░реНрд╖
рдбреАрд╕реАрдПрдл рдкреНрд░рдгрд╛рд▓реА рдЦрд░реЛрдЦрд░рдЪ рд╕реЛрдкреА рдЖрдгрд┐ рд╕реЛрдпреАрд╕реНрдХрд░ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ. рд╕реЛрдкреНрдпрд╛ рдЖрдгрд┐ рд╕реНрд╡рд╕реНрдд рд░рд┐рд╕реАрд╡реНрд╣рд░рдЪреНрдпрд╛ рдорджрддреАрдиреЗ, рдЖрдкрдг рдиреЗрд╣рдореАрдЪ рдЖрдгрд┐ рд╕рд░реНрд╡рддреНрд░ рдЕрдЪреВрдХ рд╡реЗрд│ рдШреЗрдК рд╢рдХрддрд╛, рдЕрд░реНрдерд╛рддрдЪ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреНрд╖реЗрддреНрд░рд╛рдд. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╡реНрдпрд╛рдкрдХ рдбрд┐рдЬрд┐рдЯрд▓рд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рдЧреЛрд╖реНрдЯреАрдВрдЪреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдЕрд╕реВрдирд╣реА, рдЕрд╢рд╛ рд╕реЛрдкреНрдпрд╛ рдЙрдкрд╛рдпрд╛рдВрдирд╛ рджреАрд░реНрдШрдХрд╛рд│ рдорд╛рдЧрдгреА рдЕрд╕реЗрд▓.
рд╕реНрддреНрд░реЛрдд: www.habr.com