DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Salom Xabr.

Ehtimol, soat yoki ob-havo stantsiyasini sotib olganlarning ko'pchiligi qadoqdagi Radio boshqariladigan soat yoki hatto Atom soati logotipini ko'rgan. Bu juda qulay, chunki soatni stolga qo'yish kifoya, va bir muncha vaqt o'tgach, u avtomatik ravishda aniq vaqtga moslashadi.
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Keling, uning qanday ishlashini aniqlaymiz va Pythonda dekoder yozamiz.

Turli xil vaqt sinxronlash tizimlari mavjud. Evropada eng mashhuri nemis tizimidir DCF-77Yaponiyaning o'z tizimi mavjud JJY, AQShda tizim mavjud WWVB, va hokazo. Bundan tashqari, hikoya DCF77 haqida bo'ladi, chunki Rossiyaning Evropa qismining ba'zi joylarida va qo'shni mamlakatlarda qabul qilish uchun eng mos va qulaydir (Uzoq Sharq aholisi teskari fikrga ega bo'lishi mumkin, ammo ular o'z navbatida Yapon signalini qabul qilish va tahlil qilish;).

Quyida yozilgan hamma narsa DCF77 haqida bo'ladi.

Signalni qabul qilish

DCF77 - 77.5 KHz chastotada ishlaydigan va AM signallarini uzatuvchi uzoq to'lqinli stantsiya. 50 kVt quvvatga ega stansiya Frankfurtdan 25 km uzoqlikda joylashgan bo'lib, u 1959 yilda ish boshlagan, 1973 yilda aniq vaqtga sana haqidagi ma'lumotlar qo'shilgan. 77 kHz chastotadagi to'lqin uzunligi juda katta, shuning uchun antenna maydonining o'lchamlari ham juda yaxshi (Vikipediyadan olingan fotosurat):
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Bunday antenna va kirish quvvati bilan qabul qilish zonasi deyarli butun Evropa, Belarus, Ukraina va Rossiyaning bir qismini qamrab oladi.

DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Har kim yozib olishi mumkin. Buning uchun faqat onlayn qabul qiluvchiga o'ting http://websdr.ewi.utwente.nl:8901/, 76.5KHz chastotasini va u erda USB modulyatsiyasini tanlang. Tasvir shunday bo'lishi kerak:

DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Xuddi shu joyda biz yuklab olish tugmachasini bosamiz va bir necha daqiqa davom etadigan parchani yozamiz. Albatta, agar sizda 77.5 kHz chastotani yozishga qodir "haqiqiy" qabul qiluvchi bo'lsa, undan foydalanishingiz mumkin.

Albatta, Internet orqali aniq vaqt radio signallarini qabul qilganda, biz haqiqatan ham aniq vaqtni olmaymiz - signal kechikish bilan uzatiladi. Ammo bizning maqsadimiz faqat signalning tuzilishini tushunishdir, buning uchun Internetda yozib olish etarli. Haqiqiy hayotda, albatta, qabul qilish va dekodlash uchun maxsus qurilmalar qo'llaniladi, ular quyida muhokama qilinadi.

Shunday qilib, biz yozuvni oldik, uni qayta ishlashni boshlaylik.

Signalni dekodlash

Keling, faylni Python bilan yuklaymiz va uning tuzilishini ko'rib chiqamiz:

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

Biz odatiy amplituda modulyatsiyasini ko'ramiz:
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Dekodlashni soddalashtirish uchun biz Hilbert konvertatsiyasi yordamida signal konvertini olamiz:

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

Kengaytirilgan natija:
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Keling, past o'tkazuvchan filtr yordamida shovqin emissiyasini tekislaymiz, shu bilan birga o'rtacha qiymatni hisoblaymiz, u keyinchalik tahlil qilish uchun foydali bo'ladi.

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

Natija (sariq chiziq): ​​tahlil qilish juda oson bo'lgan deyarli to'rtburchaklar signal.
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Tahlil qilish

Avval siz bit ketma-ketligini olishingiz kerak. Signal tuzilishining o'zi juda oddiy.
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Impulslar ikkinchi intervallarga bo'linadi. Agar impulslar orasidagi masofa 0.1 s bo'lsa (ya'ni, pulsning o'zi uzunligi 0.9 s), biz bit ketma-ketligiga "0" qo'shamiz, agar masofa 0.2 s bo'lsa (ya'ni, uzunlik 0.8 s), biz qo'shamiz. β€œ1”. Har bir daqiqaning oxiri 2 s uzunlikdagi "uzun" impuls bilan ko'rsatiladi, bit ketma-ketligi nolga qaytariladi va to'ldirish yana boshlanadi.

Yuqoridagilarni Pythonda yozish oson.

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

Natijada, biz bitlar ketma-ketligini olamiz, bizning misolimizda ikki soniya davomida u quyidagicha ko'rinadi:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

Aytgancha, signalda ma'lumotlarning "ikkinchi qatlami" ham mavjudligi qiziq. Bit ketma-ketligi ham bilan kodlangan fazali modulyatsiya. Nazariy jihatdan, bu zaiflashgan signal holatida ham yanada mustahkam dekodlashni ta'minlashi kerak.

Bizning oxirgi qadamimiz: haqiqiy ma'lumotlarni oling. Bitlar sekundiga bir marta uzatiladi, shuning uchun bizda atigi 59 bit bor, ularda juda ko'p ma'lumotlar kodlangan:
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Bitlar ichida tasvirlangan Vikipediyava ular juda qiziquvchan. Birinchi 15 bit ishlatilmaydi, garchi ulardan ommaviy murojaatlar va fuqarolik mudofaasi tizimlari uchun foydalanish rejalashtirilgan edi. Bit A1 keyingi soatda soat yozgi vaqtga o'tishini bildiradi. Bit A2 keyingi soat qo'shilishini bildiradi soniya sakrash, bu ba'zan Yerning aylanishiga ko'ra vaqtni tuzatish uchun ishlatiladi. Qolgan bitlar soat, daqiqa, soniya va sanani kodlaydi.

DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Mustaqil ravishda tajriba o'tkazmoqchi bo'lganlar uchun dekodlash kodi spoyler ostida berilgan.
Manba kodi

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)

