āĻšā§āĻ¯āĻžāĻ˛ā§ āĻšāĻžāĻŦāĻ°āĨ¤
āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻ
āĻ¨ā§āĻā§āĻ āĻ¯āĻžāĻ°āĻž āĻāĻĄāĻŧāĻŋ āĻŦāĻž āĻāĻŦāĻšāĻžāĻāĻ¯āĻŧāĻž āĻ¸ā§āĻā§āĻļāĻ¨ āĻāĻŋāĻ¨ā§āĻā§āĻ¨ āĻ¤āĻžāĻ°āĻž āĻĒā§āĻ¯āĻžāĻā§āĻāĻŋāĻāĻ¯āĻŧā§ āĻ°ā§āĻĄāĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻĄāĻŧāĻŋ āĻŦāĻž āĻāĻŽāĻ¨āĻāĻŋ āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ āĻāĻĄāĻŧāĻŋāĻ° āĻ˛ā§āĻā§ āĻĻā§āĻā§āĻā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ, āĻāĻžāĻ°āĻŖ āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻŦāĻ˛ āĻāĻĄāĻŧāĻŋāĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ā§ āĻ°āĻžāĻāĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŋāĻā§āĻā§āĻˇāĻŖ āĻĒāĻ°ā§ āĻāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸āĻ āĻŋāĻ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯ āĻāĻ°āĻŦā§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻĒāĻžāĻāĻĨāĻ¨ā§ āĻāĻāĻāĻŋ āĻĄāĻŋāĻā§āĻĄāĻžāĻ° āĻ˛āĻŋāĻā§āĻ¨āĨ¤
āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻā§. āĻāĻāĻ°ā§āĻĒā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ˛ āĻāĻžāĻ°ā§āĻŽāĻžāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ
āĻ¨ā§āĻā§ āĻ¯āĻž āĻ˛ā§āĻāĻž āĻāĻā§ āĻ¸āĻŦāĻ āĻšāĻŦā§ DCF77 āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĨ¤
āĻ¸āĻāĻā§āĻ¤ āĻ āĻā§āĻ¯āĻ°ā§āĻĨāĻ¨āĻž
DCF77 āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻ āĻ¤āĻ°āĻā§āĻ āĻ¸ā§āĻā§āĻļāĻ¨ āĻ¯āĻž 77.5 kHz āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋāĻ¤ā§ āĻāĻžāĻ āĻāĻ°ā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻļāĻ¸ā§āĻ¤āĻ¤āĻž āĻŽāĻĄā§āĻ¯ā§āĻ˛ā§āĻļāĻ¨ā§ āĻ¸āĻāĻā§āĻ¤ āĻĒā§āĻ°ā§āĻ°āĻŖ āĻāĻ°ā§āĨ¤ 50KW āĻ¸ā§āĻā§āĻļāĻ¨āĻāĻŋ āĻĢā§āĻ°āĻžāĻā§āĻāĻĢā§āĻ°ā§āĻ āĻĨā§āĻā§ 25 āĻāĻŋāĻ˛ā§āĻŽāĻŋāĻāĻžāĻ° āĻĻā§āĻ°ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤, āĻāĻāĻŋ 1959 āĻ¸āĻžāĻ˛ā§ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻāĻŦāĻ 1973 āĻ¸āĻžāĻ˛ā§ āĻ¸āĻ āĻŋāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¤āĻžāĻ°āĻŋāĻā§āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ 77 KHz āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋāĻ¤ā§ āĻ¤āĻ°āĻā§āĻāĻĻā§āĻ°ā§āĻā§āĻ¯ āĻā§āĻŦ āĻĻā§āĻ°ā§āĻ, āĻ¤āĻžāĻ āĻ
ā§āĻ¯āĻžāĻ¨ā§āĻā§āĻ¨āĻž āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻŽāĻžāĻ¤ā§āĻ°āĻžāĻā§āĻ˛āĻŋāĻ āĻŦā§āĻļ āĻļāĻžāĻ˛ā§āĻ¨ (āĻāĻāĻāĻŋāĻĒāĻŋāĻĄāĻŋāĻ¯āĻŧāĻž āĻĨā§āĻā§ āĻāĻŦāĻŋ):
āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻ¨ā§āĻā§āĻ¨āĻž āĻāĻŦāĻ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨āĻĒā§āĻ āĻ¸āĻš, āĻ
āĻā§āĻ¯āĻ°ā§āĻĨāĻ¨āĻž āĻāĻ˛āĻžāĻāĻžāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŽāĻā§āĻ° āĻāĻāĻ°ā§āĻĒ, āĻŦā§āĻ˛āĻžāĻ°ā§āĻļ, āĻāĻāĻā§āĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ°āĻžāĻļāĻŋāĻ¯āĻŧāĻžāĻ° āĻ
āĻāĻļ āĻā§āĻĄāĻŧā§āĨ¤
āĻ¯ā§ āĻā§āĻ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨. āĻāĻāĻŋ āĻāĻ°āĻ¤ā§, āĻļā§āĻ§ā§ āĻ
āĻ¨āĻ˛āĻžāĻāĻ¨ āĻ°āĻŋāĻ¸āĻŋāĻāĻžāĻ°ā§ āĻ¯āĻžāĻ¨
āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻŦā§āĻ¤āĻžāĻŽ āĻāĻŋāĻĒā§āĻ¨ āĻāĻŦāĻ āĻāĻ¯āĻŧā§āĻ āĻŽāĻŋāĻ¨āĻŋāĻ āĻĻā§āĻ°ā§āĻ āĻāĻāĻāĻŋ āĻāĻŖā§āĻĄ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻŋāĨ¤ āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ 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" āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŽāĻŋāĻ¨āĻŋāĻā§āĻ° āĻļā§āĻˇ āĻāĻāĻāĻŋ "āĻĻā§āĻ°ā§āĻ" āĻĒāĻžāĻ˛āĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ, 2s āĻĻā§āĻ°ā§āĻ, āĻŦāĻŋāĻ āĻ¸āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻāĻŋ āĻļā§āĻ¨ā§āĻ¯ā§ āĻ°āĻŋāĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻĢāĻŋāĻ˛āĻŋāĻ āĻāĻŦāĻžāĻ° āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧāĨ¤
āĻāĻĒāĻ°ā§āĻ°āĻāĻŋ āĻĒāĻžāĻāĻĨāĻ¨ā§ āĻ˛ā§āĻāĻž āĻ¸āĻšāĻāĨ¤
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 āĻŦāĻŋāĻ āĻāĻŽāĻž āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŽāĻŋāĻ¨āĻŋāĻā§āĻ° āĻļā§āĻˇā§ āĻāĻŽāĻ°āĻž āĻ¸āĻ āĻŋāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻžāĻāĨ¤ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ (āĻāĻŋāĻĒāĻŋāĻāĻ¸, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŦāĻž āĻāĻļā§āĻŦāĻ° āĻ¨āĻŋāĻˇā§āĻ§ āĻāĻ°ā§āĻ¨, āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻ:), āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ°ā§āĻĄāĻŋāĻ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻ¯āĻ¤ āĻā§āĻ¨ āĻŦāĻŋāĻĻā§āĻ¯ā§ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻšā§āĻŽ āĻāĻ¯āĻŧā§āĻĻāĻžāĻ° āĻ¸ā§āĻā§āĻļāĻ¨ 2 AA āĻŦā§āĻ¯āĻžāĻāĻžāĻ°āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ āĻŦāĻāĻ° āĻ§āĻ°ā§ āĻāĻ˛ā§āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻ¨āĻāĻŋ āĻāĻŦā§āĻāĻŋ āĻāĻĄāĻŧāĻŋ āĻ°ā§āĻĄāĻŋāĻ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻŽāĻ¤ā§ āĻ¨āĻ¯āĻŧ, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻĻā§āĻ¯āĻŧāĻžāĻ˛ āĻāĻĄāĻŧāĻŋ āĻŦāĻž āĻ°āĻžāĻ¸ā§āĻ¤āĻžāĻ° āĻ¸ā§āĻā§āĻļāĻ¨ āĻāĻĄāĻŧāĻŋāĨ¤
DCF āĻāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻāĻŦāĻ āĻ¸āĻ°āĻ˛āĻ¤āĻž DIY āĻāĻ¤ā§āĻ¸āĻžāĻšā§āĻĻā§āĻ°āĻ āĻāĻā§āĻˇā§āĻ āĻāĻ°ā§ā§ˇ āĻŽāĻžāĻ¤ā§āĻ° 10-20 āĻĄāĻ˛āĻžāĻ°ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻ°āĻŋāĻ¸āĻŋāĻāĻžāĻ° āĻāĻŦāĻ TTL āĻāĻāĻāĻĒā§āĻ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻ
ā§āĻ¯āĻžāĻ¨ā§āĻā§āĻ¨āĻž āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻŋāĻ¨āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯āĻž āĻāĻāĻāĻŋ Arduino āĻŦāĻž āĻ
āĻ¨ā§āĻ¯ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ Arduino āĻāĻ¨ā§āĻ¯ āĻ˛āĻŋāĻāĻŋāĻ¤
āĻ¯āĻžāĻ°āĻž āĻāĻā§āĻā§āĻ āĻ¤āĻžāĻ°āĻž āĻ°ā§āĻĄāĻŋāĻ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§ āĻĻāĻžāĻĻāĻŋāĻ° āĻāĻĄāĻŧāĻŋ āĻāĻĒāĻā§āĻ°ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
āĻāĻĒāĻ¨āĻŋ "āĻ°ā§āĻĄāĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ¨ā§āĻĻā§āĻ˛āĻ¨" āĻā§āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŦā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻŦāĻ āĻ āĻŦāĻļā§āĻˇā§, āĻ¯āĻžāĻ°āĻž āĻāĻ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻĄāĻŧā§āĻā§āĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻĢ āĻšā§āĻ¯āĻžāĻāĨ¤ āĻĒāĻ°ā§āĻ° āĻāĻ¯āĻŧā§āĻ āĻšāĻžāĻāĻžāĻ° āĻāĻŋāĻ˛ā§āĻŽāĻŋāĻāĻžāĻ°ā§ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻ āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛ āĻā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻāĻžāĻ° āĻ¨āĻžāĻ āĻĨāĻžāĻā§, āĻ¤āĻŦā§āĻ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧāĨ¤ "DCF77 āĻāĻŽā§āĻ˛ā§āĻāĻ°" āĻ¨āĻžāĻŽā§ āĻā§āĻāĻ˛ āĻĒā§āĻ˛ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻšā§āĻĄāĻĢā§āĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛ āĻāĻāĻāĻĒā§āĻ āĻāĻ°ā§āĨ¤ āĻ˛ā§āĻāĻā§āĻ° āĻŽāĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻĄāĻŧāĻŋāĻ° āĻāĻžāĻ°āĻĒāĻžāĻļā§ āĻšā§āĻĄāĻĢā§āĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ°āĻāĻŋ āĻŽā§āĻĄāĻŧā§ āĻĻā§āĻ¨ āĻ¤āĻŦā§ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛āĻāĻŋ āĻ¤ā§āĻ˛ā§ āĻ¨ā§āĻŦā§ (āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻšā§āĻĄāĻĢā§āĻ¨āĻā§āĻ˛āĻŋ 77KHz āĻ¸āĻāĻā§āĻ¤ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻ āĻā§āĻ¯āĻ°ā§āĻĨāĻ¨āĻž āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻšāĻžāĻ°āĻŽā§āĻ¨āĻŋāĻā§āĻ¸ā§āĻ° āĻāĻžāĻ°āĻŖā§)āĨ¤ āĻ ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§āĻĄ 9-āĻ, āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŽā§āĻā§āĻ āĻāĻžāĻ āĻāĻ°ā§āĻ¨āĻŋ - āĻ¸ā§āĻāĻžāĻ¨ā§ āĻā§āĻŦāĻ˛ āĻā§āĻ¨āĻ āĻļāĻŦā§āĻĻ āĻāĻŋāĻ˛ āĻ¨āĻž (āĻŦāĻž āĻšāĻ¯āĻŧāĻ¤ā§ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻļā§āĻ¨āĻ¤ā§ āĻĒāĻžāĻāĻ¨āĻŋ - āĻāĻāĻŋ 77KHz, āĻ¸āĻ°ā§āĻŦā§āĻĒāĻ°āĻŋ :), āĻ¤āĻŦā§ āĻšāĻ¯āĻŧāĻ¤ā§ āĻāĻžāĻ°āĻ āĻāĻžāĻā§āĻ¯ āĻāĻžāĻ˛ āĻšāĻŦā§āĨ¤ āĻā§āĻ āĻā§āĻ āĻ āĻŦāĻļā§āĻ¯ āĻ¨āĻŋāĻā§āĻĻā§āĻ°āĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻĄāĻŋāĻ¸āĻŋāĻāĻĢ āĻ¸āĻŋāĻāĻ¨ā§āĻ¯āĻžāĻ˛ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§, āĻ¯āĻž āĻāĻāĻ Arduino āĻŦāĻž ESP32-āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¸āĻšāĻ:
(āĻ¸ā§āĻ¤ā§āĻ°
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
DCF āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻŦā§āĻļ āĻ¸āĻšāĻ āĻāĻŦāĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻšāĻ¤ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤. āĻāĻāĻāĻŋ āĻ¸āĻšāĻ āĻāĻŦāĻ āĻ¸āĻ¸ā§āĻ¤āĻž āĻ°āĻŋāĻ¸āĻŋāĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦāĻ¤ā§āĻ° āĻ¸āĻ āĻŋāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ
āĻŦāĻļā§āĻ¯āĻ āĻ
āĻā§āĻ¯āĻ°ā§āĻĨāĻ¨āĻž āĻāĻ˛āĻžāĻāĻžāĻ¯āĻŧāĨ¤ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻŦā§āĻ¯āĻžāĻĒāĻ āĻĄāĻŋāĻāĻŋāĻāĻžāĻ˛āĻžāĻāĻā§āĻļāĻ¨ āĻāĻŦāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻ āĻ
āĻĢ āĻĨāĻŋāĻāĻ¸ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ, āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻ¸āĻšāĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻ˛āĻŋ āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻšāĻŋāĻĻāĻž āĻĨāĻžāĻāĻŦā§āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com