DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Mhoro Habr.

Pamwe vazhinji vanotenga wachi kana chiteshi chemamiriro ekunze vaona Radio Controlled Clock kana kunyange Atomic Clock logo pakurongedzerwa. Izvi zvakanyanya nyore, nekuti iwe unongoda kuisa wachi patafura, uye mushure mechinguva inozozvigadzirisa kune chaiyo nguva.
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Ngationei kuti inoshanda sei uye tinyore decoder muPython.

Kune akasiyana masisitimu ekuyananisa nguva. Iyo inonyanya kufarirwa muEurope iGerman system DCF-77, Japan ine hurongwa hwayo JJY, kuUSA kune system WWVB, zvichingoenda zvakadaro. Tevere, iyo nyaya ichava yeDCF77, seyakanyanya kukosha uye inosvikika yekugamuchirwa mune dzimwe nzvimbo muEuropean chikamu cheRussia uye nyika dzakavakidzana (vagari vekuFar East vangave nemafungiro akasiyana, zvisinei, ivo, ivowo, vanogona kugamuchira. uye ongorora chiratidzo cheJapan;).

Zvese zvakanyorwa pazasi zvichange zviri nezve DCF77.

Signal reception

DCF77 inzvimbo refu yemafungu inoshanda pafrequency ye77.5 kHz uye inotumira masaini mune amplitude modulation. Chiteshi che50KW chiri makiromita makumi maviri neshanu kubva kuFrankfurt, chakatanga kushanda muna 25, uye muna 1959 ruzivo rwezuva rwakawedzerwa kune iyo nguva chaiyo. Iyo wavelength pafrequency ye 1973 KHz yakareba kwazvo, saka zviyero zvemunda weantenna zvakare zvakatsiga (mufananidzo kubva kuWikipedia):
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Iine antenna yakadaro uye simba rekuisa, nzvimbo yekugamuchira inovhara inenge yese yeEurope, Belarus, Ukraine uye chikamu cheRussia.

DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Chero ani zvake anogona kunyora chiratidzo. Kuti uite izvi, ingoenda kune inogamuchira online http://websdr.ewi.utwente.nl:8901/, sarudza frequency 76.5KHz uye USB modulation ipapo. Mufananidzo unofanirwa kuvhurwa unotaridzika seizvi:

DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Ikoko tinodzvanya bhatani rekurodha uye tinorekodha chidimbu maminetsi akati wandei. Ehe, kana iwe uine "chaiyo" inogamuchira inokwanisa kurekodha iyo 77.5KHz frequency, unogona kuzvishandisa.

Ehe, nekugamuchira masaini eredhiyo nguva kuburikidza neInternet, isu hatigamuchire chaiyo chaiyo nguva - chiratidzo chinofambiswa nekunonoka. Asi chinangwa chedu ndechekunzwisisa chimiro chechiratidzo; nekuda kweizvi, kurekodha kweInternet kunopfuura zvakakwana. Muhupenyu chaihwo, hongu, maturusi ehunyanzvi anoshandiswa kugashira uye kudhirodha; ivo vanozokurukurwa pazasi.

Saka, tagamuchira kurekodhwa, ngatitangei kugadzirisa.

Signal Decoding

Ngatiisei faira tichishandisa Python uye tione chimiro chayo:

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

Isu tinoona yakajairika amplitude modulation:
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Kurerutsa decoding, ngatitorei hamvuropu yechiratidzo tichishandisa Hilbert shanduko:

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

Mubairo wakakurisa:
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Ngatigadzirise kuburitsa kweruzha tichishandisa yakaderera-pass sefa, uye panguva imwe chete kuverenga kukosha kweavhareji, iyo inozobatsira gare gare pakurongedza.

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

Mhedzisiro (yero mutsara): chiratidzo chinenge square wave chiri nyore kuongorora.
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Parsing

Kutanga iwe unofanirwa kuwana iyo bit sequence. Chimiro chechiratidzo pachacho chiri nyore kwazvo.
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Mapurusi akakamurwa kuita nhanho dzechipiri. Kana chinhambwe chiri pakati pemapuruzi chiri 0.1s (kureva kuti kureba kwepombo pachayo kuri 0.9s), wedzera "0" kune kutevedzana kwebhiti; kana chinhambwe chiri 0.2s (kureva kureba kuri 0.8s), wedzera "1". Kupera kweminiti imwe neimwe kunoratidzwa ne "refu" pulse, 2s kureba, bit sequence inogadziriswazve kune zero, uye kuzadza kunotanga zvakare.

Izvo zviri pamusoro zviri nyore kunyora muPython.

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

Nekuda kweizvozvo, tinowana kutevedzana kwemabits, mumuenzaniso wedu kwemasekonzi maviri zvinoita seizvi:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Nenzira, zvinonakidza kuti chiratidzo chinewo "yechipiri layer" yedata. Iyo bit sequence inoiswawo encoded uchishandisa phase modulation. Mune dzidziso, izvi zvinofanirwa kupa yakawedzera kusimba decoding kunyangwe iri nyaya yechiratidzo chisina simba.

