阵列信号DOA估计系列(二).导向矢量
在DOA估计里面,经常会看到导向矢量这个名词,也有的地方叫方向矢量,方向矩阵,基本上都是array steering vector 的翻译。
本文首先对均匀线阵(ULA,uniform linear array)的导向矢量做一个推导说明,然后介绍一个最基本的DOA估计方法——空间FFT。
1.导向矢量
在上一篇文章中( 阵列信号DOA估计系列(一).概述.),已经对空间相位差做出了详细说明,下面在空间相位差的基础上,引出均匀线阵的导向矢量。
依然来看这样一个阵列:在一条直线上,均匀排布着 M 个阵元
假设远场信号为 s(t),阵列以第一个阵元(上图编号为0)为参考,则整个阵列接收到的信号为x(n)=[s(t),s(t)e−j2πf0cdsin(θ),s(t)e−j2πf0c2dsin(θ),s(t)e−j2πf0c3dsin(θ),⋯,s(t)e−j2πf0c(M−1)dsin(θ)]稍作变形,即可得到x(n)=[1,e−j2πf0cdsin(θ),e−j2πf0c2dsin(θ),e−j2πf0c3dsin(θ),⋯,e−j2πf0c(M−1)dsin(θ)]s(n)
可以看到,接收到的信号向量x(n)是一个向量 [1,e−j2πf0cdsin(θ),e−j2πf0c2dsin(θ),⋯,e−j2πf0c(M−1)dsin(θ)] 乘以一个标量 s(n),且此向量是信号来波方向 θ 的函数。
做如下定义:a(θ)≜[1,e−j2πf0cdsin(θ),e−j2πf0c2dsin(θ),⋯,e−j2πf0c(M−1)dsin(θ)]
于是,接收到的信号可以表示为x(n)=a(θ)s(n)可见,向量 a(θ) 将 阵列信号DOA估计系列(一).概述 所述空间相位查全部包含在内,即包含了信号 s(n) 的角度信息。这就是我们常说的导向矢量。
这里,可以看到以下几点信息:
- 导向矢量的本质是描述空间相位差的;
- 导向矢量的结构,和阵元之间的相对位置有关系。上面所写的导向矢量是Vandermonde结构,这是ULA的特点。对于其他几何形状的阵列,导向矢量的结构将会有所不同;
- 导向矢量的值,是来波方向的函数,若方向 θ 不同,则导向矢量的值会有所不同;
- 对于同一方向(如30°),若选取的参考点不同,那么导向矢量的值也会不同。但是阵元之间的相对相位查不会变化。
图中,当信号方向如图所示时,若选取第一个阵元为参考点,导向矢量为a(θ)=[1,e−j2πf0cdsin(θ),e−j2πf0c2dsin(θ),⋯,e−j2πf0c(M−1)dsin(θ)]若选取最后一个阵元为参考点时,导向矢量为a(θ)=[ej2πf0c(M−1)dsin(θ),ej2πf0c(M−2)dsin(θ),⋯,ej2πf0c2dsin(θ),ejπf0c2dsin(θ),1]要理解其中的差别,首先要抓住导向矢量的本质:描述空间相位差。
2.接收信号的矩阵表示
为方便描述,后面的文章中,均以第一个阵元为参考,并把导向矢量和接收信号写为列向量。
同时,为帮助读者理解,本节的向量和矩阵均标注了维数
当有一个信号 s(n) 从 θ 方向入射到阵列时,接收信号可以表述为
x(n)M×1=a(θ)M×1s(n)
当有 N 个信号 s1(n),s2(n),⋯,sN(n) 分别从 θ1,θ2,⋯,θN 入射到阵列时,按照叠加的思维,收信号可以表述为
x(n)M×1=a(θ1)s1(n)+a(θ2)s2(n)+⋯+a(θN)sN(n)利用小学二年级学过的矩阵知识:),可以整理为x(n)M×1=[a(θ1),a(θ2),⋯,a(θN)]M×N×[s1(n),s2(n),⋯,sN(n)]1×NT≜AM×NsN×1AM×N也称为方向矩阵、导向矩阵等等。和导向矢量是一个意思,以后统称为导向矢量。
这里 AM×N的维度值得关注:
- 行数 M 是阵列中阵元的个数;
- 列数 N 是信号的个数。若只有一个信号,则退化成一个信号 x(n)=a(θ)s(n) 的形式。
3 .最简单的DOA估计:空间傅里叶变换
3.1 算法推导
注意到接收信号的形式x(n)=[1,e−j2πf0cdsin(θ),e−j2πf0c2dsin(θ),e−j2πf0c3dsin(θ),⋯,e−j2πf0c(M−1)dsin(θ)]s(n)虽然信号的角度我们不知道,但还是对于给定的阵列,其导向矢量的数学形式是知道的。比如对于ULA,肯定是Vandermonde结构的。就凭这一点,我们就有了一种DOA估计的方法。
具体而言,我们可以构造出一个导向矢量来,其中的角度任意给定(盲猜,不妨设为α),那么就可以构造出一个来波方向为α的导向矢量为a(α)=[1,e−j2πf0cdsin(α),e−j2πf0c2dsin(α),e−j2πf0c3dsin(α),⋯,e−j2πf0c(M−1)dsin(alpha)]用我们盲猜的这个导向矢量a(α)和接收信号做向量内积,即y=aH(α)⋅x(n)=aH(α)a(θ)s(n)结果应该是一个标量。简单计算一下可以得到y=[1+ej2πf0dcsin(α)−sin(θ)+ej2πf0dc2[sin(α)−sin(θ)]+⋯+ej2πf0dc(M−1)[sin(α)−sin(θ)]]s(n)≥Ms(n)等号在 α=θ 处取得。
通过这个不等式可知,如果我们盲猜对了,即α=θ,那么得到的结果是一个最大值。
因此,我们可以把所有的角度都猜一遍,找出那么结果结果最大的,其对应的角度就是我们DOA估计的结果。
这里就可以引出一个DOA估计的方法:
for: θ from −90° to −90°
caculate yα=aH(α)⋅x(n);
end for
θ=αmaxyα
3.2 算法仿真实例
实例1:假设只有一个目标位于 θ1=5°的地方,得到的结果为
实例2:假设两个目标分别位于 θ1=5°,θ2=10°,采用上述方法得到的结果为
实例3:假设两个目标分别位于 θ1=5°,θ2=30°,采用上述方法得到的结果为
4 .思考
从三个仿真实例可以看出,单目标没有问题,但是当两目标过于靠近时,此DOA算法不能分辨两个目标。这就带来了几个思考:
- 本算法的分辨力到底如何?目标靠的多近时就不能分辨了?
- 有没有什么算法分辨率高一些?代价是什么?
这些问题以后会慢慢说明。
5 .代码
代码已上传,有需要可下载。设置了一点下载积分,希望大家理解。
PS:原创,纯手敲。如有错误、建议等,请留言或私信,大家共同进步。