1. 均匀线阵的阵列流形向量计算

均匀线阵的阵列流形向量计算 学习卡片

任务说明

本案例要求编写程序,计算均匀线阵(ULA)在给定载波频率、阵元间距和入射角条件下的阵列流形向量,并通过与理论解析式的逐元素对比来验证计算结果的正确性。阵列流形向量是波束形成与DOA估计的基础,其定义为各阵元接收信号相对于参考阵元的相位延迟所构成的复指数向量。

数学模型

考虑一个由 \(M\) 个全向阵元组成的均匀线阵,阵元间距为 \(d\)。设远场窄带信号以入射角 \(\theta\)(相对于阵列法线方向)到达阵列,信号波长为 \(\lambda = c/f\)(\(c\) 为光速,\(f\) 为载波频率)。以第0个阵元为参考,第 \(m\) 个阵元接收信号相对于参考阵元的空间相位延迟为:

\[ \phi_m = \frac{2\pi d \cdot m \cdot \sin\theta}{\lambda}, \quad m = 0, 1, \ldots, M-1 \]

阵列流形向量定义为:

\[ \mathbf{a}(\theta) = \left[ 1, \; e^{j\phi_1}, \; e^{j\phi_2}, \; \ldots, \; e^{j\phi_{M-1}} \right]^T \]

其中 \(j = \sqrt{-1}\)。本案例将直接按此公式计算,并验证计算结果满足该解析表达式。

程序实现

以下Python代码使用NumPy实现阵列流形向量的计算,并包含验证逻辑:

import numpy as np

def compute_steering_vector(M, d, f, theta_deg):
    """
    计算均匀线阵的阵列流形向量(导向矢量)
    
    参数:
        M: 阵元数量
        d: 阵元间距(米)
        f: 载波频率(Hz)
        theta_deg: 入射角(度),相对于阵列法线方向
    
    返回:
        a: 复数阵列流形向量,形状为 (M,)
    """
    c = 3e8  # 光速 (m/s)
    wavelength = c / f
    theta = np.deg2rad(theta_deg)
    
    # 阵元索引 0, 1, ..., M-1
    m = np.arange(M)
    
    # 空间相位延迟: (2*pi*d*m*sin(theta)) / lambda
    phase = 2 * np.pi * d * m * np.sin(theta) / wavelength
    
    # 阵列流形向量
    a = np.exp(1j * phase)
    return a

# ===== 参数设置 =====
M = 8          # 阵元数
d = 0.5        # 阵元间距(波长归一化,此处为0.5倍波长)
f = 1e9        # 载波频率 1 GHz
theta_deg = 30 # 入射角 30 度

# ===== 计算阵列流形向量 =====
steering_vec = compute_steering_vector(M, d, f, theta_deg)

# ===== 验证:与理论解析式逐元素对比 =====
c = 3e8
wavelength = c / f
theta = np.deg2rad(theta_deg)
m_idx = np.arange(M)

# 理论值:直接按公式 a_m = exp(j*2*pi*d*m*sin(theta)/lambda)
expected = np.exp(1j * 2 * np.pi * d * m_idx * np.sin(theta) / wavelength)

# 计算最大误差
max_error = np.max(np.abs(steering_vec - expected))

# 验证第一个元素是否为1(参考阵元相位为零)
first_elem_check = np.isclose(steering_vec[0], 1.0)

# ===== 输出结果 =====
print("阵列流形向量 a(θ):")
print(steering_vec)
print("\n验证结果:")
print(f"最大误差: {max_error:.2e}")
print(f"第一个元素为1: {first_elem_check}")

# 判定标准
if max_error < 1e-10 and first_elem_check:
    print("验证通过:计算结果与理论解析式一致。")
else:
    print("验证失败:计算结果与理论解析式存在偏差。")

运行与验证方法

运行方式:在已安装NumPy的Python环境中执行上述脚本。若未安装NumPy,先运行 pip install numpy。

验证判定标准:

  1. 程序输出的阵列流形向量第一个元素应为 \(1+0j\)(参考阵元无相位差);
  2. 计算得到的向量与直接按理论公式 \(e^{j2\pi d m \sin\theta/\lambda}\) 逐元素计算的参考值之间的最大误差应小于 \(10^{-10}\)(浮点精度范围内);
  3. 当上述两个条件同时满足时,程序打印“验证通过”,表明代码正确实现了阵列流形向量的数学表达式。
均匀线阵几何与阵列流形向量计算示意 x y 阵元0 阵元1 阵元2 阵元3 阵元4 阵元5 阵元6 阵元7 d (M−1)·d 法线 θ=30° 入射波方向 波前 相位延迟: φₘ = 2π·d·m·sinθ/λ 阵列流形: a(θ) = [1, e^{jφ₁}, …, e^{jφₘ₋₁}]ᵀ 本案例参数 M=8, d=0.5λ, f=1GHz θ=30°, λ=c/f 验证: 与理论公式逐元素对比

预期输出

对于上述参数(\(M=8, d=0.5\lambda, f=1\text{GHz}, \theta=30^\circ\)),程序应输出一个长度为8的复数向量,其第一个元素为 \(1+0j\),后续元素模长均为1,相位随阵元索引线性递增。程序最终打印“验证通过:计算结果与理论解析式一致。”即为满足判定标准。