Kia ora Habr.
Akene he maha nga tangata e hoko wati, teihana huarere ranei kua kite i te Karaka Whakahaere Irirangi, tae atu ki te tohu Karaka Atomic i runga i te kete. He tino watea tenei, na te mea me tuu noa te karaka ki runga i te teepu, a, i muri i etahi wa ka whakatika aunoa ki te wa tika.
Me whakaaro me pehea te mahi me te tuhi i te wetewaehere ki te Python.
He rereke nga punaha tukutahi wa. Ko te tino rongonui i Uropi ko te punaha Tiamana
Ko nga mea katoa e tuhia ana i raro nei mo te DCF77.
Tohu tohu
Ko te DCF77 he teihana ngaru roa e mahi ana i te auau o te 77.5 kHz me te tuku tohu i roto i te huringa kaha kaha. Ko te teihana 50KW kei te 25 kiromita mai i Frankfurt, i timata te mahi i te tau 1959, a i te tau 1973 ka taapirihia nga korero mo te ra ki te wa tika. Ko te roangaru i te auau o te 77 KHz he tino roa, no reira he tino tika nga inenga o te mara antenna (whakaahua mai i Wikipedia):
Na te ahua o te antenna me te whakauru hiko, ka kapi katoa te waahi manaaki i Uropi, Belarus, Ukraine me tetahi waahanga o Russia.
Ka taea e te tangata te tuhi tohu. Ki te mahi i tenei, haere noa ki te kaiwhiwhi ipurangi
I reira ka pehia e matou te paatene tango me te tuhi i tetahi kongakonga mo etahi meneti te roa. Ae ra, mena kei a koe he kaiwhiwhi "pono" ka taea te tuhi i te auau 77.5KHz, ka taea e koe te whakamahi i tera.
Ae ra, ma te whiwhi tohu wa reo irirangi ma te Ipurangi, kaore e whiwhi i te waa tika - ka tukuna te tohu me te whakaroa. Engari ko ta matou whaainga ko te maarama ki te hanganga o te tohu; mo tenei, he nui ake te rekoata Ipurangi. I roto i te ora tonu, ko te tikanga, ka whakamahia nga taputapu motuhake mo te tango me te wetewete; ka korerohia i raro nei.
Na, kua riro mai i a matou te rekoata, me timata taatau ki te mahi.
Waitohu Waitohu
Me utaina te konae ma te whakamahi i te Python ka kite i tona hanganga:
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()
Ka kite tatou i te whakarereketanga o te kaha kaha:
Hei whakangwari i te wetewete, me tango te envelopu tohu ma te whakamahi i te huringa Hilbert:
analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])
Hua kua whakanuia:
Me whakaeneene i nga tukunga haruru ma te whakamahi i te tātari iti-paahi, me te tatau i te uara toharite, ka whai hua i muri mai mo te poroporoaki.
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
Hua (raina kōwhai): he tohu ngaru tata tapawha he tino ngawari ki te tātari.
Paring
Tuatahi me whiwhi koe i te raupapa moka. Ko te hanganga tohu ano he tino ngawari.
Ka wehea nga pupuhi ki nga waahanga tuarua. Mena he 0.1s te tawhiti i waenga i nga pini (ara ko te roa o te putere ake he 0.9s), taapirihia te "0" ki te raupapa moka; mena ko te tawhiti he 0.2s (arā, ko te roa ko te 0.8s), taapirihia te "1". Ko te mutunga o ia meneti ka tohuhia e te pupuhi "roa", 2s te roa, ka tautuhi ano te raupapa moka ki te kore, ka timata ano te whakakii.
He ngawari te tuhi i runga ake nei ki te 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
Ko te mutunga, ka whiwhi tatou i te raupapa o nga moka, i roto i to tatou tauira mo te rua hēkona te ahua penei:
0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000
Ma te ara, he mea whakamiharo kei te tohu ano he "paparanga tuarua" o nga raraunga. Kei te whakawaeheretia te raupapa moka ma te whakamahi
Ko ta maatau mahi whakamutunga: te tiki i nga raraunga tuuturu. Ka tukuna nga moka kotahi mo ia hekona, no reira he 59 nga moka katoa, he maha nga korero kua whakawaeheretia:
Ko nga moka ka whakaahuahia i roto
Mo te hunga e hiahia ana ki te whakamatau i a raatau ake, ka tukuna te waehere wetewete i raro i te kaipahua.
Waehere puna
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)
Ina whakahaere tatou i te kaupapa, ka kite tatou i te putanga rite ki tenei:
0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42
Inaa, koinei te makutu katoa. Ko te painga o taua punaha ko te wetewete he tino ngawari, ka taea te mahi i runga i tetahi, ahakoa te microcontroller ngawari. Ka tatau noa tatou i te roa o nga pire, ka kohia kia 60 nga paraka, a i te mutunga o ia meneti ka whiwhi tatou i te wa tika. Ka whakatauritea ki etahi atu tikanga mo te tukutahi wa (GPS, hei tauira, ma te Atua ranei e arai, te Ipurangi :), karekau he hikohiko pera i te reo irirangi - hei tauira, ka rere te teihana huarere kaainga mo te kotahi tau i runga i nga pākahiko 2 AA. No reira, ka mahia nga maataki ringa me te tukutahitanga reo irirangi, kaua e whakahua, o te akoranga, nga mataaratanga pakitara, nga mataaratanga teihana huarahi ranei.
Ko te ngawari me te ngawari o te DCF e kukume ana i nga kaiwhaiwhai DIY. Mo te $10-20 noa ka taea e koe te hoko i tetahi waahanga antenna kua oti te hanga me te kaikawe kua rite me te putanga TTL, ka taea te hono atu ki tetahi Arduino, ki tetahi atu kaiwhakahaere ranei.
Kua tuhia mo Arduino
Ka taea e te hunga e pirangi ana ki te whakapai ake i te mataaratanga a te kuia tawhito ma te whakauru i tetahi miihini hou me te tukutahi reo irirangi:
Ka kitea e koe tetahi i runga i te eBay ma te whakamahi i nga kupu matua "Radio Controlled Movement".
Ka mutu, he hack ora mo te hunga kua panui i tenei tawhiti. Ahakoa kaore he kaiwhakawhiti tohu reo irirangi kotahi i roto i nga mano kiromita e whai ake nei, ehara i te mea uaua ki te whakaputa i taua tohu i a koe ano. He kaupapa kei runga i a Google Play e kiia nei ko "DCF77 Emulator" e whakaputa ana i te tohu ki nga taringa. E ai ki te kaituhi, ki te takai koe i te waea o nga taringa huri noa i te mataaratanga, ka kohia e ratou te tohu (he mea whakamere me pehea, na te mea karekau e puta he tohu 77KHz, engari ko te powhiri na te haruru). I runga i te Android 9, kaore rawa te kaupapa i mahi ki ahau - karekau he oro (kaore pea au i rongo - ko te 77KHz, i muri i nga mea katoa:), engari tera pea ka pai ake te waimarie o tetahi. Ko etahi, ko etahi ka hanga i a ratou ano he kaihanga tohu DCF, he ngawari ki te hanga i runga i taua Arduino, ESP32 ranei:
(pūtake
mutunga
Ko te punaha DCF he tino ngawari me te waatea. Ma te awhina o te kaiwhiwhi ngawari me te iti, ka taea e koe te wa tika i nga wa katoa me nga waahi katoa, o te akoranga i te waahi manaaki. Te ahua nei ahakoa te whanuitanga o te whakarorohikotanga me te Ipurangi o nga Mea, ka roa te tono mo enei otinga ngawari.
Source: will.com