DCF77: ٹائم سگنل سسٹم کیسے کام کرتا ہے؟

ہیلو حبر۔

شاید بہت سے لوگ جو گھڑی یا ویدر اسٹیشن خریدتے ہیں انہوں نے پیکیجنگ پر ریڈیو کنٹرولڈ کلاک یا یہاں تک کہ اٹامک کلاک کا لوگو دیکھا ہے۔ یہ بہت آسان ہے، کیونکہ آپ کو صرف گھڑی کو میز پر رکھنے کی ضرورت ہے، اور تھوڑی دیر کے بعد یہ خود بخود درست وقت کے مطابق ہو جائے گی۔
DCF77: ٹائم سگنل سسٹم کیسے کام کرتا ہے؟

آئیے معلوم کریں کہ یہ کیسے کام کرتا ہے اور Python میں ایک ڈیکوڈر لکھتے ہیں۔

وقت کی مطابقت پذیری کے مختلف نظام ہیں۔ یورپ میں سب سے زیادہ مقبول جرمن نظام ہے۔ 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 لمبا، بٹ کی ترتیب صفر پر ری سیٹ ہو جاتی ہے، اور بھرنا دوبارہ شروع ہوتا ہے۔

مندرجہ بالا 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 بٹس استعمال نہیں کیے جاتے ہیں، حالانکہ ان کو انتباہی نظام اور شہری دفاع کے لیے استعمال کرنے کا منصوبہ تھا۔ بٹ A1 اشارہ کرتا ہے کہ گھڑی اگلے گھنٹے میں دن کی روشنی کی بچت کے وقت میں بدل جائے گی۔ بٹ 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 بٹس جمع کرتے ہیں، اور ہر منٹ کے آخر میں ہمیں صحیح وقت مل جاتا ہے۔ ٹائم سنکرونائزیشن کے دیگر طریقوں (جی پی ایس، مثال کے طور پر، یا خدا منع کرے، انٹرنیٹ:) کے مقابلے میں، اس طرح کے ریڈیو سنکرونائزیشن کے لیے عملی طور پر بجلی کی ضرورت نہیں ہوتی ہے - مثال کے طور پر، ایک باقاعدہ گھریلو موسمی اسٹیشن 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)

حاصل يہ ہوا

ڈی سی ایف سسٹم واقعی کافی آسان اور آسان نکلا۔ ایک سادہ اور سستے ریسیور کی مدد سے، آپ ہمیشہ اور ہر جگہ درست وقت حاصل کر سکتے ہیں، یقیناً استقبالیہ کے علاقے میں۔ ایسا لگتا ہے کہ بڑے پیمانے پر ڈیجیٹلائزیشن اور چیزوں کے انٹرنیٹ کے باوجود، اس طرح کے آسان حلوں کی طویل عرصے سے مانگ رہے گی۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں