рд╣рд╛рдп, рд╣реИрдмреНрд░ред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдиреЗ рдПрд╕рдбреАрдЖрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╣рд▓реБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкрд╛рдпрдерди рдФрд░ рд╕рд╕реНрддреА ($ 30) рдЖрд░рдЯреАрдПрд▓-рдПрд╕рдбреАрдЖрд░ рд░рд┐рд╕реАрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдирдУрдПрдП рдореМрд╕рдо рдЙрдкрдЧреНрд░рд╣ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдорд╛рдирд╛ рдХреЛрдб рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ - рд╡рд┐рдВрдбреЛрдЬ, рдУрдПрд╕рдПрдХреНрд╕, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рднреАред

рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЬрд╛рд░реА рд░рд╣рд╛ред
SoapySDR
рд╡рд┐рднрд┐рдиреНрди рдПрд╕рдбреАрдЖрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдХрд╛рдлреА рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЦрд░реАрджрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╣рдВрдЧрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХреАрдХреГрдд рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдмрди рдЧрдП рд╣реИрдВред рдкрд╣рд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛
рдПрдХреНрд╕рдЯреАрдЖрдИрдУ рдбреАрдПрд▓рдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рд╢рд╛рдпрдж рдХрдо рд╕реЗ рдХрдо 10 рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ
рдереЗрд░реЗрдкреА рдПрд╕рдбреАрдЖрд░рдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗред
SoapySDR C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдПрд╕рдбреАрдЖрд░ рдЙрдкрдХрд░рдгреЛрдВ, рд░рд┐рд╕реАрд╡рд░ рдФрд░ рдЯреНрд░рд╛рдВрд╕рд╕реАрд╡рд░реНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдРрд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ (GQRX, GNU Radio, CubicSDR, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреБрдЫ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд▓рдЧрднрдЧ рд╕рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд┐рд░реНрдорд╛рддрд╛,
(рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд▓реЗрддреЗ рд╣реБрдП, рдореИрдВ EE рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ рднреЗрдЬрддрд╛ рд╣реВрдБ) SoapySDR рд╕рдорд░реНрдерди рд╣реИ, рд╕рдорд░реНрдерд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ HackRF, USRP, SDRPlay, LimeSDR, RTL-SDR, Red Pitaya рдФрд░ рдХрдИ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
SoapySDR рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рд╡рд┐рдВрдбреЛрдЬ, рдУрдПрд╕рдПрдХреНрд╕, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝
рдкреЛрдереЛрд╕реЙрд░рдбреАрдЖрд░ рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╕реЛрдкрдПрд╕рдбреАрдЖрд░ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреЛ рднрд╛рдЧреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ -
рд╕реНрд╡рдпрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп , рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд▓рд┐рдП "рдкреНрд▓рдЧ-рдЗрди", рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣
SoapyRTLSDR рд╣реЛрдЧрд╛ (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрд░реЛрдд рд╕реЗ рднреА рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Visual Studio, Cmake, рдФрд░ SWIG рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЕрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рдФрд░ рдЖрдк рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
from __future__ import print_function import SoapySDR
рд╣рдо рд░рд┐рд╕реАрд╡рд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмреАрдЪ рд╣рдорд╛рд░рд╛ рдЖрд░рдЯреАрдПрд╕рдПрд▓рдЖрд░рдбреА рд╣реИред

рдмрд╛рдХреА рдбрд┐рд╡рд╛рдЗрд╕ рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдПрд╕рдбреАрдЖрд░ рдиреЗ рдкреАрд╕реА рд░реИрдЦрд┐рдХ рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рдЙрдкрд▓рдмреНрдз рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЖрд╡реГрддреНрддрд┐ рд░реЗрдВрдЬ, рдЖрджрд┐ ред:
soapy_device = "rtlsdr" device = SoapySDR.Device(dict(driver = soapy_device)) channels = list(range(device.getNumChannels(SoapySDR.SOAPY_SDR_RX))) print("Channels:", channels) ch = channels[0] sample_rates = device.listSampleRates(SoapySDR.SOAPY_SDR_RX, ch) print("Sample rates:\n", sample_rates) bandwidths = list(map(lambda r: int(r.maximum()), device.getBandwidthRange(SoapySDR.SOAPY_SDR_RX, ch))) print("Bandwidths:\n", bandwidths) print("Gain controls:") for gain in device.listGains(SoapySDR.SOAPY_SDR_RX, ch): print(" %s: %s" % (gain, device.getGainRange(SoapySDR.SOAPY_SDR_RX, ch, gain))) frequencies = device.listFrequencies(SoapySDR.SOAPY_SDR_RX, ch) print("Frequencies names:", frequencies) frequency_name = frequencies[0] print("Frequency channel name:", frequency_name) print("Frequency range:", device.getFrequencyRange(SoapySDR.SOAPY_SDR_RX, ch, frequency_name)[0])
рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрддреЗ рд╣реИрдВ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдкрд╛рд╕ "RF" рдирд╛рдо рдХрд╛ рдПрдХ рдЗрдирдкреБрдЯ рдЪреИрдирд▓ рд╣реИ, рд╕рдВрднрд╡ рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ [250000.0, 1024000.0, 1536000.0, 1792000.0, 1920000.0, 2048000.0, 2160000.0, 2560000.0, 2880000.0, 3200000.0] рдФрд░ 24 MHz-1.7 GHz рдХреА рдЖрд╡реГрддреНрддрд┐ рд░реЗрдВрдЬред
рдЬреАрд╡рди рд╣реИрдХ - рдХрдорд╛рдВрдб
рдереЗрд░реЗрдкреА SoDRSDRUtil --probe = "рдбреНрд░рд╛рдЗрд╡рд░ = rtlsdr" рдЯрд╛рдЗрдк рдХрд░рдХреЗ рд╕рдорд╛рди рдбреЗрдЯрд╛ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рдирдХрд░, рд╣рдо WAV рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд╕рдбреАрдЖрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ I рдФрд░ Q рдирд╛рдордХ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ ADC рд╕реЗ рдирдореВрдиреЗ рд╣реИрдВ, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрдорд░реЗ рд╕реЗ RAW рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐
рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдПрд╕рдбреАрдЖрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдлрд┐рд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд░рд┐рдХреЙрд░реНрдб рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд░реАрдбрд╕реНрдЯреНрд░реАрдо рдлрд╝рдВрдХреНрд╢рди рдмрдлрд░ рднрд░рддрд╛ рд╣реИ рдпрджрд┐ рдбреЗрдЯрд╛ рд╣реИ, рдЕрдЧрд░ рдЕрднреА рддрдХ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ -1 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдиреАрдЪреЗ 10 рдирдореВрдиреЛрдВ рдХрд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛрдб рд╣реИ (рдХреЛрдб рдХреЗ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рднрд╛рдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
device.setFrequency(SoapySDR.SOAPY_SDR_RX, channel, "RF", frequency) device.setGain(SoapySDR.SOAPY_SDR_RX, channel, "TUNER", gain) device.setGainMode(SoapySDR.SOAPY_SDR_RX, channel, False) device.setSampleRate(SoapySDR.SOAPY_SDR_RX, channel, sample_rate)
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдПрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ 131072 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдЬреЛ рдХрд┐ 250,000 рдХреЗ рдирдореВрдиреЗ рджрд░ рдкрд░ рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдЖрдзреЗ рд╕реЗрдХрдВрдб рдХреА рдЕрд╡рдзрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рдереЗ, рд╡реЗ рдЖрдо рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрд╛рдПрдВрдЧреЗред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ - рдпрд╣ рдПрд╕рдбреАрдЖрд░ # рдореЗрдВ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЪрд╛рд▓ рд╣реИ - SDR # рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрд╢рдиреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ HDSDR рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝реЙрд░реНрдо рдХрд╛ "HDSDR_20190518_115500Z_101000k_RF.wav" (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрд┐рдерд┐ рдФрд░ рд╕рдордп рд╢реБрд░реБрдЖрдд рдореЗрдВ GMT рдореЗрдВ рд╣реИ, рдлрд┐рд░ рдЖрд╡реГрддреНрддрд┐)ред ред рдпрд╣ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ:
frequency = 101000000 file_name = "HDSDR_%s_%dkHz_RF.wav" % (datetime.datetime.utcnow().strftime("%Y%m%d_%H%M%SZ"), frequency/1000)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдлрдПрдо рдмреИрдВрдб рдкрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд╕реНрдЯреЗрд╢рди рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рд╕рдВрдЧреАрдд рдмрдЬ рд░рд╣рд╛ рд╣реИ, рдЖрд░рдбреАрдПрд╕ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк NOAA рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
NOAA рд╕реЗрд╡рди
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдФрд░ рдПрдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИред рд╣рдореЗрдВ NOAA 15, NOAA 18 рдФрд░ NOAA 19 рдореМрд╕рдо рдЙрдкрдЧреНрд░рд╣реЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдЬреЛ рдкреГрдереНрд╡реА рдХреА рд╕рддрд╣ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ 137.620, 137.9125 рдФрд░ 137.100 MHz рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдХреНрд╖рдг рдХреЛ "рдкрдХрдбрд╝рдиреЗ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдЧреНрд░рд╣ рд╣рдорд╛рд░реЗ рдКрдкрд░ рдЙрдбрд╝рддрд╛ рд╣реИред рдЖрдк рдлреНрд▓рд╛рдЗрдЯ рдХрд╛ рд╕рдордп рдСрдирд▓рд╛рдЗрди
https://www.n2yo.com/passes/?s=25338 ,
https://www.n2yo.com/passes/?s=28654 рдФрд░
https://www.n2yo.com рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред / рдкрд╛рд╕ / рдПрд╕ = 33591 рдХреНрд░рдорд╢рдГред

рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдирд╣реАрдВ рдмреИрдардиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╣реА рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдмрд┐рдирд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХреЗ рднреА рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
import datetime def wait_for_start(dt):
рд╡реИрд╕реЗ, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рд╣реИ, рдЖрдкрдХреЛ "nohup python рд░рд┐рдХреЙрд░реНрдбрд░.py" рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЕрдиреНрдп рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд▓рдЧрднрдЧ 20 рдорд┐рдирдЯ рддрдХ рд░рд╣рддреА рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ - рдХреНрдпрд╛ рдЙрдкрдЧреНрд░рд╣ рдХреЛ рдирдЧреНрди рдЖрдВрдЦреЛрдВ рд╕реЗ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ? рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕рдХреА рдЕрдзрд┐рдХрддрдо рдЪрдордХ рд▓рдЧрднрдЧ 5.5 рдореАрдЯрд░ рдХреА
рдкрд░рд┐рдорд╛рдг рд╣реИ , рдЖрджрд░реНрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдирд╡ рдЖрдВрдЦ рдХреА рд╕реАрдорд╛ 6 рдореА рд╣реИред рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдВрдзреЗрд░реЗ рдЖрдХрд╛рд╢ рдореЗрдВ, рд╢рд╣рд░ рдХреЗ рдмрд╛рд╣рд░, рдПрдирдУрдПрдП рдЙрдкрдЧреНрд░рд╣ рдХреЗ рдорд╛рд░реНрдЧ рдХреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╣рд░ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛
рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣реИрдмреЗ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ , рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдкреАрдврд╝реА, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ
рдорд┐рд▓реНрдХреА рд╡реЗ рдХреЛ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ)ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд░рд┐рдХреЙрд░реНрдбреЗрдб wav рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЗрд╕рдХрд╛ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рдВрдХреЗрдд рджреЗрдЦрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ NOAA рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╡рд┐рд╢реЗрд╖ рдПрдВрдЯреАрдирд╛ рдХреЗ рд╕рд╛рде, рдЧреБрдгрд╡рддреНрддрд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрдЧреАред рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдПрдкреАрдЯреА (
рдСрдЯреЛрдореИрдЯрд┐рдХ рдкрд┐рдХреНрдЪрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдЖрдк рдкреГрдереНрд╡реА рдХреА рд╕рддрд╣ рдХреА рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдЖрдк рдЕрд▓рдЧ рд╕реЗ рдЗрд╕рдХреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ, рдЖрдк WxToImg рдпрд╛ MultiPSK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдбреЙрдкрд▓рд░ рдХреЛ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдЧреНрд░рд╣ рд╣рдорд╛рд░реЗ рдКрдкрд░ рдЙрдбрд╝рддрд╛ рд╣реИред рд╢рд╛рдпрдж, рд╣рд░реНрдЯреНрдЬ рдореЗрдВ рд╕рдордп рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдмрджрд▓рд╛рд╡ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рдЗрд╕рдХреА рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдПрдирдУрдПрдП рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдмреИрдВрдбрд╡рд┐рдбреНрде рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЦреБрдж SoapySDR рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб from __future__ import print_function import SoapySDR import numpy as np import struct import sys import time import datetime def wait_for_start(dt):
SoapySDR рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд▓рд╛ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдиреНрдп рд░рд┐рд╕реАрд╡рд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SDRPlay рдпрд╛ HackRF рдХреЗ рд╕рд╛рдеред рд╡реИрд╕реЗ, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА, рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
рдпрджрд┐ рдкрд╛рдардХреЛрдВ рдХреЛ рдЕрднреА рднреА рд░реЗрдбрд┐рдпреЛ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрдИ рдЖрднрд╛рд╕реА рд░рд┐рд╕реАрд╡рд░ рдмрдирд╛рдХрд░ рдЬреАрдПрдирдпреВ рд░реЗрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрд╕рдбреАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред