3 次代码提交 98fe2cc90e ... 590b3dfe40

作者 SHA1 备注 提交日期
  wuxiang 590b3dfe40 加入requirements.txt 2 月之前
  wuxiang c672f9f670 data加入可重入锁 2 月之前
  wuxiang 21ecd4ec7b data加入可重入锁 3 月之前
共有 3 个文件被更改,包括 91 次插入81 次删除
  1. 1 1
      config.ini
  2. 二进制
      requirements.txt
  3. 90 80
      service/service.py

+ 1 - 1
config.ini

@@ -1,3 +1,3 @@
 [NACOS]
 NACOS_SERVER_ADDR = localhost:8848
-SERVICE_IP = 192.168.5.23
+SERVICE_IP = 192.168.5.5

二进制
requirements.txt


+ 90 - 80
service/service.py

@@ -36,7 +36,9 @@ class Service:
             try:
                 Service.usrp = uhd.usrp.MultiUSRP()
                 print('------SDR Devices initialize success!------')
+                #侦查雷达初始化
                 Service.surveillance_radar = SurveillanceRadar(Service.usrp, rx=CHANNEL_1, tx=CHANNEL_1)
+                # 干扰雷达初始化
                 Service.jammer_radar = JammerRadar(Service.usrp, rx=CHANNEL_2, tx=CHANNEL_2)
                 Service.status = 1
                 return ResponseDTO.SUCCESS({"status": Service.status}).to_json()
@@ -66,86 +68,94 @@ class Service:
 
     @staticmethod
     def data(payload):
