DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Hello Habr.

Mohlomong ba bangata ba rekang oache kapa seteishene sa boemo ba leholimo ba bone letšoao la Radio Controlled Clock kapa esita le letšoao la Atomic Clock ka har'a sephutheloana. Sena se loketse haholo, hobane o hloka feela ho beha oache tafoleng, 'me ka mor'a nakoana e tla ikamahanya le nako e nepahetseng.
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ha re boneng hore na e sebetsa joang 'me re ngole decoder ho Python.

Ho na le litsamaiso tse fapaneng tsa khokahano ea nako. E tummeng ka ho fetisisa Europe ke tsamaiso ea Jeremane DCF-77, Japane e na le tsamaiso ea eona Phetla JJY, USA ho na le tsamaiso WWVB, joalo joalo. Ka mor'a moo, pale e tla ba ka DCF77, e le e loketseng ka ho fetisisa le e fumanehang bakeng sa ho amoheloa libakeng tse ling karolong ea Europe ea Russia le linaheng tsa boahelani (baahi ba Bochabela bo Hōle ba ka 'na ba e-ba le maikutlo a fapaneng, leha ho le joalo, le bona, ba ka amohela. le ho sekaseka lets'oao la Majapane;).

Ntho e ngoe le e ngoe e ngotsoeng ka tlase e tla bua ka DCF77.

Kamohelo ea lipontšo

DCF77 ke seteishene se selelele sa maqhubu se sebetsang ka sekhahla sa 77.5 kHz le ho fetisa matshwao ka ho feto-fetoha ha molumo oa amplitude. Seteishene sa 50KW se lik'hilomithara tse 25 ho tloha Frankfurt, se qalile ho sebetsa ka 1959, 'me ka 1973 tlhahisoleseding ea letsatsi e ile ea eketsoa ka nako e nepahetseng. Bophahamo ba maqhubu a maqhubu a 77 KHz bo bolelele haholo, ka hona, boholo ba lebala la antenna le bona bo nepahetse (setšoantšo se tsoang Wikipedia):
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ka li-antenna tse joalo le ho kenya matla, sebaka sa kamohelo se akaretsa hoo e batlang e le Europe eohle, Belarus, Ukraine le karolo ea Russia.

DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Mang kapa mang a ka rekota lets'oao. Ho etsa sena, e ea feela ho moamoheli oa inthanete http://websdr.ewi.utwente.nl:8901/, khetha maqhubu a 76.5KHz le ho feto-fetoha ha USB moo. Setšoantšo se lokela ho buleha se shebahalang tjena:

DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ha re le moo re tobetsa konopo ea ho jarolla ebe re rekota sekhechana sa metsotso e mengata. Ehlile, haeba u na le moamoheli oa "sebele" ea khonang ho rekota maqhubu a 77.5KHz, u ka e sebelisa.

Ehlile, ka ho amohela matšoao a nako ea seea-le-moea ka Marang-rang, re ke ke ra fumana nako e nepahetseng e le kannete - lets'oao le fetisoa ka tieho. Empa sepheo sa rona ke ho utloisisa sebopeho sa lets'oao feela; bakeng sa sena, ho rekota marang-rang ho feta ho lekana. Bophelong ba 'nete, ho sebelisoa lisebelisoa tse khethehileng bakeng sa ho amohela le ho hlophisa; li tla tšohloa ka tlase.

Kahoo, re se re fumane rekoto, ha re qaleng ho e sebetsa.

Tlhaloso ea Letšoao

Ha re kenye faele re sebelisa Python 'me re bone sebopeho sa eona:

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

Re bona modulation e tloaelehileng ea amplitude:
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ho nolofatsa decoding, ha re nke enfelopo ea matšoao re sebelisa phetoho ea Hilbert:

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

Sephetho se atolositsoeng:
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ha re tlose mesi ea lerata re sebelisa sefahla se tlase, 'me ka nako e ts'oanang re bale boleng bo tloaelehileng, bo tla ba molemo hamorao bakeng sa ho arola.

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

Sephetho (mola o mosehla): leqhubu le batlang le le sekwere le bonolo ho le sekaseka.
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Ho hlalosa

Pele u lokela ho fumana tatellano ea li-bit. Sebopeho sa pontšo ka boeona se bonolo haholo.
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Li-pulses li arotsoe ka mekhahlelo ea bobeli. Haeba sebaka se pakeng tsa li-pulse ke 0.1s (ke hore bolelele ba sekhahla ka boeona ke 0.9s), eketsa "0" ho tatellano e nyenyane; haeba sebaka se le 0.2s (e leng bolelele ke 0.8s), eketsa "1". Qetello ea motsotso o mong le o mong e bontšoa ke "nako e telele", 2s e telele, tatellano e nyenyane e khutlisetsoa ho zero, 'me ho tlatsa ho qala hape.

Lintlha tse ka holimo li bonolo ho li ngola ka 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

Ka lebaka leo, re fumana tatellano ea likotoana, mohlala oa rona bakeng sa metsotsoana e 'meli e shebahala tjena:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Ka tsela, hoa thahasellisa hore letšoao le boetse le na le "lera la bobeli" la data. Biti tatelano e boetse e encoded sebelisa ho feto-fetoha ha maemo. Ka khopolo, sena se lokela ho fana ka li-decoding tse matla haholoanyane esita le tabeng ea letšoao le fokolang.

