空间谱专题13:联合解算DOA(ML/AP)
其中作者:桂。
时间:2017-10-16 07:51:40
链接:http://www.cnblogs.com/xingshansi/p/7675380.html
前言
主要记录二维测向中,分别利用两个一维阵联合解算的思路。
一、AP算法思想
信号模型:

对应相关矩阵

假设噪声为遍历、平稳、空时不相关的零均值高斯随机过程,源信号为未知确定信号:

高维正态分布表达式:

由概率论可知,几个独立同高斯分布随机过程的概率密度函数为:

取对数:

观测向量为X(t),对其求偏导:

得到信号s的极大似然估计:

再针对方差求偏导:

将s的似然估计结果代入原表达式中,方差结果sigma也代入,可以得到:

其中

而A+是Moore-Penrose逆:

记投影矩阵以及补空间的投影矩阵:


综合上式,可以得出角度最大似然估计:

等价于:

该算法基于统计参数估计的思路,不涉及SVD分解或者相关矩阵求逆,因此对于相干信号理论上仍然适用,从理论的结构来看,由于投影矩阵涉及求逆,且有迭代过程,因此耗费资源过大。
通常该算法可与其他算法结合使用,用于剔除杂峰,主要代码实现:
function [phi_last,theta_last] = MuCalL_2D(x,srcNum,Array,resolution,lambda_c)
%L阵
sub1 = [1:6];
sub2 = [1,7:11];
J = fliplr(eye(length(sub1)));
x1 = x(sub1,:);
x2 = conj(J*x(sub2,:));
[phi,theta,spec1] = MuCalL_647_1D(x1,srcNum,Array(sub1,:),resolution,lambda_c);
[phi2,alpha,spec2] = MuCalL_647_1D(x2,srcNum,Array(sub1,:),resolution,lambda_c); %
[val1,phi_pos] = findpeaks(spec1,'minpeakdistance',3);
[val,num_phi] = sort(val1,'descend');
[val2,theta_pos] = findpeaks(spec2,'minpeakdistance',3);
[val,num_theta] = sort(val2,'descend');
phi_est = phi(phi_pos(num_phi(1:srcNum)));
theta_est = alpha(theta_pos(num_theta(1:srcNum)));
phi_est = phi_est;
%筛选
snap = size(x,2);
R_all = x*x'/snap;
para_all = perms([1:srcNum]);
theta_all = kron(theta_est,ones(1,size(para_all,1)));
theta_all([2,4]) = theta_all([4,2]);
phi_all = repmat(phi_est,1,size(para_all,1));
theta_all = asin(sin(theta_all/180*pi)./cos(phi_all/180*pi))/pi*180; im = sqrt(-1);
Dd = [];
for kkk = 1:size(theta_all,2)/srcNum
nshift = ((kkk-1)*srcNum+1):((kkk)*srcNum);
theta_cache = theta_all(nshift)/180*pi;
phi_cache = phi_all(nshift)/180*pi; Az = [];
for j = 1:srcNum
r = [sin(phi_cache(j)) cos(phi_cache(j))*sin(theta_cache(j)) cos(phi_cache(j))*cos(theta_cache(j))];
r_rep = repmat(r,size(x,1),1);
dis = sum(r_rep.*Array,2);
am = exp(-im*2*pi*dis/lambda_c);
Az = [Az,am];
end Pb3 = Az*pinv(Az'*Az)*Az';
Dd(kkk) = abs(trace(Pb3*R_all));
end [valDd,indexDd]=max(Dd);
n_pos = ((indexDd-1)*srcNum+1):((indexDd)*srcNum);
[phi_last,sort_pos] = sort(phi_all(n_pos),'ascend');
theta_last = theta_all(n_pos);
theta_last = theta_last(sort_pos);
二、其他思路(对相干信号适应性较差)



该方法针对ULA(均匀线阵),1)未考虑非均匀线阵NULA情形;2)未考虑相干source情形。
个人分析,该算法可改进(未进一步仿真验证): 对于相干且NULA情形,1)各自平滑,X、Z轴相对位置无严格限制,但X、Z需结构一致;2)求解Rzx,并取对角元素diag(Rzx),结合两个一维测向得出导向矢量:max |a(theta)conj(a(phi)).*diag(Rzx)|。
三、联合解算论文
联立解算的思路:

主要代码实现:
Ax = A(sub1,:);
Ay = A(sub2,:);
%利用T矩阵解算
y_sig = x2;
x_sig = x1;
Ryy = y_sig*y_sig'/snapshot;
Rs_hat = pinv(Ay'*Ay)*Ay'*Ryy*pinv(Ay*Ay')*Ay;%eq.5
Rxy = x_sig*y_sig'/snapshot;
Ay_pieH = pinv(Ay*Ay')*Ay;
Rs_pie = pinv(Ax'*Ax)*Ax'*Rxy*Ay_pieH;%eq.9
%构造T矩阵解算
perm = perms([1:srcNum]);
J = zeros(1,size(perm,1));
for i = 1:size(perm,1)
T = zeros(srcNum);
T(perm(i,:)+[0:srcNum-1]*srcNum) = 1;
J(i) = sum(sum(abs(Rs_pie-T*Rs_hat).^2));
end
[minVal,minPos] = min(J);
phi_est = phi_est(perm(minPos,:));
theta_all = theta_est;
%求解
phi_last = phi_est;
theta_last = asin(sin(theta_all/180*pi)./cos(phi_last/180*pi))/pi*180;
当个数不匹配的时候可参考(个人觉得直接拓展效果也可以,就是配对之前添加一个预处理):

空间谱专题13:联合解算DOA(ML/AP)的更多相关文章
- 空间谱专题02:波束形成(Beamforming)
作者:桂. 时间:2017-08-22 10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...
- 空间谱专题10:MUSIC算法
作者:桂. 时间:2017-09-19 19:41:40 链接:http://www.cnblogs.com/xingshansi/p/7553746.html 前言 MUSIC(Multiple ...
- 已知空间三个点,解算外接圆圆心坐标,C++编程实现
struct PT3 { double x, y, z; }; int solveCenterPointOfCircle(std::vector<PT3> pt, double cente ...
- 【转】GPS基线解算模式
GPS基线向量是利用2台或2台以上GPS接 收机所采集的同步观测数据形成的差分观测值,通过参数估计得方法所计算出的两两接收机间的三维坐标差.与常规地面测量中所测定的基线边长不同,基线向量是 既具有长度 ...
- 布料解算插件 Qualoth 重点参数分享
前言 Qualoth是韩国FXGear公司推出的一款布料模拟插件,可以计算出很自然的衣褶以及动态效果,并且能应对大幅度动作的碰撞解算,可以和Houdini的Cloth Solver相媲美: 目前这款插 ...
- Gamit解算脚本
这是一个解算单天的shell脚本,对于初学者很有帮助. 首先就是需要在项目(四个字符)建立rinex brdc igs 还有以年纪日命名的目录,然后提前准备好station.info和lfile.文件 ...
- 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
原创文章,欢迎转载,转载请注明出处 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波形显示数据 2:添 ...
- libviso中的姿态解算【转载】
这篇关于libviso的文章,本人已投稿在泡泡机器人微信公众号中,放到这里,作学习笔记用. libviso一直以来被称为在视觉里程计(VO)中的老牌开源算法.它通过corner,chessboard两 ...
- V-rep学习笔记:机器人逆运动学解算
IK groups and IK elements VREP中使用IK groups和IK elements来进行正/逆运动学计算,一个IK group可以包含一个或者多个IK elements: I ...
随机推荐
- R从3.4升级到3.5
这里介绍的就是R的一个包:installr. installr {installr} R Documentation Installing software from R Description Gi ...
- my作业
学号:2017xxxxxx 我是吴登峰,我的爱好是音乐,看电影,玩游戏! 我的码云个人主页是:https://gitee.com/fengaa 我的第一个项目地址是:https://gitee.com ...
- UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...
- 二分搜索-HihoCoder1128
题目链接:https://hihocoder.com/problemset/problem/1128 题目描述: 题目大意就是要我们编程找出K在数组a中的大小排序后的位置. 代码实现: #includ ...
- Hash值破解工具Hashcat使用
Hash值破解工具Hashcat使用 Hashcat介绍 HashCat系列软件拥有十分灵活的破解方式,可以满足绝大多数的破解需求. Hashcat系列软件是比较牛逼的密码破解软件,系列软件包含Has ...
- PHP如何支持CURL字符串证书传输
背景 最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文 ...
- 【Java并发核心六】CompletionService
CompletionService 接口的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样就可以将执行任务与处理任务分离开. CompletionService 仅有一个实现类 Ex ...
- 简述synchronized和java.util.concurrent.locks.Lock的异同?
主要相同点:Lock能完成synchronized所实现的所有功能 . 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能.synchronized会自动释放锁,而Lock一 ...
- 异构无线网络之QOS简介
QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术. 在正常 ...
- 图解 Java 内存模型
图解 Java 内存模型 (图片来自于:http://www.cnblogs.com/zhangs1986/p/7903722.html)