大家都知道,对于一个正弦信号 y = s i n ( 2 π f 0 t ) y=sin(2\pi f_0 t) y=sin(2πf0t),以采样间隔 T s T_s Ts进行连续、均匀采样,假设采样 N N N点的数据,那么这些数据点写下来应该是 y ( n ) = [ s i n ( 2 π f 0 × 0 ) , s i n ( 2 π f 0 × T s ) , s i n ( 2 π f 0 × 2 T s ) , ⋯ , s i n ( 2 π f 0 × ( N − 1 ) T s ) ] y(n) = [sin(2\pi f_0 \times0),sin(2\pi f_0 \times T_s),sin(2\pi f_0 \times2T_s),\cdots,sin(2\pi f_0 \times (N-1)T_s)] y(n)=[sin(2πf0×0),sin(2πf0×Ts),sin(2πf0×2Ts),⋯,sin(2πf0×(N−1)Ts)]将其相位写下来,应该是 P h a s e [ y ( n ) ] = [ 0 , 2 π f 0 × T s , 2 π f 0 × 2 T s , ⋯ , 2 π f 0 × ( N − 1 ) T s ] Phase[y(n)] = [0,2\pi f_0 \times T_s,2\pi f_0 \times 2T_s,\cdots,2\pi f_0 \times (N-1)T_s] Phase[y(n)]=[0,2πf0×Ts,2πf0×2Ts,⋯,2πf0×(N−1)Ts]从信号与系统我们可以知道,对离散信号做傅里叶变换( MATLAB中用 fft ),可以提取信号中的频率参数,即 f 0 f_0 f0。
以上都是我们熟知的东西,那么这个地方就可以引入一个思考:假设给我们一串离散信号 y ( n ) y(n) y(n),信号的采样点之间相位差是均匀排列的,FFT搞一遍,就可以得到频率信息了!此时,我们并不知道 y ( n ) y(n) y(n)中数据点的来源,也许不是上面说的时序均匀采样而得,但是这并不妨碍我们FFT一顿操作猛如虎,一看频率250(哈哈
相位差大家都懂,为何要强调空间相位差?其实这是一个习惯的问题,为的是表达相位差异的直接来源是“空间”,而不是时间。
看下面这样一个例子:均匀线性阵列,共有 M M M 个阵元,阵元之间相距 d d d,有一个信号(假设为平面波)从偏离法线 θ \theta θ 方向射入到阵列上。
可以看出,信号要到达第二个阵元所走过的路程 比 到达第一个阵元走过的路程 要多 d s i n ( θ ) dsin(\theta) dsin(θ) ,后面以此类推,信号要到达后面一个阵元 都比 前面一个阵元 多走 d s i n ( θ ) dsin(\theta) dsin(θ) 的空间距离。
我们都知道电磁波的速度为光速 c c c,那么上面的路程计算到时间维度,可以得出:相同的信号,要到达后一个阵元,就比前一个阵元 在时间上 迟了 δ t = d s i n ( θ ) c \delta t = \frac{dsin(\theta)}{c} δt=cdsin(θ)。假设信号的频率为 f 0 f_0 f0,并且以第一个阵元为参考点,那么每一个阵元相对于第一个阵元的时间差为 Δ t = [ 0 , d s i n ( θ ) c , 2 d s i n ( θ ) c , ⋯ , ( M − 1 ) d s i n ( θ ) c ] \Delta t = [0, \frac{dsin(\theta)}{c},\frac{2dsin(\theta)}{c},\cdots,\frac{(M-1)dsin(\theta)}{c}] Δt=[0,cdsin(θ),c2dsin(θ),⋯,c(M−1)dsin(θ)]
那么到达各个阵元的信号,相对于第一个阵元的相位差就应该是 Δ ϕ = [ 0 , 2 π f 0 d s i n ( θ ) c , 2 π f 0 2 d s i n ( θ ) c , ⋯ , 2 π f 0 ( M − 1 ) d s i n ( θ ) c ] \Delta \phi = [0, 2\pi f_0\frac{dsin(\theta)}{c}, 2\pi f_0\frac{2dsin(\theta)}{c},\cdots, 2\pi f_0\frac{(M-1)dsin(\theta)}{c}] Δϕ=[0,2πf0cdsin(θ),2πf0c2dsin(θ),⋯,2πf0c(M−1)dsin(θ)]由于这个相位差是阵元间空间位置不同所造成的,顺便取了个名字为“空间相位差”。
首先还是再仔细观察一下在时域和频域,我们常用的FFT的一些细节。
在时域里面,将离散时间信号 y ( n ) = [ s i n ( 2 π f 0 × 0 ) , s i n ( 2 π f 0 × T s ) , s i n ( 2 π f 0 × 2 T s ) , ⋯ , s i n ( 2 π f 0 × ( N − 1 ) T s ) ] y(n) = [sin(2\pi f_0 \times0),sin(2\pi f_0 \times T_s),sin(2\pi f_0 \times2T_s),\cdots,sin(2\pi f_0 \times (N-1)T_s)] y(n)=[sin(2πf0×0),sin(2πf0×Ts),sin(2πf0×2Ts),⋯,sin(2πf0×(N−1)Ts)]做FFT,可以提取出数字频率 ω = 2 π f 0 T s = 2 π f 0 f s \omega = 2\pi f_0T_s = 2\pi\frac{f_0}{f_s} ω=2πf0Ts=2πfsf0仔细观察可以看出,这个数字频率,就是相邻采样点之间相位差 δ ϕ = 2 π f 0 T s = 2 π f 0 f s \delta\phi = 2\pi f_0T_s = 2\pi\frac{f_0}{f_s} δϕ=2πf0Ts=2πfsf0。 如果画出频谱图,那么将会在 2 π f 0 f s 2\pi\frac{f_0}{f_s} 2πfsf0 处出现一个峰值。
这基本就是我们在时域使用FFT对估计信号频率的简单理解了。
对应到空域里面,在某一时刻对所有每个阵元同时采样(称之为一个快拍),将会得到 M M M 个数据点,将这 M M M 个数据点排列起来,可以得到 x ( n ) = [ s ( t ) , s ( t ) e j 2 π f 0 d s i n ( θ ) c , s ( t ) e j 2 π f 0 2 d s i n ( θ ) c , s ( t ) e j 2 π f 0 3 d s i n ( θ ) c , ⋯ , s ( t ) e j 2 π f 0 ( M − 1 ) d s i n ( θ ) 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)=[s(t),s(t)ej2πf0cdsin(θ),s(t)ej2πf0c2dsin(θ),s(t)ej2πf0c3dsin(θ),⋯,s(t)ej2πf0c(M−1)dsin(θ)]如果对这一串数据做FFT,那么将会得到相邻数据点的相位差 δ ϕ = 2 π f 0 d s i n ( θ ) c = 2 π d s i n ( θ ) λ \delta\phi = 2\pi f_0\frac{dsin(\theta)}{c} = 2\pi \frac{dsin(\theta)}{\lambda} δϕ=2πf0cdsin(θ)=2πλdsin(θ)与时域类比,可以知道,这应该是一个数字频率。同样,若画出频谱图,那么应该在 2 π d s i n ( θ ) λ 2\pi \frac{dsin(\theta)}{\lambda} 2πλdsin(θ)处有一个峰值,再通过一定的运算(反正弦等),就可以提取出角度 θ \theta θ 的的信息了。这就是空域FFT的直观理解。
对于均匀线阵,某一时刻接收到一个快拍信号 x ( n ) = [ x 0 ( n ) , x 1 ( n ) , x 2 ( n ) , ⋯ , x M − 1 ( n ) ] \mathbf{x}(n) = [x_0(n),x_1(n),x_2(n),\cdots,x_{M-1}(n)] x(n)=[x0(n),x1(n),x2(n),⋯,xM−1(n)],就可以直接用FFT操作,就可以得到角度信息了。当然,这里面有很多的问题,下面马上就会讲到。
本篇博文所讲,是DOA估计最最基本的概念问题,相当于DOA 估计领域的"hello world!"。有一些不严谨、或者说不专业的地方,下面略微提一下。以后有时间,我再慢慢填坑。
ps:若有错误,希望大家提出。如有建议,欢迎大家讨论。