DCF77: ٽائيم سگنل سسٽم ڪيئن ڪم ڪندو آهي؟

هيلو حبر.

شايد گھڻا جيڪي گھڙي يا ويدر اسٽيشن خريد ڪندا آھن تن ڏٺو آھي ريڊيو ڪنٽرول ٿيل گھڙي يا ايٽمي گھڙي جو لوگو پيڪنگ تي. اهو تمام آسان آهي، ڇاڪاڻ ته توهان کي صرف ميز تي گھڙي رکڻ جي ضرورت آهي، ۽ ٿوري دير کان پوء اهو خودڪار طريقي سان صحيح وقت تي ترتيب ڏيندو.
DCF77: ٽائيم سگنل سسٽم ڪيئن ڪم ڪندو آهي؟

اچو ته اهو معلوم ڪريون ته اهو ڪيئن ڪم ڪري ٿو ۽ پائٿون ۾ ڊيڪوڊر لکو.

مختلف وقت جي هم وقت سازي جا نظام آهن. يورپ ۾ سڀ کان وڌيڪ مشهور جرمن نظام آهي DCF-77، جاپان جو پنهنجو نظام آهي جي جي، آمريڪا ۾ هڪ نظام آهي ڊبليو ڊبليو ايف، ۽ ايئن. اڳيون، ڪهاڻي 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 ڊگھي، بيٽ جي ترتيب صفر تي ري سيٽ ڪئي وئي آهي، ۽ ڀرڻ ٻيهر شروع ٿئي ٿو.

مٿيون پٿون ۾ لکڻ آسان آهي.

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

رستي ۾، اهو دلچسپ آهي ته سگنل پڻ ڊيٽا جي "ٻي پرت" آهي. بٽ تسلسل پڻ استعمال ڪندي انڪوڊ ٿيل آهي مرحلي modulation. نظريي ۾، هن کي وڌيڪ مضبوط ڊيڪوڊنگ مهيا ڪرڻ گهرجي جيتوڻيڪ ڪمزور سگنل جي صورت ۾.

اسان جو آخري قدم: اصل ڊيٽا حاصل ڪرڻ. بٽس هڪ ڀيرو في سيڪنڊ ۾ منتقل ڪيا ويا آهن، تنهنڪري اسان وٽ ڪل 59 بٽ آهن، جن ۾ ڪافي معلومات انڪوڊ ٿيل آهي:
DCF77: ٽائيم سگنل سسٽم ڪيئن ڪم ڪندو آهي؟

بيتن ۾ بيان ڪيل آهن وڪيپيڊيا، ۽ اهي ڪافي تجسس آهن. پهرين 15 بٽ استعمال نه ڪيا ويا آهن، جيتوڻيڪ اتي انهن کي ڊيڄاريندڙ سسٽم ۽ سول دفاع لاء استعمال ڪرڻ جو منصوبو هو. Bit A1 اشارو ڪري ٿو ته گھڙي ايندڙ ڪلاڪ ۾ ڏينهن جي روشني واري وقت ۾ تبديل ٿي ويندي. 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 سگنل پيدا نه ڪندا، پر استقبال شايد هارمونڪس جي ڪري آهي). اينڊرائيڊ 9 تي، پروگرام مون لاءِ بلڪل ڪم نه ڪيو - بس ڪو آواز نه هو (يا شايد مون اهو نه ٻڌو - اهو 77KHz آهي، سڀ کان پوءِ:)، پر ٿي سگهي ٿو ته ڪنهن کي بهتر قسمت هجي. ڪجھ، بهرحال، پاڻ کي مڪمل ڊي سي ايف سگنل جنريٽر ٺاهيندا آهن، جيڪو ساڳيو Arduino يا ESP32 تي ٺاهڻ آسان آهي:

DCF77: ٽائيم سگنل سسٽم ڪيئن ڪم ڪندو آهي؟
(ذريعو sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

ٿڪل

DCF سسٽم واقعي بلڪل سادو ۽ آسان ٿي ويو. هڪ سادي ۽ سستا رسيور جي مدد سان، توهان هميشه ۽ هر جڳهه تي صحيح وقت حاصل ڪري سگهو ٿا، يقيناً استقبال واري علائقي ۾. اهو لڳي ٿو ته وڏي پئماني تي ڊجيٽلائيزيشن ۽ شين جي انٽرنيٽ جي باوجود، اهڙا سادي حل هڪ ڊگهي وقت تائين طلب ۾ هوندا.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو