DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Talofa Habr.

Masalo o le to'atele oi latou na fa'atauina se uati po'o se nofoaga o le tau ua va'aia le Leitio Pulea Uati po'o le fa'ailoga o le Uati Atomic i luga o le afifiina. E faigofie tele lenei mea, aua e te manaʻomia le tuʻuina o le uati i luga o le laulau, ma a maeʻa sina taimi o le a otometi lava ona fetuunai i le taimi tonu.
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Se'i tatou va'ai pe fa'apefea ona galue ma tusi se decoder i le Python.

E eseese faiga fa'amaopoopo taimi. Le sili ona lauiloa i Europa o le faiga Siamani DCF-77, o Iapani e iai lana lava faiga JJY, i Amerika o loʻo i ai se faiga WWVB, ma faapena atu ai lava. O le isi, o le tala o le a uiga i le DCF77, e pei o le sili ona talafeagai ma mafai ona maua mo le taliaina i nisi o nofoaga i le vaega Europa o Rusia ma atunuu tuaoi (tagata nonofo i Sasaʻe Mamao e mafai ona i ai le manatu faafeagai, ae peitai, latou, i le isi itu, e mafai ona maua. ma iloilo le faailo Iapani;).

O mea uma o lo'o tusia i lalo o le a fa'atatau ile DCF77.

Taliaina o faailoilo

O le DCF77 o se nofoaga galu umi o loʻo faʻaogaina i le taimi ole 77.5 kHz ma faʻasalalau faʻailoga ile faʻaogaina o le amplitude. O le nofoaga 50KW o loʻo tu i le 25 kilomita mai Frankfurt, na amata faʻaaogaina i le 1959, ma i le 1973 na faʻaopoopoina ai faʻamatalaga i le taimi tonu. Ole umi ole galu ile taimi ole 77 KHz e umi tele, o lona uiga o le tele o le antenna fanua e lelei tele (ata mai Wikipedia):
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Faatasi ai ma se antenna ma le eletise, o le nofoaga e talia ai e aofia uma ai Europa, Belarus, Iukureini ma se vaega o Rusia.

DCF77: E fa'afefea ona galue le fa'ailoga taimi?

So'o se tasi e mafai ona pu'eina se fa'ailoga. Ina ia faia lenei mea, naʻo le alu i luga o le initaneti http://websdr.ewi.utwente.nl:8901/, filifili le taimi 76.5KHz ma USB modulation iina. E tatau ona tatala se ata e pei o lenei:

DCF77: E fa'afefea ona galue le fa'ailoga taimi?

O iina matou te oomi ai le ki download ma faʻamaumau se vaega i ni nai minute le umi. Ioe, afai e iai sau "moni" e mafai ona faʻamauina le 77.5KHz taimi, e mafai ona e faʻaogaina lena mea.

Ioe, e ala i le mauaina o faailoilo taimi leitio e ala i le Initaneti, o le a tatou le mauaina le taimi saʻo moni - o le faailo e tuʻuina atu ma le tuai. Ae o la matou sini e naʻo le malamalama i le fausaga o le faʻailoga; mo lenei mea, o le Initaneti e sili atu nai lo le lava. I le olaga moni, o le mea moni, o masini faʻapitoa e faʻaaogaina mo le mauaina ma le decoding, o le a talanoaina i lalo.

O lea la, ua matou mauaina le lipine, sei amata ona faʻagasolo.

Fa'ailoga Fa'ailoga

Sei o tatou utaina le faila e faʻaaoga ai le Python ma vaʻai i lona fausaga:

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

Matou te vaʻaia le faʻaogaina o le amplitude masani:
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Ina ia faʻafaigofie le faʻavasegaina, seʻi o tatou ave le teutusi faʻailoga e faʻaaoga ai le Hilbert transform:

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

Fa'ateleina le i'uga:
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Sei o tatou faʻalelei le pisapisao e faʻaaoga ai se faamama maualalo, ma i le taimi lava e tasi e fuafua le tau averesi, lea o le a aoga mulimuli ane mo le faʻavasegaina.

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

Fa'ai'uga (laina samasama): ose fa'ailoga fa'ailoga faatafafa e fai si faigofie ona fa'avasega.
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Fa'atalanoaga

Muamua e tatau ona e mauaina le faʻasologa o mea. O le faʻailoga faʻailoga lava ia e matua faigofie lava.
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Ua vaevaeina fatu i ni vaeluaga lua. Afai o le mamao i le va o pulus e 0.1s (o lona uiga o le umi o le fatu lava ia e 0.9s), faʻaopoopo le "0" i le faʻasologa o mea; afai o le mamao e 0.2s (o lona uiga o le umi o le 0.8s), faʻaopoopo le "1". O le faaiuga o minute taitasi o loʻo faʻaalia i le "umi" pulupulu, 2s le umi, o le faʻasologa faʻasologa e toe setiina i le zero, ma toe faʻatumu.

Ole mea o loʻo i luga e faigofie ona tusi ile 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

O se taunuuga, matou te maua se faasologa o fasi, i la matou faʻataʻitaʻiga mo le lua sekone e pei o lenei:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

I le auala, e manaia le faʻailoga o loʻo i ai foi se "vaega lona lua" o faʻamaumauga. O le fa'asologa fa'asologa o lo'o fa'aogaina fo'i fa'asologa o vaega. I le a'oa'oga, e tatau ona tu'uina atu ai le fa'ailoga sili atu ona malosi e o'o lava i le tulaga o se fa'ailo vaivai.

