แแแแแ แฏแแแ แฐแแแ .
แแแแแ แแแแ แก, แแแแช แงแแแฃแแแแก แกแแแแก แแ แแแแแแแก แกแแแแฃแ แก, แฃแแแฎแแแก แ แแแแ แแแแขแ แแแแ แแแแแ แกแแแแ แแ แแฃแแแแช แแขแแแฃแ แ แกแแแแแก แแแแ แจแแคแฃแแแแแ. แแก แซแแแแแ แแแกแแฎแแ แฎแแแแแแ, แ แแแแแ แแฅแแแ แฃแแ แแแแ แฃแแแ แแแแแ แกแแแแ แแแแแแแแ แแ แแแ แแแแฃแแ แแแ แแแแแก แจแแแแแ แแก แแแขแแแแขแฃแ แแ แแแแ แแแแ แแฃแกแข แแ แแก.
แแแแแ แแแแแ แแแแแ แ แแแแ แแฃแจแแแแก แแ แแแแฌแแ แแ แแแแแแแ แ แแแแแแจแ.
แแ แกแแแแแก แแ แแแก แกแแแฅแ แแแแแแชแแแก แกแฎแแแแแกแฎแแ แกแแกแขแแแ. แแแ แแแแจแ แงแแแแแแ แแแแฃแแแ แฃแแ แแแ แแแแฃแแ แกแแกแขแแแแ
แงแแแแแคแแ แ แแแฌแแ แแแ แฅแแแแแ แแฅแแแแ DCF77-แแก แจแแกแแฎแแ.
แกแแแแแแแก แแแฆแแแ
DCF77 แแ แแก แแ แซแแแ แขแแแฆแแก แกแแแแฃแ แ, แ แแแแแแช แแฃแจแแแแก 77.5 kHz แกแแฎแจแแ แแแ แแ แแแแแกแชแแแก แกแแแแแแแแก แแแแแแขแฃแแแก แแแแฃแแแชแแแจแ. 50 แแแข แกแแแซแแแแ แแก แกแแแแฃแ แ แแแแแแ แแแแก แคแ แแแแคแฃแ แขแแแแ 25 แแ-แจแ, แแแ แแฃแจแแแแ แแแแฌแงแ 1959 แฌแแแก, แฎแแแ 1973 แฌแแแก แแแ แแฆแแก แจแแกแแฎแแ แแแคแแ แแแชแแ แแแแแแขแ แแฃแกแข แแ แแก. แขแแแฆแแก แกแแแ แซแ 77 แแฐแช แกแแฎแจแแ แแแ แซแแแแแ แแ แซแแแแ, แแแแขแแ แแแขแแแแก แแแแแก แแแแแแ แแกแแแ แกแแแแแแ แฆแแ แกแแฃแแแ (แคแแขแ แแแแแแแแแแแแ):
แแกแแแ แแแขแแแแ แแ แแแแแก แจแแงแแแแแ, แแแแฆแแแแก แแแแ แแแแชแแแก แแแแฅแแแก แแแแ แแแ แแแแก, แแแแแ แฃแกแแแก, แฃแแ แแแแแก แแ แ แฃแกแแแแก แแแฌแแแก.
แแแแแกแแแแ แก แจแแฃแซแแแ แกแแแแแแแก แฉแแฌแแ แ. แแแแกแแแแแก แฃแแ แแแแ แแแแแแแ แแแแแแ แแแแฆแแแแ
แแฅ แฉแแแ แแแญแแ แ แฉแแแแขแแแ แแแแก แฆแแแแแก แแ แฉแแแฌแแ แ แคแ แแแแแแขแก แ แแแแแแแแ แฌแฃแแแก แแแแแแแแแแแจแ. แ แ แแฅแแ แฃแแแ, แแฃ แแฅแแแ แแแฅแแ "แแแแแแแแ" แแแแฆแแแ, แ แแแแแกแแช แจแแฃแซแแแ แฉแแฌแแ แแก 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.1 แฌแ (แแแฃ แแแแแ แแฃแแกแแก แกแแแ แซแแ 0.9 แฌแ), แแแแแแขแแ "0" แแแขแแแแก แแแแแแแแแแ แแแแก; แแฃ แแแแซแแแ แแ แแก 0.2 แฌแแแ (แแแฃ แกแแแ แซแ แแ แแก 0.8 แฌแแแ), แแแแแแขแแ "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 แแแขแ, แ แแแแแจแแช แกแแแแแแ แแแแ แ แแแคแแ แแแชแแแ แแแจแแคแ แฃแแ:
แแแขแแแ แแฆแฌแแ แแแแ
แแแแแแแก, แแแกแแช แกแฃแ แก แแฅแกแแแ แแแแแขแ แกแแแฃแแแ แ, แแแแแแแ แแแแก แแแแ แแแชแแแฃแแแ แกแแแแแแ แแก แฅแแแจ.
แแแแแก แแแแ
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-แแก แแแฎแแ แฎแแแฃแแแแ แแ แกแแแแ แขแแแ แแกแแแ แแแแแแแก แฌแแ แแแแแแ แแแแฃแแแแกแขแแแก. แกแฃแ แ แแฆแแช 10-20 แแแแแ แแ แจแแแแซแแแแ แจแแแซแแแแ แแแ แแแขแแแแก แแแแฃแแ แแแ แแแแฆแแแแ แแ TTL แแแแแแแแแแแ, แ แแแแแแช แจแแแซแแแแ แแแฃแแแแจแแ แแแก Arduino-แก แแ แกแฎแแ แแแแขแ แแแแ แก.
แฃแแแ แแแฌแแ แแแแ Arduino-แกแแแแก
แแกแฃแ แแแแแแก แจแแฃแซแแแแ แซแแแแ แแแแแแก แกแแแแแก แแแแแฎแแแแแช แแ, แแฎแแแ แแแฅแแแแแแแก แแแงแแแแแแ แ แแแแ แกแแแฅแ แแแแแแชแแแกแแแ แแ แแแ:
แจแแแแซแแแแ แแแแแแ ebay-แแ แกแแแแแแซแ แกแแขแงแแแแแก โแ แแแแ แแแแขแ แแแแ แแแแแ แแแซแ แแแแโ.
แแ แแแแแก, แแแแค แฐแแแ แแแแแแแก, แแแแช แแฅแแแแ แฌแแแแแแฎแ. แแแจแแแแช แแ, แแฃ แแแแแแแแ แ แแแแแแแแ แแแแกแ แแแแแแแขแ แแก แแแแซแแแแ แแ แช แแ แแ แ แแแแแกแแแแแแแก แแแแแแชแแแ แแ แแ แแก, แซแแแแ แแ แแ แแก แแกแแแ แกแแแแแแแก แจแแฅแแแ. Google Play-แแ แแ แแก แแ แแแ แแแ แกแแฎแแแฌแแแแแแ "DCF77 Emulator", แ แแแแแแช แแฌแแแแก แกแแแแแแก แงแฃแ แกแแกแแแแแแแ. แแแขแแ แแก แแฅแแแ, แแฃ แงแฃแ แกแแกแแแแแก แแแแแฃแแก แจแแแแแฎแแแแ แกแแแแก, แแกแแแ แแแฆแแแแ แกแแแแแแก (แกแแแแขแแ แแกแแ แ แแแแ , แ แแแแแ แฉแแแฃแแแแ แแแ แงแฃแ แกแแกแแแแแแ แแ แแแแแแแฃแจแแแแแแ 77KHz แกแแแแแแก, แแแแ แแ แแแฆแแแ แแแแแ แฐแแ แแแแแแก แแแแ แฎแแแแ). Android 9-แแ แแ แแแ แแแ แกแแแ แแแ แแ แแฃแจแแแแแ แฉแแแแแแก - แฃแแ แแแแ แแ แแงแ แฎแแ (แแ แจแแแซแแแแ แแ แแ แแแแแแแ - แแแแแก แแ แแแแแก แแก แแ แแก 77KHz :), แแแแ แแ แแฅแแแ แแแแแแก แฃแแแแแกแ แแฆแแแแ แฐแฅแแแแแก. แแฃแแชแ, แแแแแแ แแ แแแแแ แฅแแแแก แกแ แฃแแคแแกแแแแ DCF แกแแแแแแแก แแแแแ แแขแแ แก, แ แแแแแก แแแแแแแแแ แแแ แขแแแแ แแแแแ Arduino-แแ แแ ESP32-แแ:
(แฌแงแแ แ
แแแกแแแแ
DCF แกแแกแขแแแ แแแ แแแแช แกแแแแแแ แแแ แขแแแ แแ แแแกแแฎแแ แฎแแแแแ แแฆแแแฉแแแ. แแแ แขแแแ แแ แแแคแคแแกแแแแ แแแแฆแแแแก แแแฎแแแ แแแแ แจแแแแซแแแแ แงแแแแแแแแก แแ แงแแแแแแ แแฅแแแแแ แแฃแกแขแ แแ แ, แ แ แแฅแแ แฃแแแ แแแกแแฆแแแจแ. แ แแแแ แช แฉแแแก, แแแฃแฎแแแแแแ แคแแ แแ แแแแแขแแแแแแชแแแกแ แแ แแแแแแแแก แแแขแแ แแแขแแก แแแฃแฎแแแแแแ, แแกแแแ แแแ แขแแแ แแแแแฌแงแแแขแแแแแแแ แแแแ แฎแแแก แแแแแแแแแแแจแ แแฅแแแแ แแแแฎแแแแแแ.
แฌแงแแ แ: www.habr.com