jammer_radar.py 2.4 KB

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