其中作者:桂。

时间:2017-10-16  07:51:40

链接:http://www.cnblogs.com/xingshansi/p/7675380.html


前言

主要记录二维测向中,分别利用两个一维阵联合解算的思路。

一、AP算法思想

信号模型:

对应相关矩阵

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

高维正态分布表达式:

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

取对数:

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

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

再针对方差求偏导:

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

其中

而A+是Moore-Penrose逆:

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

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

等价于:

该算法基于统计参数估计的思路,不涉及SVD分解或者相关矩阵求逆,因此对于相干信号理论上仍然适用,从理论的结构来看,由于投影矩阵涉及求逆,且有迭代过程,因此耗费资源过大。

通常该算法可与其他算法结合使用,用于剔除杂峰,主要代码实现:

  1. function [phi_last,theta_last] = MuCalL_2D(x,srcNum,Array,resolution,lambda_c)
  2. %L
  3. sub1 = [1:6];
  4. sub2 = [1,7:11];
  5. J = fliplr(eye(length(sub1)));
  6. x1 = x(sub1,:);
  7. x2 = conj(J*x(sub2,:));
  8. [phi,theta,spec1] = MuCalL_647_1D(x1,srcNum,Array(sub1,:),resolution,lambda_c);
  9. [phi2,alpha,spec2] = MuCalL_647_1D(x2,srcNum,Array(sub1,:),resolution,lambda_c);
  10.  
  11. %
  12. [val1,phi_pos] = findpeaks(spec1,'minpeakdistance',3);
  13. [val,num_phi] = sort(val1,'descend');
  14. [val2,theta_pos] = findpeaks(spec2,'minpeakdistance',3);
  15. [val,num_theta] = sort(val2,'descend');
  16. phi_est = phi(phi_pos(num_phi(1:srcNum)));
  17. theta_est = alpha(theta_pos(num_theta(1:srcNum)));
  18. phi_est = phi_est;
  19. %筛选
  20. snap = size(x,2);
  21. R_all = x*x'/snap;
  22. para_all = perms([1:srcNum]);
  23. theta_all = kron(theta_est,ones(1,size(para_all,1)));
  24. theta_all([2,4]) = theta_all([4,2]);
  25. phi_all = repmat(phi_est,1,size(para_all,1));
  26. theta_all = asin(sin(theta_all/180*pi)./cos(phi_all/180*pi))/pi*180;
  27.  
  28. im = sqrt(-1);
  29. Dd = [];
  30. for kkk = 1:size(theta_all,2)/srcNum
  31. nshift = ((kkk-1)*srcNum+1):((kkk)*srcNum);
  32. theta_cache = theta_all(nshift)/180*pi;
  33. phi_cache = phi_all(nshift)/180*pi;
  34.  
  35. Az = [];
  36. for j = 1:srcNum
  37. r = [sin(phi_cache(j)) cos(phi_cache(j))*sin(theta_cache(j)) cos(phi_cache(j))*cos(theta_cache(j))];
  38. r_rep = repmat(r,size(x,1),1);
  39. dis = sum(r_rep.*Array,2);
  40. am = exp(-im*2*pi*dis/lambda_c);
  41. Az = [Az,am];
  42. end
  43.  
  44. Pb3 = Az*pinv(Az'*Az)*Az';
  45. Dd(kkk) = abs(trace(Pb3*R_all));
  46. end
  47.  
  48. [valDd,indexDd]=max(Dd);
  49. n_pos = ((indexDd-1)*srcNum+1):((indexDd)*srcNum);
  50. [phi_last,sort_pos] = sort(phi_all(n_pos),'ascend');
  51. theta_last = theta_all(n_pos);
  52. 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)|。

三、联合解算论文

联立解算的思路:

