DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Hello Habr.

Probabbilment ħafna li jixtru għassa jew stazzjon tat-temp raw l-Arloġġ Ikkontrollat ​​bir-Radju jew saħansitra l-logo tal-Arloġġ Atomic fuq l-imballaġġ. Dan huwa konvenjenti ħafna, għax għandek bżonn biss li tpoġġi l-arloġġ fuq il-mejda, u wara ftit se taġġusta awtomatikament għall-ħin eżatt.
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Ejja naraw kif taħdem u ikteb decoder f'Python.

Hemm sistemi differenti ta 'sinkronizzazzjoni tal-ħin. L-aktar popolari fl-Ewropa hija s-sistema Ġermaniża DCF-77, Il-Ġappun għandu s-sistema tiegħu stess JJY, fl-Istati Uniti hemm sistema WWVB, u l-bqija. Sussegwentement, l-istorja se tkun dwar DCF77, bħala l-aktar rilevanti u aċċessibbli għal akkoljenza f'xi postijiet fil-parti Ewropea tar-Russja u pajjiżi ġirien (residenti tal-Lvant Imbiegħed jista 'jkollhom l-opinjoni opposta, madankollu, huma, min-naħa tagħhom, jistgħu jirċievu u janalizza s-sinjal Ġappuniż;).

Dak kollu miktub hawn taħt se jkun dwar id-DCF77.

Riċeviment tas-sinjal

DCF77 huwa stazzjon ta 'mewġ twil li jopera fi frekwenza ta' 77.5 kHz u jittrasmetti sinjali f'modulazzjoni ta 'amplitudni. L-istazzjon 50KW jinsab 25 km minn Frankfurt, beda jopera fl-1959, u fl-1973 l-informazzjoni dwar id-data ġiet miżjuda mal-ħin eżatt. Il-wavelength bi frekwenza ta '77 KHz huwa twil ħafna, għalhekk id-dimensjonijiet tal-kamp ta' l-antenna huma wkoll pjuttost deċenti (ritratt mill-Wikipedija):
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

B'tali antenna u input ta 'enerġija, iż-żona ta' akkoljenza tkopri kważi l-Ewropa kollha, il-Belarus, l-Ukrajna u parti mir-Russja.

DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Kulħadd jista’ jirreġistra sinjal. Biex tagħmel dan, mur fuq ir-riċevitur onlajn http://websdr.ewi.utwente.nl:8901/, agħżel il-frekwenza 76.5KHz u l-modulazzjoni USB hemmhekk. Għandha tiftaħ immaġni li tidher xi ħaġa bħal din:

DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Hemm aħna agħfas il-buttuna tat-tniżżil u nirreġistra framment twil diversi minuti. Naturalment, jekk għandek riċevitur "reali" li kapaċi jirreġistra l-frekwenza 77.5KHz, tista 'tuża dak.

Naturalment, billi nirċievu sinjali tal-ħin tar-radju permezz tal-Internet, mhux se nirċievu ħin tassew preċiż - is-sinjal jiġi trażmess b'dewmien. Iżda l-għan tagħna huwa biss li nifhmu l-istruttura tas-sinjal; għal dan, ir-reġistrazzjoni tal-Internet hija aktar minn biżżejjed. Fil-ħajja reali, ovvjament, jintużaw apparati speċjalizzati biex jirċievu u jiddekodifikaw; dawn se jiġu diskussi hawn taħt.

Allura, irċevejna r-reġistrazzjoni, ejja nibdew nipproċessawha.

Dekodifikazzjoni tas-Sinjal

Ejja tagħbija l-fajl billi tuża Python u naraw l-istruttura tiegħu:

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()

Naraw modulazzjoni ta 'amplitudni tipika:
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Biex tissimplifika d-dekodifikazzjoni, ejja nieħdu l-envelope tas-sinjal billi tuża t-trasformazzjoni Hilbert:

analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])

Riżultat imkabbar:
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Ejja nnaqqsu l-emissjonijiet tal-istorbju billi tuża filtru low-pass, u fl-istess ħin nikkalkulaw il-valur medju, li se jkun utli aktar tard għall-parsing.

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

Riżultat (linja safra): sinjal tal-mewġ kważi kwadru li huwa pjuttost faċli biex tiġi analizzata.
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Parsing

L-ewwel trid tikseb is-sekwenza tal-bit. L-istruttura tas-sinjal innifsu hija sempliċi ħafna.
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Il-polz huma maqsuma f'intervalli tat-tieni. Jekk id-distanza bejn l-impulsi hija 0.1s (jiġifieri t-tul tal-polz innifsu huwa 0.9s), żid "0" mas-sekwenza tal-bit; jekk id-distanza hija 0.2s (jiġifieri t-tul huwa 0.8s), żid "1". It-tmiem ta 'kull minuta huwa indikat b'polz "twil", 2s twil, is-sekwenza tal-bit hija reset għal żero, u l-mili jerġa' jibda.

Dan ta 'hawn fuq huwa faċli biex tikteb f'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

Bħala riżultat, aħna jkollna sekwenza ta 'bits, fl-eżempju tagħna għal żewġ sekondi tidher bħal din:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Mill-mod, huwa interessanti li s-sinjal għandu wkoll "tieni saff" ta 'dejta. Is-sekwenza tal-bit hija wkoll kodifikata bl-użu modulazzjoni tal-fażi. Fit-teorija, dan għandu jipprovdi dekodifikazzjoni aktar robusta anke fil-każ ta 'sinjal imdgħajjef.

