阵列天线波束赋形
导向矢量
-
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=N1[1,e−jλ2πdcosθ,⋯,e−jλ2π(N−1)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=MN1[1,⋯,ejλ2πdsinθ[(m−1)cosϕ+(n−1)sinϕ],⋯,ejλ2πdsinθ[(M−1)cosϕ+(N−1)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=N1[1,ejλ2πdsinθcos(ϕ−N2π),⋯,ejλ2πdsinθcos[ϕ−N2π(N−1)]]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')
仿真结果
参考文献
[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.