DCF77: me pehea te mahi a te punaha tohu wa?

Kia ora Habr.

Akene he maha nga tangata e hoko wati, teihana huarere ranei kua kite i te Karaka Whakahaere Irirangi, tae atu ki te tohu Karaka Atomic i runga i te kete. He tino watea tenei, na te mea me tuu noa te karaka ki runga i te teepu, a, i muri i etahi wa ka whakatika aunoa ki te wa tika.
DCF77: me pehea te mahi a te punaha tohu wa?

Me whakaaro me pehea te mahi me te tuhi i te wetewaehere ki te Python.

He rereke nga punaha tukutahi wa. Ko te tino rongonui i Uropi ko te punaha Tiamana DCF-77, Kei a Japan tana ake punaha JJY, kei te USA he punaha WWVB, me etahi atu. I muri mai, ko te korero mo te DCF77, ko te mea tino whaitake me te waatea mo te powhiri i etahi waahi i te wahanga Pakeha o Russia me nga whenua e tata ana (kei te rereke nga whakaaro o nga tangata o te Tai Rawhiti, heoi, ka taea e ratou te whiwhi. me te tātari i te tohu Japanese;).

Ko nga mea katoa e tuhia ana i raro nei mo te DCF77.

Tohu tohu

Ko te DCF77 he teihana ngaru roa e mahi ana i te auau o te 77.5 kHz me te tuku tohu i roto i te huringa kaha kaha. Ko te teihana 50KW kei te 25 kiromita mai i Frankfurt, i timata te mahi i te tau 1959, a i te tau 1973 ka taapirihia nga korero mo te ra ki te wa tika. Ko te roangaru i te auau o te 77 KHz he tino roa, no reira he tino tika nga inenga o te mara antenna (whakaahua mai i Wikipedia):
DCF77: me pehea te mahi a te punaha tohu wa?

Na te ahua o te antenna me te whakauru hiko, ka kapi katoa te waahi manaaki i Uropi, Belarus, Ukraine me tetahi waahanga o Russia.

DCF77: me pehea te mahi a te punaha tohu wa?

Ka taea e te tangata te tuhi tohu. Ki te mahi i tenei, haere noa ki te kaiwhiwhi ipurangi http://websdr.ewi.utwente.nl:8901/, tohua te auau 76.5KHz me te whakarereke USB ki reira. Me tuwhera he ahua penei te ahua:

DCF77: me pehea te mahi a te punaha tohu wa?

I reira ka pehia e matou te paatene tango me te tuhi i tetahi kongakonga mo etahi meneti te roa. Ae ra, mena kei a koe he kaiwhiwhi "pono" ka taea te tuhi i te auau 77.5KHz, ka taea e koe te whakamahi i tera.

Ae ra, ma te whiwhi tohu wa reo irirangi ma te Ipurangi, kaore e whiwhi i te waa tika - ka tukuna te tohu me te whakaroa. Engari ko ta matou whaainga ko te maarama ki te hanganga o te tohu; mo tenei, he nui ake te rekoata Ipurangi. I roto i te ora tonu, ko te tikanga, ka whakamahia nga taputapu motuhake mo te tango me te wetewete; ka korerohia i raro nei.

Na, kua riro mai i a matou te rekoata, me timata taatau ki te mahi.

Waitohu Waitohu

Me utaina te konae ma te whakamahi i te Python ka kite i tona hanganga:

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

Ka kite tatou i te whakarereketanga o te kaha kaha:
DCF77: me pehea te mahi a te punaha tohu wa?

Hei whakangwari i te wetewete, me tango te envelopu tohu ma te whakamahi i te huringa Hilbert:

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

Hua kua whakanuia:
DCF77: me pehea te mahi a te punaha tohu wa?

Me whakaeneene i nga tukunga haruru ma te whakamahi i te tātari iti-paahi, me te tatau i te uara toharite, ka whai hua i muri mai mo te poroporoaki.

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

Hua (raina kōwhai): he tohu ngaru tata tapawha he tino ngawari ki te tātari.
DCF77: me pehea te mahi a te punaha tohu wa?

Paring

Tuatahi me whiwhi koe i te raupapa moka. Ko te hanganga tohu ano he tino ngawari.
DCF77: me pehea te mahi a te punaha tohu wa?

Ka wehea nga pupuhi ki nga waahanga tuarua. Mena he 0.1s te tawhiti i waenga i nga pini (ara ko te roa o te putere ake he 0.9s), taapirihia te "0" ki te raupapa moka; mena ko te tawhiti he 0.2s (arā, ko te roa ko te 0.8s), taapirihia te "1". Ko te mutunga o ia meneti ka tohuhia e te pupuhi "roa", 2s te roa, ka tautuhi ano te raupapa moka ki te kore, ka timata ano te whakakii.

He ngawari te tuhi i runga ake nei ki te 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

Ko te mutunga, ka whiwhi tatou i te raupapa o nga moka, i roto i to tatou tauira mo te rua hēkona te ahua penei:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Ma te ara, he mea whakamiharo kei te tohu ano he "paparanga tuarua" o nga raraunga. Kei te whakawaeheretia te raupapa moka ma te whakamahi whakanekehanga wahanga. I roto i te ariā, me whakarato tenei i te wetewete kaha ake ahakoa he tohu ngoikore.

