本文章写的是Beamforming自己的学习笔记
用简洁的语言,介绍波束赋行的数学原理,同时给出简单的python代码仿真演练。
我们要探讨的是波束如何成形,实现“指哪儿打哪儿”,能让无线电波按照指定的方向打过去。
天线阵列,常见的是ULA(Uniform Linear Array,均匀线性阵列),如下图所示:
水平均匀排列的一组天线,天线之间的间隔距离记为 d 。
若不计信号的衰减,我们发射的信号数据是 s(一个复数,有幅度有相位),而且接收端与发射端距离足够远,发射端各个天线到接收端的单个天线之间的连线,从发射端天线附近看起来是平行的(实际上不是平行的,是接近平行,是为了计算的一种简化,如果不简化,计算就过于复杂)。
假设天线阵列连线与接收端连线构成的夹角为 θ \theta θ
那么接收端接收的来自不同发射天线的无线信号,就会有不同的时间延迟,进而有不同的相位旋转
以上图最下方的一个发射天线为参照,我们选择直线距离最短的那个天线做参考,则第一根发射天线的发射无线电波到达接收天线,则紧挨着的第二根发射天线的无线电波要比第一根发射天线发射的无线电波,多走的距离为 d c o s ( θ ) dcos(\theta) dcos(θ)
则第 k 根天线发射的无线电波比第一根天线发射的无线电波,多走的距离为 ( k − 1 ) d c o s ( θ ) (k-1)dcos(\theta) (k−1)dcos(θ)
则多走的时间为:多走的距离除以光速c
Δ t = ( k − 1 ) d c o s ( θ ) c \Delta t=\frac{(k-1)dcos(\theta)}{c} Δt=c(k−1)dcos(θ)
讨论单频的电磁波,假设频率为 f,则由于多走的时间,导致的相位偏差为:
2 π f Δ t = 2 π f ( k − 1 ) d c o s θ c = 2 π ( k − 1 ) d c o s ( θ ) λ 2\pi f\Delta t=\frac{2\pi f(k-1)dcos\theta}{c}=\frac{2\pi(k-1)dcos(\theta)}{\lambda} 2πfΔt=c2πf(k−1)dcosθ=λ2π(k−1)dcos(θ)
其中: λ = c f \lambda=\frac{c}{f} λ=fc 为波长。
我们记相位偏差 ψ = 2 π d c o s ( θ ) λ \psi=\frac{2\pi dcos(\theta)}{\lambda} ψ=λ2πdcos(θ)
则N个天线,对应的相位偏差分别为:
0 , ψ , 2 ψ , 3 ψ , . . . , ( N − 1 ) ψ 0,\;\psi, \;2\psi,\;3\psi,\;...,\;(N-1)\psi 0,ψ,2ψ,3ψ,...,(N−1)ψ
在频域分析,所以相当于发射的信号虽从每个发射天线出来的信号都是一样的,但是接收端接收到的信号,则分别被乘以:
e j 0 , e j ψ , e j 2 ψ , e j 3 ψ , . . . , e j ( N − 1 ) ψ e^{j0},\;e^{j\psi},\;e^{j2\psi},\;e^{j3\psi},\;...,\;e^{j(N-1)\psi} ej0,ejψ,ej2ψ,ej3ψ,...,ej(N−1)ψ
则接收到的信号为:
1 N ∑ k = 0 N − 1 s e j k ψ = s 1 N ∑ k = 0 N − 1 e j k ψ \frac{1}{N}\sum_{k=0}^{N-1}se^{jk\psi}=s\frac{1}{N}\sum_{k=0}^{N-1}e^{jk\psi} N1k=0∑N−1sejkψ=sN1k=0∑N−1ejkψ
注:上式除以N,是能量归一化,不影响性能分析。
则接收到的信号,相当于发射信号,其变化为:
1 N ∑ k = 0 N − 1 e j k ψ \frac{1}{N}\sum_{k=0}^{N-1}e^{jk\psi} N1k=0∑N−1ejkψ
若仅考虑能量增益,则:
G ( ψ ) = 1 N ∣ ∑ k = 0 N − 1 e j k ψ ∣ G(\psi)=\frac{1}{N}|\sum_{k=0}^{N-1}e^{jk\psi}| G(ψ)=N1∣k=0∑N−1ejkψ∣
经过一些推导(见附录),上式可整理为:
G ( ψ ) = { ∣ s i n ( N ψ / 2 ) N s i n ( ψ / 2 ) ∣ , if ψ ≠ 0 1 , if ψ = 0 G(\psi)= \begin{cases} |\frac{sin(N\psi/2)}{Nsin(\psi/2)}|, & \text {if $\psi \neq 0$} \\ 1, & \text{if $\psi=0$} \end{cases} G(ψ)={
∣Nsin(ψ/2)sin(Nψ/2)∣,1,if ψ=0if ψ=0
把
ψ = 2 π d c o s ( θ ) λ \psi=\frac{2\pi dcos(\theta)}{\lambda} ψ=λ2πdcos(θ)
代入后,我们可以计算接收端不同角度对应不同的增益,当 ψ \psi ψ为 0 0 0时,取最大值,即 θ = π 2 \theta=\frac{\pi}{2} θ=2π 或 3 π 2 \frac{3\pi}{2} 23π 时取最大值。
Python程序,在极坐标上画出来的增益曲线如下:
假设 d λ = 1 2 \frac{d}{\lambda}=\frac{1}{2} λd=21
第一个图:8个天线成一排
16个天线成一排
可以看出,天线越多,则越集中,波束越窄。
import numpy as np
from matplotlib import pyplot as plt
N = 8 #天线数量
theta = np.arange(0.000001,2*np.pi-0.0000001,0.01)
psi = np.pi * np.cos(theta)
r = np.abs(np.sin(N * psi/2)/np.sin(psi/2))/N
plt.figure()
plt.polar(theta,r)
plt.show()
附录:
1 N ∑ i = 0 N − 1 e j k ψ = 1 N 1 − e j N ψ 1 − e j ψ = 1 N e j N ψ / 2 e j ψ / 2 ( e − j N ψ / 2 − e j N ψ / 2 ) ( e − j ψ / 2 − e j ψ / 2 ) = e j N ψ / 2 e j ψ / 2 s i n ( N ψ / 2 ) N s i n ( ψ / 2 ) \frac{1}{N}\sum_{i=0}^{N-1}e^{jk\psi}=\frac{1}{N}\frac{1-e^{jN\psi}}{1-e^{j\psi}}=\frac{1}{N}\frac{e^{jN\psi/2}}{e^{j\psi/2}}\frac{(e^{-jN\psi/2-e^{jN\psi/2}})}{(e^{-j\psi/2}-e^{j\psi/2})}=\frac{e^{jN\psi/2}}{e^{j\psi/2}}\frac{sin(N\psi/2)}{Nsin(\psi/2)} N1i=0∑N−1ejkψ=N11−ejψ1−ejNψ=N1ejψ/2ejNψ/2(e−jψ/2−ejψ/2)(e−jNψ/2−ejNψ/2)=ejψ/2ejNψ/2Nsin(ψ/2)sin(Nψ/2)
若只考虑幅度,则上面推导中的两个分式中,第一个分式的模是1,可以忽略。
∣ 1 N ∑ k = 0 N − 1 e j k ψ ∣ = ∣ s i n ( N ψ / 2 ) N s i n ( ψ / 2 ) ∣ |\frac{1}{N}\sum_{k=0}^{N-1}e^{jk\psi}|=|\frac{sin(N\psi/2)}{Nsin(\psi/2)}| ∣N1k=0∑N−1ejkψ∣=∣Nsin(ψ/2)sin(Nψ/2)∣