แแแแแ แฏแแแ แฐแแแ .
แแแแแ แแแแ แก, แแแแช แงแแแฃแแแแก แกแแแแก แแ แแแแแแแก แกแแแแฃแ แก, แฃแแแฎแแแก แ แแแแ แแแแขแ แแแแ แแแแแ แกแแแแ แแ แแฃแแแแช แแขแแแฃแ แ แกแแแแแก แแแแ แจแแคแฃแแแแแ. แแก แซแแแแแ แแแกแแฎแแ แฎแแแแแแ, แ แแแแแ แแฅแแแ แฃแแ แแแแ แฃแแแ แแแแแ แกแแแแ แแแแแแแแ แแ แแแ แแแแฃแแ แแแ แแแแแก แจแแแแแ แแก แแแขแแแแขแฃแ แแ แแแแ แแแแ แแฃแกแข แแ แแก.

แแแแแ แแแแแ แแแแแ แ แแแแ แแฃแจแแแแก แแ แแแแฌแแ แแ แแแแแแแ แ แแแแแแจแ.
แแ แกแแแแแก แแ แแแก แกแแแฅแ แแแแแแชแแแก แกแฎแแแแแกแฎแแ แกแแกแขแแแ. แแแ แแแแจแ แงแแแแแแ แแแแฃแแแ แฃแแ แแแ แแแแฃแแ แกแแกแขแแแแ แแแแแแแแก แแฅแแก แกแแแฃแแแ แ แกแแกแขแแแ , แแจแจ-แจแ แแ แแก แกแแกแขแแแ , แแ แแกแ แจแแแแแ. แจแแแแแแ, แกแแฃแแแขแ แแฅแแแแ DCF77-แแก แจแแกแแฎแแ, แ แแแแ แช แงแแแแแแ แแฅแขแฃแแแฃแ แ แแ แฎแแแแแกแแฌแแแแแ แ แฃแกแแแแก แแแ แแแฃแ แแแฌแแแจแ แแ แแแแแแแ แฅแแแงแแแแจแ แแแแแแ แ แแแแแแแก (แจแแ แแฃแแ แแฆแแแกแแแแแแแก แแแชแฎแแแ แแแแแแก แจแแแซแแแแ แฐแฅแแแแแ แกแแแแ แแกแแแ แ แแแ แ, แแฃแแชแ, แแแ, แแแแแก แแฎแ แแ, แจแแฃแซแแแแ แแแแฆแแ แแ แแแแแแแแแแแ แแแแแแฃแ แ แกแแแแแแ;).
แงแแแแแคแแ แ แแแฌแแ แแแ แฅแแแแแ แแฅแแแแ DCF77-แแก แจแแกแแฎแแ.
แกแแแแแแแก แแแฆแแแ
DCF77 แแ แแก แแ แซแแแ แขแแแฆแแก แกแแแแฃแ แ, แ แแแแแแช แแฃแจแแแแก 77.5 kHz แกแแฎแจแแ แแแ แแ แแแแแกแชแแแก แกแแแแแแแแก แแแแแแขแฃแแแก แแแแฃแแแชแแแจแ. 50 แแแข แกแแแซแแแแ แแก แกแแแแฃแ แ แแแแแแ แแแแก แคแ แแแแคแฃแ แขแแแแ 25 แแ-แจแ, แแแ แแฃแจแแแแ แแแแฌแงแ 1959 แฌแแแก, แฎแแแ 1973 แฌแแแก แแแ แแฆแแก แจแแกแแฎแแ แแแคแแ แแแชแแ แแแแแแขแ แแฃแกแข แแ แแก. แขแแแฆแแก แกแแแ แซแ 77 แแฐแช แกแแฎแจแแ แแแ แซแแแแแ แแ แซแแแแ, แแแแขแแ แแแขแแแแก แแแแแก แแแแแแ แแกแแแ แกแแแแแแ แฆแแ แกแแฃแแแ (แคแแขแ แแแแแแแแแแแแ):

แแกแแแ แแแขแแแแ แแ แแแแแก แจแแงแแแแแ, แแแแฆแแแแก แแแแ แแแแชแแแก แแแแฅแแแก แแแแ แแแ แแแแก, แแแแแ แฃแกแแแก, แฃแแ แแแแแก แแ แ แฃแกแแแแก แแแฌแแแก.

แแแแแกแแแแ แก แจแแฃแซแแแ แกแแแแแแแก แฉแแฌแแ แ. แแแแกแแแแแก แฃแแ แแแแ แแแแแแแ แแแแแแ แแแแฆแแแแ แแแ แฉแแแ แกแแฎแจแแ แ 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.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 แแแขแ, แ แแแแแจแแช แกแแแแแแ แแแแ แ แแแคแแ แแแชแแแ แแแจแแคแ แฃแแ:

แแแขแแแ แแฆแฌแแ แแแแ แแ แแกแแแ แกแแแแแแ แชแแแแแกแแแงแแแ แแแแ แแ แแแ. แแแ แแแแ 15 แแแขแ แแ แแแแแแงแแแแแ, แแฃแแชแ แแงแ แแแแแแแแแ แแแแ แแแแแงแแแแแ แแแแแคแ แแฎแแแแแแแ แกแแกแขแแแแแแกแ แแ แกแแแแฅแแแแฅแ แแแแแแชแแแกแแแแก. แแแขแ A1 แแแฃแแแแแแก, แ แแ แกแแแแ แจแแแชแแแแแ แแฆแแก แแแแแแแแแก แแ แแแ แแแแแแแแ แกแแแแจแ. แแแขแ 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-แแก แแแฎแแ แฎแแแฃแแแแ แแ แกแแแแ แขแแแ แแกแแแ แแแแแแแก แฌแแ แแแแแแ แแแแฃแแแแกแขแแแก. แกแฃแ แ แแฆแแช 10-20 แแแแแ แแ แจแแแแซแแแแ แจแแแซแแแแ แแแ แแแขแแแแก แแแแฃแแ แแแ แแแแฆแแแแ แแ TTL แแแแแแแแแแแ, แ แแแแแแช แจแแแซแแแแ แแแฃแแแแจแแ แแแก Arduino-แก แแ แกแฎแแ แแแแขแ แแแแ แก.

แฃแแแ แแแฌแแ แแแแ Arduino-แกแแแแก . แแฃแแชแ, แฃแแแ แชแแแแแแแ, แ แแ แ แแช แแ แฃแแแ แแแแแแแแ แแแแ แแแแแขแ แแแแ แแ, แแ แกแแแแแ แแ แแแขแแแ แแแแแแฃแ แ แกแแแแฃแ แแ. แแกแแแ แแแฌแงแแแแแแแแ แแฃแกแขแ แแ แแแก แแแแแแแ แแแแแแแแแ แแแ แขแแแแ, แ แ แแฅแแ แฃแแแ, แแ แแแ แแแแ, แ แแ แแแแฆแแ แแแแแจแ แแแงแแคแแแแ. แแแ แแแ, แจแแแแซแแแแ แแแแแแแ แฌแแ แฌแแ แ "แแขแแแฃแ แ แกแแแแ" แแฅแแแแก แกแแแแแ แแ แแแแแ แแ แแก แแฃแฎแกแแแ แงแแแแแก, แ แแ แแแฌแงแแแแแแแ แแแแแแแแแ แกแแแฅแ แแแแแแแฃแแแ แแขแแแฃแ แ แกแแแแแก แแแแแงแแแแแแ.
แแกแฃแ แแแแแแก แจแแฃแซแแแแ แซแแแแ แแแแแแก แกแแแแแก แแแแแฎแแแแแช แแ, แแฎแแแ แแแฅแแแแแแแก แแแงแแแแแแ แ แแแแ แกแแแฅแ แแแแแแชแแแกแแแ แแ แแแ:

แจแแแแซแแแแ แแแแแแ ebay-แแ แกแแแแแแซแ แกแแขแงแแแแแก โแ แแแแ แแแแขแ แแแแ แแแแแ แแแซแ แแแแโ.
แแ แแแแแก, แชแฎแแแ แแแแกแแฃแแ แฎแ แแแ แแแแแแแก, แแแแช แแฅแแแแ แฌแแแแแแฎแ. แแแจแแแแช แแ, แแฃ แ แแแแแแแแ แแแแกแ แแแแแแแขแ แแก แ แแแแฃแกแจแ แแ แช แแ แแ แ แแแแแแแแแแชแแแ แแ แแ แแก, แแแกแ แแแแแฃแแแแแแแแ แแแแแ แแ แแแ แแแ แขแแแแ. Google Play-แแ แแ แแก แแแแแแแชแแ แกแแฎแแแฌแแแแแแ โDCF77 Emulatorโ, แ แแแแแแช แงแฃแ แกแแกแแแแแแแ แกแแแแแแก แแแแแกแชแแแก. แแแขแแ แ แแแขแแแชแแแก, แ แแ แแฃ แงแฃแ แกแแกแแแแแก แแแแแแก แกแแแแก แจแแแแแฎแแแแ, แแก แกแแแแแแก แแแฆแแแก (แกแแแแขแแ แแกแแ, แ แแแแ , แ แแแแแ แฉแแแฃแแแแ แแแ แงแฃแ แกแแกแแแแแแ 77 แแฐแช แกแแแแแแก แแ แฌแแ แแแฅแแแแแ, แแแแ แแ แแก แแแแแ แฐแแ แแแแแแแแแก แแ แแแแ). แฉแแแก แกแแแแแ... Android แแ แแแ แแแ 9 แกแแแ แแแ แแ แแฃแจแแแแแ โ แฃแแ แแแแ แฎแแ แแ แแกแแแแ (แแ แแฅแแแ แฃแแ แแแแ แแ แแแกแแแแ โ แแแแแก แแ แแแแแก, 77 kHz-แแ. :)), แแแแ แแ แจแแแซแแแแ แกแฎแแแก แฃแคแ แ แแแฃแแแ แแแแก. แแฃแแชแ, แแแแแแ แแ แแแแแแแแ แแแแแ แแจแแแแแก แกแ แฃแแคแแกแแแแ DCF แกแแแแแแแก แแแแแ แแขแแ แก, แ แแแแแก แแแแแแแแแแช Arduino-แก แแ ESP32-แแก แแแแแงแแแแแแ แแแ แขแแแแ:

(แฌแงแแ แ )
แแแกแแแแ
DCF แกแแกแขแแแ แแแ แแแแช แกแแแแแแ แแแ แขแแแ แแ แแแกแแฎแแ แฎแแแแแ แแฆแแแฉแแแ. แแแ แขแแแ แแ แแแคแคแแกแแแแ แแแแฆแแแแก แแแฎแแแ แแแแ แจแแแแซแแแแ แงแแแแแแแแก แแ แงแแแแแแ แแฅแแแแแ แแฃแกแขแ แแ แ, แ แ แแฅแแ แฃแแแ แแแกแแฆแแแจแ. แ แแแแ แช แฉแแแก, แแแฃแฎแแแแแแ แคแแ แแ แแแแแขแแแแแแชแแแกแ แแ แแแแแแแแก แแแขแแ แแแขแแก แแแฃแฎแแแแแแ, แแกแแแ แแแ แขแแแ แแแแแฌแงแแแขแแแแแแแ แแแแ แฎแแแก แแแแแแแแแแแจแ แแฅแแแแ แแแแฎแแแแแแ.
แฌแงแแ แ: www.habr.com
