jammer_radar_20250421170836.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import numpy as np
  2. from scipy.signal import find_peaks
  3. # ==================== 干扰雷达类 ====================
  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) -> np.ndarray:
  10. """
  11. 自主生成干扰信号
  12. :param algorithm: 干扰算法
  13. :param bandwidth: 信号带宽 (Hz)
  14. :param sample_rate: 采样率 (Hz)
  15. :param duration: 信号持续时间 (秒)
  16. :param gain: 增益 (dB)
  17. """
  18. # 生成基带噪声信号
  19. num_samples = int(duration * sample_rate)
  20. base_signal = np.random.randn(num_samples) * 0.1 * gain
  21. # 应用干扰算法
  22. jamming_signal = algorithm(
  23. base_signal=base_signal,
  24. bandwidth=bandwidth,
  25. sample_rate=sample_rate
  26. )
  27. return jamming_signal.astype(np.complex64)
  28. def execute_jamming(self, algorithm: callable, bandwidth: float, sample_rate: float, duration: float, gain: float) -> np.ndarray:
  29. """
  30. 执行自主干扰生成
  31. :param algorithm: 干扰算法
  32. :param bandwidth: 信号带宽 (Hz)
  33. :param sample_rate: 采样率 (Hz)
  34. :param duration: 信号持续时间 (秒)
  35. :param gain: 增益 (dB)
  36. """
  37. return self.generate_jamming_signal(
  38. algorithm=algorithm,
  39. bandwidth=bandwidth,
  40. sample_rate=sample_rate,
  41. duration=duration,
  42. gain=gain
  43. )
  44. #封装一个发送信号的函数
  45. def send_signal(self, tx_signal, duration, center_freq, sample_rate, gain):
  46. # 发送信号
  47. self.usrp.send_waveform(tx_signal, duration, center_freq, sample_rate, self.tx, gain)
  48. print('干扰雷达已发送信号')
  49. # 封装一个接收信号的函数
  50. def recv_signal(self, num_samples, sample_rate, center_freq):
  51. rx_signal = self.usrp.recv_num_samps(num_samples, center_freq,sample_rate,self.rx)
  52. print('干扰雷达已接收信号')
  53. return rx_signal