Nhanho yedu yekupedzisira: kuwana iyo chaiyo data. Mabhiti anofambiswa kamwe pasekondi, saka isu tine huwandu hwe59 bits, umo ruzivo rwakawanda rwakaiswa encoded:
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Mabhiti anotsanangurwa mukati Wikipedia, uye vanoda kuziva. Iwo mabhiti gumi nemashanu ekutanga haashandiswe, kunyangwe paine zvirongwa zvekuashandisa kune yambiro masisitimu uye kudzivirira kwevanhu. Bit A15 inoratidza kuti wachi ichachinja kuita masikati ekuchengetedza nguva muawa inotevera. Bit A1 inoratidza kuti imwe yekuwedzera svetuka kechipiri, iyo dzimwe nguva inoshandiswa kugadzirisa nguva maererano nekutenderera kweNyika. Iwo asara mabhiti encode maawa, maminetsi, masekondi uye zuva.

DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Kune avo vanoda kuedza ivo pachavo, iyo decoding code inopiwa pasi pemuparadzi.
Purogiramu yekupa

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)

Patinomhanyisa chirongwa, tinoona kubuda kwakafanana neiyi:

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

Chaizvoizvo, ndiwo ese mashiripiti. Chakanakira sisitimu yakadai ndechekuti decoding yakapusa uye inogona kuitwa pane chero, kunyangwe yakapusa microcontroller. Isu tinongoverenga kureba kwemapulses, kuunganidza 60 bits, uye pakupera kweminiti imwe neimwe tinowana nguva chaiyo. Kuenzaniswa nedzimwe nzira dzekubatanidza nguva (GPS, semuenzaniso, kana Mwari ngaasadaro, Indaneti :), kuwiriranisa kweredhiyo kwakadaro kunoda anenge asina magetsi - semuenzaniso, chiteshi chemamiriro ekunze pamba chinomhanya kwerinenge gore pamabhatiri maviri AA. Naizvozvo, kunyangwe mawachi emaoko anogadzirwa neredhiyo synchronization, tisingataure, hongu, mawachi emadziro kana mawachi echiteshi.

Iko kureruka uye kureruka kweDCF zvakare kunokwezva DIY vanofarira. Nemadhora gumi kusvika makumi maviri chete unogona kutenga antenna module ine yakagadzirira-yakagadzirwa inogamuchira uye TTL inobuda, inogona kubatana neArduino kana imwe controller.
DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Yakatonyorerwa Arduino akagadzirira-akagadzirwa maraibhurari. Nekudaro, zvave kutozivikanwa kuti kunyangwe zvaunoita pane microcontroller, unopedzisira uine wachi kana chiteshi chemamiriro ekunze. Nechigadzirwa chakadaro, kuwana nguva chaiyo iri nyore chaizvo, yakapiwa, hongu, iwe uri munzvimbo yekugamuchira. Zvakanaka, iwe unogona kuturika chinyorwa "Atomic Clock" pawachi yako, uye panguva imwechete tsanangurira kune wese munhu kuti mudziyo wakanyatso kuwiriraniswa uchishandisa wachi yeatomu.

Avo vanoshuvira vanogona kunyange kukwidziridza wachi yavo yekare nekuisa michina mitsva ine radio synchronization:

DCF77: Iyo nguva yechiratidzo system inoshanda sei?

Unogona kuwana imwe pa ebay uchishandisa mazwi akakosha "Radio Controlled Movement".

Uye pakupedzisira, hack yehupenyu kune avo vakaverenga kusvika zvino. Kunyangwe pasina kana redhiyo chiratidzo chedhidhiyo mune anotevera zviuru zvemakiromita, hazvina kuoma kugadzira chiratidzo chakadaro iwe pachako. Pane chirongwa paGoogle Play chinonzi "DCF77 Emulator" chinoburitsa chiratidzo kumahedhifoni. Sekureva kwemunyori, kana iwe ukaputira waya yehedhifoni pawachi, ivo vanotora chiratidzo (zvinonakidza sei, nekuti akajairwa mahedhifoni haaburitse chiratidzo che77KHz, asi kugamuchirwa kungangove kuri nekuda kweharmonics). Pa Android 9, chirongwa hachina kundiitira zvachose - pakanga pasina ruzha (kana kuti pamwe handina kuzvinzwa - 77KHz, mushure mezvose :), asi pamwe mumwe munhu angave nerombo rakanaka. Vamwe, zvisinei, vanozviita yakazara-yakazara DCF chiratidzo jenareta, iri nyore kugadzira pane imwechete Arduino kana ESP32:

DCF77: Iyo nguva yechiratidzo system inoshanda sei?
(tsime sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

mhedziso

Iyo DCF sisitimu yakazove yakapusa uye nyore. Nerubatsiro rwemugamuchiri ari nyore uye akachipa, unogona kuva nenguva chaiyo nguva dzose uye kwese kwese, hongu munzvimbo yekugamuchira. Zvinoita sekunge kunyangwe kupararira kwedhijitari uye Internet yezvinhu, zvigadziriso zviri nyore zvakadaro zvichange zvichidikanwa kwenguva yakareba.

Source: www.habr.com

Voeg