提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在4D毫米波雷达中,需要测量目标的径向距离,径向速度以及水平入射角度,俯仰入射角度。其中入射角度的测量,尤其是高精度的入射角度的测量是研究的重点。理论上,入射角度的精度只取决于接收物理孔径的大小,当然采用mimo技术,可以扩展虚拟孔径,比如8T8R,如果天线全部是等间距水平排布,那么虚拟孔径大约8*8=64个接收天线,但是无论是扩展物理孔径还是虚拟孔径,都需要增加器件成本。在实际生产中,因为成本压力,物理孔径往往是受限的,因此如何在有限接收孔径下提高角度测量精度成为当下现实的研究课题。
阵列信号的谱估计被证明是非常有效的角度测量算法,在有限孔径下,有些谱估计算法可以提供非常高的角度分辨率,本篇作为阵列信号谱估计理论下列文章的第一篇,也是基础篇,将介绍BarlettBeamformer和MVDR两种算法
一、阵列信号的相关矩阵
几乎所有的谱估计算法都是对接收阵列信号的相关矩阵进行各种线性代数运算,所以本节以均匀ULA阵列信号为例介绍BarlettBeamformer和MVDR两种算法。ULA是均匀线阵的缩写,比如采用均匀12个接收天线,天下间距为半个波长,示意图如下:
假设目标距离雷达非常远(相对于波长来说),雷达回波相对于ULA来说是入射平行波,那么12个接收阵元接收到的雷达入射波理论上只有相位差异,如果入射角度,相对于y轴的夹角
θ
\theta
θ,为了编辑公式简单,我们以4阵元ULA为例。其接收下来的为:
r
x
=
[
1
,
e
1
j
∗
π
∗
s
i
n
(
θ
)
,
e
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
,
e
1
j
∗
3
∗
π
∗
s
i
n
(
θ
)
]
rx=[1,e^{1j*\pi*sin(\theta)},e^{1j*2*\pi*sin(\theta)},e^{1j*3*\pi*sin(\theta)}]
rx=[1,e1j∗π∗sin(θ),e1j∗2∗π∗sin(θ),e1j∗3∗π∗sin(θ)]
4阵元接收信号的相关矩阵
R
x
x
=
[
1
,
e
1
j
∗
π
∗
s
i
n
(
θ
)
,
e
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
,
e
1
j
∗
3
∗
π
∗
s
i
n
(
θ
)
e
−
1
j
∗
π
∗
s
i
n
(
θ
)
,
1
,
e
1
j
∗
π
∗
s
i
n
(
θ
)
,
e
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
e
−
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
,
e
−
1
j
∗
π
∗
s
i
n
(
θ
)
,
1
,
e
1
j
∗
π
∗
s
i
n
(
θ
)
e
−
1
j
∗
3
∗
π
∗
s
i
n
(
θ
)
,
e
−
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
,
e
−
1
j
∗
π
∗
s
i
n
(
θ
)
,
1
]
Rxx=\begin{bmatrix} 1&,e^{1j*\pi*sin(\theta)}&,e^{1j*2*\pi*sin(\theta)}&,e^{1j*3*\pi*sin(\theta)}&\\ e^{-1j*\pi*sin(\theta)}&,1&,e^{1j*\pi*sin(\theta)}&,e^{1j*2*\pi*sin(\theta)}&\\ e^{-1j*2*\pi*sin(\theta)}&,e^{-1j*\pi*sin(\theta)}&,1&,e^{1j*\pi*sin(\theta)}&\\ e^{-1j*3*\pi*sin(\theta)}&,e^{-1j*2*\pi*sin(\theta)}&,e^{-1j*\pi*sin(\theta)}&,1&\\ \end{bmatrix}
Rxx=
1e−1j∗π∗sin(θ)e−1j∗2∗π∗sin(θ)e−1j∗3∗π∗sin(θ),e1j∗π∗sin(θ),1,e−1j∗π∗sin(θ),e−1j∗2∗π∗sin(θ),e1j∗2∗π∗sin(θ),e1j∗π∗sin(θ),1,e−1j∗π∗sin(θ),e1j∗3∗π∗sin(θ),e1j∗2∗π∗sin(θ),e1j∗π∗sin(θ),1
二、Barlett
这里需要观察Rxx特点,Rxx每列之间,以及每行之间,尤其Rxx与rx.conj()向量矩阵乘积,采用python中numpy的书写格式如下:
import numpy as np
np.sum(rx*(Rxx@rx.conj()))
我们拆解Rxx@rx.conj()将得到
R
x
x
@
r
x
.
c
o
n
j
(
)
=
[
1
,
e
−
1
j
∗
π
∗
s
i
n
(
θ
)
,
e
−
1
j
∗
2
∗
π
∗
s
i
n
(
θ
)
,
e
−
1
j
∗
3
∗
π
∗
s
i
n
(
θ
)
]
Rxx@rx.conj()=[1,e^{-1j*\pi*sin(\theta)},e^{-1j*2*\pi*sin(\theta)},e^{-1j*3*\pi*sin(\theta)}]
Rxx@rx.conj()=[1,e−1j∗π∗sin(θ),e−1j∗2∗π∗sin(θ),e−1j∗3∗π∗sin(θ)],然后计算rx*(Rxx@rx.conj())=[1,1,1,1],也就是正相关的。
如果Rxx里面含有入射角度
θ
\theta
θ的信号,那么用
θ
\theta
θ输入向量采用Barlettbeamformer算法将得到完全正相关的最大值,其他入射角度的信号由于不完全正相关,np.sum(rx*(Rxx@rx.conj()))返回值将不会最大。
MVDR算法是Barlett算法的改进算法,Barlett算法由于本质是相关算法。我们采用ULA12,5个入射目标得到的仿真结果如下:
我们看到,barlett由于本质上是相关算法,因此分辨率不高,也就是各个尖峰的波瓣宽度很宽。
三、MVDR
MVDR是Barlet的改进算法,又名capon算法,由于Barlett是在Rxx矩阵进行相关算法,分辨率低。所以barlet的相反方法是进行非相关,先求解Rxx的逆矩阵 R x x − 1 Rxx^{-1} Rxx−1,我们知道 R x x − 1 Rxx^{-1} Rxx−1的列向量全部垂直于向量rx,或者说是 R x x − 1 Rxx^{-1} Rxx−1的列向量与rx的相关性为零,因此
import numpy as np
1.0 / np.sum(A.conj() * np.linalg.lstsq(R, A, None)[0], axis=0).real
np.linalg.lstsq(R, A, None)[0], axis=0)的计算返回值是
R
x
x
−
1
Rxx^{-1}
Rxx−1@A,然后A.conj() *
R
x
x
−
1
Rxx^{-1}
Rxx−1@A就是相关性运算,由于
R
x
x
−
1
Rxx^{-1}
Rxx−1的列是由rx的垂直或者相关性为零的向量组成的矩阵,所以理论上啊, np.sum(A.conj() * np.linalg.lstsq(R, A, None)[0], axis=0).real将等于零。
这段有点绕,关键是线性代数里逆矩阵的理解,原矩阵和逆矩阵的矩阵乘法后,对角线元素为1,非对角线全为零,零就是体现非相关或者垂直的概念。这点理解一下
A
.
c
o
n
j
(
)
∗
R
x
x
@
A
和
A
.
c
o
n
j
(
)
∗
R
x
x
−
1
@
A
A.conj()*Rxx@A 和A.conj()*Rxx^{-1}@A
A.conj()∗Rxx@A和A.conj()∗Rxx−1@A的区别,前者是把入射角度向量提取到最大,后者就会变成最小。对比起来理解,
R
x
x
−
1
Rxx^{-1}
Rxx−1把内含的入射角度向量归为一个基本基,或者最小值。基于MVDR同样12阵元ULA,5个target的计算结果如下图:
总结
我写这篇文章的目的是从空间映射角度解释barlett和MVDR这两个算法的关联性,理解的关键是对线性代数的逆矩阵的物理意义的理解,如果这个理解不了,也理解不了这两个算法的相关性。我们知道barlett算法分辨率低,原因是波瓣宽度太胖,而MVDR正好相反,采用非相关,好比去倒数,原本胖的波瓣在倒数里变瘦了,也因此分辨率变高了。
源码我整理一下,尽量用jupyter,后续整理完毕后会分享出来。记录下此刻的想法,方便后续查阅。