I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Molo Habr.

Mhlawumbi abaninzi abathenga iwotshi okanye isikhululo semozulu babone iOtshi eLawulwa ngunomathotholo okanye ilogo yeAtomic Clock kwipakethe. Oku kulungeleka kakhulu, kuba ufuna nje ukubeka iwashi etafileni, kwaye emva kwexesha iya kulungelelanisa ngokuzenzekelayo kwixesha elichanekileyo.
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Makhe sibone ukuba isebenza njani kwaye sibhale idikhowuda kwiPython.

Kukho iindlela ezahlukeneyo zongqamaniso lwexesha. Eyona nto idumileyo eYurophu yinkqubo yaseJamani DCF-77, iJapan inenkqubo yayo Igama JJY, e-USA kukho inkqubo WWVB, kwaye nangokunjalo. Okulandelayo, ibali liya kuba malunga ne-DCF77, njengeyona nto ifanelekileyo kwaye ifikeleleke yokwamkelwa kwezinye iindawo kwinxalenye yaseYurophu yaseRashiya kunye namazwe angabamelwane (abahlali baseMpuma Ekude banokuba nombono ochaseneyo, nangona kunjalo, bona, banokufumana. kwaye uhlalutye umqondiso waseJapan;).

Yonke into ebhalwe ngezantsi iya kuba malunga ne-DCF77.

Ulwamkelo lomqondiso

I-DCF77 sisikhululo samaza eside esisebenza ngokuphindaphindiweyo kwe-77.5 kHz kunye nokudlulisa iimpawu kwimodyuli ye-amplitude. Isikhululo se-50KW sikwi-25 km ukusuka eFrankfurt, saqala ukusebenza ngo-1959, kwaye ngo-1973 ulwazi lomhla longezwa kwixesha elichanekileyo. Ubude bobude kumaza angama-77 KHz lude kakhulu, ngoko ke imilinganiselo yentsimi ye-eriyali nayo ihloniphekile (ifoto esuka kwiWikipedia):
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Nge-antenna enjalo kunye negalelo lamandla, indawo yokwamkela ihlanganisa phantse yonke iYurophu, iBelarus, i-Ukraine kunye nenxalenye yeRashiya.

I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Nabani na unokurekhoda umqondiso. Ukwenza oku, vele uye kumamkeli we-intanethi http://websdr.ewi.utwente.nl:8901/, khetha i-frequency 76.5KHz kunye nokumodareyitha kwe-USB apho. Umfanekiso kufuneka uvuleke ngolu hlobo:

I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Apho sicinezela iqhosha lokukhuphela kwaye sirekhode iqhekeza imizuzu emininzi ubude. Ewe kunjalo, ukuba unomamkeli "wokwenyani" okwaziyo ukurekhoda i-77.5KHz frequency, ungayisebenzisa loo nto.

Ewe, ngokufumana imiqondiso yexesha likanomathotholo nge-Intanethi, asiyi kufumana ixesha elichanekileyo ngokwenene-umqondiso uhanjiswa ngokulibaziseka. Kodwa injongo yethu kukuqonda kuphela ubume bophawu; oku, ukurekhodwa kwe-Intanethi kungaphezulu kokwaneleyo. Kubomi bokwenyani, ewe, izixhobo ezikhethekileyo zisetyenziselwa ukufumana kunye nokuhlaziya; ziya kuxoxwa ngezantsi.

Ke, sikufumene ukurekhodwa, masiqalise ukuyilungisa.

Ukutshintshwa kwemiqondiso yoMqondiso

Masilayishe ifayile sisebenzisa iPython kwaye sibone isakhiwo sayo:

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

Sibona ukumodareyitha kweamplitude eqhelekileyo:
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Ukwenza lula ukwenza iikhowudi, masithathe imvulophu yomqondiso sisebenzisa inguqu yeHilbert:

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

Isiphumo esandisiweyo:
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Makhe sigudise ukukhutshwa kwengxolo ngokusebenzisa isihluzo esisezantsi, kwaye kwangaxeshanye sibale ixabiso eliphakathi, eliya kuba luncedo kamva ekucazululeni.

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

Isiphumo (umgca otyheli): uphawu lwamaza oluphantse lube sisikwere ekulula ukuluhlalutya.
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Ukucazulula

Okokuqala kufuneka ufumane i-bit sequence. Isakhiwo somqondiso ngokwawo silula kakhulu.
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Iipulses zahlulwe zibe zizihlandlo zesibini. Ukuba umgama phakathi kwee-pulses yi-0.1s (okt ubude be-pulse ngokwayo yi-0.9s), yongeza "0" kwi-bit sequence; ukuba umgama ngu-0.2s (okt ubude yi-0.8s), yongeza "1". Ukuphela komzuzu ngamnye kuboniswa yi-pulse "ende", i-2s ubude, ulandelelwano lwe-bit lusethelwe kwakhona kwi-zero, kwaye ukuzaliswa kuqala kwakhona.

Oku ngasentla kulula ukubhala kwiPython.

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

Ngenxa yoko, sifumana ulandelelwano lweebits, kumzekelo wethu imizuzwana emibini ibonakala ngolu hlobo:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Ngendlela, kuyathakazelisa ukuba isignali nayo "indawo yesibini" yedatha. Ulandelelwano kancinane lukwakhowudwa kusetyenziswa ukumodareyitha kwesigaba. Ngokwethiyori, oku kufuneka kubonelele nge-decoding eyomeleleyo nakwimeko yophawu olubuthathaka.

