From 053a1384e9a19a2d4bfa52dc3045dd276d1e65c6 Mon Sep 17 00:00:00 2001 From: Sergey Revyakin Date: Thu, 9 Apr 2026 12:59:48 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D1=8B=20=D0=BD=D0=B0=20240?= =?UTF-8?q?0=20=D0=B8=205800=20=D0=B4=D0=BB=D1=8F=20nn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orange_scripts/compose_send_data_2400.py | 115 +++++++++++++++ orange_scripts/main_2400.py | 172 +++++++++++++++++++++++ orange_scripts/main_5800.py | 6 +- 3 files changed, 290 insertions(+), 3 deletions(-) create mode 100644 orange_scripts/compose_send_data_2400.py create mode 100644 orange_scripts/main_2400.py diff --git a/orange_scripts/compose_send_data_2400.py b/orange_scripts/compose_send_data_2400.py new file mode 100644 index 0000000..b293a18 --- /dev/null +++ b/orange_scripts/compose_send_data_2400.py @@ -0,0 +1,115 @@ + +from common.runtime import load_root_env, validate_env, as_float, as_int, as_str +import numpy as np +import requests +import os +import sys +import json +import time + + +load_root_env(__file__) +validate_env("orange_scripts/compose_send_data_2400.py", { + "POROG_2400": as_float, + "SERVER_IP_2": as_str, + "SERVER_PORT_2": as_int, +}) +porog = float(os.getenv('POROG_2400')) +server_ip_1 = os.getenv('SERVER_IP_1') +server_port_1 = os.getenv('SERVER_PORT_1') +server_ip_2 = os.getenv('SERVER_IP_2') +server_port_2 = os.getenv('SERVER_PORT_2') +PARAMS = {'split_size': 400_000, 'point_amount': 100_000} +PARAMS['show_amount'] = 0.8 * PARAMS['point_amount'] +token = 0 +channel = 1 +flag = 0 + +############################## +# HYPERPARAMETERS +############################## +f_base = 2.4e9 +f_step = 20e6 +f_roof = 2.5e9 +############################## +# Variables +############################## +f = f_base +EOCF = 0 +signal_arr = [] + + +class NumpyArrayEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, np.integer): + return int(obj) + elif isinstance(obj, np.ndarray): + return obj.tolist() + else: + return super(NumpyArrayEncoder, self).default(obj) + + +def send_data(sig): + try: + global token + print('#' * 10) + print('\nОтправка пакета ' + str(token+1)) + data_to_send = { + "freq": 2400, + "channel": int(channel), + "token": int(token+1), + "data_real": np.asarray(np.array(sig, dtype=np.complex64).real, dtype=np.float32), + "data_imag": np.asarray(np.array(sig, dtype=np.complex64).imag, dtype=np.float32) + } + mod_data_to_send = json.dumps(data_to_send, cls=NumpyArrayEncoder) + response = requests.post("http://{0}:{1}/receive_data".format(server_ip_2, server_port_2), json=mod_data_to_send) + if response.status_code == 200: + token += 1 + print(response.text) + print('#' * 10) + else: + print("Ошибка при отправке данных: ", response.status_code) + print('#' * 10) + except Exception as exc: + print(str(exc)) + + +def median(sig): + global flag + median = abs(float(np.median(sorted(np.asarray(np.abs(np.array(sig, dtype=np.complex64)), dtype=np.float32))[int(PARAMS['show_amount']):]))) + flag = 0 if porog > median else 1 + print(channel, median, flag) + + +def work(lvl): + global flag + global channel + global f_base + global f_step + global f_roof + global f + global EOCF + global signal_arr + + y = np.array(lvl).ravel() + signal_arr = np.concatenate((signal_arr, y), axis=None) + + if f >= f_roof: + f = f_base + signal_arr = [] + channel = 1 + return f, EOCF + else: + if flag == 0 and len(signal_arr) >= PARAMS['point_amount']: + median(signal_arr[:PARAMS['point_amount']]) + signal_arr = [] + if flag == 0: + f += f_step + channel += 1 + if len(signal_arr) >= PARAMS['split_size']: + send_data(signal_arr[:PARAMS['split_size']]) + flag = 0 + signal_arr = [] + channel += 1 + f += f_step + return f, EOCF diff --git a/orange_scripts/main_2400.py b/orange_scripts/main_2400.py new file mode 100644 index 0000000..517a161 --- /dev/null +++ b/orange_scripts/main_2400.py @@ -0,0 +1,172 @@ +from gnuradio import blocks, gr +import sys +import signal +import compose_send_data_2400 as my_freq +import osmosdr +import time +import threading +import subprocess +import os +from common.runtime import load_root_env, resolve_hackrf_index + + +load_root_env(__file__) + +def get_hack_id(): + return resolve_hackrf_index('HACKID_2400', 'orange_scripts/main_2400.py') + serial_number = os.getenv('HACKID_2400') + pos = None + output = [] + try: + command = 'lsusb -v -d 1d50:6089 | grep iSerial' + output.append(subprocess.check_output(command, shell=True, text=True)) + except subprocess.CalledProcessError as e: + print(f"Команда завершилась с кодом возврата {e.returncode}") + print(e) + print(output) + output_lines = output[0].strip().split('\n') + print(output_lines) + serial_numbers = [line.split()[-1] for line in output_lines] + print(serial_numbers) + for i, number in enumerate(serial_numbers): + if number == serial_number: + id = i + break + if id is not None: + print('HackId is: {0}'.format(id)) + return str(id) + else: + print('Такого хака нет!') + + +class get_center_freq(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self, "get_center_freq") + + ################################################## + # Variables + ################################################## + self.prob_freq = prob_freq = 0 + self.top_peaks_amount = top_peaks_amount = 20 + self.samp_rate = samp_rate = 20e6 + self.poll_rate = poll_rate = 10000 + self.num_points = num_points = 8192 + self.flag = flag = 1 + self.decimation = decimation = 1 + self.center_freq = center_freq = my_freq.work(prob_freq)[0] + + ################################################## + # Blocks + ################################################## + self.probSigVec = blocks.probe_signal_vc(4096) + self.rtlsdr_source_0 = osmosdr.source( + args="numchan=" + str(1) + " " + 'hackrf=' + get_hack_id() + ) + self.rtlsdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t()) + self.rtlsdr_source_0.set_sample_rate(samp_rate) + self.rtlsdr_source_0.set_center_freq(center_freq, 0) + self.rtlsdr_source_0.set_freq_corr(0, 0) + self.rtlsdr_source_0.set_gain(16, 0) + self.rtlsdr_source_0.set_if_gain(16, 0) + self.rtlsdr_source_0.set_bb_gain(0, 0) + self.rtlsdr_source_0.set_antenna('', 0) + self.rtlsdr_source_0.set_bandwidth(0, 0) + self.rtlsdr_source_0.set_min_output_buffer(4096) + + def _prob_freq_probe(): + while True: + + val = self.probSigVec.level() + try: + self.set_prob_freq(val) + except AttributeError: + pass + time.sleep(1.0 / (poll_rate)) + _prob_freq_thread = threading.Thread(target=_prob_freq_probe) + _prob_freq_thread.daemon = True + _prob_freq_thread.start() + + self.blocks_stream_to_vector_1 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 4096) + + + + ################################################## + # Connections + ################################################## + self.connect((self.blocks_stream_to_vector_1, 0), (self.probSigVec, 0)) + self.connect((self.rtlsdr_source_0, 0), (self.blocks_stream_to_vector_1, 0)) + + def get_prob_freq(self): + return self.prob_freq + + def set_prob_freq(self, prob_freq): + self.prob_freq = prob_freq + self.set_center_freq(my_freq.work(self.prob_freq)[0]) + + def get_top_peaks_amount(self): + return self.top_peaks_amount + + def set_top_peaks_amount(self, top_peaks_amount): + self.top_peaks_amount = top_peaks_amount + + def get_samp_rate(self): + return self.samp_rate + + def set_samp_rate(self, samp_rate): + self.samp_rate = samp_rate + self.rtlsdr_source_0.set_sample_rate(self.samp_rate) + + def get_poll_rate(self): + return self.poll_rate + + def set_poll_rate(self, poll_rate): + self.poll_rate = poll_rate + + def get_num_points(self): + return self.num_points + + def set_num_points(self, num_points): + self.num_points = num_points + + def get_flag(self): + return self.flag + + def set_flag(self, flag): + self.flag = flag + + def get_decimation(self): + return self.decimation + + def set_decimation(self, decimation): + self.decimation = decimation + + def get_center_freq(self): + return self.center_freq + + def set_center_freq(self, center_freq): + self.center_freq = center_freq + self.rtlsdr_source_0.set_center_freq(self.center_freq, 0) + + +def main(top_block_cls=get_center_freq, options=None): + time.sleep(3) + tb = top_block_cls() + def sig_handler(sig=None, frame=None): + tb.stop() + tb.wait() + sys.exit(0) + + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) + + tb.start() + try: + input('Press Enter to quit: ') + except EOFError: + pass + tb.wait() + + +if __name__ == '__main__': + main() diff --git a/orange_scripts/main_5800.py b/orange_scripts/main_5800.py index c15c661..1fa85eb 100644 --- a/orange_scripts/main_5800.py +++ b/orange_scripts/main_5800.py @@ -1,7 +1,7 @@ from gnuradio import blocks, gr import sys import signal -import compose_send_data_2400 as my_freq +import compose_send_data_5800 as my_freq import osmosdr import time import threading @@ -13,8 +13,8 @@ from common.runtime import load_root_env, resolve_hackrf_index load_root_env(__file__) def get_hack_id(): - return resolve_hackrf_index('HACKID_2400', 'orange_scripts/main_2400.py') - serial_number = os.getenv('HACKID_2400') + return resolve_hackrf_index('HACKID_5800', 'orange_scripts/main_5800.py') + serial_number = os.getenv('HACKID_5800') pos = None output = [] try: