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

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

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

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

هلته موږ د ډاونلوډ تڼۍ فشار راوړو او څو دقیقې اوږده ټوټه ثبت کړو. البته ، که تاسو د 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 اوږد دی، د بټ ترتیب صفر ته بیا تنظیم شوی، او ډکول بیا پیل کیږي.
پورته په 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 بټونه لرو، په کوم کې چې ډیری معلومات کوډ شوي دي:

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

د هغو کسانو لپاره چې غواړي پخپله تجربه وکړي، د کوډ کولو کوډ د سپیلر لاندې ورکړل شوی.
سرچینه
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 ایمولیټر" نومیږي چې هیډفونونو ته سیګنال ورکوي. لیکوال ادعا کوي چې که تاسو د هیډفون کیبل د ساعت شاوخوا وتړئ، نو دا به سیګنال پورته کړي (زه حیران یم چې څنګه، ځکه چې عادي هیډفونونه به د 77 kHz سیګنال تولید نه کړي، مګر دا شاید د هارمونیک له امله وي). زما په ساعت کې... Android نهم پروګرام په بشپړه توګه کار نه کاوه — په ساده ډول هیڅ غږ نه و (یا شاید زه یې نه شم اوریدلی — دا 77 kHz دی، بالاخره. :))، مګر شاید بل څوک به ښه بخت ولري. په هرصورت، ځینې خلک خپل بشپړ DCF سیګنال جنراتور جوړوي، کوم چې د Arduino یا ESP32 په کارولو سره جوړول اسانه دي:

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