DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Hello Habr.

Malaha qaar badan oo iibsada saacad ama xarun cimilo ayaa arkay saacada Raadiyaha laga hago ama xitaa Atomic Clock calaamadda baakadka. Tani waa mid aad u habboon, sababtoo ah waxaad u baahan tahay oo kaliya inaad saacadda miiska saarto, wax yar ka dib waxay si toos ah ula qabsan doontaa wakhtiga saxda ah.
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Aynu ogaano sida ay u shaqeyso oo aan ku qorno decoder Python.

Waxa jira habab isku xidhid waqti oo kala duwan. Kuwa ugu caansan Yurub waa nidaamka Jarmalka DCF-77, Japan waxay leedahay nidaam u gaar ah JJY, USA waxaa ka jira nidaam WWVB, iyo wixi la mida. Marka xigta, sheekadu waxay ku saabsan tahay DCF77, sida ugu habboon oo loo heli karo soo dhaweynta meelo ka mid ah qaybta Yurub ee Ruushka iyo dalalka deriska ah (dadka deggan Bariga Fog ayaa laga yaabaa inay qabaan fikrado ka soo horjeeda, si kastaba ha ahaatee, waxay, iyaguna, heli karaan oo falanqeeyaan calaamadda Jabbaan;).

Wax kasta oo hoos ku qoran waxay ku saabsan yihiin DCF77.

Soo dhawaynta ishaarada

DCF77 waa xarun hir dheer oo ku shaqaynaysa inta jeer ee 77.5 kHz oo gudbisa calaamadaha qaab-habboon. Saldhigga 50KW waxa uu ku yaalaa meel 25 km u jirta Frankfurt,waxa uu shaqa bilaabay 1959-kii,waxana 1973 dii xogta taariikhda lagu daray wakhtiga saxda ah. Mawjada dhererka ee inta jeer ee 77 kHz aad bay u dheer tahay, marka cabbirada garoonka anteenadu sidoo kale waa mid aad u wanaagsan (sawirka Wikipedia):
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Iyada oo anteenada iyo gelinta tamarta, aagga soo-dhoweynta ayaa daboolaya ku dhawaad ​​dhammaan Yurub, Belarus, Ukraine iyo qayb ka mid ah Ruushka.

DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Qof kastaa wuu duubi karaa calaamad Si tan loo sameeyo, kaliya u tag qaataha khadka tooska ah http://websdr.ewi.utwente.nl:8901/, dooro inta jeer ee 76.5KHz iyo USB modulation halkaas. Sawir u eg sidan:

DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Halkaa waxa aanu riixnay badhanka soo dejinta oo aanu ku duubnay jajab dhawr daqiiqo dheer. Dabcan, haddii aad haysato aqbale "dhab ah" oo awood u leh inuu duubo inta jeer ee 77.5KHz, waxaad isticmaali kartaa taas.

Dabcan, marka la helo calaamadaha wakhtiga raadiyaha ee internetka, ma heli doonno waqti dhab ah oo sax ah - calaamadda waxaa lagu kala qaadaa dib u dhac. Laakiin hadafkeenu waa kaliya inaan fahamno qaabka calaamadda; tan, duubista internetka ayaa ka badan ku filan. Nolosha dhabta ah, dabcan, qalab gaar ah ayaa loo isticmaalaa helitaanka iyo dejinta; hoos ayaa looga hadli doonaa.

Markaa, duubistii waanu helnay, aynu bilowno habaynteeda.

Dejinta calaamadaha

Aan ku shubno faylka anagoo adeegsanayna Python oo aragno qaab dhismeedkiisa:

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

Waxaan aragnaa habaynta baaxadda caadiga ah:
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Si loo fududeeyo codaynta, aan soo qaadno baqshadda ishaarka annaga oo adeegsanayna beddelka Hilbert:

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

Natiijo weyn
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Aynu sixino qiiqa qiiqa annagoo adeegsanayna shaandheyn hooseeysa, isla markaasna xisaabi qiimaha celceliska, kaas oo hadhow faa'iido u yeelan doona falanqaynta.

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

Natiijooyinka (khadka jaalaha ah): waa calaamad ku dhow mawjada labajibbaaran oo aad u sahlan in la falanqeeyo.
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Falanqaynta

Marka hore waxaad u baahan tahay inaad hesho xoogaa isku xigxiga. Qaab dhismeedka calaamadaha laftiisa waa mid aad u fudud.
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

garaaca garaaca waxaa loo qaybiyaa dura labaad. Haddii masaafada u dhaxaysa garaacyadu ay tahay 0.1s (ie dhererka garaaca laftiisa waa 0.9s), ku dar "0" isku xigxiga yar; haddii masaafada ay tahay 0.2s (ie dhererku waa 0.8s), ku dar "1". Dhamaadka daqiiqad kasta waxaa lagu muujiyaa garaaca garaaca "dheer", 2s dheer, isku xigxiga xoogaa dib ayaa loo dhigayaa eber, buuxintiina mar kale ayay bilaabataa.

Kor ku xusan way fududahay in Python lagu qoro.

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

Natiijo ahaan, waxaynu helnaa qaybo isku xiga, tusaale ahaan laba ilbiriqsi waxay u egtahay sidan:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Jid ahaan, waxaa xiiso leh in calaamaduhu sidoo kale leeyahay "lakabka labaad" ee xogta. Isku xigxiga yara sidoo kale waxaa lagu codeeyay iyadoo la isticmaalayo habaynta wajiga. Aragti ahaan, tani waa inay keentaa codayn aad u adag xitaa haddii ay dhacdo calaamad daciif ah.

