姓名:王铎澎
嵌牛导读:文章对DOA算法进行了简单的介绍。
嵌牛正文:https://blog.csdn.net/zhangziju/article/details/100730081?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160689878119725222413438%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160689878119725222413438&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-100730081.pc_first_rank_v2_rank_v28&utm_term=Musicsuanfa&spm=1018.2118.3001.4449
DOA估计算法
DOA(Direction Of Arrival)波达方向定位技术主要有ARMA谱分析、最大似然法、熵谱分析法和特征分解法,特征分解法主要有MUSIC算法、ESPRIT算法WSF算法等。
MUSIC (Multiple Signal Classification)算法,即多信号分类算法,由Schmidt等人于1979年提出。MUSIC算法是一种基于子空间分解的算法,它利用信号子空间和噪声子空间的正交性,构建空间谱函数,通过谱峰搜索,估计信号的参数。对于声源定位来说,需要估计信号的DOA。MUSIC算法对DOA的估计有很高的分辨率,且对麦克风阵列的形状没有特殊要求,因此应用十分广泛。
运用矩阵的定义,可得到更为简洁的表达式:
X = A S + N X=AS+NX=AS+N
式中
X = [ x 1 ( t ) , x 2 ( t ) , . . . x M ( t ) ] T X=[x_1(t),x_2(t),...x_M(t)]^TX=[x1(t),x2(t),...xM(t)]T,
S = [ S 1 ( t ) , S 2 ( t ) , . . . S D ( t ) ] T S=[S_1(t),S_2(t),...S_D(t)]^TS=[S1(t),S2(t),...SD(t)]T,
A = [ a ( θ 1 ) , a ( θ 2 ) , . . . a ( θ D ) ] T A=[a(\theta_1),a(\theta_2),...a(\theta_D)]^TA=[a(θ1),a(θ2),...a(θD)]T,
N = [ n 1 ( t ) , n 2 ( t ) , . . . n M ( t ) ] T N=[n_1(t),n_2(t),...n_M(t)]^TN=[n1(t),n2(t),...nM(t)]T。
X XX为阵元的输出,A AA为方向响应向量,S SS是入射信号,N NN表示阵列噪声。
其中 φ k = 2 π d λ s i n θ k \varphi_k=\frac{2\pi d}{\lambda}sin\theta_kφk=λ2πdsinθk有
A = [ a ( θ 1 ) , a ( θ 2 ) , . . . a ( θ D ) ] T = [ 1 1 ⋯ 1 e − j φ 1 e − j φ 2 ⋯ e − j φ D ⋮ ⋮ ⋱ ⋮ e − j ( M − 1 ) φ 1 e − j ( M − 1 ) φ 2 ⋯ e − j ( M − 1 ) φ D ] A=[a(\theta_1),a(\theta_2),...a(\theta_D)]^T=\left[
1e−jφ1⋮e−j(M−1)φ11e−jφ2⋮e−j(M−1)φ2⋯⋯⋱⋯1e−jφD⋮e−j(M−1)φD11⋯1e−jφ1e−jφ2⋯e−jφD⋮⋮⋱⋮e−j(M−1)φ1e−j(M−1)φ2⋯e−j(M−1)φD
\right]A=[a(θ1),a(θ2),...a(θD)]T=⎣⎢⎢⎢⎡1e−jφ1⋮e−j(M−1)φ11e−jφ2⋮e−j(M−1)φ2⋯⋯⋱⋯1e−jφD⋮e−j(M−1)φD⎦⎥⎥⎥⎤
对x m ( t ) x_m(t)xm(t)进行N点采样,要处理的问题就变成了通过输出信号x m ( t ) x_m(t)xm(t)的采样{ x m ( i ) = 1 , 2 , . . . , M } \{ x_m (i)=1,2,...,M\}{xm(i)=1,2,...,M}估计信号源的波达方向角θ 1 , θ 2 . . . θ D \theta_1,\theta_2...\theta_Dθ1,θ2...θD,由此可以很自然的将阵列信号看作是噪声干扰的若干空间谐波的叠加,从而将波达方向估计问题与谱估计联系起来。
对阵列输出X做相关处理,得到其协方差矩阵
R x = E [ X X H ] R_x=E[XX^H]Rx=E[XXH]
其中H HH表示矩阵的共轭转置。
根据已假设信号与噪声互不相关、噪声为零均值白噪声,因此可得到:
R x = E [ ( A S + N ) ( A S + N ) H ] = A E [ S S H ] A H + E [ N N H ] = A R S A H + R N R_x=E[(AS+N)(AS+N)^H] =AE[SS^H]A^H+E[NN^H]=AR_SA^H+R_NRx=E[(AS+N)(AS+N)H]=AE[SSH]AH+E[NNH]=ARSAH+RN
其中R s = E [ S S H ] R_s=E[SS^H]Rs=E[SSH]称为信号相关矩阵
R N = σ 2 I R_N=\sigma^2IRN=σ2I是噪声相关阵
σ 2 \sigma^2σ2是噪声功率
I II是M × M M\times MM×M阶的单位矩阵
在实际应用中通常无法直接得到R x R_xRx,能使用的只有样本的协方差矩阵:
R x ^ = 1 N ∑ i = 1 N X ( i ) X H ( i ) \hat{R_x}=\frac{1}{N} \sum_{i=1}^{N}X(i)X^H (i)Rx^=N1∑i=1NX(i)XH(i),R x ^ \hat{R_x}Rx^是R x R_xRx的最大似然估计。
当采样数N → ∞ N\to\inftyN→∞,他们是一致的,但实际情况将由于样本数有限而造成误差。根据矩阵特征分解的理论,可对阵列协方差矩阵进行特征分解,首先考虑理想情况,即无噪声的情况:R x = A R s A H R_x=AR_sA^HRx=ARsAH,对均匀线阵,矩阵A由
A = [ a ( θ 1 ) , a ( θ 2 ) , . . . a ( θ D ) ] T = [ 1 1 ⋯ 1 e − j φ 1 e − j φ 2 ⋯ e − j φ D ⋮ ⋮ ⋱ ⋮ e − j ( M − 1 ) φ 1 e − j ( M − 1 ) φ 2 ⋯ e − j ( M − 1 ) φ D ] A=[a(\theta_1),a(\theta_2),...a(\theta_D)]^T=\left[
1e−jφ1⋮e−j(M−1)φ11e−jφ2⋮e−j(M−1)φ2⋯⋯⋱⋯1e−jφD⋮e−j(M−1)φD11⋯1e−jφ1e−jφ2⋯e−jφD⋮⋮⋱⋮e−j(M−1)φ1e−j(M−1)φ2⋯e−j(M−1)φD
\right]A=[a(θ1),a(θ2),...a(θD)]T=⎣⎢⎢⎢⎡1e−jφ1⋮e−j(M−1)φ11e−jφ2⋮e−j(M−1)φ2⋯⋯⋱⋯1e−jφD⋮e−j(M−1)φD⎦⎥⎥⎥⎤
所定义的范德蒙德矩阵,只要满足θ i ≠ θ j , i ≠ j \theta_i\neq \theta_j,i\neq jθi=θj,i=j,则他的各列相互独立。
若R s R_sRs为非奇异矩阵R a n k ( R s ) = D Rank(R_s)=DRank(Rs)=D,各信号源两两不相干,且M >D M>DM>D,则r a n d ( A R s A H ) = D rand(AR_sA^H)=Drand(ARsAH)=D,
由于R x = E [ X X H ] R_x=E[XX^H]Rx=E[XXH],有:
R s H = R x R_s^H=R_xRsH=Rx
即R s R_sRs为Hermite矩阵,它的特性是都是实数,又由于R s R_sRs为正定的,因此A R s A … … H AR_sA……HARsA……H为半正定的,它有D个正特征值和M − D M-DM−D个零特征值。
再考虑有噪声存在的情况
R x = A R s A H + σ 2 I R_x=AR_sA^H+\sigma^2IRx=ARsAH+σ2I
由于σ 2 >0 \sigma^2>0σ2>0,R x R_xRx为满秩阵,所以R x R_xRx有M个正实特征值λ 1 , λ 2 . . . λ M \lambda_1,\lambda_2...\lambda_Mλ1,λ2...λM
分别对应于M个特征向量v 1 , v 2 . . . v M v_1,v_2...v_Mv1,v2...vM。又由于R x R_xRx为Hermite矩阵,所以各特征向量是正交的,即:v i H v j = 0 , i ≠ j v_i^Hv_j=0,i\neq jviHvj=0,i=j与信号有关的特征值只有D个,分别等于矩阵A R s A H AR_sA^HARsAH的各特征值与σ 2 \sigma^2σ2之和,其余M − D M-DM−D个特征值为σ 2 \sigma^2σ2,即σ 2 \sigma^2σ2为R RR的最小特征值,它是M − D M-DM−D维的,对应的特征向量v i , i = 1 , 2 , . . . , M v_i,i=1,2,...,Mvi,i=1,2,...,M中,也有D个是与信号有关的,另外M − D M-DM−D个是与噪声有关的,可利用特征分解的性质求出信号源的波达方向θ k \theta_kθk。
MUSIC算法的原理及实现
通过对协方差矩阵的特征值分解,可得到如下结论:
将矩阵R x R_xRx的特征值进行从小到大的排序,即λ 1 ≥ λ 2 ≥ . . . ≥ λ M >0 \lambda_1 \geq \lambda_2\geq...\geq\lambda_M>0λ1≥λ2≥...≥λM>0,其中D个较大的特征值对应于信号,M − D M-DM−D个较小的特征值对应于噪声。
矩阵R x R_xRx的属于这些特征值的特征向量也分别对应于各个信号和噪声,因此可把R x R_xRx的特征值(特征向量)划分为信号特征(特征向量)与噪声特征(特征向量)。
设λ i \lambda_iλi为R x R_xRx的第i ii个特征值,v i v_ivi是与λ i \lambda_iλi个相对应的特征向量,有:
R x v i = λ i v i R_xv_i=\lambda_iv_iRxvi=λivi
再设λ i = σ 2 \lambda_i=\sigma^2λi=σ2是R x R_xRx的最小特征值R x v i = σ 2 v i i = D + 1 , D + 2... M R_xv_i=\sigma^2v_i i=D+1,D+2...MRxvi=σ2vii=D+1,D+2...M,
将R x = A R s A H + σ 2 I R_x=AR_sA^H+\sigma^2IRx=ARsAH+σ2I代入可得σ 2 v i = ( A R s A H + σ 2 I ) v i \sigma^2v_i=(AR_sA^H+\sigma^2I)v_iσ2vi=(ARsAH+σ2I)vi,
将其右边展开与左边比较得:
A R s A H v i = 0 AR_sA^Hv_i=0ARsAHvi=0
因A H A A^HAAHA是D ∗ D D*DD∗D维的满秩矩阵,( A H A ) − 1 (A^HA)^{-1}(AHA)−1存在;
而R s − 1 R_s^{-1}Rs−1同样存在,则上式两边同乘以R s − 1 ( A H A ) − 1 A H R_s^{-1}(A^HA)^{-1}A^HRs−1(AHA)−1AH,
有:
R s − 1 ( A H A ) − 1 A H A R s A H v i = 0 R_s^{-1}(A^HA)^{-1}A^HAR_sA^Hv_i=0Rs−1(AHA)−1AHARsAHvi=0
于是有
A H v i = 0 , i = D + 1 , D + 2 , . . . , M A^Hv_i=0,i=D+1,D+2,...,MAHvi=0,i=D+1,D+2,...,M
上式表明:噪声特征值所对应的特征向量(称为噪声特征向量)v i v_ivi,与矩阵A AA的列向量正交,而A AA的各列是与信号源的方向相对应的,这就是利用噪声特征向量求解信号源方向的出发点。
用各噪声特征向量为例,构造一个噪声矩阵E n E_nEn:
E n = [ v D + 1 , v D + 2 , . . . v M ] E_n=[v_{D+1},v_{D+2},...v_{M}]En=[vD+1,vD+2,...vM]
定义空间谱P m u ( θ ) P_{mu}(\theta)Pmu(θ):
P m u ( θ ) = 1 a H ( θ ) E n E n H a ( θ ) = 1 ∥ E n H a ( θ ) ∥ 2 P_{mu}(\theta)=\frac{1}{{a^H}(\theta)}E_nE_n^Ha(\theta)=\frac{1}{\Vert E_n^Ha(\theta)\Vert^2}Pmu(θ)=aH(θ)1EnEnHa(θ)=∥EnHa(θ)∥21
该式中分母是信号向量和噪声矩阵的内积,当a ( θ ) a(\theta)a(θ)和E n E_nEn的各列正交时,该分母为零,但由于噪声的存在,它实际上为一最小值,因此P m u ( θ ) P_{mu}(\theta)Pmu(θ)有一尖峰值,由该式,使θ \thetaθ变化,通过寻找波峰来估计到达角。
MUSIC算法实现的步骤
1.根据N个接收信号矢量得到下面协方差矩阵的估计值:
R x = 1 N ∑ i = 1 N X ( i ) X H ( i ) R_x=\frac{1}{N} \sum_{i=1}^NX(i)X^H(i)Rx=N1∑i=1NX(i)XH(i)
对上面得到的协方差矩阵进行特征分解
R x = A R s A H + σ 2 I R_x=AR_sA^H+\sigma^2IRx=ARsAH+σ2I
2.按特征值的大小排序 将与信号个数D DD相等的特征值和对应的特征向量看做信号部分空间,将剩下的M − D M-DM−D个特征值和特征向量看做噪声部分空间,得到噪声矩阵E n E_nEn:
A H v i = 0 , i = D + 1 , D + 2 , . . . , M A^Hv_i=0,i=D+1,D+2,...,MAHvi=0,i=D+1,D+2,...,M
E n = [ v D + 1 , v D + 2 , . . . v M ] E_n=[v_{D+1},v_{D+2},...v_{M}]En=[vD+1,vD+2,...vM]
3.使θ \thetaθ变化 ,按照式
P m u ( θ ) = 1 a H ( θ ) E n E n H a ( θ ) P_{mu}(\theta)=\frac{1}{{a^H}(\theta)E_nE_n^Ha(\theta)}Pmu(θ)=aH(θ)EnEnHa(θ)1
来计算谱函数,通过寻求峰值来得到波达方向的估计值。
clearclose all
%%%%%%%% MUSIC for Uniform Linear Array%%%%%%%%
derad = pi/180 %角度->弧度
N = 8 % 阵元个数
M = 3 % 信源数目
theta = [-30 0 60] % 待估计角度
snr = 10 % 信噪比
K = 512 % 快拍数
dd = 0.5 % 阵元间距
d=0:dd:(N-1)*dd
A=exp(-1i*2*pi*d.'*sin(theta*derad)) %方向矢量
%%%%构建信号模型%%%%%
S=randn(M,K) %信源信号,入射信号
X=A*S %构造接收信号
X1=awgn(X,snr,'measured')%将白色高斯噪声添加到信号中
% 计算协方差矩阵
Rxx=X1*X1'/K
% 特征值分解
[EV,D]=eig(Rxx) %特征值分解
EVA=diag(D)' %将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA) %将特征值排序 从小到大
EV=fliplr(EV(:,I)) % 对应特征矢量排序
% 遍历每个角度,计算空间谱
for iang = 1:361
angle(iang)=(iang-181)/2
phim=derad*angle(iang)
a=exp(-1i*2*pi*d*sin(phim)).'
En=EV(:,M+1:N) % 取矩阵的第M+1到N列组成噪声子空间
Pmusic(iang)=1/(a'*En*En'*a)
end
Pmusic=abs(Pmusic)
Pmmax=max(Pmusic)
Pmusic=10*log10(Pmusic/Pmmax) % 归一化处理
h=plot(angle,Pmusic)
set(h,'Linewidth',2)
xlabel('入射角/(degree)')
ylabel('空间谱/(dB)')
set(gca, 'XTick',[-90:30:90])
grid on
实现结果
Vue5
Esprit的彩色图用于产生可变的颜色,类似于Photoshop中的渐变填充,但又不完全是。它在Vue中是和滤镜、函数以及全局颜色结合使用来控制材质表面的颜色的,彩色图能够帮助生成变化的颜色。
如果要使用彩色图,用户只需要在高级材质编辑器的Colors(颜色)标签中选择Coloring
mode(颜色模式)为Procedural
colors(程序颜色),如图1所示。
图1
高级材质编辑器
我们使用彩色图之前,首先要了解Vue中通过程序来生成材质颜色的原理。Vue能够使用函数、滤镜和彩色图来按照算法规则生成材质的颜色。它的工作原理如下:对于表面上的每个点,函数计算出一个0到1之间的值(函数预览中的0显示为黑色,1显示为白色)。这个值然后通过滤镜被转化为另外一个0到1的值。按照后一个值,彩色图产生表面的颜色(如果值为0,那么颜色是彩色图中左侧的那个,如果值为1,那么颜色是彩色图中右侧的那个)。如果要修改函数,只需要双击函数图片就可以出现函数浏览器,如图2所示。关于函数的使用我们在后面会详细讲解。
图2
函数对话框
用户还可以使用缩放控制文本框来沿着X、Y和Z方向调整函数。如果有必要的话,用户还可以使用滤镜来修改函数值转变为颜色的方法,只需要双击滤镜预览图就可以选择滤镜,如图3所示。滤镜的使用我们也会在以后详细讲解。
图3
滤镜对话框
另外,这里我们还需要了解另外一个概念,那就是Overall
color(全局颜色),这个选项在Mapped
Picture(映射图)和Procedural
Color(程序颜色)的时候都会有。它允许用户修改材质的整体颜色。因为改选项控制平均颜色,所以它可能在材质中是不显示的。例如,如果材质显示出一个红色和白色的棋盘格,全局颜色会变成粉红色,尽管实际上材质上只有红色或者白色。全局颜色可以通过双击颜色块来进行修改。所有材质中的颜色都会被修改,用于产生与全局颜色相匹配的平均颜色。
双击颜色块或者右击鼠标在d出菜单中选择Load
Color
Map(载入彩色图)即可打开彩色图库,如图4所示。这里所显示的是一些预置的彩色图,用户可以直接选中使用。
图4
彩色图库
如果用户不是使用预置的彩色图库,而是要自己创建彩色图,那么首先需要打开彩色图编辑器,那么只需要在按住Ctrl键的时候单击彩色图预览或者右击彩色图预览在d出菜单中选择Edit
Color
Map(编辑彩色图)就可以打开彩色图。在彩色图编辑器中,中部的颜色渐变区域显示了对应于水平标尺的每个位置上的颜色。如图5所示。
图5
编辑彩色图
彩色图是通过关键颜色来生成的。关键颜色定义了给定位置的彩色图中的颜色。Vue自动生成了关键颜色之间的颜色渐变。用户可以通过增加、移动或者删除关键颜色来修改彩色图。
关键颜色通过圆形的控制按钮
来表示,这些按钮位于彩色图下面的水平标尺上。所有的彩色图都在标尺的末尾具有一个关键颜色,并且相应的控制滑块不能移动。
一、添加关键颜色
用户可以双击彩色图的中心位置来添加关键颜色。此时在用户双击的位置就会出现一个选择颜色对话框,如图6所示。
图6
选择颜色对话框
用户可以选择需要的颜色。此时彩色图就被重新绘制,并且包含了新的颜色。如图7所示。
图7
选中颜色后的材质颜色
在彩色图中单击,此时所点击的位置就会在下面的Position(位置)文本框中显示,如果要创建关键颜色,用户可以按下
(新建关键颜色)按钮或者双击Current
color(当前颜色)块,这时会出现一个对话框,用于让用户选择颜色。同样,用户也可以在Position(位置)文本框中直接输入一个数值,然后按照上面相同的方法来添加关键颜色。
需要注意的是,用户不能在同一个水平位置添加两个关键颜色。
二、移动关键颜色
如果用户需要移动某个关键颜色,那么只需要选中该关键颜色的圆形控制按钮
,然后将其移动到某个位置放开鼠标即可。每个关键颜色必须还是在其之前颜色和之后颜色之间,而不能拖到其之前颜色的前面或者之后颜色的后面。
如果用户要修改关键颜色,那么只需要选中该关键颜色的控制按钮,然后双击就可以打开颜色选择对话框让用户重新选择颜色。用户选择一个新的颜色,然后选择OK后,彩色图就可以重新绘制了。当用户选择了一个关键颜色的时候,还可以使用Tab键直接跳跃到下一个关键颜色(Shift+Tab可以跳到前一个关键颜色)。用户也可以在选中关键颜色的时候选择左右方向箭来调整关键颜色的位置。
在用户修改关键颜色的时候,单击需要修改的关键颜色将其选中,此时控制按钮就会变成黑色。并且Position(位置)中显示了当前关键颜色的位置值。在Current
color(当前颜色)块中双击就可以打开选择颜色对话框,用户可以重新选择颜色。
三、删除关键颜色
当用户需要删除一个关键颜色的时候,只需要使用鼠标选中需要删除的颜色,或者在Position(位置)中输入其位置,然后单击
(删除关键颜色)按钮即可删除该关键颜色。用户也可以使用Tab键和Shift+Tab键来切换关键颜色。不过,用户不能删除最右侧的关键颜色。
四、新建、载入和保存
单击New(新建)按钮图标
就可以新建一个渐变彩色图。单击Load(载入)按钮图标
就可以打开图4所示的彩色图库选择预置的彩色图。单击Save(保存)按钮图标
就可以将当前的彩色图按照*.clr格式来保存,如图8所示。为将来的场景创作使用。已经保存的彩色图会出现在彩色图库中。默认情况下,彩色图保存在Vue安装目录的Color
maps(彩色图)文件夹之下。
图8
保存彩色图
小结:彩色图实际上是一个不太容易理解的概念。它类似于Photoshop中的渐变填充,但是又不完全是。它在Vue中是和滤镜、函数以及全局颜色结合使用来控制材质表面的颜色的,彩色图能够帮助生成变化的颜色。我们需要记住的是它的工作原理,那就是Vue首先使用函数来计算出材质上每个点的数值,然后通过滤镜将其转化为另外一个值,而彩色图所依据的就是滤镜转化后的这个0到1之间的值来生成表面颜色。但是,需要注意的是,这个表面颜色又不是完全和彩色图预览中的颜色一样,它是按比例对应的一种关系。希望读者朋友们能够在实际使用中详细理解这一点,这样我们在创作过程中才不至于会迷失方向,通过细节调整我们总能实现出自己想要实现的各种效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)