-        # 使用已初始化的雷达实例
-        surveillance_radar = Service.surveillance_radar
-        jammer_radar = Service.jammer_radar
-        
-        jamming_policy = payload.get('jamming_policy')
-        anti_jamming_policy = payload.get('anti_jamming_policy')
-        # 判断策略是否合法
-        if not JammingPolicy.is_valid(jamming_policy) or not AntiJammingPolicy.is_valid(anti_jamming_policy):
-            return ResponseDTO.ERROR_MS_DATA('策略不合法', {"status": Service.status, "Error": "策略不合法"}).to_json()
-        # 打印对应策略
-        print(' jamming_policy:', jamming_policy)
-        print(' anti_jamming_policy:', anti_jamming_policy)
-        # 根据策略选择算法
-        jam_algorithm = Service._get_jamming_algorithm_method(jamming_policy)
-        anti_jam_algorithm = Service._get_anti_jamming_algorithm(anti_jamming_policy, 'rx')
-
-        # 1. 应用发射端抗干扰算法(波形/频率捷变)
-        tx_original = np.random.randn(100)
-        if anti_jamming_policy in {AntiJammingPolicy.WAVEFORM_AGILITY, AntiJammingPolicy.FREQUENCY_AGILITY}:
-            tx_processed = surveillance_radar.process_transmit_signal(
-                tx_signal=tx_original,
-                algorithm=Service._get_tx_algorithm_method(anti_jamming_policy.value),
-                sample_rate=1e6
-            )
-        else:
-            tx_processed = tx_original
-        
-        # 2. 发送经过处理的发射信号
-        tx_signal = surveillance_radar.send_signal(
-            tx_signal=tx_processed,
-            duration=0.1,
-            center_freq=100e6,
-            sample_rate=1e6,
-            gain=20
-        )
-        
-        # 3. 干扰雷达生成干扰
-        jammed_signal = jammer_radar.execute_jamming(
-            algorithm=jam_algorithm,
-            bandwidth=100e6,
-            sample_rate=1e6,
-            duration=0.1,
-            gain=20
-        ) if jam_algorithm else tx_signal
-
-        # 4. 干扰雷达发送干扰信号
-        jammer_radar.send_signal(
-            tx_signal=jammed_signal,
-            duration=0.1,
-            center_freq=100e6,
-            sample_rate=1e6,
-            gain=20
-        )
-        
-        # 5. 侦查雷达接收信号
-        rx_original = surveillance_radar.recv_signal(
-            num_samples=100,
-            sample_rate=1e6,
-            center_freq=100e6
-        )
-        
-        # 6.接收端抗干扰处理(仅限接收端策略)
-        processed_signal = rx_original
-        if anti_jam_algorithm:
-            processed_signal = surveillance_radar.execute_anti_jamming(
-                rx_signal=rx_original,
-                algorithm=anti_jam_algorithm,
-                sample_rate=1e6,
-                polarization_params={'angle': 45, 'ellipticity': 0.5}
-            )
-        
-        # 类型检查并转换复数信号为实数
-        if np.iscomplexobj(processed_signal):
-            processed_signal = np.real(processed_signal)
-        if np.iscomplexobj(jammed_signal):
-            jammed_signal = np.real(jammed_signal)
-        
-        # 返回结果
-        return ResponseDTO.SUCCESS({"jamming_signal": np.real(jammed_signal).tolist(),
-                                    "anti_jamming_signal": np.real(processed_signal).flatten().tolist()}).to_json()
+        with Service._rlock:
+            if Service.status == 0:
+                return ResponseDTO.ERROR_MS_DATA('SDR设备异常',
+                                                 {"status": Service.status, "Error": "SDR设备未初始化"}).to_json()
+            try:
+                # 使用已初始化的雷达实例
+                surveillance_radar = Service.surveillance_radar
+                jammer_radar = Service.jammer_radar
+
+                jamming_policy = payload.get('jamming_policy')
+                anti_jamming_policy = payload.get('anti_jamming_policy')
+                # 判断策略是否合法
+                if not JammingPolicy.is_valid(jamming_policy) or not AntiJammingPolicy.is_valid(anti_jamming_policy):
+                    return ResponseDTO.ERROR_MS_DATA('策略不合法', {"status": Service.status, "Error": "策略不合法"}).to_json()
+                # 打印对应策略
+                print(' jamming_policy:', jamming_policy)
+                print(' anti_jamming_policy:', anti_jamming_policy)
+                # 根据策略选择算法
+                jam_algorithm = Service._get_jamming_algorithm_method(jamming_policy)
+                anti_jam_algorithm = Service._get_anti_jamming_algorithm(anti_jamming_policy, 'rx')
+
+                # 1. 应用发射端抗干扰算法(波形/频率捷变)
+                tx_original = np.random.randn(100)
+                if anti_jamming_policy in {AntiJammingPolicy.WAVEFORM_AGILITY, AntiJammingPolicy.FREQUENCY_AGILITY}:
+                    tx_processed = surveillance_radar.process_transmit_signal(
+                        tx_signal=tx_original,
+                        algorithm=Service._get_tx_algorithm_method(anti_jamming_policy.value),
+                        sample_rate=1e6
+                    )
+                else:
+                    tx_processed = tx_original
+
+                # 2. 发送经过处理的发射信号
+                tx_signal = surveillance_radar.send_signal(
+                    tx_signal=tx_processed,
+                    duration=0.1,
+                    center_freq=100e6,
+                    sample_rate=1e6,
+                    gain=20
+                )
+
+                # 3. 干扰雷达生成干扰
+                jammed_signal = jammer_radar.execute_jamming(
+                    algorithm=jam_algorithm,
+                    bandwidth=100e6,
+                    sample_rate=1e6,
+                    duration=0.1,
+                    gain=20
+                ) if jam_algorithm else tx_signal
+
+                # 4. 干扰雷达发送干扰信号
+                jammer_radar.send_signal(
+                    tx_signal=jammed_signal,
+                    duration=0.1,
+                    center_freq=100e6,
+                    sample_rate=1e6,
+                    gain=20
+                )
+
+                # 5. 侦查雷达接收信号
+                rx_original = surveillance_radar.recv_signal(
+                    num_samples=100,
+                    sample_rate=1e6,
+                    center_freq=100e6
+                )
+
+                # 6.接收端抗干扰处理(仅限接收端策略)
+                processed_signal = rx_original
+                if anti_jam_algorithm:
+                    processed_signal = surveillance_radar.execute_anti_jamming(
+                        rx_signal=rx_original,
+                        algorithm=anti_jam_algorithm,
+                        sample_rate=1e6,
+                        polarization_params={'angle': 45, 'ellipticity': 0.5}
+                    )
+
+                # 类型检查并转换复数信号为实数
+                if np.iscomplexobj(processed_signal):
+                    processed_signal = np.real(processed_signal)
+                if np.iscomplexobj(jammed_signal):
+                    jammed_signal = np.real(jammed_signal)
+
+                # 返回结果
+                return ResponseDTO.SUCCESS({"jamming_signal": np.real(jammed_signal).tolist(),
+                                            "anti_jamming_signal": np.real(processed_signal).flatten().tolist()}).to_json()
+            except Exception as e:
+                print('数据处理异常', e)
+                return ResponseDTO.ERROR_MS_DATA('数据处理异常', {"status": Service.status, "Error": str(e)}).to_json()
 
     @staticmethod
     def send():