DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Hello Habr.

Wataƙila da yawa waɗanda suka sayi agogo ko tashar yanayi sun ga agogon Sarrafa Radiyo ko ma tambarin Atomic Clock akan marufi. Wannan ya dace sosai, saboda kawai kuna buƙatar sanya agogo a kan tebur, kuma bayan ɗan lokaci zai daidaita ta atomatik zuwa daidai lokacin.
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Bari mu gano yadda yake aiki kuma mu rubuta decoder a Python.

Akwai tsarin daidaita lokaci daban-daban. Mafi shahara a Turai shine tsarin Jamus DCF-77, Japan na da nata tsarin JJY, a Amurka akwai tsarin Farashin WWVB, da sauransu. Na gaba, labarin zai kasance game da DCF77, kamar yadda ya fi dacewa da samun damar liyafar a wasu wurare a cikin yankin Turai na Rasha da kasashe makwabta (mazauna Gabas mai Nisa na iya samun sabanin ra'ayi, duk da haka, su, bi da bi, za su iya karɓa. da kuma nazarin siginar Jafananci;).

Duk abin da aka rubuta a ƙasa zai kasance game da DCF77.

liyafar sigina

DCF77 tashar igiyar ruwa ce mai tsayi da ke aiki akan mitar 77.5 kHz kuma tana watsa sigina a cikin haɓakar girma. Tashar 50KW tana da nisan kilomita 25 daga Frankfurt, ta fara aiki a 1959, kuma a cikin 1973 an ƙara bayanin kwanan wata zuwa daidai lokacin. Tsawon zangon mita 77 kHz yana da tsayi sosai, don haka girman filin eriya shima yana da kyau sosai (hoto daga Wikipedia):
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Tare da irin wannan eriya da shigar da wutar lantarki, yankin liyafar ya shafi kusan dukkanin Turai, Belarus, Ukraine da wani ɓangare na Rasha.

DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Kowa na iya yin rikodin sigina. Don yin wannan, kawai je zuwa mai karɓar kan layi http://websdr.ewi.utwente.nl:8901/, zaɓi mitar 76.5KHz da kebul na USB a can. Ya kamata a bude hoto mai kama da haka:

DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Anan muna danna maɓallin zazzagewa kuma muna yin rikodin guntu tsawon mintuna da yawa. Tabbas, idan kuna da mai karɓar "ainihin" mai iya yin rikodin mitar 77.5KHz, zaku iya amfani da hakan.

Tabbas, ta hanyar karɓar siginar lokacin rediyo ta Intanet, ba za mu sami ingantaccen lokacin gaske ba - ana watsa siginar tare da jinkiri. Amma burin mu shine kawai fahimtar tsarin siginar; saboda wannan, rikodin Intanet ya fi isa. A cikin rayuwa ta gaske, ba shakka, ana amfani da na'urori na musamman don karɓa da yanke hukunci; za a tattauna su a ƙasa.

Don haka, mun sami rikodin, bari mu fara sarrafa shi.

Ƙididdigar siginar

Bari mu loda fayil ɗin ta amfani da Python mu ga tsarinsa:

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

Muna ganin nau'in haɓakawa na al'ada:
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Don sauƙaƙe ƙaddamarwa, bari mu ɗauki ambulaf ɗin siginar ta amfani da canjin Hilbert:

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

Sakamakon girma:
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Bari mu daidaita hayaniya ta amfani da matattara mai ƙarancin wucewa, kuma a lokaci guda ƙididdige matsakaicin ƙimar, wanda zai zama da amfani daga baya don tantancewa.

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

Sakamako (layin rawaya): sigina kusan murabba'i wanda yake da sauƙin tantancewa.
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Yin nazari

Da farko kuna buƙatar samun bitar bitar. Tsarin siginar kanta abu ne mai sauqi qwarai.
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

An raba bugun jini zuwa tazara na biyu. Idan nisa tsakanin bugun jini shine 0.1s (watau tsayin bugun kanta shine 0.9s), ƙara "0" zuwa jerin bitar; idan nisa shine 0.2s (watau tsawon shine 0.8s), ƙara "1". Ƙarshen kowane minti ana nuna shi da bugun bugun "dogon" mai tsayi, tsayin 2s, an sake saita bitar bitar zuwa sifili, kuma ciko zai sake farawa.

Abin da ke sama yana da sauƙin rubutawa cikin 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

A sakamakon haka, muna samun jerin raƙuman ruwa, a cikin misalinmu na daƙiƙa biyu yana kama da haka:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Af, yana da ban sha'awa cewa siginar kuma yana da "launi na biyu" na bayanai. Hakanan ana shigar da tsarin bitar ta amfani da shi yanayin daidaitawa. A ka'idar, wannan ya kamata ya samar da mafi ƙwaƙƙwaran ƙaddamarwa ko da a yanayin sigina mai rauni.

Matakinmu na ƙarshe: samun ainihin bayanai. Ana watsa bits sau ɗaya a cikin daƙiƙa guda, don haka muna da jimillar 59 ragowa, waɗanda ke da cikakkun bayanai masu yawa:
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

An bayyana ragowa a ciki Wikipedia, kuma suna da ban sha'awa sosai. Ba a yi amfani da ragi 15 na farko ba, kodayake akwai shirye-shiryen amfani da su don tsarin faɗakarwa da tsaron farar hula. Bit A1 yana nuna cewa agogon zai canza zuwa lokacin adana hasken rana a cikin awa mai zuwa. Bit A2 yana nuna ƙarin tsalle na biyu, wanda a wasu lokuta ana amfani dashi don daidaita lokaci bisa ga jujjuyawar duniya. Ragowar ragowa suna ɓoye sa'o'i, mintuna, daƙiƙa da kwanan wata.

DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Ga waɗanda suke son yin gwaji da kansu, ana ba da lambar yanke hukunci a ƙarƙashin mai ɓarna.
Source

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)