O la matou laasaga mulimuli: mauaina o faʻamatalaga moni. E fa'asalalauina fa'atasi i le sekone, o lea e maua ai le aofa'i o le 59 bits, lea e tele fa'amatalaga o lo'o fa'ailogaina:
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

O loʻo faʻamatalaina i totonu Wikipedia, ma e fai lava si latou fia iloa. O le 15 bits muamua e leʻo faʻaaogaina, e ui lava sa i ai fuafuaga e faʻaaogaina mo faiga lapatai ma puipuiga lautele. O le Bit A1 o lo'o fa'ailoa mai ai o le a suia le uati i le taimi fa'aola i le isi itula. Bit A2 faʻaalia o se faʻaopoopoga oso lona lua, lea e faaaoga i nisi taimi e fetuutuunai ai le taimi e tusa ai ma le taamilosaga a le Lalolagi. O vaega o lo'o totoe e fa'amalo itula, minute, sekone ma le aso.

DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Mo i latou e manaʻo e faʻataʻitaʻi i latou lava, o le decoding code o loʻo tuʻuina atu i lalo o le spoiler.
Faʻamatalaga punaoa

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)

A tatou faʻatautaia le polokalame, o le a tatou vaʻai i gaioiga e pei o lenei:

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

O le mea moni, o mea fa'ataulāitu uma na. O le lelei o sea faiga o le decoding e matua faigofie lava ma e mafai ona faia i soo se, e oo lava i le microcontroller sili ona faigofie. Matou te faitauina le umi o pulupulu, faʻaputu 60 bits, ma i le faaiuga o minute taʻitasi matou te maua ai le taimi tonu. Pe a faatusatusa i isi auala o le faamaopoopoina o le taimi (GPS, mo se faataitaiga, po o le faasāina e le Atua, le Initoneti:), o ia leitio synchronization e manaʻomia toetoe lava leai se eletise - mo se faʻataʻitaʻiga, o se nofoaga masani o le tau o le fale e alu pe a ma le tausaga i luga o le 2 maa AA. O le mea lea, e oo lava i uati lima e faia i le leitio synchronization, ae le o le taʻua, o le mea moni, puipui puipui poʻo uati nofoaga ala.

O le faigofie ma le faigofie o le DCF e tosina mai ai foi tagata fiafia DIY. Mo na'o le $10-20 e mafai ona e fa'atauina se antenna module ua saunia ma se tali fa'apolopolo ma le TTL, lea e mafai ona fa'afeso'ota'i i se Arduino po'o se isi fa'atonu.
DCF77: E fa'afefea ona galue le fa'ailoga taimi?

Ua uma ona tusia mo Arduino faletusi ua saunia. Ae ui i lea, ua uma ona iloa e tusa lava po o le a le mea e te faia i luga o se microcontroller, e te iu i se uati poʻo se nofoaga tau. Faatasi ai ma sea masini, o le mauaina o le taimi tonu e matua faigofie lava, tuʻuina atu, ioe, o oe o loʻo i totonu o le nofoaga e talia ai. Ia, e mafai ona e tautau le tusi "Atomic Clock" i luga o lau uati, ma i le taimi lava e tasi e faʻamatala atu i tagata uma o le masini o loʻo faʻaogaina lelei e faʻaaoga ai se uati atomic.

O i latou e manana'o e mafai lava ona fa'aleleia le uati a lo latou tinamatua e ala i le fa'apipi'iina o se masini fou fa'atasi ma le leitio fa'atasi:

DCF77: E fa'afefea ona galue le fa'ailoga taimi?

E mafai ona e mauaina se tasi i luga o le ebay e faʻaaoga ai upu autu "Radio Controlled Movement".

Ma le mea mulimuli, o se olaga hack mo i latou ua faitau i lenei mamao. E tusa lava pe leai se leitio faʻasalalau faʻasalalau i le isi lua afe kilomita, e le faigata ona faʻatupuina se faʻailoga ia oe lava. O loʻo i ai se polokalame ile Google Play e taʻua o le "DCF77 Emulator" e faʻaalia ai le faailo i headphones. E tusa ai ma le tusitala, afai e te afifiina le uaea o lipine i luga o le uati, o le a latou pikiina le faailo (e manaia pe faapefea, aua o lipine masani e le maua ai se faailo 77KHz, ae o le taliaina atonu e mafua mai i le harmonics). I luga o le Android 9, e leʻi aoga le polokalame mo aʻu - e leai se leo (pe atonu ou te leʻi faʻalogoina - o le 77KHz, pe a uma:), ae atonu o le a sili atu le manuia o se tasi. O nisi, e ui i lea, latou te faia i latou lava o se afi faʻailoga DCF atoa, lea e faigofie ona fai i luga ole Arduino poʻo le ESP32:

DCF77: E fa'afefea ona galue le fa'ailoga taimi?
(puna sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

iʻuga

O le DCF system na faʻaalia e matua faigofie ma faigofie. Faatasi ai ma le fesoasoani a se tagata faigofie ma taugofie, e mafai ona e maua le taimi saʻo i taimi uma ma soʻo se mea, ioe i le nofoaga e talia ai. E foliga mai e ui lava i le faʻalauteleina o numera ma le Initaneti o Mea, o ia fofo faigofie o le a manaʻomia mo se taimi umi.

puna: www.habr.com

Faaopoopo i ai se faamatalaga