ΠΡΠΈΠ²Π΅Ρ Π₯Π°Π±Ρ.
ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅, ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°ΡΡΠΈΠ΅ ΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠ΅ΠΎΡΡΠ°Π½ΡΠΈΡ, Π²ΠΈΠ΄Π΅Π»ΠΈ Π½Π° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ Π»ΠΎΠ³ΠΎΡΠΈΠΏ Radio Controlled Clock ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Atomic Clock. ΠΡΠΎ Π²Π΅ΡΡΠΌΠ° ΡΠ΄ΠΎΠ±Π½ΠΎ, Π²Π΅Π΄Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΡΡ Π½Π° ΡΡΠΎΠ», ΠΈ ΠΎΠ½ΠΈ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΡΡΡΠΎΡΡΡΡ Π½Π° ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π Π°Π·Π±Π΅ΡΠ΅ΠΌΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Python.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ Π² ΠΠ²ΡΠΎΠΏΠ΅ β Π½Π΅ΠΌΠ΅ΡΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
ΠΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π΄Π°Π»Π΅Π΅, Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎ DCF77.
ΠΡΠΈΠ΅ΠΌ ΡΠΈΠ³Π½Π°Π»Π°
DCF77 ΡΡΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ²ΠΎΠ»Π½ΠΎΠ²Π°Ρ ΡΡΠ°Π½ΡΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ°Ρ Π½Π° ΡΠ°ΡΡΠΎΡΠ΅ 77.5ΠΠΡ, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠ°Ρ ΡΠΈΠ³Π½Π°Π»Ρ Π² Π°ΠΌΠΏΠ»ΠΈΡΡΠ΄Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠΈ. Π‘ΡΠ°Π½ΡΠΈΡ ΠΌΠΎΡΠ½ΠΎΡΡΡΡ 50ΠΠΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² 25ΠΊΠΌ ΠΎΡ Π€ΡΠ°Π½ΠΊΡΡΡΡΠ°, ΠΎΠ½Π° Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ Π΅ΡΠ΅ Π² 1959 Π³ΠΎΠ΄Ρ, Π² 1973 ΠΊ ΡΠΎΡΠ½ΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄Π°ΡΠ΅. ΠΠ»ΠΈΠ½Π° Π²ΠΎΠ»Π½Ρ ΠΏΡΠΈ ΡΠ°ΡΡΠΎΡΠ΅ 77ΠΠΡ Π²Π΅ΡΡΠΌΠ° Π±ΠΎΠ»ΡΡΠ°Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ Π°Π½ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠΎΠΆΠ΅ Π²Π΅ΡΡΠΌΠ° ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΠ΅ (ΡΠΎΡΠΎ ΠΈΠ· ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ):
ΠΡΠΈ ΡΠ°ΠΊΠΎΠΉ Π°Π½ΡΠ΅Π½Π½Π΅ ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ, Π·ΠΎΠ½Π° ΠΏΡΠΈΠ΅ΠΌΠ° ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡ ΠΠ²ΡΠΎΠΏΡ, ΠΠ΅Π»ΠΎΡΡΡΡΠΈΡ, Π£ΠΊΡΠ°ΠΈΠ½Ρ ΠΈ ΡΠ°ΡΡΡ Π ΠΎΡΡΠΈΠΈ.
ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΉΡΠΈ Π½Π° ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ
Π’Π°ΠΌ ΠΆΠ΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ download ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Β«Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎΒ» ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΎΡΡ 77.5ΠΠΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π΅Π³ΠΎ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΠ°Π΄ΠΈΠΎΡΠΈΠ³Π½Π°Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ΅Π· ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ β ΡΠΈΠ³Π½Π°Π» ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ. ΠΠΎ Π½Π°ΡΠ° ΡΠ΅Π»Ρ Π»ΠΈΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Π°, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-Π·Π°ΠΏΠΈΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. Π ΡΠ΅Π°Π»Π΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎ Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ, ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ Π΅Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅.
ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π°
ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ 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()
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠΈΠΏΠΈΡΠ½ΡΡ Π°ΠΌΠΏΠ»ΠΈΡΡΠ΄Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΡ:
ΠΠ»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΎΠ³ΠΈΠ±Π°ΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΈΠ»ΡΠ±Π΅ΡΡΠ°:
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅:
Π‘Π³Π»Π°Π΄ΠΈΠΌ Π²ΡΠ±ΡΠΎΡΡ ΠΎΡ ΠΏΠΎΠΌΠ΅Ρ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ low-pass ΡΠΈΠ»ΡΡΡΠ°, Π·Π°ΠΎΠ΄Π½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΠΎΠΌ Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π°.
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.1Ρ (Ρ.Π΅. Π΄Π»ΠΈΠ½Π° ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡΠ° 0.9Ρ), ΠΊ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Β«0Β», Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 0.2Ρ (Ρ.Π΅. Π΄Π»ΠΈΠ½Π° 0.8Ρ), Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Β«1Β». ΠΠΎΠ½Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠΈΠ½ΡΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ Β«Π΄Π»ΠΈΠ½Π½ΡΠΌΒ» ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ, Π΄Π»ΠΈΠ½ΠΎΠΉ 2Ρ, Π±ΠΈΡΠΎΠ²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ, ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ.
ΠΡΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ 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
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΠΈΡ, Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ Π΄Π²ΡΡ ΡΠ΅ΠΊΡΠ½Π΄ ΠΎΠ½Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
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 Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ»ΠΈ Π½Π΅ Π΄Π°ΠΉ Π±ΠΎΠ³, ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ:), ΡΠ°ΠΊΠ°Ρ ΡΠ°Π΄ΠΈΠΎΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΡΠ½Π΅ΡΠ³ΠΈΠΈ β Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΎΠ±ΡΡΠ½Π°Ρ Π΄ΠΎΠΌΠ°ΡΠ½ΡΡ ΠΌΠ΅ΡΠ΅ΠΎΡΡΠ°Π½ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΠΊΠΎΠ»ΠΎ Π³ΠΎΠ΄Π° ΠΎΡ 2Ρ Π±Π°ΡΠ°ΡΠ΅Π΅ΠΊ ΠΠ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΠ°Π΄ΠΈΠΎΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π΄Π΅Π»Π°ΡΡ Π΄Π°ΠΆΠ΅ Π½Π°ΡΡΡΠ½ΡΠ΅ ΡΠ°ΡΡ, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎ Π½Π°ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΠ± ΡΠ»ΠΈΡΠ½ΡΡ Π²ΠΎΠΊΠ·Π°Π»ΡΠ½ΡΡ .
Π£Π΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎΡΠ° DCF ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΡ ΠΈ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΠΎΠΊ. ΠΡΠ΅Π³ΠΎ Π·Π° 10-20$ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΠΏΠΈΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· Π°Π½ΡΠ΅Π½Π½Ρ Ρ Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ ΠΈ TTL-Π²ΡΡ
ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ Arduino ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ.
ΠΠ»Ρ Arduino ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΈ
ΠΠ΅Π»Π°ΡΡΠΈΠ΅ ΠΌΠΎΠ³ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΡΠΎΠ°ΠΏΠ³ΡΠ΅ΠΉΠ΄ΠΈΡΡ ΡΡΠ°ΡΡΠ΅ Π±Π°Π±ΡΡΠΊΠΈΠ½Ρ ΡΠ°ΡΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π² Π½ΠΈΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Ρ ΡΠ°Π΄ΠΈΠΎΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ:
ΠΠ°ΠΉΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ebay ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²Π°ΠΌ Β«Radio Controlled MovementΒ».
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π»Π°ΠΉΡΡ Π°ΠΊ Π΄Π»Ρ ΡΠ΅Ρ ΠΊΡΠΎ Π΄ΠΎΡΠΈΡΠ°Π» Π΄ΠΎ ΡΡΠ΄Π°. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ ΠΏΠ°ΡΠ΅ ΡΡΡΡΡ ΠΊΠΌ Π½Π΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊΠ° ΡΠ°Π΄ΠΈΠΎΡΠΈΠ³Π½Π°Π»Π°, ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ³Π½Π°Π» Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π Google Play Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«DCF77 EmulatorΒ», ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΈΠ³Π½Π°Π» Π½Π° Π½Π°ΡΡΠ½ΠΈΠΊΠΈ. ΠΠΎ Π·Π°Π²Π΅ΡΠ΅Π½ΠΈΡΠΌ Π°Π²ΡΠΎΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ±ΠΌΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ Π½Π°ΡΡΠ½ΠΈΠΊΠΎΠ² Π²ΠΎΠΊΡΡΠ³ ΡΠ°ΡΠΎΠ², ΠΎΠ½ΠΈ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΡΠΈΠ³Π½Π°Π» (ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ, Π²Π΅Π΄Ρ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π½Π°ΡΡΠ½ΠΈΠΊΠΈ Π½Π΅ Π²ΡΠ΄Π°Π΄ΡΡ ΡΠΈΠ³Π½Π°Π» 77ΠΠΡ, Π½ΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΡΠΈΠ΅ΠΌ ΠΈΠ΄Π΅Ρ Π·Π° ΡΡΠ΅Ρ Π³Π°ΡΠΌΠΎΠ½ΠΈΠΊ). Π£ ΠΌΠ΅Π½Ρ Π½Π° Android 9 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»Π° ΡΠΎΠ²ΡΠ΅ΠΌ β ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π·Π²ΡΠΊΠ° (Π° ΠΌΠΎΠΆΠ΅Ρ Ρ Π΅Π³ΠΎ Π½Π΅ ΡΠ»ΡΡΠ°Π» β 77ΠΠΡ Π²Π΅Π΄Ρ:), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠΎΠ²Π΅Π·Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΡΠΎΡΠ΅ΠΌ, Π΄Π΅Π»Π°ΡΡ ΡΠ΅Π±Π΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² DCF, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π° ΡΠΎΠΉ ΠΆΠ΅ Arduino ΠΈΠ»ΠΈ ESP32:
(ΠΈΡΡΠΎΡΠ½ΠΈΠΊ
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘ΠΈΡΡΠ΅ΠΌΠ° DCF, ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΈ Π²Π΅Π·Π΄Π΅, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ Π² Π·ΠΎΠ½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ°. ΠΡΠΌΠ°Π΅ΡΡΡ, Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΡΡ ΡΠΈΡΡΠΎΠ²ΠΈΠ·Π°ΡΠΈΡ ΠΈ Β«ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π²Π΅ΡΠ΅ΠΉΒ», ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Ρ Π΅ΡΠ΅ Π΄ΠΎΠ»Π³ΠΎ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com