2. 窄带信号模型仿真

任务说明

本案例仿真3个窄带信号以不同方向入射到8元均匀线阵(阵元间距为半波长),生成包含高斯白噪声的阵列接收数据,为后续波束形成与DOA估计提供标准输入。

信号模型与参数

均匀线阵接收模型:x(t) = A·s(t) + n(t),其中A为方向矩阵(8×3),s(t)为信号复包络(3×1),n(t)为复高斯白噪声(8×1)。

参数数值说明
阵元数 M8均匀线阵
阵元间距 dλ/2半波长
信号数 K3窄带远场信号
入射角 θ-30°, 0°, 45°相对法线方向
信噪比 SNR10 dB每个信号等功率
快拍数 N500采样点数
载频 f₀1 GHz波长 λ = c/f₀

核心代码实现

import numpy as np

# ===== 参数设置 =====
M = 8               # 阵元数
K = 3               # 信号数
N = 500             # 快拍数
SNR_dB = 10         # 信噪比(dB)
c = 3e8             # 光速
f0 = 1e9            # 载频
lam = c / f0        # 波长
d = lam / 2         # 阵元间距(半波长)
theta_deg = np.array([-30, 0, 45])   # 入射角(度)
theta = np.deg2rad(theta_deg)        # 转弧度

# ===== 方向矩阵 A (M×K) =====
# 第k个信号在第m个阵元的相位延迟: exp(-j*2π*d*m*sin(θ_k)/λ)
m_idx = np.arange(M).reshape(-1, 1)   # (M,1)
A = np.exp(-1j * 2 * np.pi * d * m_idx * np.sin(theta) / lam)  # (M,K)

# ===== 生成信号复包络 s(t) (K×N) =====
# 窄带信号: 复指数形式, 频率偏移各不相同
f_offset = np.array([0.01, 0.02, -0.015])  # 归一化频率偏移
t = np.arange(N) / N
s = np.exp(1j * 2 * np.pi * f_offset.reshape(-1, 1) * t)  # (K,N)

# ===== 生成噪声并叠加 =====
# 信号功率归一化为1, 按SNR计算噪声功率
signal_power = np.mean(np.abs(s)**2, axis=1)          # 每个信号平均功率
noise_power = np.mean(signal_power) / (10**(SNR_dB/10))  # 总噪声功率
noise = (np.random.randn(M, N) + 1j*np.random.randn(M, N)) * np.sqrt(noise_power/2)

# ===== 阵列接收数据 X (M×N) =====
X = A @ s + noise

# ===== 输出关键信息 =====
print(f"方向矩阵 A 维度: {A.shape}")
print(f"信号矩阵 s 维度: {s.shape}")
print(f"接收数据 X 维度: {X.shape}")
print(f"噪声功率: {noise_power:.6f}")
print(f"接收数据实部均值: {np.mean(X.real):.4f}")
print(f"接收数据虚部均值: {np.mean(X.imag):.4f}")

代码说明

方向矩阵A的第k列对应第k个信号的阵列导向矢量,元素A[m,k] = exp(-j·2π·d·m·sinθ_k/λ)。信号复包络采用不同归一化频率的复指数,模拟窄带信号间的频率差异。噪声为复高斯白噪声,其实部与虚部独立同分布,方差为noise_power/2,保证总噪声功率为noise_power。接收数据X为8×500的复矩阵,每列对应一个快拍的阵列快照。

运行与验证

运行方式:直接执行上述Python脚本(需安装NumPy)。

验证方法:

  1. 检查输出维度:A为(8,3),s为(3,500),X为(8,500);
  2. 验证信噪比:计算X中信号分量功率与噪声功率之比,应接近10dB;
  3. 验证导向矢量正确性:对第k个信号,A[:,k]相邻元素相位差应为-2π·d·sinθ_k/λ;
  4. 观察数据统计特性:X的实部与虚部均值应接近0(随机噪声所致)。

判定标准:维度正确、SNR误差在±0.5dB以内、相位差与理论值一致,即视为通过。

均匀线阵窄带信号接收模型 0 1 2 3 4 5 6 7 阵列轴线 法线 信号1 (θ=-30°) 30° 信号2 (θ=0°) 信号3 (θ=45°) 45° 阵列接收数据 X (8×500) X = A·s + n A: 方向矩阵 (8×3) s: 信号复包络 (3×500) n: 复高斯白噪声 (8×500) 输出: X[m,n] = Σₖ A[m,k]·s[k,n] + n[m,n] 阵元间距 d = λ/2 | 快拍数 N = 500 | SNR = 10 dB | 信号数 K = 3