| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- import numpy as np
 
- from scipy.signal import find_peaks
 
- # ==================== 侦查雷达类 ====================
 
- class SurveillanceRadar:
 
-     #初始化函数,传入usrp,输入的通道,输出的通道
 
-     def __init__(self, usrp, rx, tx):
 
-         self.usrp = usrp
 
-         self.rx = rx
 
-         self.tx = tx
 
-         # 封装一个发送信号的函数
 
-     def send_signal(self, tx_signal, duration, center_freq, sample_rate, gain):
 
-         # 发送信号
 
-         self.usrp.send_waveform(tx_signal, duration, center_freq, sample_rate, self.tx, gain)
 
-         print('侦查雷达已发送信号')
 
-     # 封装一个接收信号的函数
 
-     def recv_signal(self, num_samples, sample_rate, center_freq):
 
-         rx_signal = self.usrp.recv_num_samps(num_samples, center_freq, sample_rate, self.rx)
 
-         print('侦查雷达已接收信号')
 
-         return rx_signal
 
-     def execute_jamming(self, algorithm: callable, bandwidth: float, duration: float, sample_rate: float) -> np.ndarray:
 
-         """
 
-         执行干扰信号生成
 
-         :param algorithm: 算法函数
 
-         :param bandwidth: 信号带宽 (Hz)
 
-         :param duration: 信号持续时间 (秒)
 
-         :param sample_rate: 采样率 (Hz)
 
-         """
 
-         num_samples = int(duration * sample_rate)
 
-         jamming_signal = algorithm(
 
-             bandwidth=bandwidth,
 
-             duration=duration,
 
-             sample_rate=sample_rate
 
-         )
 
-         return jamming_signal.astype(np.complex64)
 
-     # 分析信号,获取目标距离
 
-     def analyze_signal(self, rx_signal: np.ndarray, sample_rate: float,
 
-                      cfar_threshold: float = 20.0) -> list:
 
-         """
 
-         分析接收信号并返回目标距离列表
 
-         :param rx_signal: 接收信号(复数形式)
 
-         :param sample_rate: 采样率(Hz)
 
-         :param cfar_threshold: CFAR检测阈值(dB)
 
-         :return: 目标距离列表(米)
 
-         """
 
-         # 1. 去斜处理(Dechirping)
 
-         mixed = rx_signal * np.conj(self.tx_signal[:len(rx_signal)])
 
-         # 2. 加窗处理(Hamming窗)
 
-         window = np.hamming(len(mixed))
 
-         windowed = mixed * window
 
-         # 3. 距离FFT
 
-         range_fft = np.fft.fft(windowed)
 
-         spectrum_db = 20 * np.log10(np.abs(range_fft) + 1e-10)  # 转换为dB
 
-         # 4. 计算距离轴
 
-         freq_bins = np.fft.fftfreq(len(spectrum_db), 1/sample_rate)
 
-         ranges = (self.c * self.T * freq_bins) / (2 * self.B)
 
-         # 5. CFAR目标检测(简化版)
 
-         noise_floor = np.median(spectrum_db)
 
-         peaks, _ = find_peaks(spectrum_db, height=noise_floor + cfar_threshold)
 
-         # 6. 提取目标距离(取前向部分)
 
-         valid_peaks = peaks[peaks <= len(ranges)//2]
 
-         print(f"检测到目标距离:{[abs(ranges[p]) for p in valid_peaks]} 米")
 
-         return [abs(ranges[p]) for p in valid_peaks]
 
 
  |