Nyob zoo Habr.
Tej zaum muaj coob tus uas yuav lub moos lossis chaw nres tsheb huab cua tau pom Xov Tooj Cua Tswj Clock lossis txawm tias Atomic Clock logo ntawm lub ntim. Qhov no yooj yim heev, vim tias koj tsuas yog yuav tsum tau muab lub moos tso rau ntawm lub rooj, thiab tom qab ib ntus nws yuav hloov kho raws li lub sijhawm.
Cia peb xyuas seb nws ua haujlwm li cas thiab sau tus decoder hauv Python.
Muaj ntau lub sijhawm synchronization tshuab. Qhov nrov tshaj plaws hauv Tebchaws Europe yog German system
Txhua yam sau hauv qab no yuav hais txog DCF77.
Teeb liab txais
DCF77 yog qhov chaw nres tsheb ntev nthwv dej ua haujlwm ntawm qhov zaus ntawm 77.5 kHz thiab xa cov teeb liab hauv amplitude modulation. Qhov chaw nres tsheb 50KW nyob ntawm 25 km ntawm Frankfurt, nws pib ua haujlwm hauv xyoo 1959, thiab xyoo 1973 cov ntaub ntawv tau muab ntxiv rau lub sijhawm. Lub wavelength ntawm ib zaus ntawm 77 KHz yog ntev heev, yog li qhov ntev ntawm lub kav hlau txais xov teb kuj zoo heev (duab los ntawm Wikipedia):
Nrog xws li ib tug kav hlau txais xov thiab lub hwj chim input, lub txais tos cheeb tsam npog yuav luag tag nrho cov teb chaws Europe, Belarus, Ukraine thiab ib feem ntawm Russia.
Leej twg tuaj yeem kaw lub teeb liab. Txhawm rau ua qhov no, tsuas yog mus rau tus txais online
Nyob ntawd peb nias lub download khawm thiab sau ib feem ob peb feeb ntev. Tau kawg, yog tias koj muaj "tiag tiag" receiver muaj peev xwm sau tau 77.5KHz zaus, koj tuaj yeem siv qhov ntawd.
Tau kawg, los ntawm kev tau txais xov tooj cua lub sijhawm teeb liab ntawm Is Taws Nem, peb yuav tsis tau txais lub sijhawm tiag tiag - lub teeb liab kis tau nrog kev ncua. Tab sis peb lub hom phiaj tsuas yog kom nkag siab txog cov qauv ntawm lub teeb liab; rau qhov no, kev kaw hauv Internet yog ntau tshaj li txaus. Hauv lub neej tiag tiag, tau kawg, cov cuab yeej tshwj xeeb yog siv rau kev txais thiab kev txiav txim siab; lawv yuav tau tham hauv qab no.
Yog li, peb tau txais cov ntaubntawv povthawj siv, cia peb pib ua nws.
Teeb liab decoding
Cia peb thauj cov ntaub ntawv siv Python thiab saib nws cov qauv:
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()
Peb pom amplitude modulation:
Txhawm rau kom yooj yim txiav txim siab, cia peb nqa lub hnab ntawv teeb liab siv Hilbert hloov pauv:
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
Cov txiaj ntsig loj:
Cia peb ua kom cov suab nrov emissions siv lub lim dej qis, thiab tib lub sijhawm suav cov nqi nruab nrab, uas yuav muaj txiaj ntsig tom qab rau kev txheeb xyuas.
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
Qhov tshwm sim (kab daj): yuav luag square yoj teeb liab uas yooj yim heev rau kev txheeb xyuas.
Parsing
Ua ntej koj yuav tsum tau txais qhov me ntsis ib ntus. Lub teeb liab qauv nws tus kheej yog yooj yim heev.
Cov pulses muab faib ua ob ntu. Yog hais tias qhov kev ncua deb ntawm pulses yog 0.1s (piv txwv li qhov ntev ntawm lub mem tes nws tus kheej yog 0.9s), ntxiv "0" rau qhov sib lawv liag me ntsis; yog tias qhov kev ncua deb yog 0.2s (piv txwv li qhov ntev yog 0.8s), ntxiv "1". Qhov kawg ntawm txhua feeb yog qhia los ntawm "ntev" mem tes, 2s ntev, qhov me ntsis ib ntus rov pib dua xoom, thiab rov pib dua.
Cov saum toj no yooj yim sau hauv 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
Yog li ntawd, peb tau txais ib ntu ntawm cov khoom, hauv peb qhov piv txwv rau ob vib nas this nws zoo li no:
0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000
Los ntawm txoj kev, nws yog qhov nthuav tias lub teeb liab kuj muaj "thib ob" ntawm cov ntaub ntawv. Lub ntsis ib theem kuj yog encoded siv
Peb cov kauj ruam kawg: tau txais cov ntaub ntawv tiag tiag. Cov khoom raug xa mus ib zaug hauv ib ob, yog li peb muaj tag nrho ntawm 59 cov khoom, uas muaj ntau cov ntaub ntawv tau nkag mus:
Cov khoom tau piav qhia hauv
Rau cov neeg uas xav sim ntawm lawv tus kheej, tus lej txiav txim siab tau muab rau hauv qab tus spoiler.
Qhov chaws code
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)
Thaum peb khiav qhov program, peb yuav pom cov zis zoo ib yam li qhov no:
0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42
Qhov tseeb, qhov ntawd yog txhua yam khawv koob. Qhov zoo ntawm xws li ib qho system yog tias kev txiav txim siab yog qhov yooj yim heev thiab tuaj yeem ua tiav ntawm ib qho, txawm tias qhov yooj yim tshaj plaws microcontroller. Peb tsuas suav qhov ntev ntawm cov pulses, sau 60 khoom, thiab thaum kawg ntawm txhua feeb peb tau txais lub sijhawm. Piv nrog rau lwm txoj hauv kev synchronization ntawm lub sijhawm (GPS, piv txwv li, lossis Vajtswv txwv, Is Taws Nem:), xws li xov tooj cua synchronization yuav tsum tsis muaj hluav taws xob - piv txwv li, lub chaw nres tsheb huab cua hauv tsev ua haujlwm li ib xyoos ntawm 2 AA roj teeb. Yog li ntawd, txawm lub wristwatches yog tsim nrog xov tooj cua synchronization, tsis hais, ntawm chav kawm, phab ntsa watches los yog txoj kev chaw nres tsheb watches.
Qhov yooj yim thiab yooj yim ntawm DCF kuj nyiam DIY enthusiasts. Tsuas yog $ 10-20 koj tuaj yeem yuav ib lub kav hlau txais xov npaj tau nrog lub txais tos thiab TTL tso tawm, uas tuaj yeem txuas nrog Arduino lossis lwm yam khoom siv.
Twb tau sau rau Arduino
Cov neeg uas xav tuaj yeem hloov kho lawv cov pog laus saib los ntawm kev txhim kho lub tshuab tshiab nrog xov tooj cua synchronization:
Koj tuaj yeem nrhiav tau ib qho ntawm ebay siv cov lus tseem ceeb "Xov tooj cua tswj kev txav".
Thiab thaum kawg, lub neej hack rau cov neeg uas tau nyeem tam sim no. Txawm hais tias tsis muaj ib lub xov tooj cua xa xov tooj cua hauv ob peb txhiab km tom ntej, nws tsis yooj yim los tsim cov teeb liab li no rau koj tus kheej. Muaj ib qho kev pab cuam hauv Google Play hu ua "DCF77 Emulator" uas tso tawm cov teeb liab rau lub mloog pob ntseg. Raws li tus kws sau ntawv, yog tias koj qhwv lub xov tooj ntawm lub mloog pob ntseg nyob ib ncig ntawm lub moos, lawv yuav khaws lub teeb liab (nws yog qhov nthuav, vim hais tias lub mloog pob ntseg zoo tib yam yuav tsis tsim lub teeb liab 77KHz, tab sis kev txais tos yog tej zaum vim kev sib haum xeeb). Hauv Android 9, qhov kev zov me nyuam tsis ua haujlwm rau kuv - tsis muaj suab nrov (lossis tej zaum kuv tsis hnov ββnws - nws yog 77KHz, tom qab tag nrho:), tab sis tej zaum ib tug neeg yuav muaj hmoo zoo. Qee qhov, txawm li cas los xij, ua rau lawv tus kheej ua tiav DCF teeb liab lub tshuab hluav taws xob, uas yooj yim ua rau tib Arduino lossis ESP32:
(qhov chaw
xaus
Lub DCF system tau ua kom yooj yim heev thiab yooj yim. Nrog kev pab los ntawm ib tug yooj yim thiab pheej yig receiver, koj muaj peev xwm muaj lub caij nyoog lub sij hawm ib txwm thiab nyob txhua qhov chaw, ntawm chav kawm nyob rau hauv lub txais tos. Nws zoo nkaus li tias txawm hais tias muaj ntau qhov digitalization thiab Internet ntawm Yam, cov kev daws teeb meem yooj yim no yuav xav tau ntev.
Tau qhov twg los: www.hab.com