阵列信号DOA估计系列(二).导向矢量与空间FFT

阵列信号DOA估计系列(二).导向矢量

在DOA估计里面,经常会看到导向矢量这个名词,也有的地方叫方向矢量方向矩阵,基本上都是array steering vector 的翻译。

本文首先对均匀线阵(ULA,uniform linear array)的导向矢量做一个推导说明,然后介绍一个最基本的DOA估计方法——空间FFT。

1.导向矢量

在上一篇文章中( 阵列信号DOA估计系列(一).概述.),已经对空间相位差做出了详细说明,下面在空间相位差的基础上,引出均匀线阵的导向矢量

依然来看这样一个阵列:在一条直线上,均匀排布着 MM 个阵元
阵列信号DOA估计系列(二).导向矢量与空间FFT假设远场信号为 s(t)s(t),阵列以第一个阵元(上图编号为0)为参考,则整个阵列接收到的信号为x(n)=[s(t),s(t)ej2πf0dsin(θ)c,s(t)ej2πf02dsin(θ)c,s(t)ej2πf03dsin(θ)c,,s(t)ej2πf0(M1)dsin(θ)c]\mathbf{x}(n) = [s(t),s(t)e^{-j2\pi f_0\frac{dsin(\theta)}{c}},s(t)e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},s(t)e^{-j2\pi f_0\frac{3dsin(\theta)}{c}},\cdots,s(t)e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}]稍作变形,即可得到x(n)=[1,ej2πf0dsin(θ)c,ej2πf02dsin(θ)c,ej2πf03dsin(θ)c,,ej2πf0(M1)dsin(θ)c]s(n)\mathbf{x}(n) = [1,e^{-j2\pi f_0\frac{dsin(\theta)}{c}},e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},e^{-j2\pi f_0\frac{3dsin(\theta)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}]s(n)
可以看到,接收到的信号向量x(n)\mathbf{x}(n)是一个向量 [1,ej2πf0dsin(θ)c,ej2πf02dsin(θ)c,,ej2πf0(M1)dsin(θ)c][1,e^{-j2\pi f_0\frac{dsin(\theta)}{c}},e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}] 乘以一个标量 s(n)s(n),且此向量是信号来波方向 θ\theta 的函数。

做如下定义:a(θ)[1,ej2πf0dsin(θ)c,ej2πf02dsin(θ)c,,ej2πf0(M1)dsin(θ)c]\mathbf{a(\theta)}\triangleq[1,e^{-j2\pi f_0\frac{dsin(\theta)}{c}},e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}]
于是,接收到的信号可以表示为x(n)=a(θ)s(n)\mathbf{x}(n) = \mathbf{a(\theta)}s(n)可见,向量 a(θ)\mathbf{a(\theta)}阵列信号DOA估计系列(一).概述 所述空间相位查全部包含在内,即包含了信号 s(n)s(n) 的角度信息。这就是我们常说的导向矢量

这里,可以看到以下几点信息:

  1. 导向矢量的本质是描述空间相位差的;
  2. 导向矢量的结构,和阵元之间的相对位置有关系。上面所写的导向矢量是Vandermonde结构,这是ULA的特点。对于其他几何形状的阵列,导向矢量的结构将会有所不同;
  3. 导向矢量的值,是来波方向的函数,若方向 θ\theta 不同,则导向矢量的值会有所不同;
  4. 对于同一方向(如30°30\degree),若选取的参考点不同,那么导向矢量的值也会不同。但是阵元之间的相对相位查不会变化。
    图中,当信号方向如图所示时,若选取第一个阵元为参考点,导向矢量为a(θ)=[1,ej2πf0dsin(θ)c,ej2πf02dsin(θ)c,,ej2πf0(M1)dsin(θ)c]\mathbf{a(\theta)}=[1,e^{-j2\pi f_0\frac{dsin(\theta)}{c}},e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}]若选取最后一个阵元为参考点时,导向矢量为a(θ)=[ej2πf0(M1)dsin(θ)c,ej2πf0(M2)dsin(θ)c,,ej2πf02dsin(θ)c,ejπf02dsin(θ)c,1]\mathbf{a(\theta)}=[e^{j2\pi f_0\frac{(M-1)dsin(\theta)}{c}},e^{j2\pi f_0\frac{(M-2)dsin(\theta)}{c}},\cdots,e^{j2\pi f_0\frac{2dsin(\theta)}{c}},e^{j\pi f_0\frac{2dsin(\theta)}{c}},1]要理解其中的差别,首先要抓住导向矢量的本质:描述空间相位差

2.接收信号的矩阵表示

为方便描述,后面的文章中,均以第一个阵元为参考,并把导向矢量和接收信号写为列向量
同时,为帮助读者理解,本节的向量和矩阵均标注了维数

当有一个信号 s(n)s(n)θ\theta 方向入射到阵列时,接收信号可以表述为
x(n)M×1=a(θ)M×1s(n)\mathbf{x}(n) _{_{M\times 1}}= \mathbf{a(\theta)_{_{M\times 1}}}s(n)

