稳健对角加载 MVDR 波束形成算法原理与仿真

一、算法对比背景

标准 MVDR 波束形成对导向矢量失配极度敏感。实际工程中存在测角偏差、阵元幅相误差、位置误差,导致名义导向矢量与真实导向矢量不一致,期望信号被当作干扰抑制,主瓣塌陷、增益严重下降。

稳健 MVDR 通过球形约束优化 + 牛顿迭代修正失配导向矢量,自适应求解最优加权向量,在存在角度失配、少快拍欠秩场景下仍能保持良好波束性能,是阵列信号处理中经典的稳健抗干扰方案。

二、理论对比简述

1)普通 MVDR

代价函数:最小化输出功率,约束目标方向增益为1

\[\min \boldsymbol{w}^H\boldsymbol{R}\boldsymbol{w},\quad \text{s.t.}\ \boldsymbol{w}^H\boldsymbol{a}=1 \]

权重:

\[\boldsymbol{w}_{mvdr}=\dfrac{\boldsymbol{R}^{-1}\boldsymbol{a}}{\boldsymbol{a}^H\boldsymbol{R}^{-1}\boldsymbol{a}} \]

缺陷导向矢量轻微失配即主瓣塌陷、信号自消,少快拍协方差矩阵奇异失效。

2)稳健迭代 MVDR

构建导向矢量不确定集球形约束:

\[\min\|\boldsymbol{a}-\bar{\boldsymbol{a}}\|^2,\quad \text{s.t.}\ \boldsymbol{a}^H\boldsymbol{R}^{-1}\boldsymbol{a}\le \varepsilon \]

通过 SVD 分解 + 牛顿迭代求解最优拉格朗日乘子,修正失配导向矢量,再代入 MVDR 公式求解稳健权值。

优势:抗角度失配、抗阵列误差、可适配少快拍欠秩场景。

三、完整优化 Python 对比代码


import numpy as np
import matplotlib.pyplot as plt

# -------------------------- 全局参数设置 --------------------------
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

c = 340
f = 1000
lam = c / f
d = 0.5 * lam

M = 10                 # 阵元数
snap_num = 40          # 快拍数
theta_true = 5         # 真实目标角度
theta_interf = [-30, 45]

SNR = 0
INR = 20
angle_bias = 3.0       # 人为引入导向矢量失配 3°
eps = 4.5              # 球形约束参数

theta_scan = np.linspace(-90, 90, 1000)

def db2lin(db):
    return 10 ** (db / 10)

# -------------------------- 导向矢量函数 --------------------------
def steer_vec(theta_deg, M, d, lam):
    theta_rad = np.deg2rad(theta_deg)
    k = 2 * np.pi / lam
    pos = np.arange(M) * d
    a = np.exp(-1j * k * pos * np.sin(theta_rad))
    return a.reshape(-1, 1)

# -------------------------- 生成阵列信号 --------------------------
# 真实导向矢量 & 失配名义导向矢量
a_true = steer_vec(theta_true, M, d, lam)
a_nominal = steer_vec(theta_true + angle_bias, M, d, lam)

# 干扰导向矢量
a_int1 = steer_vec(theta_interf[0], M, d, lam)
a_int2 = steer_vec(theta_interf[1], M, d, lam)

# 信号与噪声
sig_t = np.random.randn(1, snap_num) * np.sqrt(db2lin(SNR))
sig_i1 = np.random.randn(1, snap_num) * np.sqrt(db2lin(INR))
sig_i2 = np.random.randn(1, snap_num) * np.sqrt(db2lin(INR))
noise = (np.random.randn(M, snap_num) + 1j * np.random.randn(M, snap_num)) / np.sqrt(2)

X = a_true @ sig_t + a_int1 @ sig_i1 + a_int2 @ sig_i2 + noise
R = X @ X.conj().T / snap_num

# -------------------------- 1. 普通 MVDR(直接使用失配导向矢量) --------------------------
R_inv = np.linalg.inv(R)
w_mvdr = (R_inv @ a_nominal) / (a_nominal.conj().T @ R_inv @ a_nominal)

