හලෝ හබ්ර්.
ඔරලෝසුවක් හෝ කාලගුණ මධ්යස්ථානයක් මිල දී ගන්නා බොහෝ දෙනෙක් ඇසුරුම්වල රේඩියෝ පාලිත ඔරලෝසුව හෝ පරමාණුක ඔරලෝසු ලාංඡනය පවා දැක ඇත. මෙය ඉතා පහසු ය, මන්ද ඔබට ඔරලෝසුව මේසය මත තැබිය යුතු අතර ටික වේලාවකට පසු එය ස්වයංක්රීයව නියමිත වේලාවට ගැලපේ.

අපි එය ක්රියා කරන ආකාරය සොයාගෙන පයිතන් හි විකේතකයක් ලියන්නෙමු.
විවිධ කාල සමමුහුර්තකරණ පද්ධති තිබේ. යුරෝපයේ වඩාත්ම ජනප්රිය වන්නේ ජර්මානු ක්රමයයි , ජපානයට තමන්ගේම පද්ධතියක් ඇත , USA වල ක්රමයක් තියෙනවා , සහ යනාදි. ඊළඟට, කතාව DCF77 ගැන වනු ඇත, රුසියාවේ යුරෝපීය කොටසේ සහ අසල්වැසි රටවල සමහර ස්ථානවල පිළිගැනීම සඳහා වඩාත් අදාළ සහ ප්රවේශ විය හැකි පරිදි (ඈත පෙරදිග පදිංචිකරුවන්ට ප්රතිවිරුද්ධ මතයක් තිබිය හැකිය, කෙසේ වෙතත්, ඔවුන්ට අනෙක් අතට ලැබිය හැකිය. සහ ජපන් සංඥා විශ්ලේෂණය;).
පහත ලියා ඇති සියල්ල DCF77 ගැන වනු ඇත.
සංඥා පිළිගැනීම
DCF77 යනු 77.5 kHz සංඛ්යාතයකින් ක්රියාත්මක වන දිගු තරංග මධ්යස්ථානයක් වන අතර amplitude modulation තුළ සංඥා සම්ප්රේෂණය කරයි. 50KW දුම්රිය ස්ථානය ෆ්රැන්ක්ෆර්ට් සිට කිලෝමීටර් 25 ක් දුරින් පිහිටා ඇත, එය 1959 දී ක්රියාත්මක වීමට පටන් ගත් අතර 1973 දී දින තොරතුරු නිශ්චිත වේලාවට එකතු කරන ලදී. 77 KHz සංඛ්යාතයක තරංග ආයාමය ඉතා දිගු වේ, එබැවින් ඇන්ටෙනා ක්ෂේත්රයේ මානයන් ද තරමක් යහපත් ය (ඡායාරූපය විකිපීඩියාවෙන්):

එවැනි ඇන්ටෙනාවක් සහ බල ආදානයක් සහිතව, පිළිගැනීමේ ප්රදේශය යුරෝපය, බෙලාරුස්, යුක්රේනය සහ රුසියාවේ කොටසක් ආවරණය කරයි.

ඕනෑම කෙනෙකුට සංඥාවක් පටිගත කළ හැකිය. මෙය සිදු කිරීම සඳහා, සබැඳි ග්රාහකයා වෙත යන්න , එහි සංඛ්යාතය 76.5KHz සහ USB මොඩියුලේෂන් තෝරන්න. මේ වගේ දෙයක් පෙනෙන රූපයක් විවෘත විය යුතුය:

එහිදී අපි බාගැනීම් බොත්තම ඔබා මිනිත්තු කිහිපයක් දිග කැබැල්ලක් පටිගත කරමු. ඇත්ත වශයෙන්ම, ඔබට 77.5KHz සංඛ්යාතය වාර්තා කළ හැකි "සැබෑ" ග්රාහකයක් තිබේ නම්, ඔබට එය භාවිතා කළ හැකිය.
ඇත්ත වශයෙන්ම, අන්තර්ජාලය හරහා රේඩියෝ කාල සංඥා ලබා ගැනීමෙන්, අපට සැබවින්ම නිවැරදි වේලාවක් නොලැබෙනු ඇත - සංඥාව ප්රමාදයකින් සම්ප්රේෂණය වේ. නමුත් අපගේ ඉලක්කය වන්නේ සංඥාවේ ව්යුහය තේරුම් ගැනීම පමණි; මේ සඳහා, අන්තර්ජාල පටිගත කිරීම ප්රමාණවත් තරම් වැඩි ය. සැබෑ ජීවිතයේ දී, ඇත්ත වශයෙන්ම, ලබා ගැනීම සහ විකේතනය කිරීම සඳහා විශේෂිත උපාංග භාවිතා කරනු ලැබේ; ඒවා පහත සාකච්ඡා කරනු ඇත.
ඉතින්, අපට පටිගත කිරීම ලැබී ඇත, අපි එය සැකසීමට පටන් ගනිමු.
සංඥා විකේතනය කිරීම
අපි පයිතන් භාවිතයෙන් ගොනුව පූරණය කර එහි ව්යුහය බලමු:
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" එකතු කරන්න. සෑම මිනිත්තුවකම අවසානය "දිගු" ස්පන්දනයකින් පෙන්නුම් කරයි, තත්පර 2 ක් දිග, බිටු අනුපිළිවෙල ශුන්යයට නැවත සකස් කර නැවත පිරවීම ආරම්භ වේ.
ඉහත සඳහන් කළ දේ පයිතන් හි ලිවීමට පහසුය.
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 පෙන්නුම් කරන්නේ ඔරලෝසුව ඉදිරි පැයේදී දිවා ආලෝකය සුරැකීමේ වේලාවට වෙනස් වන බවයි. 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 කට පමණක් ඔබට Arduino හෝ වෙනත් පාලකයකට සම්බන්ධ කළ හැකි සූදානම් කළ ග්රාහකයක් සහ TTL ප්රතිදානයක් සහිත සූදානම් කළ ඇන්ටෙනා මොඩියුලයක් මිලදී ගත හැකිය.

