هيلو حبر.
شايد گھڻا جيڪي گھڙي يا ويدر اسٽيشن خريد ڪندا آھن تن ڏٺو آھي ريڊيو ڪنٽرول ٿيل گھڙي يا ايٽمي گھڙي جو لوگو پيڪنگ تي. اهو تمام آسان آهي، ڇاڪاڻ ته توهان کي صرف ميز تي گھڙي رکڻ جي ضرورت آهي، ۽ ٿوري دير کان پوء اهو خودڪار طريقي سان صحيح وقت تي ترتيب ڏيندو.
اچو ته اهو معلوم ڪريون ته اهو ڪيئن ڪم ڪري ٿو ۽ پائٿون ۾ ڊيڪوڊر لکو.
مختلف وقت جي هم وقت سازي جا نظام آهن. يورپ ۾ سڀ کان وڌيڪ مشهور جرمن نظام آهي
هيٺ ڏنل سڀ ڪجهه DCF77 بابت هوندو.
سگنل استقبال
DCF77 هڪ ڊگهو موج اسٽيشن آهي جيڪو 77.5 kHz جي فريڪوئنسي تي ڪم ڪري ٿو ۽ ايمپليٽيوڊ ماڊل ۾ سگنل منتقل ڪري ٿو. 50KW اسٽيشن فرينڪفرٽ کان 25 ڪلوميٽر جي فاصلي تي واقع آهي، اهو 1959 ۾ ڪم شروع ڪيو، ۽ 1973 ۾ صحيح وقت تي معلومات شامل ڪئي وئي. 77 KHz جي تعدد تي موج جي ڊيگهه تمام ڊگهو آهي، تنهنڪري اينٽينا فيلڊ جا طول و عرض پڻ ڪافي مهذب آهن (وڪيپيڊيا تان فوٽو):
اهڙي اينٽينا ۽ پاور ان پٽ سان، استقبال واري علائقي ۾ تقريبا سڄي يورپ، بيلاروس، يوڪرين ۽ روس جو حصو شامل آهي.
ڪو به سگنل رڪارڊ ڪري سگهي ٿو. هن کي ڪرڻ لاء، صرف آن لائن وصول ڪندڙ ڏانهن وڃو
اتي اسان ڊائون لوڊ بٽڻ کي دٻايو ۽ ڪيترن ئي منٽن تائين هڪ ٽڪرو رڪارڊ ڪيو. يقينا، جيڪڏهن توهان وٽ "حقيقي" وصول ڪندڙ آهي 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()
اسان ڏسون ٿا عام طول و عرض ماڊليشن:
ڊيڪوڊنگ کي آسان ڪرڻ لاءِ، اچو ته ھلبرٽ ٽرانسفارم استعمال ڪندي سگنل لفافو وٺون.
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
وڌايل نتيجو:
اچو ته گهٽ-پاس فلٽر استعمال ڪندي شور جي اخراج کي هموار ڪريون، ۽ ساڳئي وقت اوسط قدر جو اندازو لڳايو، جيڪو بعد ۾ تجزيي لاءِ مفيد ٿيندو.
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
نتيجو (پيلو لڪير): تقريبن چورس موج سگنل جيڪو تجزيو ڪرڻ بلڪل آسان آهي.
پارس ڪرڻ
پهرين توهان کي بٽ تسلسل حاصل ڪرڻ جي ضرورت آهي. سگنل جي جوڙجڪ پاڻ کي تمام سادو آهي.
دال ٻئي وقفي ۾ ورهايل آهن. جيڪڏهن نبض جي وچ ۾ فاصلو 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
رستي ۾، اهو دلچسپ آهي ته سگنل پڻ ڊيٽا جي "ٻي پرت" آهي. بٽ تسلسل پڻ استعمال ڪندي انڪوڊ ٿيل آهي
اسان جو آخري قدم: اصل ڊيٽا حاصل ڪرڻ. بٽس هڪ ڀيرو في سيڪنڊ ۾ منتقل ڪيا ويا آهن، تنهنڪري اسان وٽ ڪل 59 بٽ آهن، جن ۾ ڪافي معلومات انڪوڊ ٿيل آهي:
بيتن ۾ بيان ڪيل آهن
انهن لاءِ جيڪي پاڻ تي تجربا ڪرڻ چاهين ٿا، ڊيڪوڊنگ ڪوڊ اسپائلر هيٺ ڏنل آهي.
ذريعو
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 يا ٻئي ڪنٽرولر سان ڳنڍجي سگهجي ٿو.
اڳ ۾ ئي Arduino لاء لکيو ويو آهي
جيڪي چاهين ٿا ته ريڊيو هم وقت سازي سان هڪ نئون ميکانيزم انسٽال ڪري پنهنجي پراڻي ڏاڏي جي واچ کي اپ گريڊ ڪري سگهن ٿا:
توهان هڪ ڳولي سگهو ٿا اي بي تي لفظ استعمال ڪندي ”ريڊيو ڪنٽرول موومينٽ“.
۽ آخرڪار، انهن لاء هڪ زندگي هيڪ جيڪي هن پري پڙهيا آهن. توڙي جو ايندڙ ٻن هزار ڪلوميٽرن ۾ هڪ به ريڊيو سگنل ٽرانسميٽر نه هجي ته به اهڙو سگنل پاڻ پيدا ڪرڻ مشڪل نه آهي. گوگل پلي تي ”DCF77 ايموليٽر“ نالي هڪ پروگرام آهي جيڪو هيڊفونز کي سگنل ڏئي ٿو. ليکڪ جي مطابق، جيڪڏهن توهان واچ جي چوڌاري هيڊفونز جي تار لپيندا، اهي سگنل کڻندا (اها دلچسپ آهي ته ڪيئن، عام هيڊفونز 77KHz سگنل پيدا نه ڪندا، پر استقبال شايد هارمونڪس جي ڪري آهي). اينڊرائيڊ 9 تي، پروگرام مون لاءِ بلڪل ڪم نه ڪيو - بس ڪو آواز نه هو (يا شايد مون اهو نه ٻڌو - اهو 77KHz آهي، سڀ کان پوءِ:)، پر ٿي سگهي ٿو ته ڪنهن کي بهتر قسمت هجي. ڪجھ، بهرحال، پاڻ کي مڪمل ڊي سي ايف سگنل جنريٽر ٺاهيندا آهن، جيڪو ساڳيو Arduino يا ESP32 تي ٺاهڻ آسان آهي:
(ذريعو
ٿڪل
DCF سسٽم واقعي بلڪل سادو ۽ آسان ٿي ويو. هڪ سادي ۽ سستا رسيور جي مدد سان، توهان هميشه ۽ هر جڳهه تي صحيح وقت حاصل ڪري سگهو ٿا، يقيناً استقبال واري علائقي ۾. اهو لڳي ٿو ته وڏي پئماني تي ڊجيٽلائيزيشن ۽ شين جي انٽرنيٽ جي باوجود، اهڙا سادي حل هڪ ڊگهي وقت تائين طلب ۾ هوندا.
جو ذريعو: www.habr.com