แแฝแแแแธ Habr แ
แแแแ แแแแถแแแปแแแแแถแ
แแแพแแแแแแทแแแถแกแทแแถ แฌแแแแถแแธแแแขแถแแถแแแถแแปแแถแแแพแ แแถแกแทแแถแแแแแแแแแแแแแแแแแทแแแแป แฌแแผแแแแธแแแแทแแทแแแแแแแแถแแถแกแทแแถแขแถแแผแแทแ
แแ
แแพแแแ
แแแ
แแแ แแแโแแบโแแถแแแแแฝแโแแถแแ แแแแแโแขแแแโแแแแถแแแแโแแแแผแโแแถแแโแแถแกแทแแถโแแ
แแพโแแป แ แพแโแแฝแแแแแแปแโแแแแแแแ แแถโแแนแโแแแแแแแฝแโแแแแแแแแแแแแแแแแทโแแ
แแถแโแแแแแแแถโแแทแแแแแถแแแ
แ
แผแแแพแแแแแแแแแแแธแแแแแแแแแถแแแแพแแแถแ แแทแแแแแแแแแแแแทแแธแแทแแผแแแ
แแแแปแ Python แ
แแถแแแแแแแแแแแแแพแแแแถแแแแแแแแแแแแถแแปแแแแแแถแ แแถแแแแแแทแแแแแแปแแแ
แขแบแแแปแแแบแแแแแแแแแขแถแแแแบแแแแ
แขแแแธแแแแแแแแถแแแแแแถแแแแแแแแถแแแแแแแแนแแแทแแถแแขแแแธ DCF77 แ
แแถแแแแฝแแแแแแถ
DCF77 แแบแแถแแแแถแแธแแแแแแแแแแแแแแแพแแแถแแแ
แแแแแแแ 77.5 kHz แแทแแแแแแผแแแแแแถแแแแปแแแแผแแปแแขแแแแแธแแธแแ แแแแถแแธแแ 50KW แแถแแแธแแถแแแแ
25 แแธแกแผแแแแแแแแธแแธแแแแปแ Frankfurt แแถแแถแแ
แถแแแแแแพแแแแแแทแแแแแทแแถแแแ
แแแแถแ 1959 แ แพแแแ
แแแแถแ 1973 แแแแแแถแแแถแแแแทแ
แแแแแแแแผแแแถแแแแแแแแแ
แแแแแแแถแแทแแแแแถแแแ แแแแแแแแแแแ
แแแแแแแ 77 KHz แแบแแแแแถแแ แแผแ
แแแแแแทแแถแแแแแแแถแแขแแแแแแแแแแแแแแแแ (แแผแแแแแธแแทแแธแแธแแถ)แ
แแถแแฝแแแนแแแถแแแแแ
แผแแขแแแแแ แแทแแแถแแแแแแแแแ แแแแแแแแแฝแแแแแแแแแแแแแแแแแแแแพแแแแแถแแแขแแแแแแแแธแแขแบแแแปแ แแแกแถแแปแแแ แขแแปแแแแแแ แแทแแแแแแแแฝแแแแแแแแแแแปแแแแแธแ
แแแแถแแแแถแแแขแถแ
แแแแแแแถแแถแแ แแพแแแแธแแแแพแแผแ
แแแแแแแถแแแแแ
แผแแแ
แแถแแแขแแแแแแฝแแแถแแขแแธแแแบแแทแ
แแ
แแธแแแแแพแแ
แปแ
แแแผแแปแแแถแแแ แ แพแแแแแแแแถแแแแแแแฝแแแแแแแแแถแ
แแแพแแแถแแธแ แแถแแถแแแทแแแถแแแแแแแทแแแพแขแแแแแถแแขแแแแแแฝแ "แแทแแแแแถแแ" แแแแขแถแ
แแแแแแแแแ 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()
แแพแแแพแแแแผแแปแแแแ แแแแแแแถแ
แแพแแแแธโแแแแแฝแโแแถแโแแทแแผแ แแผแโแแโแแแแแแแแแปแแแโแแแแแถโแแแโแแแแพ Hilbert transformแ
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 แแทแแถแแธ แแแแถแแแแแธแแแแแผแแแถแแแแแแแกแพแแแทแแแ
แแผแแแ แ แพแแแถแแแแแแแ
แถแแแแแแพแแแแแแแแแ
แแถแแแพแแถแแแแแฝแแแแแแแแแแปแ 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 แแแธแ แแแแแแแปแแแแแแแแแแถแแแถแ
แแแพแแแแแผแแแถแแขแแทแแแผแแ
แแแธแแแแแผแแแถแแแทแแแแแถแแ
แแแแปแ
แแแแแถแแแขแแแแแแแ
แแแแทแแแแแแแแแแแแฝแแฏแ แแผแแแทแแผแแแแแผแแแถแแแแแแแฑแแแแ
แแแแแ spoiler แ
แแแแแ
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
แแถแแแทแ แแแแแถแแแแแแแแแถแแแขแแแ แขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแบแแถแแถแแแทแแผแแแบแแถแแแแแแแแปแ แ แพแแขแถแ แแแแพแแถแแแ แแพแแถแแฝแแแผแแแแธแแ microcontroller แแถแแแแแแแแปแแแแแแแ แแพแแแแแถแแแแแแถแแแแแแแแแแแแธแแ แ แแแแแผแแแแแปแ 60 แแแธแ แ แพแแแ แ แปแแแแแ แแแแแแถแแธแแธแแฝแแ แแพแแแแฝแแแถแแแแแแแแถแแทแแแแแถแแแ แแพแแแแแแแแแแ แแนแแแทแแธแแถแแแแแแแแแแแแแแแแแถแแแแแพแแแแถแแแแแแแแแแแแถ (แงแแถแ แแแ GPS แฌแแแแแ แถแแแถแแ แขแแทแแแบแแทแ :) แแถแแแแแพแแแแถแแแแแแแทแแแแปแแแแแแแแถแแแถแแแแแพแแแแแแแถแแขแแแแทแแแธ - แงแแถแ แแแ แแแแถแแธแแแขแถแแถแแแถแแปแแแแปแแแแแแแแแแแถแแแแพแแแถแแแแแ แแแแฝแแแแแถแแแพแขแถแแปแ AA แ แแแฝแ 2 แ แ แแแปแแผแ แแแแแ แพแ แแผแแแแธแแแแถแกแทแแถแแแแแแแแผแแแถแแแแทแแกแพแแแถแแฝแแแนแแแถแแแแแพแแแแถแแแแแแแทแแแแป แแทแแแแแแทแแถแแแธแแถแกแทแแถแแแแแถแแ แฌแแถแกแทแแถแแแแถแแธแแแแถแแแแแแแผแแแแแแแ
แแถแแแถแแแแแฝแ แแทแแแถแแแถแแแแแแแแ DCF แแแแถแแแแถแแขแแแแ
แผแแ
แทแแแ DIY แแแแแแ แแแแแถแแแแแแนแแแ $10-20 แขแแแแขแถแ
แแทแแแแผแแปแแขแแแแแแแแแแแแแแแฝแ
แแถแแแแแ
แแถแแฝแแแนแแงแแแแแแแแฝแ แแทแแแทแแแแแ TTL แแแแแแแแแแฝแ
แแถแแแแแ
แแแแขแถแ
แแแแถแแแแถแแฝแ Arduino แฌแงแแแแแแแแแแถแแแแแแแแแ
แแถแแแแแแแแฝแ
แ แพแแแแแแถแแ Arduino
แขแแแโแแแโแแแแถแแแแถโแขแถแ โแแแกแพแโแแถแกแทแแถโแแธแแผแโแ แถแแโแแถแโแแแโแแแกแพแโแแแแแแถแโแแแแธโแแถแแฝแโแแนแโแแถแโแแแแพโแแแแถแแแแแโแแทแแแแปแ
แขแแแแขแถแ
แแแแแแแแแฝแแแ
แแพ ebay แแแแแแแพแแถแแแแแแแแนแ "แ
แแแถแแแแแแแแแแแแแแแแแทแแแแป"แ
แ แพแแแถแ แปแแแแแแ, แแถแ hack แแธแแทแแแแแแถแแแขแแแแแแแแถแแขแถแแแแแถแแแแแ แแแแแธแแถแแทแแแถแแงแแแแแแแแแแผแแแแแแถแแทแแแแปแแแแฝแแแแแปแแ แแแแถแแแธแแแถแแแแธแกแผแแแแแแแแถแแแปแแแแแแ แแแแถแแทแแแทแแถแแแแแปแแแถแแแแแแพแแแแแแถแแแแแแแแแแแแแฝแแฏแแแแแ แแถแแแแแแแทแแธแแฝแแแ แแพ Google Play แแแแแถแแแแแแแแถ "DCF77 Emulator" แแแแแแแ แแแแแแแถแแ แแถแแแแถแแ แแแแแ แแถแแขแแแแแทแแแแ แแแแแทแแแพแขแแแแแปแแแแแแแแแถแแแปแแแทแแแถแกแทแแถ แแฝแแแแแนแแ แถแแแแแแแถ (แแถแแฝแแขแแแ แถแแแขแถแแแแแแแแธแแแแแแแแแถแแแแแถแแแแแแแแถแแนแแแทแแแแแแพแแแแแแถ 77KHz แแ แแแปแแแแแแถแแแแฝแแแบแแแแ แแแแถแแแแแถแแขแถแแแผแแทแ)แ แแ แแพแแแแแแแแแแแแแทแแแแแทแแถแ Android 9 แแแแแแทแแธแแแแแทแแแแแพแแแถแแแถแแแแแแแแแแแแถแแแแแแปแ - แแถแแทแแแถแแแแกแแแแ (แฌแแแแ แแแแถแแแแปแแแทแแแถแแฎแแถ - แแถแแบ 77KHz แแแแแถแแแแธแแถแแแขแแ :) แแแปแแแแแแแแ แแแแถแแแแถแแแแถแแแแนแแแถแแแแแถแแแถแแ แแแแแถแแแถแแแถแแแแแแขแแแแแแแแแแแพแฑแแแแแแฝแแแฝแแแแแแแถแแแถแงแแแแแแแแแแพแแแแแแถ DCF แแแแแแแแแแแถแแแแแฝแแแแแปแแแถแแแแแแพแแแ แแพ Arduino แฌ ESP32 แแผแ แแแแถ:
(แแแแแ
แแแ แแแแธแแแแแทแแแแถแ
แแแแแแแแ DCF แแแแแแ
แแถแแทแแแถแแถแแแแ แแทแแแถแแแแแฝแแ แแแแแถแแแแแฝแแแธแขแแแแแแฝแแแถแแแแ แแทแแแแ แขแแแแขแถแ
แแถแแแแแแแแถแแทแแแแแถแแแแถแแทแ
แแ
แแทแแแแแแแแธแแแแแแ แแถแแถแแแทแแแ
แแแแปแแแแแแแแแฝแแแแแแแ แแถแ แถแแแแธแแผแ
แแถ แแแแแธแแถแแถแแแถแแแธแแแถแแแถแแแถแแธแแธแแ แแทแแขแแธแแแบแแแแแแขแแแธแแแแแแ แแแแแแแแแถแแแแแถแแแแแแแแแแแแนแแแถแแแแแแผแแแถแแแแแปแแแแแแแแแผแแ
แแแแแ: www.habr.com