Halo Habr.
Is dòcha gu bheil mòran a cheannaicheas uaireadair no stèisean sìde air an suaicheantas Cloc Smachd Rèidio no eadhon Cloc Atamach fhaicinn air a’ phacaid. Tha seo gu math goireasach, oir feumaidh tu dìreach an gleoc a chuir air a’ bhòrd, agus an ceann greis atharraichidh e gu fèin-ghluasadach chun dearbh àm.
Feuch an obraich sinn a-mach mar a tha e ag obair agus sgrìobh decoder ann am Python.
Tha diofar shiostaman sioncronaidh ùine ann. Is e siostam na Gearmailt am fear as mòr-chòrdte san Roinn Eòrpa
Bidh a h-uile dad a tha sgrìobhte gu h-ìosal mu dheidhinn an DCF77.
Fàilteachadh chomharran
Tha DCF77 na stèisean tonn fada ag obair aig tricead 77.5 kHz agus a’ tar-chuir comharran ann am modaladh leudachaidh. Tha an stèisean 50KW suidhichte 25 km bho Frankfurt, thòisich e ag obair ann an 1959, agus ann an 1973 chaidh fiosrachadh a chuir ris an dearbh àm. Tha an tonn-tonn aig tricead 77 KHz glè fhada, agus mar sin tha tomhasan an raon antenna cuideachd gu math reusanta (dealbh bho Wikipedia):
Le leithid de antenna agus cumhachd a-steach, tha an ionad fàilte a 'còmhdach cha mhòr a h-uile Roinn Eòrpa, Belarus, an Úcráin agus pàirt den Ruis.
Faodaidh duine sam bith comharra a chlàradh. Gus seo a dhèanamh, dìreach a dhol chun a 'ghlacadair air-loidhne
An sin brùth sinn am putan luchdaich sìos agus clàraich sinn criomag grunn mhionaidean a dh’ fhaid. Gu dearbh, ma tha “fìor ghlacadair” agad a tha comasach air tricead 77.5KHz a chlàradh, faodaidh tu sin a chleachdadh.
Gu dearbh, le bhith a 'faighinn comharran ùine rèidio tron eadar-lìon, chan fhaigh sinn ùine fìor cheart - tha an comharra air a ghluasad le dàil. Ach is e ar n-amas dìreach structar a’ chomharra a thuigsinn; airson seo, tha clàradh eadar-lìn nas motha na gu leòr. Ann am fìor bheatha, gu dearbh, thathas a’ cleachdadh innealan sònraichte airson faighinn agus dì-chòdachadh; thèid beachdachadh orra gu h-ìosal.
Mar sin, tha sinn air an clàradh fhaighinn, tòisichidh sinn ga ghiullachd.
Còdachadh chomharran
Nach luchdaich sinn am faidhle a’ cleachdadh Python agus chì sinn an structar aige:
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()
Chì sinn atharrachadh àbhaisteach amplitude:
Gus dì-chòdachadh a dhèanamh nas sìmplidhe, gabhamaid a’ chèis chomharran a’ cleachdadh cruth-atharrachadh Hilbert:
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
Toradh nas motha:
Feuch an cuir sinn a-mach sgaoilidhean fuaim le bhith a ’cleachdadh sìoltachan pas ìosal, agus aig an aon àm obraich a-mach an luach cuibheasach, a bhios feumail airson parsadh nas fhaide air adhart.
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
Toradh (loidhne buidhe): comharra tonn cha mhòr ceàrnagach a tha gu math furasta a sgrùdadh.
A' parsadh
An toiseach feumaidh tu an sreath bit fhaighinn. Tha structar nan comharran fhèin gu math sìmplidh.
Tha na buillean air an roinn ann an dàrna amannan. Ma tha an astar eadar buillean 0.1s (ie fad a’ chuisle fhèin 0.9s), cuir “0” ris an t-sreath bit; ma tha an t-astar 0.2s (i.e. tha an fhaid 0.8s), cuir “1” ris. Tha deireadh gach mionaid air a chomharrachadh le buillean “fada”, 2s a dh’ fhaid, tha an sreath bit air ath-shuidheachadh gu neoni, agus tha an lìonadh a’ tòiseachadh a-rithist.
Tha na tha gu h-àrd furasta a sgrìobhadh ann am 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
Mar thoradh air an sin, gheibh sinn sreath de phìosan, anns an eisimpleir againn airson dà dhiog tha e a’ coimhead mar seo:
0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000
Co-dhiù, tha e inntinneach gu bheil “dàrna sreath” de dhàta aig a’ chomharra cuideachd. Tha an sreath bit cuideachd air a chòdachadh le bhith a’ cleachdadh
An ceum mu dheireadh againn: faighinn an fhìor dàta. Bithear a’ tar-chuir pìosan aon uair san diog, agus mar sin tha 59 pìosan againn uile gu lèir, anns a bheil tòrr fiosrachaidh air a chòdachadh:
Tha na pìosan air am mìneachadh ann an
Dhaibhsan a tha airson feuchainn leotha fhèin, tha an còd dì-chòdaidh air a thoirt seachad fon spoiler.
Còd tùs
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)
Nuair a ruitheas sinn am prògram, chì sinn toradh coltach ri seo:
0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42
Gu fìrinneach, is e sin an draoidheachd gu lèir. Is e a’ bhuannachd a tha ann an leithid de shiostam gu bheil dì-chòdachadh gu math sìmplidh agus faodar a dhèanamh air gin, eadhon am microcontroller as sìmplidh. Bidh sinn dìreach a’ cunntadh fad nam buillean, cruinnichidh sinn 60 pìosan, agus aig deireadh gach mionaid gheibh sinn an dearbh àm. Ann an coimeas ri dòighean eile synchronization ùine (GPS, mar eisimpleir, no Dia toirmisgte, an eadar-lìon :), a leithid rèidio synchronization feum cha mhòr gun dealan - mar eisimpleir, cunbhalach stèisean sìde dachaigh a 'ruith airson timcheall air bliadhna air 2 AA bataraidhean. Mar sin, bidh eadhon uaireadairean wrist air an dèanamh le sioncronadh rèidio, gun luaidh air, gu dearbh, uaireadairean balla no uaireadairean stèisean sràide.
Bidh goireasachd agus sìmplidheachd DCF cuideachd a’ tàladh luchd-dealasach DIY. Airson dìreach $ 10-20 faodaidh tu modal antenna deiseil a cheannach le cuidhteas deiseil agus toradh TTL, a dh’ fhaodar a cheangal ri Arduino no rianadair eile.
Sgrìobhte mu thràth airson Arduino
Faodaidh an fheadhainn a tha ag iarraidh eadhon uaireadair an t-seann seanmhair ùrachadh le bhith a’ stàladh uidheamachd ùr le sioncronadh rèidio:
Gheibh thu fear air ebay a’ cleachdadh na prìomh fhaclan “Radio Controlled Movement”.
Agus mu dheireadh, hack beatha dhaibhsan a tha air leughadh gu ruige seo. Fiù mura h-eil aon inneal-sgaoilidh comharran rèidio anns an ath dhà mhìle km, chan eil e duilich a leithid de chomharran a ghineadh thu fhèin. Tha prògram air Google Play leis an t-ainm “DCF77 Emulator” a bheir a-mach an comharra gu fònaichean-cluaise. A rèir an ùghdair, ma phaisg thu uèir nam fònaichean-cluaise timcheall an uaireadair, togaidh iad an comharra (tha e inntinneach ciamar, leis nach toir fònaichean-cluaise àbhaisteach comharra 77KHz, ach is dòcha gu bheil fàilteachadh mar thoradh air harmonics). Air Android 9, cha do dh’ obraich am prògram dhòmhsa idir - dìreach cha robh fuaim ann (no is dòcha nach cuala mi e - is e 77KHz a th’ ann, às deidh a h-uile càil :), ach is dòcha gum bi fortan nas fheàrr aig cuideigin. Bidh cuid, ge-tà, gan dèanamh fhèin nan gineadair chomharran DCF làn-chuimseach, a tha furasta a dhèanamh air an aon Arduino no ESP32:
(stòr
co-dhùnadh
Thionndaidh an siostam DCF a-mach gu bhith gu math sìmplidh agus goireasach. Le cuideachadh bho ghlacadair sìmplidh agus saor, faodaidh tu an dearbh ùine a bhith agad an-còmhnaidh agus anns a h-uile àite, gu dearbh anns an ionad fàilte. Tha e coltach, eadhon a dh’ aindeoin digiteachadh farsaing agus eadar-lìn nan rudan, gum bi feum air fuasglaidhean sìmplidh mar sin airson ùine mhòr.
Source: www.habr.com