Tallaabadii ugu dambaysay: helidda xogta dhabta ah. Bits waxaa la kala qaadaa hal mar ilbiriqsikii, marka waxaan haynaa wadar ahaan 59 bits, kaas oo macluumaad aad u badan ay ku qoran yihiin:
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Qaybaha ayaa lagu sifeeyaa Wikipedia, oo aad bay u xiiseeyaan. 15-kii yaraa ee hore lama isticmaalin, in kasta oo ay jireen qorshayaal loogu isticmaali lahaa hababka digniinta iyo difaaca madaniga ah. Bit A1 waxay tusinaysaa in saacadu isu bedeli doonto wakhtiga kaydinta iftiinka maalinta saacadaha soo socda. Bit A2 waxay muujinaysaa in dheeraad ah ilbiriqsi ku bood, kaas oo mararka qaarkood loo isticmaalo in lagu hagaajiyo wakhtiga iyadoo loo eegayo wareegga dhulka. Qaybaha soo haray waxay codeeynayaan saacadaha, daqiiqadaha, sekannada iyo taariikhda.

DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Kuwa raba inay iskood tijaabiyaan, koodka goynta waxa lagu bixiyaa qaswadayaasha.
Lambarka isha

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)

Marka aan wadno barnaamijka, waxaan arki doonaa wax soo saar la mid ah kan:

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

Dhab ahaantii, taasi waa dhammaan sixirka. Faa'iidada nidaamka noocan oo kale ah ayaa ah in cod-bixintu ay tahay mid aad u fudud oo lagu samayn karo mid kasta, xitaa microcontroller-ka ugu fudud. Waxaan si fudud u tirinnaa dhererka garaaca wadnaha, ururin 60 bits, iyo dhamaadka daqiiqo kasta waxaan helnaa waqtiga saxda ah. Marka la barbar dhigo hababka kale ee wakhtiga isku-xidhka (GPS, tusaale ahaan, ama Illahay ha xafido, Internetka:), isku xidhka raadiyaha noocan oo kale ah wuxuu u baahan yahay wax koronto ah - tusaale ahaan, rugta cimilada guriga ee caadiga ah waxay socotaa ilaa hal sano oo batari 2 AA ah. Sidaa darteed, xitaa saacadaha curcurka waxaa lagu sameeyaa isku-dubarid raadiyaha, ma aha in la xuso, dabcan, saacadaha derbiga ama saacadaha saldhigga waddooyinka.

Fududeynta iyo fudeydka DCF waxay sidoo kale soo jiidataa xiiseeyaasha DIY. Kaliya $10-20 waxaad ku iibsan kartaa module anteeno ah oo diyaarsan oo leh soo-qaade diyaarsan iyo wax soo saarka TTL, kaas oo lagu xidhi karo Arduino ama koontaroole kale.
DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Horaa loogu qoray Arduino maktabado diyaarsan. Si kastaba ha ahaatee, waa la ogaadey in wax kasta oo aad ku sameyso microcontroller, aad ku dhamaaneyso saacad ama xarun cimilo. Qalabkan oo kale, helitaanka waqtiga saxda ah runtii waa sahlan tahay, waxaa la bixiyaa, dabcan, inaad ku sugan tahay aagga soo dhaweynta. Hagaag, waxaad sudhi kartaa qoraalka "Atomic Clock" saacaddaada, isla markaana qof walba u sharax in qalabku runtii la mid yahay iyadoo la isticmaalayo saacad atamka ah.

Kuwa doonaya xitaa waxay cusboonaysiin karaan saacada ayeeyadood hore iyagoo ku rakibaya hannaan cusub oo leh isku-dubarid raadiyaha:

DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?

Waxaad ka heli kartaa mid eBay adiga oo isticmaalaya ereyada muhiimka ah "Dhaqdhaqaaqa Xakamaynta Raadiyaha".

Ugu dambeyntiina, hack-nololeedka kuwa wax akhriyay ilaa hadda. Xataa haddii aysan jirin hal gudbiye signal raadiye labada kun ee soo socda, ma adka inaad laftaadu soo saarto signal noocaas ah. Waxa jira barnaamij Google Play ku jira oo lagu magacaabo "DCF77 Emulator" kaas oo soo saara signalka taleefoonnada gacanta. Sida laga soo xigtay qoraaga, haddii aad ku duubto siliga taleefoonnada gacanta ee saacadda, waxay qaadi doonaan calaamadda (waa arrin xiiso leh sida, sababtoo ah taleefoonnada caadiga ah ma soo saari doonaan calaamadda 77KHz, laakiin soo dhaweynta waxay u badan tahay inay sabab u tahay iswaafajinta). Android 9, barnaamijku gabi ahaanba igama shaqayn - ma jirin wax cod ah (ama laga yaabee inaanan maqlin - waa 77KHz, ka dib oo dhan :), laakiin waxaa laga yaabaa in qof uu nasiib wanaagsan yeelan doono. Qaar, si kastaba ha ahaatee, waxay naftooda ka dhigtaa koronto-dhaliye buuxa oo DCF ah, kaas oo ay fududahay in lagu sameeyo isla Arduino ama ESP32:

DCF77: Sidee buu u shaqeeyaa habka signalka wakhtiga?
(xigasho sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch- without accessed)

gunaanad

Nidaamka DCF wuxuu noqday mid aad u fudud oo ku habboon. Iyada oo la kaashanayo aqbale fudud oo jaban, waxaad heli kartaa waqtiga saxda ah had iyo jeer iyo meel kasta, dabcan goobta soo dhaweynta. Waxay u muuqataa in xitaa inkastoo dijitaaleynta baahsan iyo internetka ee Waxyaabaha, xalalka fudud ee noocan oo kale ah ayaa dalban doona wakhti dheer.

Source: www.habr.com

Add a comment