当有 NN 个信号 s1(n),s2(n),,sN(n)s_{_1}(n),s_{_2}(n),\cdots,s_{_N}(n) 分别从 θ1,θ2,,θN\theta_1,\theta_2,\cdots,\theta_N 入射到阵列时,按照叠加的思维,收信号可以表述为
x(n)M×1=a(θ1)s1(n)+a(θ2)s2(n)++a(θN)sN(n)\mathbf{x}(n)_{_{M\times 1}} = \mathbf{a(\theta_1)}s_{_1}(n)+ \mathbf{a(\theta_2)}s_{_2}(n)+\cdots+ \mathbf{a(\theta_N)}s_{_N}(n)利用小学二年级学过的矩阵知识:),可以整理为x(n)M×1=[a(θ1),a(θ2),,a(θN)]M×N×[s1(n),s2(n),,sN(n)]1×NTAM×NsN×1\mathbf{x}(n) _{_{M\times 1}}= [\mathbf{a(\theta_1)},\mathbf{a(\theta_2)},\cdots,\mathbf{a(\theta_N)}]_{_{M\times N}}\times [s_{_1}(n), s_{_2}(n),\cdots, s_{_N}(n)]^T_{_{1\times N}}\triangleq\mathbf{A_{_{M\times N}}s_{_{N\times 1}}}AM×N\mathbf{A}_{M\times N}也称为方向矩阵、导向矩阵等等。和导向矢量是一个意思,以后统称为导向矢量。

这里 AM×N\mathbf{A}_{M\times N}的维度值得关注:

  1. 行数 MM 是阵列中阵元的个数;
  2. 列数 NN 是信号的个数。若只有一个信号,则退化成一个信号 x(n)=a(θ)s(n)\mathbf{x}(n) = \mathbf{a(\theta)}s(n) 的形式。

3 .最简单的DOA估计:空间傅里叶变换

3.1 算法推导

注意到接收信号的形式x(n)=[1,ej2πf0dsin(θ)c,ej2πf02dsin(θ)c,ej2πf03dsin(θ)c,,ej2πf0(M1)dsin(θ)c]s(n)\mathbf{x}(n) = [1,e^{-j2\pi f_0\frac{dsin(\theta)}{c}},e^{-j2\pi f_0\frac{2dsin(\theta)}{c}},e^{-j2\pi f_0\frac{3dsin(\theta)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\theta)}{c}}]s(n)虽然信号的角度我们不知道,但还是对于给定的阵列,其导向矢量的数学形式是知道的。比如对于ULA,肯定是Vandermonde结构的。就凭这一点,我们就有了一种DOA估计的方法。

具体而言,我们可以构造出一个导向矢量来,其中的角度任意给定(盲猜,不妨设为α\alpha),那么就可以构造出一个来波方向为α\alpha的导向矢量为a(α)=[1,ej2πf0dsin(α)c,ej2πf02dsin(α)c,ej2πf03dsin(α)c,,ej2πf0(M1)dsin(alpha)c]\mathbf{a(\alpha)}=[1,e^{-j2\pi f_0\frac{dsin(\alpha)}{c}},e^{-j2\pi f_0\frac{2dsin(\alpha)}{c}},e^{-j2\pi f_0\frac{3dsin(\alpha)}{c}},\cdots,e^{-j2\pi f_0\frac{(M-1)dsin(\\alpha)}{c}}]用我们盲猜的这个导向矢量a(α)\mathbf{a(\alpha)}和接收信号做向量内积,即y=aH(α)x(n)=aH(α)a(θ)s(n)y=\mathbf{a^H(\alpha)}\cdot\mathbf{x}(n)=\mathbf{a^H(\alpha)}\mathbf{a(\theta)}s(n)结果应该是一个标量。简单计算一下可以得到y=[1+ej2πf0dsin(α)sin(θ)c+ej2πf0d2[sin(α)sin(θ)]c++ej2πf0d(M1)[sin(α)sin(θ)]c]s(n)Ms(n)y=[1+e^{j2\pi f_0d\frac{sin(\alpha)-sin(\theta)}{c}}+e^{j2\pi f_0d\frac{2[sin(\alpha)-sin(\theta)]}{c}}+\cdots+e^{j2\pi f_0d\frac{(M-1)[sin(\alpha)-sin(\theta)]}{c}}]s(n)\geq Ms(n)等号在 α=θ\alpha=\theta 处取得。

通过这个不等式可知,如果我们盲猜对了,即α=θ\alpha=\theta,那么得到的结果是一个最大值。
因此,我们可以把所有的角度都猜一遍,找出那么结果结果最大的,其对应的角度就是我们DOA估计的结果。

这里就可以引出一个DOA估计的方法:

for: θ\theta from 90°-90\degree to 90°-90\degree
caculate yα=aH(α)x(n)y_{_\alpha}=\mathbf{a^H(\alpha)}\cdot\mathbf{x}(n);
end for
θ=maxαyα\theta= \max\limits_{\alpha} y_{_\alpha}

3.2 算法仿真实例

实例1:假设只有一个目标位于 θ1=5°\theta_1=5\degree的地方,得到的结果为阵列信号DOA估计系列(二).导向矢量与空间FFT
实例2:假设两个目标分别位于 θ1=5°,θ2=10°\theta_1=5\degree,\theta_2=10\degree,采用上述方法得到的结果为阵列信号DOA估计系列(二).导向矢量与空间FFT实例3:假设两个目标分别位于 θ1=5°,θ2=30°\theta_1=5\degree,\theta_2=30\degree,采用上述方法得到的结果为阵列信号DOA估计系列(二).导向矢量与空间FFT

4 .思考

从三个仿真实例可以看出,单目标没有问题,但是当两目标过于靠近时,此DOA算法不能分辨两个目标。这就带来了几个思考:

  1. 本算法的分辨力到底如何?目标靠的多近时就不能分辨了?
  2. 有没有什么算法分辨率高一些?代价是什么?

这些问题以后会慢慢说明。

5 .代码

代码已上传,有需要可下载。设置了一点下载积分,希望大家理解。

PS:原创,纯手敲。如有错误、建议等,请留言或私信,大家共同进步。