1对角加载多级维纳滤波与最佳投影次数估计针对GPS抗干扰中正交投影算法对投影次数敏感的问题提出了对角加载多级维纳滤波DL-MWF算法。该算法在MWF的每一级递推中对阻塞矩阵引入一个对角加载因子δ取值0.01~0.1倍噪声功率提高了算法在样本协方差矩阵奇异时的数值稳定性。同时通过计算多级维纳滤波的均方误差曲线选取使均方误差下降最快的级数作为最佳投影次数。仿真表明在阵元数8、干扰源3个的条件下传统MWF在投影次数超过4后信干噪比下降3dB而DL-MWF在投影次数达到7时仍保持稳定输出信干噪比提升6dB。实际GPS中频信号处理中该算法将定位解算的圆概率误差从62米减小到18米。2成对变换Jacobi特征分解与滑窗频谱窄带干扰检测为降低空时自适应处理中协方差矩阵特征分解的运算量提出了一种基于成对变换的Jacobi迭代算法。该算法每次只对矩阵的两个维度进行旋转旋转角度的计算使用近似公式避免了开方运算整体计算复杂度从O(N^3)降为O(N^2 log N)。对于窄带干扰检测采用滑窗式频谱分析法窗口长度为128点滑动步长32点每个窗口进行快速傅里叶变换并计算峰值背景噪声比。当峰值超过背景噪声12dB时判定为单频或窄带干扰并标记其频点用于陷波滤波。在一片TMS320C6678 DSP上64维协方差矩阵的Jacobi分解耗时1.2ms比传统QR分解快3.5倍。3线性扫频LFM干扰参数估计与零陷扩展抗动态干扰针对线性扫频干扰提出一种基于时频分析的低复杂度参数估计方法。对接收信号进行短时傅里叶变换得到时频图然后利用Radon变换检测直线估计出LFM的起始频率和调频斜率。与传统Wigner-Hough变换相比计算量降低了一个数量级。获得干扰参数后构造干扰子空间并进行投影以抑制干扰。针对载体运动引起的干扰方向漂移设计了零陷扩展波束形成器。将约束条件改为二阶锥约束允许干扰方向在一定角度范围内变化例如±5度。通过求解二阶锥规划得到最优权向量使得零陷展宽至10度以上同时保持对GPS卫星信号的增益。在动态仿真角速度20度/秒中零陷扩展方法使干扰抑制比保持在25dB以上而传统静态零陷方法在干扰方向偏移3度时抑制比降至12dB。import numpy as np from scipy.linalg import eigh from scipy.fft import fft class DL_MWF: def __init__(self, delta0.01): self.delta delta def forward_recurrence(self, X, d): # X: 数据矩阵d: 参考信号 rxd X.T d w rxd / np.linalg.norm(rxd) d1 X w B X - np.outer(d1, w.T) # 阻塞矩阵 # 对角加载 B B self.delta * np.eye(B.shape[0]) return d1, B class PairwiseJacobi: def __init__(self, A): self.A A def rotate(self, p, q): if abs(self.A[p,q]) 1e-10: return tau (self.A[q,q] - self.A[p,p]) / (2*self.A[p,q]) t np.sign(tau) / (abs(tau) np.sqrt(1tau**2)) c 1 / np.sqrt(1t**2) s c * t # 更新矩阵的行列 Ap self.A[:,p].copy() Aq self.A[:,q].copy() self.A[:,p] c*Ap - s*Aq self.A[:,q] s*Ap c*Aq Ap self.A[p,:].copy() Aq self.A[q,:].copy() self.A[p,:] c*Ap - s*Aq self.A[q,:] s*Ap c*Aq class NullWidening: def __init__(self, theta_center, delta_theta, n_elements8): self.theta0 theta_center self.delta delta_theta self.M n_elements def steering_vector(self, theta): d 0.5 return np.exp(1j * np.pi * d * np.arange(self.M) * np.sin(np.deg2rad(theta))) def widened_cov(self, snr_db20): # 构建展宽后的干扰协方差 thetas np.linspace(self.theta0 - self.delta, self.theta0 self.delta, 11) Rj np.zeros((self.M, self.M), dtypecomplex) for th in thetas: a self.steering_vector(th) Rj np.outer(a, a.conj()) Rj / len(thetas) return Rj if __name__ __main__: # DL-MWF测试 X np.random.randn(8, 1000) d np.random.randn(1000) dl_mwf DL_MWF(0.02) d1, B dl_mwf.forward_recurrence(X, d) print(DL-MWF d1 shape:, d1.shape) # Jacobi迭代 mat np.random.randn(16,16) mat mat mat.T jac PairwiseJacobi(mat) for _ in range(10): jac.rotate(2,5) print(Jacobi off-diagonal norm:, np.linalg.norm(mat - np.diag(np.diag(mat)))) # 零陷展宽 nw NullWidening(30, 10) R_wide nw.widened_cov() print(Widened interference covariance condition number:, np.linalg.cond(R_wide))