Mohato oa rona oa ho qetela: ho fumana data ea sebele. Li-Bits li fetisoa hang ka motsotsoana, kahoo re na le kakaretso ea li-bits tse 59, moo boitsebiso bo bongata bo kenngoeng ka khouto:
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Likotoana li hlalositsoe ho Wikipedia, 'me ba labalabela ho tseba. Li-bits tsa pele tsa 15 ha li sebelisoe, leha ho ne ho e-na le merero ea ho li sebelisa bakeng sa mekhoa ea temoso le ts'ireletso ea sechaba. Bit A1 e bonts'a hore oache e tla fetohela ho nako ea ho boloka motšehare ka hora e tlang. Bit A2 e bontša hore e eketsehileng tlola motsotsoana, eo ka linako tse ling e sebelisoang ho fetola nako ho latela ho potoloha ha Lefatše. Li-bits tse setseng li kenyelletsa lihora, metsotso, metsotsoana le letsatsi.

DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

Bakeng sa ba batlang ho etsa liteko ka bobona, khoutu ea decoding e fanoa tlas'a spoiler.
Khoutu ea mohloli

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)

Ha re tsamaisa lenaneo, re tla bona tlhahiso e tšoanang le ena:

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

Ha e le hantle, ke eona feela boselamose. Monyetla oa sistimi e joalo ke hore decoding e bonolo haholo mme e ka etsoa ho efe kapa efe, esita le microcontroller e bonolo ka ho fetisisa. Re bala feela bolelele ba li-pulses, re bokella likotoana tse 60, 'me qetellong ea motsotso o mong le o mong re fumana nako e tobileng. Ha ho bapisoa le mekhoa e meng ea ho hokahanya ha nako (GPS, mohlala, kapa ha Molimo a hanela, Inthanete :), ho hokahanya ha seea-le-moea ho hloka hoo e batlang e le ha ho na motlakase - ka mohlala, seteishene sa kamehla sa boemo ba leholimo se sebetsa nako e ka etsang selemo ho li-betri tsa 2 AA. Ka hona, esita le lioache tsa letsoho li entsoe ka ho lumellana ha seea-le-moea, ho sa tsotellehe, ho hlakile, litebelo tsa lebota kapa liteishene tsa literata.

Bonolo le bonolo ba DCF le tsona li hohela ba chesehelang DIY. Bakeng sa $ 10-20 feela o ka reka mojule oa antenna o itokiselitseng o nang le moamoheli o lokiselitsoeng le tlhahiso ea TTL, e ka hokahantsoeng le Arduino kapa molaoli e mong.
DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

E se e ngoletsoe Arduino lilaebrari tse seng li entsoe. Leha ho le joalo, ho se ho ntse ho tsejoa hore ho sa tsotellehe hore na u etsa eng ka microcontroller, u qetella u e-na le oache kapa seteishene sa boemo ba leholimo. Ka sesebelisoa se joalo, ho fumana nako e nepahetseng ho hlile ho bonolo, hafeela, ha e le hantle, u le sebakeng sa kamohelo. Ho lokile, o ka fanyeha mongolo "Atomic Clock" oacheng ea hau, 'me ka nako e ts'oanang u hlalosetse motho e mong le e mong hore sesebelisoa se hlile se hokahantsoe ho sebelisoa oache ea athomo.

Ba lakatsang ba ka ba ba ntlafatsa oache ea nkhono oa bona oa khale ka ho kenya mochini o mocha o nang le khokahano ea radio:

DCF77: Sisteme ea lets'oao la nako e sebetsa joang?

U ka e fumana ho ebay u sebelisa mantsoe a sehlooho "Motsamao o Laolehileng oa Radio".

'Me qetellong, ho senya bophelo bakeng sa ba balileng ho fihlela joale. Le haeba ho se na sesebelisoa se le seng sa seea-le-moea sebakeng sa lik'hilomithara tse likete tse latelang, ha ho thata ho iketsetsa lets'oao le joalo. Ho na le lenaneo ho Google Play le bitsoang "DCF77 Emulator" le hlahisang lets'oao ho li-headphone. Ho ea ka mongoli, haeba u phuthela terata ea li-headphone ho pota oache, ba tla nka letšoao (hoa thahasellisa joang, hobane li-headphones tse tloaelehileng li ke ke tsa hlahisa letšoao la 77KHz, empa kamohelo e ka 'na ea e-ba ka lebaka la li-harmonics). Ho Android 9, lenaneo ha lea ka la nthusa ho hang - ho ne ho se na molumo (kapa mohlomong ha kea o utloa - ke 77KHz, ka mor'a tsohle :), empa mohlomong motho e mong o tla ba le mahlohonolo. Leha ho le joalo, ba bang ba iketsetsa jenereithara e felletseng ea DCF, eo ho leng bonolo ho e etsa ho Arduino kapa ESP32 e tšoanang:

DCF77: Sisteme ea lets'oao la nako e sebetsa joang?
(mohloli o moholo sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

fihlela qeto e

Sistimi ea DCF e ile ea bonahala e le bonolo ebile e le bonolo. Ka thuso ea mochine o bonolo le o theko e tlaase, o ka ba le nako e nepahetseng kamehla le hohle, ha e le hantle sebakeng sa kamohelo. Ho bonahala eka le ho sa tsotellehe ho ata ha digitalization le Inthanete ea Lintho, litharollo tse joalo tse bonolo li tla ba teng ka nako e telele.

Source: www.habr.com

Eketsa ka tlhaloso