Dasturni ishga tushirib, biz quyidagi natijani ko'ramiz:

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

Aslida, bularning barchasi sehrdir. Bunday tizimning afzalligi shundaki, dekodlash juda oddiy va har qanday, eng murakkab bo'lmagan mikrokontrollerda amalga oshirilishi mumkin. Biz faqat impulslarning uzunligini hisoblaymiz, 60 bitni to'playmiz va har bir daqiqaning oxirida biz aniq vaqtni olamiz. Vaqtni sinxronlashtirishning boshqa usullari bilan solishtirganda (masalan, GPS, yoki Xudo saqlasin, Internet :), bunday radio sinxronizatsiyasi deyarli elektr energiyasini talab qilmaydi - masalan, oddiy uy ob-havo stantsiyasi 2 AA batareyasida taxminan bir yil ishlaydi. Shuning uchun, hatto qo'l soatlari ham radio sinxronizatsiyasi bilan ishlab chiqariladi, albatta, devor soatlari yoki ko'cha stantsiyalari soatlari haqida gapirmaslik kerak.

DCF ning qulayligi va soddaligi ham DIY ishqibozlarini o'ziga jalb qiladi. Faqat 10-20 dollarga siz tayyor qabul qiluvchi va Arduino yoki boshqa kontrollerga ulanadigan TTL chiqishi bilan tayyor antenna modulini xarid qilishingiz mumkin.
DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Arduino uchun allaqachon yozilgan va tayyor kutubxonalar. Biroq, mikrokontrollerda nima qilsangiz ham, siz soat yoki ob-havo stantsiyasiga ega bo'lishingiz allaqachon ma'lum. Bunday qurilma bilan aniq vaqtni olish juda oson, agar siz, albatta, qabulxonada bo'lmasangiz. Xo'sh, siz "Atom soati" yozuvini soatga osib qo'yishingiz mumkin va shu bilan birga hammaga qurilma haqiqatan ham atom soati yordamida sinxronlashtirilganligini tushuntirishingiz mumkin.

Xohlovchilar hatto radio sinxronizatsiyasi bilan yangi mexanizmni o'rnatish orqali eski buvisining soatini yangilashlari mumkin:

DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?

Siz uni ebay-da "Radio Controlled Movement" kalit so'zlari yordamida topishingiz mumkin.

Va nihoyat, shu paytgacha o'qiganlar uchun hayotni buzish. Keyingi bir necha ming kilometrda bitta radio signal uzatuvchisi bo'lmasa ham, bunday signalni o'zingiz yaratish oson. Google Play-da minigarnituralarga signal chiqaradigan "DCF77 Emulator" deb nomlangan dastur mavjud. Muallifning so'zlariga ko'ra, agar siz naushnik simini kechayu kunduz o'rab qo'ysangiz, ular signalni ushlaydilar (qanday qilib hayronman, chunki oddiy naushniklar 77 KHz signal bermaydi, lekin qabul qilish garmonika tufayli bo'lishi mumkin). Dastur men uchun Android 9 da umuman ishlamadi - shunchaki ovoz yo'q edi (yoki men uni eshitmadim - 77KHz :), lekin kimdir omadliroq bo'lishi mumkin. Biroq, ba'zilari o'zlarini bir xil Arduino yoki ESP32 da bajarish oson bo'lgan to'liq huquqli DCF signal generatoriga aylantiradilar:

DCF77: vaqt signalizatsiya tizimi qanday ishlaydi?
(manba sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

xulosa

DCF tizimi haqiqatan ham juda oddiy va qulay bo'lib chiqdi. Oddiy va arzon qabul qiluvchining yordami bilan siz har doim va hamma joyda, albatta, qabulxonada aniq vaqtga ega bo'lishingiz mumkin. Ko'rinishidan, keng tarqalgan raqamlashtirish va "narsalar interneti" ga qaramay, bunday oddiy echimlar uzoq vaqt davomida talabga ega bo'ladi.

Manba: www.habr.com

a Izoh qo'shish