L-aħħar pass tagħna: niksbu d-dejta attwali. Il-bits jiġu trażmessi darba kull sekonda, għalhekk għandna total ta' 59 bit, li fihom hija kkodifikata ħafna informazzjoni:
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Il-bits huma deskritti fi Wikipedija, u huma pjuttost kurjużi. L-ewwel 15-il bit ma jintużawx, għalkemm kien hemm pjanijiet biex jintużaw għal sistemi ta 'twissija u difiża ċivili. Bit A1 jindika li l-arloġġ se jinbidel għall-ħin tas-sajf fis-siegħa li jmiss. Bit A2 jindika li addizzjonali qabża tat-tieni, li kultant tintuża biex taġġusta l-ħin skont ir-rotazzjoni tad-Dinja. Il-bits li jifdal jikkodifikaw sigħat, minuti, sekondi u data.

DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Għal dawk li jridu jesperimentaw waħedhom, il-kodiċi tad-dekodifikazzjoni jingħata taħt l-ispoiler.
Kodiċi tas-sors

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)

Meta nħaddmu l-programm, se naraw output simili għal dan:

0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42

Fil-fatt, dik hija l-maġija kollha. Il-vantaġġ ta 'sistema bħal din huwa li d-dekodifikazzjoni hija estremament sempliċi u tista' ssir fuq kwalunkwe, anke l-aktar mikrokontrollur sempliċi. Aħna sempliċiment ngħoddu t-tul tal-impulsi, nakkumulaw 60 bit, u fl-aħħar ta 'kull minuta nġibu l-ħin eżatt. Meta mqabbla ma 'metodi oħra ta' sinkronizzazzjoni tal-ħin (GPS, per eżempju, jew Alla jipprojbixxi, l-Internet:), tali sinkronizzazzjoni tar-radju ma teħtieġ prattikament l-ebda elettriku - per eżempju, stazzjon tat-temp tad-dar regolari jaħdem għal madwar sena fuq 2 batteriji AA. Għalhekk, anke l-arloġġi tal-polz huma magħmula b'sinkronizzazzjoni tar-radju, biex ma nsemmux, ovvjament, arloġġi tal-ħajt jew arloġġi tal-istazzjon tat-triq.

Il-konvenjenza u s-sempliċità ta 'DCF jattiraw ukoll dilettanti DIY. Għal $10-20 biss tista 'tixtri modulu tal-antenna lest b'riċevitur lest u output TTL, li jista' jiġi konness ma 'Arduino jew kontrollur ieħor.
DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Diġà miktub għal Arduino libreriji lesti. Madankollu, diġà huwa magħruf li tagħmel x'tagħmel fuq mikrokontrollur, tispiċċa jew b'arloġġ jew stazzjon tat-temp. B'tali apparat, li tikseb il-ħin eżatt huwa verament faċli, sakemm, ovvjament, tkun fiż-żona ta 'akkoljenza. Ukoll, tista 'tistrieħ l-iskrizzjoni "Atomic Clock" fuq l-arloġġ tiegħek, u fl-istess ħin tispjega lil kulħadd li l-apparat huwa verament sinkronizzat bl-użu ta' arloġġ atomiku.

Dawk li jixtiequ jistgħu saħansitra jaġġornaw l-arloġġ tan-nanna l-qadima tagħhom billi jinstallaw mekkaniżmu ġdid bis-sinkronizzazzjoni tar-radju:

DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?

Tista' ssib waħda fuq l-ebay billi tuża l-kliem prinċipali "Moviment Ikkontrollat ​​bir-Radju".

U fl-aħħarnett, hack tal-ħajja għal dawk li qraw s'issa. Anke jekk ma jkunx hemm trasmettitur ta 'sinjal tar-radju wieħed fil-koppja ta' eluf km li jmiss, mhuwiex diffiċli li tiġġenera tali sinjal lilek innifsek. Hemm programm fuq Google Play imsejjaħ "DCF77 Emulator" li joħroġ is-sinjal lill-headphones. Skont l-awtur, jekk tgeżwer il-wajer tal-headphones madwar l-għassa, dawn se jtellgħu s-sinjal (huwa interessanti kif, minħabba li headphones ordinarji mhux se jipproduċu sinjal ta '77KHz, iżda r-riċeviment huwa probabbilment dovut għal armoniċi). Fuq Android 9, il-programm ma ħadem xejn għalija - sempliċement ma kien hemm l-ebda ħoss (jew forsi ma smajtux - huwa 77KHz, wara kollox:), imma forsi xi ħadd ikollu xorti aħjar. Xi wħud, madankollu, jagħmlu lilhom infushom ġeneratur tas-sinjal DCF sħiħ, li huwa faċli li jsir fuq l-istess Arduino jew ESP32:

DCF77: kif taħdem is-sistema tas-sinjalar tal-ħin?
(sors sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

Konklużjoni

Is-sistema DCF irriżulta li kienet verament pjuttost sempliċi u konvenjenti. Bl-għajnuna ta 'riċevitur sempliċi u irħis, jista' jkollok il-ħin eżatt dejjem u kullimkien, ovvjament fiż-żona ta 'akkoljenza. Jidher li anke minkejja d-diġitalizzazzjoni mifruxa u l-Internet tal-Oġġetti, soluzzjonijiet sempliċi bħal dawn se jkunu mitluba għal żmien twil.

Sors: www.habr.com

Żid kumment