Arduino සඳහා දැනටමත් ලියා ඇත . කෙසේ වෙතත්, ඔබ ක්ෂුද්ර පාලකයක කුමක් කළත්, ඔබ ඔරලෝසුවකින් හෝ කාලගුණ මධ්යස්ථානයකින් අවසන් වන බව දැනටමත් දන්නා කරුණකි. එවැනි උපකරණයක් සමඟ, නිශ්චිත වේලාව ලබා ගැනීම ඇත්තෙන්ම පහසුය, ඇත්ත වශයෙන්ම, ඔබ පිළිගැනීමේ ප්රදේශයේ සිටින බව. හොඳයි, ඔබට ඔබේ ඔරලෝසුවේ "පරමාණුක ඔරලෝසුව" යන සෙල්ලිපිය එල්ලා තැබිය හැකි අතර, ඒ සමඟම උපාංගය පරමාණුක ඔරලෝසුවක් භාවිතයෙන් සැබවින්ම සමමුහුර්ත කර ඇති බව සෑම කෙනෙකුටම පැහැදිලි කරන්න.
කැමති අයට රේඩියෝ සමමුහුර්තකරණය සමඟ නව යාන්ත්රණයක් ස්ථාපනය කිරීමෙන් ඔවුන්ගේ පැරණි ආච්චිගේ ඔරලෝසුව පවා යාවත්කාලීන කළ හැකිය:

“රේඩියෝ පාලිත චලනය” යන මූල පද භාවිතයෙන් ඔබට ebay හි එකක් සොයාගත හැකිය.
අවසාන වශයෙන්, මේ තරම් දුර කියවපු අයට ජීවිත උපක්රමයක්. කිලෝමීටර් දෙදහසක් ඇතුළත එක රේඩියෝ සම්ප්රේෂකයක්වත් නොතිබුණත්, ඔබ විසින්ම එකක් ජනනය කිරීම පහසුය. ගූගල් ප්ලේ හි "DCF77 ඉමුලේටරය" නමින් හෙඩ්ෆෝන් වලට සංඥාවක් ලබා දෙන යෙදුමක් තිබේ. කතුවරයා කියා සිටින්නේ ඔබ හෙඩ්ෆෝන් කේබලය ඔරලෝසුව වටා ඔතා ඇත්නම්, එය සංඥාව ලබා ගන්නා බවයි (සාමාන්ය හෙඩ්ෆෝන් 77 kHz සංඥාවක් නිපදවන්නේ නැති නිසා, නමුත් එය බොහෝ විට හාර්මොනික්ස් නිසා විය හැක්කේ කෙසේදැයි මම කල්පනා කරමි). මගේ ඔරලෝසුවේ... Android 9 වන වැඩසටහන කිසිසේත්ම ක්රියාත්මක වූයේ නැත - ශබ්දයක් නොතිබුණි (නැත්නම් සමහර විට මට එය ඇසීමට නොහැකි විය - සියල්ලට පසු එය 77 kHz වේ. :)), නමුත් සමහර විට වෙනත් කෙනෙකුට වඩා හොඳ වාසනාවක් ලැබෙනු ඇත. කෙසේ වෙතත්, සමහර අය තමන්ගේම සම්පූර්ණ DCF සංඥා උත්පාදක යන්ත්රයක් ගොඩනඟා ගනී, එය Arduino හෝ ESP32 භාවිතයෙන් පහසුවෙන් සාදා ගත හැකිය:

(මූලාශ්රය )
නිගමනය
DCF පද්ධතිය ඇත්තෙන්ම තරමක් සරල සහ පහසු විය. සරල සහ ලාභ ලබන්නාගේ උපකාරයෙන්, ඔබට සෑම විටම සහ සෑම තැනකම නිශ්චිත වේලාවක් ලබා ගත හැකිය, ඇත්ත වශයෙන්ම පිළිගැනීමේ ප්රදේශයේ. පුළුල් ඩිජිටල්කරණය සහ අන්තර්ජාලයේ දේවල් තිබියදීත්, එවැනි සරල විසඳුම් දිගු කාලයක් සඳහා ඉල්ලුමක් පවතින බව පෙනේ.
මූලාශ්රය: www.habr.com