主要代码实现:

  1. Ax = A(sub1,:);
  2. Ay = A(sub2,:);
  3. %利用T矩阵解算
  4. y_sig = x2;
  5. x_sig = x1;
  6. Ryy = y_sig*y_sig'/snapshot;
  7. Rs_hat = pinv(Ay'*Ay)*Ay'*Ryy*pinv(Ay*Ay')*Ay;%eq.5
  8. Rxy = x_sig*y_sig'/snapshot;
  9. Ay_pieH = pinv(Ay*Ay')*Ay;
  10. Rs_pie = pinv(Ax'*Ax)*Ax'*Rxy*Ay_pieH;%eq.9
  11. %构造T矩阵解算
  12. perm = perms([1:srcNum]);
  13. J = zeros(1,size(perm,1));
  14. for i = 1:size(perm,1)
  15. T = zeros(srcNum);
  16. T(perm(i,:)+[0:srcNum-1]*srcNum) = 1;
  17. J(i) = sum(sum(abs(Rs_pie-T*Rs_hat).^2));
  18. end
  19. [minVal,minPos] = min(J);
  20. phi_est = phi_est(perm(minPos,:));
  21. theta_all = theta_est;
  22. %求解
  23. phi_last = phi_est;
  24. theta_last = asin(sin(theta_all/180*pi)./cos(phi_last/180*pi))/pi*180;

当个数不匹配的时候可参考(个人觉得直接拓展效果也可以,就是配对之前添加一个预处理):

空间谱专题13:联合解算DOA(ML/AP)的更多相关文章

  1. 空间谱专题02:波束形成(Beamforming)

    作者:桂. 时间:2017-08-22  10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...

  2. 空间谱专题10:MUSIC算法

    作者:桂. 时间:2017-09-19  19:41:40 链接:http://www.cnblogs.com/xingshansi/p/7553746.html 前言 MUSIC(Multiple ...

  3. 已知空间三个点,解算外接圆圆心坐标,C++编程实现

    struct PT3 { double x, y, z; }; int solveCenterPointOfCircle(std::vector<PT3> pt, double cente ...

  4. 【转】GPS基线解算模式

    GPS基线向量是利用2台或2台以上GPS接 收机所采集的同步观测数据形成的差分观测值,通过参数估计得方法所计算出的两两接收机间的三维坐标差.与常规地面测量中所测定的基线边长不同,基线向量是 既具有长度 ...

  5. 布料解算插件 Qualoth 重点参数分享

    前言 Qualoth是韩国FXGear公司推出的一款布料模拟插件,可以计算出很自然的衣褶以及动态效果,并且能应对大幅度动作的碰撞解算,可以和Houdini的Cloth Solver相媲美: 目前这款插 ...

  6. Gamit解算脚本

    这是一个解算单天的shell脚本,对于初学者很有帮助. 首先就是需要在项目(四个字符)建立rinex brdc igs 还有以年纪日命名的目录,然后提前准备好station.info和lfile.文件 ...

  7. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示

    原创文章,欢迎转载,转载请注明出处 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波形显示数据 2:添 ...

  8. libviso中的姿态解算【转载】

    这篇关于libviso的文章,本人已投稿在泡泡机器人微信公众号中,放到这里,作学习笔记用. libviso一直以来被称为在视觉里程计(VO)中的老牌开源算法.它通过corner,chessboard两 ...

  9. V-rep学习笔记:机器人逆运动学解算

    IK groups and IK elements VREP中使用IK groups和IK elements来进行正/逆运动学计算,一个IK group可以包含一个或者多个IK elements: I ...

随机推荐

  1. 083 HBase的完全分布式的搭建与部署,以及多master

    一:前提准备 1.设置时间同步 2.清空logs,datas 3.格式化集群 bin/hdfs namenode -format 4.重启集群 sbin/start-dfs.sh sbin/start ...

  2. 关于Jar包 和 war

    Jar包: 别人写好的java类打包,将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法,一般都会放在lib目录下 war 是web项目

  3. 浅谈RPC调用

    RPC英文全称remote procedure call 翻译成中文的意思就是远程过程调用.RPC的出现其实主要是为了解决分布式系统间的通信透明性的问题. 那什么是分布式系统的通信透明性问题?这个问题 ...

  4. POJ 3384 放地毯【半平面交】

    <题目链接> 题目大意: 给出一个凸多边形的房间,根据风水要求,把两个圆形地毯铺在房间里,不能折叠,不能切割,可以重叠.问最多能覆盖多大空间,输出两个地毯的圆心坐标.多组解输出其中一个,题 ...

  5. BZOJ.2588.Count on a tree(主席树 静态树上第k小)

    题目链接 /* 序列上的主席树 某点是利用前一个点的根建树 同理 树上的主席树 某个节点可以利用其父节点(is unique)的根建树 排名可以利用树上前缀和求得: 对于(u,v),w=LCA(u,v ...

  6. AngularJS中的$http缓存以及处理多个$http请求

    在AngularJS的实际项目中,经常需要处理多个$http请求,每个$http请求返回一个promise,我们可以把多个promise放到$q.all()方法接受的一个数组实参中去. ■ 处理多个$ ...

  7. Java中有哪些语法糖?

    不要你写汇编,Java句句是糖 不能同意上面的这句话,要说为什么,首先要定义下面要讲的“语法糖”. 语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是 ...

  8. 理解TCP之Keepalive

    理解HTTP之keep-alive 在前面一篇文章中讲了TCP的keepalive,这篇文章再讲讲HTTP层面keep-alive.两种keepalive在拼写上面就是不一样的,只是发音一样,于是乎大 ...

  9. 构建第一个 Spring Boot 工程

    Spring Boot概述 什么是Spring Boot 随着动态语言的流行,java的开发显得格外笨重,繁多的配置文件编写,低下的开发效率,复杂的部署流程以及第三方技术集成难度大. 在上述环境下Sp ...

  10. fetch使用的常见问题及其解决办法

    摘自: https://segmentfault.com/a/1190000008484070 fetch使用的常见问题及其解决办法 javascript wonyun 2月25日发布 |   0 收 ...