DCF77: conas a oibríonn an córas comharthaíochta ama?

Dia duit Habr.

Is dócha go bhfuil go leor a cheannaíonn uaireadóir nó stáisiún aimsire tar éis an lógó Clog Rialaithe Raidió nó fiú an Clog Adamhach a fheiceáil ar an bpacáistíocht. Tá sé seo an-áisiúil, mar ní mór duit ach an clog a chur ar an tábla, agus tar éis tamaill déanfaidh sé a choigeartú go huathoibríoch go dtí an t-am cruinn.
DCF77: conas a oibríonn an córas comharthaíochta ama?

Déanaimis amach conas a oibríonn sé agus scríobhfaimid díchódóir i Python.

Tá córais sioncrónaithe ama éagsúla ann. Is é an córas Gearmánach an ceann is mó tóir san Eoraip DCF-77, Tá a córas féin ag an tSeapáin JJY, i Stáit Aontaithe Mheiriceá tá córas WWVB, agus mar sin de. Next, beidh an scéal faoi DCF77, mar an chuid is mó ábhartha agus inrochtana le fáiltiú i roinnt áiteanna sa chuid Eorpach den Rúis agus i dtíortha comharsanacha (d'fhéadfadh go mbeadh a mhalairt tuairim ag cónaitheoirí an Far East, áfach, is féidir leo, ar a seal, a fháil. agus anailís a dhéanamh ar chomhartha na Seapáine;).

Beidh gach rud scríofa thíos faoin DCF77.

Fáiltiú comhartha

Is stáisiún tonnta fada é DCF77 a oibríonn ag minicíocht 77.5 kHz agus a tharchuireann comharthaí i modhnú aimplitiúid. Tá an stáisiún 50KW suite 25 km ó Frankfurt, thosaigh sé ag feidhmiú i 1959, agus i 1973 cuireadh faisnéis dáta leis an am cruinn. Tá an tonnfhad ag minicíocht 77 KHz an-fhada, agus mar sin tá toisí an réimse antenna sách réasúnta (grianghraf ó Vicipéid):
DCF77: conas a oibríonn an córas comharthaíochta ama?

Le antenna den sórt sin agus ionchur cumhachta, clúdaíonn an limistéar glactha beagnach gach ceann den Eoraip, an Bhealarúis, an Úcráin agus cuid den Rúis.

DCF77: conas a oibríonn an córas comharthaíochta ama?

Is féidir le duine ar bith comhartha a thaifeadadh. Chun seo a dhéanamh, téigh go dtí an glacadóir ar líne http://websdr.ewi.utwente.nl:8901/, roghnaigh an minicíocht 76.5KHz agus modhnú USB ann. Ba chóir íomhá a oscailt a bhreathnaíonn rud éigin mar seo:

DCF77: conas a oibríonn an córas comharthaíochta ama?

Ansin brúigh muid an cnaipe íoslódála agus taifeadaimid blúire roinnt nóiméad ar fad. Ar ndóigh, má tá glacadóir “fíor” agat atá in ann an mhinicíocht 77.5KHz a thaifeadadh, is féidir leat é sin a úsáid.

Ar ndóigh, trí chomharthaí ama raidió a fháil tríd an Idirlíon, ní bhfaighidh muid am fíor-chruinn - tarchuirtear an comhartha gan mhoill. Ach is é an sprioc atá againn ach struchtúr an chomhartha a thuiscint; chuige seo, is mó ná go leor an taifeadadh Idirlín. Sa saol fíor, ar ndóigh, úsáidtear feistí speisialaithe chun glactha agus díchódaithe; pléifear iad thíos.

Mar sin, tá an taifeadadh faighte againn, déanaimis é a phróiseáil.

Díchódú Comhartha

Déanaimis an comhad a luchtú ag baint úsáide as Python agus a struchtúr a fheiceáil:

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

Feicimid modhnú aimplitiúid tipiciúil:
DCF77: conas a oibríonn an córas comharthaíochta ama?

Chun díchódú a shimpliú, tógfaimid an clúdach comhartha ag baint úsáide as an Hilbert transform:

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

Toradh méadaithe:
DCF77: conas a oibríonn an córas comharthaíochta ama?

Déanaimis réidh astuithe torainn ag baint úsáide as scagaire pas íseal, agus ag an am céanna ríomh an meánluach, a bheidh úsáideach le haghaidh parsála níos déanaí.

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

Toradh (líne buí): comhartha tonn beagnach cearnach atá éasca go leor chun anailís a dhéanamh.
DCF77: conas a oibríonn an córas comharthaíochta ama?

Parsáil

Ar dtús is gá duit an t-ord giotán a fháil. Tá an struchtúr comhartha féin an-simplí.
DCF77: conas a oibríonn an córas comharthaíochta ama?

Roinntear na bíoga ina dhara eatraimh. Más é 0.1s an fad idir bíoga (i.e. fad na bíge féin ná 0.9s), cuir “0” leis an seicheamh giotán; más é 0.2s an fad (i.e. 0.8s an fad), cuir “1”. Léirítear deireadh gach nóiméad le bíog “fada”, 2s ar fad, athshocraítear an seicheamh giotán go nialas, agus tosaíonn an líonadh arís.

Is furasta an méid thuas a scríobh i 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

Mar thoradh air sin, faigheann muid seicheamh giotán, inár sampla ar feadh dhá soicind tá sé mar seo:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Dála an scéil, tá sé suimiúil go bhfuil "dara sraith" sonraí ag an gcomhartha freisin. Tá an seicheamh giotán ionchódaithe freisin ag baint úsáide as modhnú céime. Go teoiriciúil, ba cheart go soláthródh sé seo díchódú níos láidre fiú i gcás comhartha lagaithe.

Ár gcéim dheireanach: na sonraí iarbhír a fháil. Tarchuirtear giotán uair amháin in aghaidh an tsoicind, mar sin tá 59 giotán san iomlán againn, ina bhfuil go leor faisnéise ionchódaithe:
DCF77: conas a oibríonn an córas comharthaíochta ama?

Tá cur síos ar na giotáin i Vicipéid, agus tá siad aisteach go leor. Ní úsáidtear na chéad 15 ghiotán, cé go raibh pleananna ann iad a úsáid le haghaidh córais rabhaidh agus cosanta sibhialta. Tugann Giotán A1 le fios go n-athróidh an clog go ham coigilte solas an lae sna huaireanta ina dhiaidh sin. Giotán A2 le fios go bhfuil sa bhreis léim sa dara háit, a úsáidtear uaireanta chun am a choigeartú de réir rothlú an Domhain. Ionchódaíonn na giotán atá fágtha uaireanta, nóiméad, soicind agus dáta.

DCF77: conas a oibríonn an córas comharthaíochta ama?

Dóibh siúd ar mian leo triail a bhaint astu féin, tugtar an cód díchódaithe faoin spoiler.
Cód foinseach

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)

Agus an clár á rith againn, feicfidh muid aschur cosúil leis seo:

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

I ndáiríre, sin an draíocht ar fad. Is é an buntáiste a bhaineann le córas den sórt sin ná go bhfuil an díchódú thar a bheith simplí agus is féidir é a dhéanamh ar aon, fiú an microcontroller is simplí. Ní dhéanaimid ach fad na bíoga a chomhaireamh, 60 giotán a charnadh, agus ag deireadh gach nóiméad faigheann muid an t-am cruinn. I gcomparáid le modhanna eile sioncrónaithe ama (GPS, mar shampla, nó Dia forbid, an Idirlíon :), éilíonn sioncrónaithe raidió den sórt sin beagnach aon leictreachas - mar shampla, ritheann stáisiún aimsire baile rialta ar feadh thart ar bhliain ar 2 cadhnraí AA. Dá bhrí sin, déantar fiú wristwatches le sioncrónú raidió, gan trácht ar, ar ndóigh, uaireadóirí balla nó uaireadóirí stáisiúin sráide.

Meallann áisiúlacht agus simplíocht DCF díograiseoirí DIY freisin. Ar $10-20 amháin, is féidir leat modúl antenna réamhdhéanta a cheannach le glacadóir réamhdhéanta agus aschur TTL, ar féidir a nascadh le Arduino nó le rialtóir eile.
DCF77: conas a oibríonn an córas comharthaíochta ama?

Scríofa cheana féin le haghaidh Arduino leabharlanna réamhdhéanta. Mar sin féin, tá sé ar eolas cheana féin, is cuma cad a dhéanann tú ar mhicririaltóir, go mbeidh clog nó stáisiún aimsire agat. Le gléas den sórt sin, tá sé thar a bheith éasca an t-am cruinn a fháil, ar choinníoll, ar ndóigh, go bhfuil tú sa limistéar fáiltithe. Bhuel, is féidir leat an inscríbhinn “Clog Adamhach” a chrochadh ar d’uaireadóir, agus ag an am céanna mínigh do gach duine go bhfuil an gléas sioncronaithe i ndáiríre ag baint úsáide as clog adamhach.

Is féidir leo siúd ar mian leo faire a seanmháthair a uasghrádú fiú trí mheicníocht nua a shuiteáil le sioncrónú raidió:

DCF77: conas a oibríonn an córas comharthaíochta ama?

Is féidir leat ceann a fháil ar ebay ag baint úsáide as na heochairfhocail “Radio Controlled Movement”.

Agus ar deireadh, hack saoil dóibh siúd a léigh go dtí seo. Fiú mura bhfuil tarchuradóir comhartha raidió amháin sa chéad chúpla míle km eile, níl sé deacair comhartha den sórt sin a ghiniúint leat féin. Tá clár ar Google Play ar a dtugtar “DCF77 Emulator” a aschuireann an comhartha chuig cluasáin. De réir an údair, má fhillteann tú sreang na gcluasán timpeall an uaireadóra, roghnóidh siad an comhartha (tá sé suimiúil conas, mar ní tháirgeann gnáthchluasáin comhartha 77KHz, ach is dócha go mbeidh fáiltiú mar gheall ar armónach). Ar Android 9, níor oibrigh an clár domsa ar chor ar bith - go simplí ní raibh aon fhuaim ann (nó b'fhéidir nár chuala mé é - is é 77KHz é, tar éis an tsaoil :), ach b'fhéidir go mbeidh ádh níos fearr ag duine éigin. Déanann cuid acu, áfach, gineadóir comhartha DCF lán-chuimsitheach dóibh féin, atá éasca le déanamh ar an Arduino nó ESP32 céanna:

DCF77: conas a oibríonn an córas comharthaíochta ama?
(foinse sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

Conclúid

Bhí an córas DCF simplí agus áisiúil i ndáiríre. Le cabhair ó ghlacadóir simplí agus saor, is féidir leat an t-am cruinn a bheith agat i gcónaí agus i ngach áit, ar ndóigh sa limistéar fáiltithe. Dealraíonn sé, fiú in ainneoin an digiteachaithe forleathan agus Idirlíon na Rudaí, go mbeidh éileamh ar réitigh shimplí den sórt sin ar feadh i bhfad.

Foinse: will.com

Add a comment