DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

سلام حبر.

شاید ډیری څوک چې ساعت یا د هوا سټیشن اخلي د راډیو کنټرول شوي ساعت یا حتی د اټومي ساعت لوگو په بسته بندۍ کې لیدلی وي. دا خورا اسانه دی ، ځکه چې تاسو اړتیا لرئ ساعت په میز کې واچوئ ، او یو څه وروسته به دا په اوتومات ډول دقیق وخت سره تنظیم شي.
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

راځئ چې معلومه کړو چې دا څنګه کار کوي او په Python کې یو ډیکوډر ولیکئ.

د وخت مختلف سیسټمونه شتون لري. په اروپا کې ترټولو مشهور د آلمان سیسټم دی DCF-77جاپان خپل سیسټم لري JJYپه متحده ایالاتو کې یو سیسټم شتون لري WWVB، او همداسی پسی. بیا، کیسه به د DCF77 په اړه وي، ځکه چې د روسیې او ګاونډیو هیوادونو په ځینو ځایونو کې د اروپا په ځینو ځایونو کې د استقبال لپاره خورا اړونده او د لاسرسي وړ (د لرې ختیځ اوسیدونکي ممکن مخالف نظر ولري، په هرصورت، دوی کولی شي په بدل کې ترلاسه کړي. او د جاپاني سیګنال تحلیل؛).

هر څه چې لاندې لیکل شوي د DCF77 په اړه به وي.

د سیګنال استقبال

DCF77 یو اوږد څپې سټیشن دی چې د 77.5 kHz په فریکونسۍ کې فعالیت کوي او د طول موډل کې سیګنالونه لیږدوي. د 50KW سټیشن د فرانکفورت څخه 25 کیلومتره کې موقعیت لري، دا په 1959 کې فعالیت پیل کړ، او په 1973 کې د نیټې معلومات دقیق وخت ته اضافه شول. د 77 KHz په فریکونسۍ کې د څپې اوږدوالی خورا اوږد دی ، نو د انتن ساحې ابعاد هم خورا ښه دي (د ویکیپیډیا څخه عکس):
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

د داسې انتن او بریښنا ان پټ سره، د استوګنې ساحه نږدې ټوله اروپا، بیلاروس، اوکراین او د روسیې برخه پوښي.

DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

هر څوک کولی شي سیګنال ثبت کړي. د دې کولو لپاره، یوازې آنلاین اخیستونکي ته لاړ شئ http://websdr.ewi.utwente.nl:8901/، هلته د 76.5KHz فریکونسۍ او USB ماډلول انتخاب کړئ. یو عکس باید خلاص شي چې داسې ښکاري:

DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

هلته موږ د ډاونلوډ تڼۍ فشار راوړو او څو دقیقې اوږده ټوټه ثبت کړو. البته ، که تاسو د 77.5KHz فریکونسۍ ثبتولو وړ "ریښتیني" ریسیور لرئ ، تاسو کولی شئ دا وکاروئ.

البته ، د انټرنیټ له لارې د راډیو وخت سیګنالونو ترلاسه کولو سره ، موږ به واقعیا دقیق وخت ترلاسه نکړو - سیګنال د ځنډ سره لیږدول کیږي. مګر زموږ هدف یوازې د سیګنال جوړښت پوهیدل دي؛ د دې لپاره ، د انټرنیټ ثبت کول د کافي څخه ډیر دي. په ریښتیني ژوند کې، البته، ځانګړي وسایل د ترلاسه کولو او کوډ کولو لپاره کارول کیږي؛ دوی به لاندې بحث وشي.

نو، موږ ریکارډ ترلاسه کړ، راځئ چې پروسس پیل کړو.

د سیګنال کوډ کول

راځئ چې د Python په کارولو سره فایل پورته کړو او جوړښت یې وګورو:

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

موږ د عام طول البلد انډول وینو:
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

د کوډ کولو ساده کولو لپاره ، راځئ چې د هیلبرټ ټرانسفارم په کارولو سره سیګنال لفافه واخلو:

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

پراخه شوې پایله:
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

راځئ چې د ټیټ پاس فلټر په کارولو سره د شور اخراج اسانه کړو ، او په ورته وخت کې اوسط ارزښت محاسبه کړو ، کوم چې به وروسته د پارس کولو لپاره ګټور وي.

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

پایله (ژېړ کرښه): نږدې مربع څپې سیګنال چې تحلیل کول خورا اسانه دي.
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

پارس کول

لومړی تاسو اړتیا لرئ د بټ ترتیب ترلاسه کړئ. د سیګنال جوړښت پخپله خورا ساده دی.
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

دالونه په دوهم وقفو ویشل شوي دي. که د نبضونو تر مینځ فاصله 0.1s وي (یعنې د نبض اوږدوالی پخپله 0.9s وي) ، د بټ ترتیب ته "0" اضافه کړئ؛ که چیرې فاصله 0.2s وي (یعنې اوږدوالی 0.8s وي) ، "1" اضافه کړئ. د هرې دقیقې پای د "اوږدې" نبض لخوا ښودل شوی، 2s اوږد دی، د بټ ترتیب صفر ته بیا تنظیم شوی، او ډکول بیا پیل کیږي.

پورته په 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

د پایلې په توګه، موږ د بټونو ترتیب ترلاسه کوو، زموږ په مثال کې د دوو ثانیو لپاره دا داسې ښکاري:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

په هرصورت، دا په زړه پورې ده چې سیګنال د معلوماتو "دوهمه پرت" هم لري. د بټ ترتیب هم په کارولو سره کوډ شوی دی د پړاو انډول. په تیوري کې، دا باید حتی د ضعیف سیګنال په حالت کې ډیر قوي کوډ کول چمتو کړي.

