jammer_radar.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from typing import Tuple
  2. import numpy as np
  3. from scipy.signal import find_peaks
  4. class JammerRadar:
  5. def __init__(self, usrp, rx, tx):
  6. self.usrp = usrp
  7. self.rx = rx
  8. self.tx = tx
  9. def generate_jamming_signal(self, algorithm: callable, bandwidth: float, sample_rate: float, duration: float, gain: float) -> Tuple[np.ndarray, float, float]:
  10. # 应用干扰算法
  11. signal, lower_bound, upper_bound, *_ = algorithm( # 使用*_接收多余返回值
  12. bandwidth=bandwidth,
  13. duration=duration,
  14. sample_rate=sample_rate
  15. )
  16. return signal, lower_bound, upper_bound
  17. def execute_jamming(self, algorithm: callable, bandwidth: float, sample_rate: float, duration: float, gain: float) -> Tuple[np.ndarray, float, float]:
  18. """
  19. 执行自主干扰生成
  20. :param algorithm: 干扰算法
  21. :param bandwidth: 信号带宽 (Hz)
  22. :param sample_rate: 采样率 (Hz)
  23. :param duration: 信号持续时间 (秒)
  24. :param gain: 增益 (dB)
  25. """
  26. return self.generate_jamming_signal(
  27. algorithm=algorithm,
  28. bandwidth=bandwidth,
  29. sample_rate=sample_rate,
  30. duration=duration,
  31. gain=gain
  32. )
  33. #封装一个发送信号的函数
  34. def send_signal(self, tx_signal, duration, center_freq, sample_rate, gain):
  35. # 发送信号
  36. self.usrp.send_waveform(tx_signal, duration, center_freq, sample_rate, [self.tx], gain)
  37. print('干扰雷达已发送信号')
  38. # 封装一个接收信号的函数
  39. def recv_signal(self, num_samples, sample_rate, center_freq):
  40. rx_signal = self.usrp.recv_num_samps(num_samples, center_freq, sample_rate, [self.rx])
  41. print('干扰雷达已接收信号')
  42. return rx_signal
  43. def send_jamming_signal(self, algorithm, bandwidth, sample_rate, duration, gain):
  44. jamming_signal, min_val, max_val = self.generate_jamming_signal(
  45. algorithm=algorithm,
  46. bandwidth=bandwidth,
  47. sample_rate=sample_rate,
  48. duration=duration,
  49. gain=gain
  50. )
  51. self.usrp.send_waveform(jamming_signal, duration, bandwidth, sample_rate, [self.tx], gain)
  52. return min_val, max_val