Ko ta maatau mahi whakamutunga: te tiki i nga raraunga tuuturu. Ka tukuna nga moka kotahi mo ia hekona, no reira he 59 nga moka katoa, he maha nga korero kua whakawaeheretia:
DCF77: me pehea te mahi a te punaha tohu wa?

Ko nga moka ka whakaahuahia i roto Wikipedia, a he tino mohio ratou. Ko nga moka 15 tuatahi kaore i te whakamahia, ahakoa he mahere ki te whakamahi mo nga punaha whakatupato me te tiaki tangata. Ko te Bit A1 e tohu ana ka huri te karaka ki te awatea hei te haora e whai ake nei. Ko te Bit A2 e tohu ana he taapiri peke tuarua, ka whakamahia i etahi wa ki te whakatika i te wa e ai ki te hurihanga o te whenua. Ko nga toenga moka ka whakawaehere haora, meneti, hēkona me te rā.

DCF77: me pehea te mahi a te punaha tohu wa?

Mo te hunga e hiahia ana ki te whakamatau i a raatau ake, ka tukuna te waehere wetewete i raro i te kaipahua.
Waehere puna

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)

Ina whakahaere tatou i te kaupapa, ka kite tatou i te putanga rite ki tenei:

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

Inaa, koinei te makutu katoa. Ko te painga o taua punaha ko te wetewete he tino ngawari, ka taea te mahi i runga i tetahi, ahakoa te microcontroller ngawari. Ka tatau noa tatou i te roa o nga pire, ka kohia kia 60 nga paraka, a i te mutunga o ia meneti ka whiwhi tatou i te wa tika. Ka whakatauritea ki etahi atu tikanga mo te tukutahi wa (GPS, hei tauira, ma te Atua ranei e arai, te Ipurangi :), karekau he hikohiko pera i te reo irirangi - hei tauira, ka rere te teihana huarere kaainga mo te kotahi tau i runga i nga pākahiko 2 AA. No reira, ka mahia nga maataki ringa me te tukutahitanga reo irirangi, kaua e whakahua, o te akoranga, nga mataaratanga pakitara, nga mataaratanga teihana huarahi ranei.

Ko te ngawari me te ngawari o te DCF e kukume ana i nga kaiwhaiwhai DIY. Mo te $10-20 noa ka taea e koe te hoko i tetahi waahanga antenna kua oti te hanga me te kaikawe kua rite me te putanga TTL, ka taea te hono atu ki tetahi Arduino, ki tetahi atu kaiwhakahaere ranei.
DCF77: me pehea te mahi a te punaha tohu wa?

Kua tuhia mo Arduino whare pukapuka kua rite. Heoi, kua mohio kua mohiohia ahakoa he aha taau mahi i runga i te microcontroller, ka mutu koe he karaka, he teihana huarere ranei. Ma tenei taputapu, he tino ngawari ki te tiki i te waa tika, mena kei te noho koe i te waahi manaaki. Ana, ka taea e koe te whakairi i te tuhinga "Atomic Clock" ki runga i to mataaratanga, i te wa ano ka whakamarama ki nga tangata katoa kei te tino tukutahi te taputapu ma te whakamahi i te karaka ngota.

Ka taea e te hunga e pirangi ana ki te whakapai ake i te mataaratanga a te kuia tawhito ma te whakauru i tetahi miihini hou me te tukutahi reo irirangi:

DCF77: me pehea te mahi a te punaha tohu wa?

Ka kitea e koe tetahi i runga i te eBay ma te whakamahi i nga kupu matua "Radio Controlled Movement".

Ka mutu, he hack ora mo te hunga kua panui i tenei tawhiti. Ahakoa kaore he kaiwhakawhiti tohu reo irirangi kotahi i roto i nga mano kiromita e whai ake nei, ehara i te mea uaua ki te whakaputa i taua tohu i a koe ano. He kaupapa kei runga i a Google Play e kiia nei ko "DCF77 Emulator" e whakaputa ana i te tohu ki nga taringa. E ai ki te kaituhi, ki te takai koe i te waea o nga taringa huri noa i te mataaratanga, ka kohia e ratou te tohu (he mea whakamere me pehea, na te mea karekau e puta he tohu 77KHz, engari ko te powhiri na te haruru). I runga i te Android 9, kaore rawa te kaupapa i mahi ki ahau - karekau he oro (kaore pea au i rongo - ko te 77KHz, i muri i nga mea katoa:), engari tera pea ka pai ake te waimarie o tetahi. Ko etahi, ko etahi ka hanga i a ratou ano he kaihanga tohu DCF, he ngawari ki te hanga i runga i taua Arduino, ESP32 ranei:

DCF77: me pehea te mahi a te punaha tohu wa?
(pūtake sgfantasytoys.wordpress.com/2015/05/13/sinkronize-radio-controlled-watch-without-access)

mutunga

Ko te punaha DCF he tino ngawari me te waatea. Ma te awhina o te kaiwhiwhi ngawari me te iti, ka taea e koe te wa tika i nga wa katoa me nga waahi katoa, o te akoranga i te waahi manaaki. Te ahua nei ahakoa te whanuitanga o te whakarorohikotanga me te Ipurangi o nga Mea, ka roa te tono mo enei otinga ngawari.

Source: will.com

Tāpiri i te kōrero