زموږ وروستی ګام: د حقیقي معلوماتو ترلاسه کول. بټونه په ثانیه کې یو ځل لیږدول کیږي، نو موږ ټول 59 بټونه لرو، په کوم کې چې ډیری معلومات کوډ شوي دي:
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

ټوټې په کې تشریح شوي ويکيپېډيا، او دوی خورا لیواله دي. لومړی 15 بټونه نه کارول کیږي، که څه هم د خبرتیا سیسټمونو او ملکي دفاع لپاره د کارولو پالنونه شتون لري. Bit A1 په ګوته کوي چې ساعت به په راتلونکي ساعت کې د ورځې د ر lightا خوندي کولو وخت ته بدل شي. Bit A2 اشاره کوي چې یو اضافي دوهم کود، کوم چې ځینې وختونه د ځمکې د گردش سره سم د وخت تنظیم کولو لپاره کارول کیږي. پاتې بټونه ساعتونه، دقیقې، ثانیې او نیټه کوډ کوي.

DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

د هغو کسانو لپاره چې غواړي پخپله تجربه وکړي، د کوډ کولو کوډ د سپیلر لاندې ورکړل شوی.
سرچینه

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)

کله چې موږ برنامه چلوو نو موږ به ورته ورته محصول وګورو:

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

په حقیقت کې، دا ټول جادو دی. د دې ډول سیسټم ګټه دا ده چې کوډ کول خورا ساده دي او په هر یو حتی ساده مایکرو کنټرولر کې ترسره کیدی شي. موږ په ساده ډول د نبض اوږدوالی حسابوو، 60 بټونه راټولوو، او د هرې دقیقې په پای کې موږ دقیق وخت ترلاسه کوو. د وخت همغږي کولو نورو میتودونو په پرتله (GPS، د مثال په توګه، یا خدای منع کړي، انټرنیټ:)، دا ډول راډیو همغږي کول په حقیقت کې هیڅ بریښنا ته اړتیا نلري - د بیلګې په توګه، د کور د هوا منظم سټیشن شاوخوا یو کال په 2 AA بیټرۍ چلیږي. له همدې امله ، حتی د لاس ساعتونه د راډیو همغږي کولو سره رامینځته شوي ، د یادولو وړ ندي ، البته د دیوال ساعتونه یا د سړک سټیشن ساعتونه.

د DCF اسانتیا او سادگي هم د DIY مینه وال جذبوي. یوازې د 10-20 ډالرو لپاره تاسو کولی شئ د چمتو شوي ریسیور او TTL محصول سره د چمتو شوي انټینا ماډل واخلئ ، کوم چې د Arduino یا بل کنټرولر سره وصل کیدی شي.
DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

دمخه د Arduino لپاره لیکل شوی چمتو شوي کتابتونونه. په هرصورت، دا دمخه معلومه ده چې هیڅ مهمه نده چې تاسو په مایکرو کنټرولر کې څه کوئ، تاسو د یو ساعت یا د هوا سټیشن سره پای ته ورسیږئ. د داسې وسیلې سره ، دقیق وخت ترلاسه کول واقعیا اسانه دي ، چمتو شوي ، البته چې تاسو د استقبال په ساحه کې یاست. ښه ، تاسو کولی شئ په خپل ساعت کې د "اټومي ساعت" لیکنه ځړ کړئ ، او په ورته وخت کې هرچا ته تشریح کړئ چې وسیله واقعیا د اټومي ساعت په کارولو سره همغږي شوې.

هغه څوک چې غواړي حتی د راډیو همغږي کولو سره د نوي میکانیزم په نصبولو سره د خپل زوړ انا ساعت لوړ کړي:

DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟

تاسو کولی شئ په ای بی کې د "راډیو کنټرول شوي حرکت" کلیدي کلمو په کارولو سره یو ومومئ.

او په نهایت کې ، د هغه چا لپاره د ژوند هیک چې دا یې لوستلي دي. حتی که په راتلونکو دوه زره کیلومترو کې د راډیو سیګنال لیږدونکی شتون ونلري ، نو پخپله د ورته سیګنال رامینځته کول ستونزمن ندي. په ګوګل پلی کې د "DCF77 ایمولیټر" په نوم یو برنامه شتون لري چې هیډفونونو ته سیګنال ورکوي. د لیکوال په وینا ، که تاسو د ساعت په شاوخوا کې د هیډفونونو تار وتړئ ، نو دوی به سیګنال غوره کړي (دا په زړه پورې ده چې څنګه ، ځکه چې عادي هیډفونونه به د 77KHz سیګنال تولید نکړي ، مګر استقبال شاید د هارمونیک له امله وي). په Android 9 کې ، برنامه زما لپاره هیڅ کار نه کوي - په ساده ډول هیڅ غږ نه و (یا شاید ما دا نه وي اوریدلی - دا 77KHz دی ، په هرصورت :) ، مګر شاید یو څوک به ښه بخت ولري. ځینې، په هرصورت، ځان ته د بشپړ DCF سیګنال جنراتور جوړوي، کوم چې په ورته Arduino یا ESP32 کې اسانه کول اسانه دي:

DCF77: د وخت سیګنال سیسټم څنګه کار کوي؟
(سرچینه) sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

پایلې

د DCF سیسټم واقعیا خورا ساده او اسانه وګرځید. د ساده او ارزانه رسیدونکي په مرسته، تاسو کولی شئ دقیق وخت تل او هرچیرې ولرئ، البته د استقبال په ساحه کې. داسې بریښي چې حتی د پراخه ډیجیټل کولو او د شیانو انټرنیټ سره سره ، دا ډول ساده حلونه به د اوږدې مودې لپاره غوښتنه وي.

سرچینه: www.habr.com

Add a comment