阵列天线方向图合成(线阵、面阵)-附Python代码

阵列天线波束赋形

导向矢量

在这里插入图片描述

  • ULA线阵:

    a = 1 N [ 1 , e − j 2 π λ d cos ⁡ θ , ⋯   , e − j 2 π λ ( N − 1 ) d cos ⁡ θ ] T \mathbf{a}={\frac{1}{\sqrt{N}}\left[ 1,e^{-j\frac{2\pi}{\lambda}d\cos\theta},\cdots,e^{-j\frac{2\pi}{\lambda}(N-1)d\cos\theta} \right]^{\mathrm{T}}} a=N 1[1,ejλ2πdcosθ,,ejλ2π(N1)dcosθ]T

  • UPA面阵:

    a U R A = 1 M N [ 1 , ⋯   , e j 2 π λ d sin ⁡ θ [ ( m − 1 ) cos ⁡ ϕ + ( n − 1 ) sin ⁡ ϕ ] , ⋯   , e j 2 π λ d sin ⁡ θ [ ( M − 1 ) cos ⁡ ϕ + ( N − 1 ) sin ⁡ ϕ ] ] T \mathbf{a}_{\mathrm{URA}}=\frac{1}{\sqrt{MN}}[ 1,\cdots,e^{j\frac{2\pi}{\lambda}d\sin\theta[(m-1)\cos\phi+(n-1)\sin\phi]},\cdots,e^{j\frac{2\pi}{\lambda}d\sin\theta[(M-1)\cos\phi+(N-1)\sin\phi]} ]^{\mathrm{T}} aURA=MN 1[1,,ejλ2πdsinθ[(m1)cosϕ+(n1)sinϕ],,ejλ2πdsinθ[(M1)cosϕ+(N1)sinϕ]]T

  • UCR圆阵:

    a U C A = 1 N [ 1 , e j 2 π λ d sin ⁡ θ cos ⁡ ( ϕ − 2 π N ) , ⋯   , e j 2 π λ d sin ⁡ θ cos ⁡ [ ϕ − 2 π N ( N − 1 ) ] ] T . \mathbf{a}_{\mathrm{UCA}}=\frac{1}{\sqrt{N}}[ 1,e^{j\frac{2\pi}{\lambda}d\sin\theta \cos(\phi-\frac{2\pi}{N})},\cdots,e^{j\frac{2\pi}{\lambda}d\sin\theta \cos[\phi-\frac{2\pi}{N}(N-1)]} ]^{\mathrm{T}}. aUCA=N 1[1,ejλ2πdsinθcos(ϕN2π),,ejλ2πdsinθcos[ϕN2π(N1)]]T.

代码仿真

"""
2021.12.07 目前导向向量是矩阵形式,考虑后续变成向量形式
"""

import numpy as np
import matplotlib.pyplot as plt

""" 主要的两个function:
    线阵:steeringVectorULA(N, theta, d) 
    面阵:steeringVectorUPA(Nx, Ny, theta, phi, dx, dy)
"""
def steeringVectorULA(N, theta, d=0.5):
    """ 均匀线阵的导向向量 
    N: 天线个数
    theta: 导向角
    d: 波长的d倍(默认半波长)
    """
    n = np.arange(N)
    A = np.exp(1j * 2*np.pi * d * n * np.cos(theta))
    return A

def steeringVectorUPA(Nx, Ny, theta, phi, dx=0.5, dy=0.5):
    """ 均匀面阵的导向向量
    N_x: x轴维度
    N_y: y轴维度
    theta: elevation angle 仰角(天顶角(原点到点P的连线与正z-轴之间的夹角))
    phi: azimuth angle 方位角(与正x-轴之间的方位角)
    d: 波长的d倍(默认0.5半波长)
    """
    A = np.zeros((Nx,Ny),dtype='complex')
    for n_x in range(Nx):
        for n_y in range(Ny):
            A[n_x,n_y] = np.exp(-1j * 2*np.pi * np.sin(theta)* (n_x*dx*np.cos(phi)+n_y*dy*np.sin(phi))) 
    return A

def get_directive_gain(g, minDdBi=-20):
    """天线增益 化为 dB形式"""
    DdBi = 10 * np.log10(g / np.max(g))
    return np.clip(DdBi, minDdBi, None)

def sphere2xzy(theta, phi, R):
    """ 球坐标转直角坐标
    theta: 天顶角(原点到点P的连线与正z-轴之间的夹角)
    phi: 方位角(与正x-轴之间的方位角)
    R: 原点与点P的距离
    """
    X = R * np.sin(theta) * np.cos(phi)
    Y = R * np.sin(theta) * np.sin(phi)
    Z = R * np.cos(theta)
    return X, Y, Z

###### 画图的函数
def plot_ULA(theta, gain_ULA):
    """ 画线阵的阵列方向图
    """
    fig = plt.figure()
    ax = fig.add_subplot(projection='polar') # 极坐标系
    ax.plot(theta, np.abs(gain_ULA))
    # dB_gain = get_directive_gain(gain)  ## 还可以把 增益 转化为 dB 的形式
#    ax.set_rticks([-20, -15, -10, -5])
#    ax.set_rlabel_position(45)
    plt.show()

def plot_UPA(THETA, PHI, gain_UPA, sign='matplotlib'):
    """ 画平面阵的阵列方向图
    """
    # 先把极坐标转化为直角坐标
    X,Y,Z = sphere2xzy(THETA, PHI, np.abs(gain_UPA))
    if sign == 'matplotlib':
        ### #1  matplotlib库画图
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1, projection='3d')
        plot = ax.plot_surface(
            X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('jet'),
            linewidth=0, antialiased=False, alpha=0.5)
        
        plt.show()
        
    elif sign=='mlab':
        ## #2  mayavi库画图(效果更好)
        from mayavi import mlab
        
        ## 画天线方向图
        s = mlab.mesh(X, Y, Z, line_width=1.0 ) # representation="wireframe"

        ## 画一个平行于xoy轴的平面(模拟天线阵列的摆放)
        x = np.arange(-10,10,2/Nx)
        y = np.arange(-10,10,2/Ny)
        xx, yy = np.meshgrid(x,y)  
        zz = np.zeros(xx.shape)
        s_ = mlab.mesh(xx, yy, zz, line_width=1.0 )
        #mlab.axes() #  xlabel='x', ylabel='y', zlabel='z'
        mlab.show()

    

""" 测试 ULA
"""
N= 8
theta = np.linspace(0, 2*np.pi, 360)

BF =  np.ones(N)  ### 波束赋形向量
gain_ULA = np.zeros(theta.shape)
for i, tt in enumerate(theta):
    sv = steeringVectorULA(N, tt, d=0.5)
    gain_ULA[i] = np.dot(sv, BF)

plot_ULA(theta, gain_ULA)

""" 测试 UPA
"""
Nx = 8
Ny = 8
phi, theta = np.linspace(0, 2 * np.pi, 360), np.linspace(0, np.pi/2, 90)

PHI, THETA = np.meshgrid(phi,theta)  ### 生成网格

### BF: beamforming 波束赋形矩阵
#BF = np.ones((Nx,Ny),dtype='complex')
BF = steeringVectorUPA(Nx, Ny, np.pi/4, np.pi/4, dx=0.5, dy=0.5).conj()

gain_UPA = np.zeros(THETA.shape,dtype=complex)
for i in range(THETA.shape[0]):
    for j in range(THETA.shape[1]):
        sv = steeringVectorUPA(Nx, Ny, THETA[i,j], PHI[i,j], dx=0.5, dy=0.5)
        gain_UPA[i,j] = np.multiply(sv,BF).sum()