# -------------------------- 2. 稳健迭代 MVDR(牛顿迭代修正导向矢量) --------------------------
U, Gamma, Vh = np.linalg.svd(R)
Gamma_vec = Gamma
z = np.abs(U.conj().T @ a_nominal)

lam_opt = 0
tol = 1e-5

# 构造目标函数与导数
def func(lam):
    denom = 1.0 + lam * Gamma_vec
    return np.sum((z / denom) ** 2) - eps

def dfunc(lam):
    denom = 1.0 + lam * Gamma_vec
    return np.sum(2 * (z**2) * Gamma_vec / (denom**3))

# 牛顿迭代
for _ in range(100):
    f_val = func(lam_opt)
    if abs(f_val) < tol:
        break
    lam_opt = lam_opt - f_val / dfunc(lam_opt)

# 修正导向矢量
a_robust = a_nominal - U @ np.diag(1.0 / (1.0 + lam_opt * Gamma_vec)) @ U.conj().T @ a_nominal
w_robust = (R_inv @ a_robust) / (a_robust.conj().T @ R_inv @ a_robust)

# -------------------------- 波束方向图计算 --------------------------
def get_beam(w, scan_theta):
    beam = []
    for th in scan_theta:
        a = steer_vec(th, M, d, lam)
        beam.append(np.abs(w.conj().T @ a)[0,0])
    beam = np.array(beam)
    beam_db = 20 * np.log10(beam / np.max(np.abs(beam)))
    return beam_db

beam_mvdr = get_beam(w_mvdr, theta_scan)
beam_robust = get_beam(w_robust, theta_scan)

# -------------------------- 绘图对比 --------------------------
plt.figure(figsize=(12,6))
plt.plot(theta_scan, beam_mvdr, 'r-', linewidth=1.2, label='普通 MVDR(失配)')
plt.plot(theta_scan, beam_robust, 'b-', linewidth=1.4, label='稳健迭代 MVDR')

plt.axvline(theta_true, color='green', linestyle='--', label=f'真实目标角度 {theta_true}°')
for ang in theta_interf:
    plt.axvline(ang, color='orange', linestyle='--', alpha=0.7)

plt.xlabel('入射角度 (°)', fontsize=12)
plt.ylabel('波束响应 (dB)', fontsize=12)
plt.title('导向矢量失配场景:普通MVDR vs 稳健迭代MVDR 对比', fontsize=13)
plt.ylim([-80, 0])
plt.grid(alpha=0.3)
plt.legend(fontsize=11)
plt.tight_layout()
plt.show()

image

四、仿真结果分析

1. 普通 MVDR 性能严重恶化

在存在 3° 导向矢量角度失配 时,传统 MVDR 出现严重主瓣塌陷、增益衰减,算法将期望信号识别为干扰进行抑制,波束指向偏移,完全无法正常工作。

2. 稳健迭代 MVDR 抗失配能力极强

通过牛顿迭代优化修正失配导向矢量,稳健算法可以自动补偿角度偏差,主瓣精准对准真实目标角度,保证期望信号无失真接收。

3. 干扰抑制能力保持优异

稳健 MVDR 在干扰角度形成深度零陷,在保证目标增益的同时,有效抑制强干扰信号,兼顾保形与抗干扰性能。

五、算法优缺点总结

普通 MVDR

✅ 优点:理论简洁、计算量小、满秩理想条件下分辨率高

❌ 缺点:对导向矢量失配、阵列误差、少快拍场景极度敏感,工程实用性差

稳健迭代 MVDR

✅ 优点:

  • 有效解决导向矢量失配导致的主瓣塌陷问题

  • 自适应修正导向矢量,无需人工对角加载调参

  • 兼容少快拍、协方差欠秩恶劣场景

  • 保主瓣、深零陷,综合鲁棒性远优于传统 MVDR

❌ 缺点:存在少量迭代计算开销,多目标场景需进一步扩展

posted @ 2026-07-20 23:21  碧水云天4  阅读(6)  评论(0)    收藏  举报