4. 广义旁瓣对消器(GSC)

任务说明

本案例实现广义旁瓣对消器(GSC),将自适应波束形成分解为固定波束形成器、阻塞矩阵和自适应噪声对消器三个模块。给定均匀线阵接收信号(含期望信号、干扰和噪声),GSC在保持期望方向响应恒定的同时,自适应抑制干扰。通过对比GSC输出与固定波束形成输出的信干噪比(SINR),验证干扰抑制效果。

GSC结构原理

GSC将阵列信号处理分解为三条支路:上支路为固定波束形成器(FBF),对期望方向形成恒定响应;中间支路为阻塞矩阵(BM),将期望信号阻塞,仅让干扰和噪声通过;下支路为自适应滤波器,对阻塞后的信号进行加权,使其输出与上支路中的干扰分量相抵消。最终输出为固定波束输出减去自适应对消输出,从而在无失真保留期望信号的前提下抑制干扰。

GSC结构框图 x[k] M×1阵列信号 固定波束形成器 w_q = a(θ₀)/M 阻塞矩阵 B B·a(θ₀) = 0 自适应滤波器 w_a LMS/NLMS更新 + − u[k] y[k] GSC输出 误差反馈 e[k] 上支路:期望信号保持 中支路:阻塞期望信号 下支路:干扰对消

代码实现

以下Python代码实现GSC核心算法。使用8元均匀线阵,阵元间距为半波长。期望信号来自0°,干扰来自30°。固定波束形成器采用均匀加权(等效于对期望方向无失真响应)。阻塞矩阵通过特征分解构造,使其零空间包含期望方向导向矢量。自适应滤波器采用归一化LMS(NLMS)算法更新权重。

import numpy as np

# ========== 参数设置 ==========
M = 8                # 阵元数
d = 0.5              # 阵元间距(波长归一化)
theta_s = 0          # 期望信号方向(度)
theta_i = 30         # 干扰方向(度)
SNR = 10            # 信噪比 dB
INR = 30            # 干噪比 dB
N = 4000            # 快拍数
mu = 0.01           # NLMS步长
delta = 1e-6        # 正则化参数

# ========== 导向矢量 ==========
def steering_vector(theta_deg, M, d):
    theta = np.deg2rad(theta_deg)
    return np.exp(1j * 2 * np.pi * d * np.arange(M) * np.sin(theta))

a_s = steering_vector(theta_s, M, d)   # 期望方向导向矢量
a_i = steering_vector(theta_i, M, d)   # 干扰方向导向矢量

# ========== 生成接收数据 ==========
rng = np.random.default_rng(42)
s = rng.standard_normal(N) + 1j * rng.standard_normal(N)   # 期望信号
i = rng.standard_normal(N) + 1j * rng.standard_normal(N)   # 干扰
n = rng.standard_normal((M, N)) + 1j * rng.standard_normal((M, N))  # 噪声

# 功率归一化
s = s / np.sqrt(np.mean(np.abs(s)**2))
i = i / np.sqrt(np.mean(np.abs(i)**2))
n = n / np.sqrt(np.mean(np.abs(n)**2))

# 按SNR/INR缩放
A_s = np.sqrt(10**(SNR/10))
A_i = np.sqrt(10**(INR/10))

# 阵列接收信号: x[k] = A_s*a_s*s[k] + A_i*a_i*i[k] + n[k]
x = A_s * np.outer(a_s, s) + A_i * np.outer(a_i, i) + n

# ========== GSC模块 ==========
# 1. 固定波束形成器(均匀加权)
w_q = a_s / M

# 2. 阻塞矩阵 B: 通过投影构造,使 B @ a_s = 0
# 使用M-1个与a_s正交的基向量
A_full = np.linalg.qr(np.column_stack([a_s, np.eye(M)]))[0]
B = A_full[:, 1:].conj().T   # (M-1) x M,满足 B @ a_s = 0

# 3. 自适应滤波器初始化
w_a = np.zeros(M - 1, dtype=complex)

# ========== 自适应处理 ==========
y_out = np.zeros(N, dtype=complex)
y_fbf = np.zeros(N, dtype=complex)

for k in range(N):
    x_k = x[:, k]
    
    # 上支路:固定波束形成输出
    y_fbf[k] = w_q.conj() @ x_k
    
    # 中支路:阻塞矩阵输出
    u_k = B @ x_k
    
    # 下支路:自适应对消
    y_a = w_a.conj() @ u_k
    
    # GSC输出
    y_out[k] = y_fbf[k] - y_a
    
    # NLMS自适应更新
    denom = u_k.conj() @ u_k + delta
    w_a = w_a + mu / denom * u_k * np.conj(y_out[k])

# ========== 性能评估 ==========
# 计算输出SINR(理论值,基于信号分量功率)
def compute_sinr(w, x, a_s, a_i, A_s, A_i, N):
    # 期望信号分量功率
    s_comp = A_s * (w.conj() @ a_s)
    Ps = np.abs(s_comp)**2 * np.mean(np.abs(s)**2)
    # 干扰分量功率
    i_comp = A_i * (w.conj() @ a_i)
    Pi = np.abs(i_comp)**2 * np.mean(np.abs(i)**2)
    # 噪声分量功率
    Pn = np.mean(np.abs(w)**2) * np.mean(np.abs(n)**2)
    return 10 * np.log10(Ps / (Pi + Pn))

# 固定波束形成SINR
w_fbf = w_q
sinr_fbf = compute_sinr(w_fbf, x, a_s, a_i, A_s, A_i, N)

# GSC稳态SINR(取最后500个快拍的平均权重)
w_gsc = w_q.copy()
w_gsc[1:] = -w_a  # 合并到等效权重
# 实际等效权重: w_eq = w_q - B^H w_a
w_eq = w_q - B.conj().T @ w_a
sinr_gsc = compute_sinr(w_eq, x, a_s, a_i, A_s, A_i, N)

# 理论最优SINR(MVDR)
R_i_n = A_i**2 * np.outer(a_i, a_i.conj()) + np.eye(M)
w_opt = np.linalg.solve(R_i_n, a_s) / (a_s.conj() @ np.linalg.solve(R_i_n, a_s))
sinr_opt = compute_sinr(w_opt, x, a_s, a_i, A_s, A_i, N)

print(f"固定波束形成 SINR: {sinr_fbf:.2f} dB")
print(f"GSC 稳态 SINR:     {sinr_gsc:.2f} dB")
print(f"理论最优 SINR:     {sinr_opt:.2f} dB")
print(f"GSC干扰抑制增益:   {sinr_gsc - sinr_fbf:.2f} dB")

运行与验证

运行方式:将代码保存为gsc_demo.py,在安装NumPy的Python环境中执行python gsc_demo.py。

预期输出:程序打印三个SINR值。由于干扰功率远大于噪声(INR=30dB),固定波束形成器无法有效抑制旁瓣方向的干扰,其输出SINR较低;GSC通过自适应对消将干扰抑制到噪声水平以下,输出SINR接近理论最优值。典型结果中,GSC比固定波束形成的SINR提升约20dB以上。

判定标准:若GSC稳态SINR显著高于固定波束形成SINR(提升≥15dB),且与理论最优SINR差距在3dB以内,则验证GSC结构正确实现了干扰抑制功能。可通过调整干扰方向(如改为-40°)或干扰强度(INR=20dB)观察GSC仍能有效抑制干扰,进一步确认算法鲁棒性。