plot_UPA(THETA, PHI, gain_UPA, sign='mlab')

仿真结果

ULA方向图
UPA方向图
UPA方向图2

参考文献

[1] Z. Xiao et al., “A Survey on Millimeter-Wave Beamforming Enabled UAV Communications and Networking,” in IEEE Communications Surveys & Tutorials, doi: 10.1109/COMST.2021.3124512.

  • 14
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ULA(Uniform Linear Array)天线是一种常用的天线类型,由若干个等距排列的天线元件组成。在通信系统中,对于这种天线的建模和分析十分重要。因此,使用 MATLAB 对 ULA 天线进行建模有很大的实际应用价值。 在进行 ULA 天线的 MATLAB 建模时,首先需要定义 ULA 的基本参数,如天线数量、天线间距、波长等。根据定义的参数,可以利用 MATLAB 的函数生成数组来定义 ULA 天线的几何结构。 其次,需要在模型中设置一定的信号源,并将之与 ULA 天线建立相应的信号传输路径。这样,以此作为输入,可得到天线各元件上接收到的信号强度。 最后,在建立了 ULA 天线模型后,就可以进行各种分析和仿真操作。例如,可以利用 MATLAB 进行阵列的波束形成、空间滤波、干扰消除等操作。同时,还可以进行仿真实验,研究 ULA 天线在不同场景下的工作性能和实际应用效果。 综上所述,通过使用 MATLAB 对 ULA 天线进行建模和分析,可以很好地研究其性能和应用,为通信系统的设计和优化提供更为科学的依据和支撑。 ### 回答2: ULA天线是一种具有均匀线性阵列结构的天线,其信号接收和发射具有高度定向性。为了更好地研究和优化ULA天线的性能,我们需要进行建模和仿真。此时,使用MATLAB软件进行建模是一种非常方便和高效的方法。 在MATLAB中建立ULA天线的模型,首先需要明确天线的几何结构和特性参数。通常,需要确定的参数包括天线元件数量、间距、阻抗、方向性模式等等。在确定好这些参数之后,我们可以使用MATLAB内置的函数和工具箱,如Array Toolbox和Signal Processing Toolbox等,快速地构建ULA天线的数学模型。 随后,我们可以通过给定的信号源,对该模型进行仿真和分析。在仿真过程中,可以通过改变天线调制方式、优化天线几何结构和参数等手段,来进一步改善天线的性能。此外,还可以对模型进行仿真实验,在实验验证过程中,可以更好地理解和验证天线模型的正确性和可靠性。 总之,使用MATLAB进行ULA天线建模是一种十分有用的研究和应用方法。通过建立数学模型和进行仿真分析,我们可以更好地了解天线特性和解决相关的问题,为实际应用提供支持。 ### 回答3: ULA天线是一种线阵天线,它由一些等间距的天线单元排列成行或列,可用于无线通信、雷达系统等领域。在matlab中,我们可以使用Phased Array System Toolbox来建模ULA天线。 首先,我们需要定义一些参数,例如天线数量(NumElements)、元间距(ElementSpacing)、频率(Frequency)等,这些参数将影响天线的性能。然后,我们可以使用phased.ULA函数创建一个ULA天线对象,并将参数传递给它。 接下来,我们可以使用对象的beamscan或pattern函数生成天线的方向图或波束图,用于分析其性能。例如,beamscan函数可以生成一个二维方向图,展示天线在不同角度下的辐射特性。 在建模过程中,我们还可以考虑一些因素,例如阵列权重、阵列指向和波束宽度等因素,以进一步优化天线的性能。例如,我们可以使用phased.SteeringVector函数来计算不同指向下的阵列权重。我们还可以使用phased.Radiator或phased.Collector对象模拟天线的天线阵列或接收器阵列,以帮助分析阵列的性能。 总之,使用matlab建模ULA天线可以帮助我们更好地了解其性能和参数,以提高其在通信和雷达领域的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值