Inyathelo lethu lokugqibela: ukufumana eyona datha. Amasuntswana asasazwa kube kanye ngesekhondi, ke sinentomba engamasuntswana angama-59, apho ulwazi oluninzi lufakwa khona ngekhowudi:
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Amasuntswana achazwe kwi I-Wikipedia, kwaye banomdla kakhulu. Iibhithi zokuqala ze-15 azisetyenziswanga, nangona bekukho izicwangciso zokuzisebenzisa kwiinkqubo zokulumkisa kunye nokukhusela uluntu. I-Bit A1 ibonisa ukuba iwotshi iya kutshintsha ibe lixesha lokonga emini kwiyure elandelayo. I-Bit A2 ibonisa ukuba ukongeza tsiba okwesibini, esetyenziswa ngamanye amaxesha ukulungisa ixesha ngokujikeleza koMhlaba. Amasuntswana aseleyo encode iiyure, imizuzu, imizuzwana kunye nomhla.

I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Kulabo bafuna ukuzama ngokwabo, ikhowudi yokudibanisa inikwe phantsi kombhobho.
Ikhowudi yomthombo

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)

Xa siqhuba inkqubo, siya kubona imveliso efana nale:

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

Eneneni, bubo bonke ubugqi. Inzuzo yale nkqubo kukuba ukwenza iikhowudi kulula kakhulu kwaye kunokwenziwa nakweyiphi na, nkqu neyona microcontroller ilula. Sibala nje ubude bee-pulses, siqokelela ama-bits angama-60, kwaye ekupheleni komzuzu ngamnye sifumana ixesha elichanekileyo. Xa kuthelekiswa nezinye iindlela ungqamaniso ixesha (GPS, umzekelo, okanye uThixo angavumeli, Internet :), ungqamaniso radio olunjalo kufuna phantse akukho mbane - umzekelo, isikhululo semozulu ekhaya rhoqo isebenza malunga nonyaka 2 AA iibhetri. Ke ngoko, iiwotshi zezandla zenziwe ngolungelelwaniso lukanomathotholo, singasathethi ke, ewe, iiwotshi zodonga okanye iiwotshi zesitalato.

Ukulungeleka kunye nokulula kwe-DCF ikwatsala abantu abathanda i-DIY. Nge-$ 10-20 kuphela ungathenga imodyuli ye-antenna esele yenziwe nge-receiver esele yenziwe kunye nemveliso ye-TTL, enokuthi idibaniswe ne-Arduino okanye omnye umlawuli.
I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Sele ibhalelwe iArduino amathala eencwadi esele enziwe. Nangona kunjalo, sele isaziwa ukuba kungakhathaliseki ukuba wenza ntoni kwi-microcontroller, ugqiba ngewotshi okanye isikhululo semozulu. Ngesixhobo esinjalo, ukufumana ixesha elichanekileyo kulula ngokwenene, kunikezelwe, ngokuqinisekileyo, ukuba usendaweni yokwamkela. Ewe, unokuxhoma umbhalo othi "Iwotshi ye-atomic" kwiwotshi yakho, kwaye kwangaxeshanye uchazele wonke umntu ukuba isixhobo silungelelaniswe ngokwenene kusetyenziswa iwotshi yeathom.

Abo banqwenelayo banokude baphucule iwotshi kamakhulu wabo omdala ngokufaka isixhobo esitsha ngongqamaniso lwerediyo:

I-DCF77: Isebenza njani inkqubo yophawu lwexesha?

Ungayifumana enye kwi-ebay usebenzisa amagama angundoqo "Intshukumo elawulwa yiRadio".

Kwaye ekugqibeleni, i-hack yobomi kwabo bafunde ngoku kude. Nokuba akukho mnye usasaza isignali yerediyo kwisibini esilandelayo seekhilomitha eziliwaka, akukho nzima ukwenza lo mqondiso ngokwakho. Kukho inkqubo kuGoogle Play ebizwa ngokuba yi "DCF77 Emulator" ekhupha umqondiso kwii-headphones. Ngokutsho kombhali, ukuba ugubungela ucingo lwee-headphones malunga newotshi, baya kuthatha isignali (inomdla njani, kuba ii-headphones eziqhelekileyo aziyi kuvelisa uphawu lwe-77KHz, kodwa ukwamkelwa mhlawumbi ngenxa ye-harmonics). Kwi-Android 9, inkqubo ayisebenzanga kwaphela kum - bekungekho sandi (okanye mhlawumbi andizange ndiyive - yi-77KHz, emva kwayo yonke into :), kodwa mhlawumbi umntu uya kuba nethamsanqa elingcono. Abanye, nangona kunjalo, bazenza ijenereyitha yomqondiso we-DCF egcweleyo, ekulula ukuyenza kwi-Arduino enye okanye i-ESP32:

I-DCF77: Isebenza njani inkqubo yophawu lwexesha?
(umthombo sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

isiphelo

Inkqubo ye-DCF iye yabonakala ilula kwaye iluncedo. Ngoncedo lomamkeli olula kunye nexabiso eliphantsi, unokuba nexesha elichanekileyo rhoqo kwaye yonke indawo, ngokuqinisekileyo kwindawo yokwamkela. Kubonakala ngathi nangona i-digitalization ixhaphakile kunye ne-Intanethi yeZinto, izisombululo ezilula ezinjalo ziya kuba zifunwa ixesha elide.

umthombo: www.habr.com

Yongeza izimvo