Lokacin da muke gudanar da shirin, za mu ga fitarwa kamar haka:

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

A gaskiya, wannan shine duk sihirin. Amfanin irin wannan tsarin shine ƙaddamarwa yana da sauƙi sosai kuma ana iya yin shi akan kowane, har ma da mafi sauƙin microcontroller. Muna kawai ƙidaya tsayin bugun jini, tara rago 60, kuma a ƙarshen kowane minti muna samun ainihin lokacin. Idan aka kwatanta da sauran hanyoyin daidaita lokaci (GPS, misali, ko Allah ya kiyaye, Intanet:), irin wannan aiki tare na rediyo yana buƙatar kusan babu wutar lantarki - misali tashar yanayi ta gida ta yau da kullun tana aiki kusan shekara guda akan batir 2 AA. Saboda haka, ko da agogon hannu ana yin su tare da daidaitawa ta rediyo, ba ma maganar, ba shakka, agogon bango ko agogon tashar titi.

A saukakawa da sauƙi na DCF kuma suna jan hankalin masu sha'awar DIY. Don kawai $10-20 za ku iya siyan tsarin eriya da aka yi da shirye-shiryen mai karɓa da fitarwar TTL, wanda za'a iya haɗa shi da Arduino ko wani mai sarrafawa.
DCF77: Ta yaya tsarin siginar lokaci ke aiki?

An riga an rubuta don Arduino shirye-shiryen dakunan karatu. Koyaya, an riga an san cewa komai abin da kuke yi akan microcontroller, kuna ƙarewa da agogo ko tashar yanayi. Tare da irin wannan na'urar, samun ainihin lokacin yana da sauƙi da gaske, an bayar, ba shakka, cewa kuna cikin wurin liyafar. To, zaku iya rataya rubutun "Atomic Clock" akan agogon agogon ku, kuma a lokaci guda bayyana wa kowa cewa na'urar tana aiki tare da gaske ta amfani da agogon atomic.

Wadanda suke so suna iya haɓaka agogon tsohuwar kakarsu ta hanyar shigar da sabon tsari tare da aiki tare na rediyo:

DCF77: Ta yaya tsarin siginar lokaci ke aiki?

Kuna iya samun ɗaya akan ebay ta amfani da maɓallan "Radio Controlled Movement".

Kuma a ƙarshe, hack na rayuwa ga waɗanda suka karanta wannan zuwa yanzu. Ko da babu mai watsa siginar rediyo guda ɗaya a cikin dubu biyun kilomita masu zuwa, ba shi da wahala a samar da irin wannan siginar da kanku. Akwai wani shiri a Google Play mai suna "DCF77 Emulator" wanda ke fitar da siginar zuwa belun kunne. A cewar marubucin, idan kun nannade wayar belun kunne a kusa da agogon, za su karɓi siginar (yana da ban sha'awa yadda, saboda belun kunne na yau da kullun ba zai haifar da siginar 77KHz ba, amma liyafar mai yiwuwa ne saboda jituwa). A kan Android 9, shirin bai yi aiki da ni ba - babu sauti kawai (ko watakila ban ji shi ba - 77KHz ne, bayan haka:), amma watakila wani zai sami sa'a mafi kyau. Wasu, duk da haka, suna yin wa kansu cikakken janareta na siginar DCF, wanda ke da sauƙin yin akan Arduino ko ESP32 iri ɗaya:

DCF77: Ta yaya tsarin siginar lokaci ke aiki?
(tushe sgfantasytoys.wordpress.com/2015/05/13/synchronize-redio-controlled-watch-not-access)

ƙarshe

Tsarin DCF ya juya ya zama da gaske mai sauƙi da dacewa. Tare da taimakon mai karɓa mai sauƙi da arha, zaku iya samun ainihin lokacin koyaushe kuma a ko'ina, ba shakka a cikin wurin liyafar. Da alama cewa ko da duk da tartsatsi na dijital da Intanet na Abubuwa, irin waɗannan mafita masu sauƙi za su kasance cikin buƙata na dogon lokaci.

source: www.habr.com

Add a comment