|
@@ -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():
|