目录

  • 算法简述
  • 算法要得到什么
  • 如何得到矩阵 Φ \Phi Φ
  • ESPRIT算法的步骤
  • 参考文献(仅写文章的标题,以做记录)

注:本博文为本人阅读论文、文章后的原创笔记,未经授权不允许任何转载或商用行为,否则一经发现本人保留追责权利。有问题可留言联系,欢迎指摘批评,共同进步!!!

算法简述

ESPRIT算法全称为:Estimation of Signal Parameters using Rotational Invariance Techniques.与Root_MUSIC算法相同,也是一种参数估计技术。
ESPRIT算法基于一个事实:在旋转矢量中,一个元素上的信号来源于更早期元素信号的相移

算法要得到什么

在Root_MUSIC算法的叙述中,我们已经设定 z m = e j k d c o s ϕ m z_m=e^{jkd\ cos\phi_m} zm​=ejkd cosϕm​。并且根据式 R s = S A S H \mathbf{R_s}=\mathbf{SAS^H} Rs​=SASH可知,在矩阵 A \mathbf{A} A确定的情况下,相关矩阵就是依赖于矩阵 S \mathbf{S} S的,它是一个 ( N × M ) (N \times M) (N×M)大小的旋转矢量矩阵。因此矩阵 S \mathbf{S} S可以写为:
S = [ 1 1 ⋯ 1 z 1 z 2 ⋯ z M ⋮ ⋮ ⋱ ⋮ z 1 N − 2 z 2 N − 2 ⋯ z M N − 2 z 1 N − 1 z 2 N − 1 ⋯ z M N − 1 ] . \mathbf{S} = \begin{bmatrix} 1 & 1 & \cdots & 1\\ z_1 & z_2 & \cdots & z_M\\ \vdots & \vdots & \ddots & \vdots\\ z^{N-2}_1 & z^{N-2}_2 & \cdots & z^{N-2}_M\\ z^{N-1}_1 & z^{N-1}_2 & \cdots & z^{N-1}_M \end{bmatrix}. S=⎣ ⎡​1z1​⋮z1N−2​z1N−1​​1z2​⋮z2N−2​z2N−1​​⋯⋯⋱⋯⋯​1zM​⋮zMN−2​zMN−1​​⎦ ⎤​.
其中每一列代表一个信号的旋转矢量,例如第 i i i列代表 s ( ϕ i ) \mathbf{s(\phi_i)} s(ϕi​)。
然后,我们可以将矩阵 S \mathbf{S} S分成两个矩阵,分别包含矩阵 S \mathbf{S} S的前 ( N − 1 ) (N-1) (N−1)行和后 ( N − 1 ) (N-1) (N−1)行:
S 0 = [ 1 1 ⋯ 1 z 1 z 2 ⋯ z M ⋮ ⋮ ⋱ ⋮ z 1 N − 2 z 2 N − 2 ⋯ z M N − 2 ] S 1 = [ z 1 z 2 ⋯ z M ⋮ ⋮ ⋱ ⋮ z 1 N − 2 z 2 N − 2 ⋯ z M N − 2 z 1 N − 1 z 2 N − 1 ⋯ z M N − 1 ] \begin{aligned} \mathbf{S_0} &= \begin{bmatrix} 1 & 1 & \cdots & 1\\ z_1 & z_2 & \cdots & z_M\\ \vdots & \vdots & \ddots & \vdots\\ z^{N-2}_1 & z^{N-2}_2 & \cdots & z^{N-2}_M \end{bmatrix} \\ \mathbf{S_1} &= \begin{bmatrix} z_1 & z_2 & \cdots & z_M\\ \vdots & \vdots & \ddots & \vdots\\ z^{N-2}_1 & z^{N-2}_2 & \cdots & z^{N-2}_M\\ z^{N-1}_1 & z^{N-1}_2 & \cdots & z^{N-1}_M \end{bmatrix} \end{aligned} S0​S1​​=⎣ ⎡​1z1​⋮z1N−2​​1z2​⋮z2N−2​​⋯⋯⋱⋯​1zM​⋮zMN−2​​⎦ ⎤​=⎣ ⎡​z1​⋮z1N−2​z1N−1​​z2​⋮z2N−2​z2N−1​​⋯⋱⋯⋯​zM​⋮zMN−2​zMN−1​​⎦ ⎤​​
得到上面两个矩阵后,我们可以看到, S 0 \mathbf{S_0} S0​和 S 1 \mathbf{S_1} S1​是存在等式关系的。
定义一个对角阵 Φ \mathbf{\Phi} Φ:
Φ = [ z 1 0 ⋯ 0 0 z 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ z M ] \begin{aligned} \mathbf{\Phi}= \begin{bmatrix} z_1 & 0 & \cdots & 0\\ 0 & z_2 & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & z_M \end{bmatrix} \end{aligned} Φ=⎣ ⎡​z1​0⋮0​0z2​⋮0​⋯⋯⋱⋯​00⋮zM​​⎦ ⎤​​
那么矩阵 S 0 \mathbf{S_0} S0​和 S 1 \mathbf{S_1} S1​的关系为:
S 1 = S 0 Φ \mathbf{S_1} = \mathbf{S_0 \Phi} S1​=S0​Φ
如我们所见,只要我们能估计出矩阵 Φ \mathbf{\Phi} Φ,那么就能得到信号的DOA。

如何得到矩阵 Φ \Phi Φ

如果我们已知了 S 0 \mathbf{S_0} S0​和 S 1 \mathbf{S_1} S1​两个矩阵,那么很容易就能得到矩阵 Φ \Phi Φ。但是,显然, S 0 \mathbf{S_0} S0​和 S 1 \mathbf{S_1} S1​两个矩阵是未知的,因此需要寻找代替物来得到相同的结果。

ESPRIT算法有一个前提:承认一个事实,就是矩阵 S \mathbf{S} S中的旋转矢量涵盖了和矩阵 Q s \mathbf{Q_s} Qs​相同的子空间(信号子空间)。因此矩阵 Q s \mathbf{Q_s} Qs​与矩阵 S \mathbf{S} S一定存在变换关系,设定为 Q s = S C \mathbf{Q_s}=\mathbf{SC} Qs​=SC,其中矩阵 C \mathbf{C} C是一个可逆矩阵。

有上面的前提条件,那么矩阵 Q s \mathbf{Q_s} Qs​也能模仿矩阵 S \mathbf{S} S分解成两个矩阵 Q 0 \mathbf{Q_0} Q0​和 Q 1 \mathbf{Q_1} Q1​,分别包含矩阵 Q s \mathbf{Q_s} Qs​的前 ( N − 1 ) (N-1) (N−1)行和后 ( N − 1 ) (N-1) (N−1)行。
那么对应地,矩阵 Q 0 \mathbf{Q_0} Q0​、 Q 1 \mathbf{Q_1} Q1​分别与矩阵 S 0 \mathbf{S_0} S0​和 S 1 \mathbf{S_1} S1​存在转换关系:
Q 0 = S 0 C Q 1 = S 1 C = S 0 Φ C \begin{aligned} \mathbf{Q_0} &= \mathbf{S_0C}\\ \mathbf{Q_1} &= \mathbf{S_1C} = \mathbf{S_0 \Phi C} \end{aligned} Q0​Q1​​=S0​C=S1​C=S0​ΦC​
因此你可以找到矩阵 Q 0 \mathbf{Q_0} Q0​和 Q 1 \mathbf{Q_1} Q1​之间的关系为:
Q 1 C − 1 Φ − 1 C = S 0 C = Q 0 \mathbf{Q_1C^{-1}\Phi^{-1}C} = \mathbf{S_0C} = \mathbf{Q_0} Q1​C−1Φ−1C=S0​C=Q0​
由此,我们可以设定一个新的矩阵为 Ψ \mathbf{\Psi} Ψ,满足:
Ψ − 1 = C − 1 Φ − 1 C ⇒ Q 1 Ψ − 1 = Q 0 ⇒ Q 1 = Q 0 Ψ \begin{aligned} \mathbf{\Psi^{-1}} &= \mathbf{C^{-1}\Phi^{-1}C} \\ \Rightarrow \mathbf{Q_1 \Psi^{-1}} &= \mathbf{Q_0} \\ \Rightarrow \mathbf{Q_1} &= \mathbf{Q_0 \Psi} \end{aligned} Ψ−1⇒Q1​Ψ−1⇒Q1​​=C−1Φ−1C=Q0​=Q0​Ψ​
其中,矩阵 Ψ = C − 1 Φ C \mathbf{\Psi} = \mathbf{C^{-1} \Phi C} Ψ=C−1ΦC.由该等式可知矩阵 Ψ 与矩阵 Φ \mathbf{\Psi}与矩阵\mathbf{\Phi} Ψ与矩阵Φ相似,而矩阵 Φ \mathbf{\Phi} Φ又恰好是对角阵,根据相似矩阵的性质,矩阵 Φ \mathbf{\Phi} Φ对角线上的元素就是矩阵 Ψ \mathbf{\Psi} Ψ的特征值!!!

因此,我们只要得到矩阵 Ψ \mathbf{\Psi} Ψ,再求其特征值,就可以得到我们想要的矩阵 Φ \mathbf{\Phi} Φ,进而求出DOA.
注意!因为矩阵 Q 0 \mathbf{Q_0} Q0​和矩阵 Q 1 \mathbf{Q_1} Q1​我们都能得到,因此可以用矩阵的最小二乘法来拟合出矩阵 Ψ \mathbf{\Psi} Ψ,再进行之后的运算。

ESPRIT算法的步骤

  1. 用式 R = 1 K ∑ k = 1 K x k x k H \mathbf{R} = \frac{1}{K} \sum_{k=1}^{K}\mathbf{x_k}\mathbf{x^H_k} R=K1​∑k=1K​xk​xkH​来估计出相关矩阵 R \mathbf{R} R,再对其进行特征分解: R = Q Λ Q H \mathbf{R} = \mathbf{Q \Lambda Q^H} R=QΛQH.得到矩阵 Q \mathbf{Q} Q;
  2. 从矩阵 Q \mathbf{Q} Q中获得矩阵 Q s \mathbf{Q_s} Qs​(对应于矩阵 Q \mathbf{Q} Q的 M M M个最大的特征值),代表信号子空间;
  3. 分别取矩阵 Q s \mathbf{Q_s} Qs​的前 ( N − 1 ) (N-1) (N−1)行和后 ( N − 1 ) (N-1) (N−1)行,分别形成矩阵 Q 0 \mathbf{Q_0} Q0​、 Q 1 \mathbf{Q_1} Q1​;
  4. 使用最小二乘法(或完全最小二乘法)拟合出变换矩阵 Ψ \mathbf{\Psi} Ψ;
  5. 求出矩阵 Ψ \mathbf{\Psi} Ψ的特征值,这些特征值就是待估计的 z m z_m zm​;
  6. 使用下式获得DOA:

参考文献(仅写文章的标题,以做记录)

[1]. Direction of Arrival Estimation

DOA算法2:ESPRIT算法相关推荐

  1. 基于ESPRIT算法对DoA的估计

    对于ESPRIT算法利用了相邻子阵间存在一个固定间距,这个固定间距反映出各相邻子阵间的一个固定关系.用ESPRIT算法需要假设:1.阵列形式为线性均匀阵,阵元间距不大于信号波长的二分之一.2.存生两个 ...

  2. 波束赋形GOB算法matlab,智能天线波束赋形GOB算法与EBB算法比较

    目前比较常用的波束赋形算法有2种:GOB算法和EBB算法.GOB算法是一种固定波束扫描的方法,对于固定位置的用户,其波束指向是固定的,波束宽度也随天 线阵元数目而确定.当用户在小区中移动时,它通过测向 ...

  3. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  4. SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析

    图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...

  5. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  6. 标准K-means算法的缺陷、K-mean++初始化算法、初始化算法步骤、Kmeans++算法实现

    标准K-means算法的缺陷.K-mean++初始化算法.初始化算法步骤.Kmeans++算法实现 目录 标准K-means算法的缺陷.K-mean&

  7. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法

    Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 目录 Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 Apriori算法 FP-Grow ...

  8. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

  9. 「AI科技」机器学习算法之K-means算法原理及缺点改进思路

    https://www.toutiao.com/a6641916717624721933/ 2019-01-03 08:00:00 K-means算法是使用得最为广泛的一个算法,本文将介绍K-mean ...

最新文章

  1. 发表的原创文章还希望大家多提宝贵意见!
  2. react 实现数据双向绑定
  3. 【CyberSecurityLearning 41】Linux密码破解以及菜单加密
  4. 安装telnet_Flask干货:Memcached缓存系统——Memcached的安装
  5. java并发LockSupport
  6. python3+selenium入门12-警告框处理
  7. 一步一步学Silverlight 2系列(15):数据与通信之ASMX
  8. 在记事本上用java写一段代码,程序到底是如何跑起来的?
  9. java生成二维码技术实现
  10. 微信小程序 上滑加载和下拉刷新
  11. window安装ab压力测试
  12. 共识算法比较Tendermint的BFT与EOS的dPoS
  13. Swing入门级项目全程实录第7讲
  14. 上海大厂Android面试经历:史上最通俗计算机网络分层详解,通用流行框架大全
  15. Ubuntu 微信 linux版最新可用——UOS魔改版
  16. OpenCV入门——基本图像操作
  17. 3D可视化(互联网)
  18. Excel Vba无法连接 远程 Mysql数据库问题的解决方法
  19. 日志采样率_为什么要在生产中采样调试日志
  20. 沧州一中高考2021成绩查询,沧州一中2019高考喜报成绩、一本二本上线人数情况...

热门文章

  1. Hadoop的MR编程实现partition、sort和自定义outputformat
  2. 基于jsp+springboot的易卖网商城源码
  3. 回归模型的score得分为负_SPSS中 回归 B值为负数什么意思
  4. 移动互联市场将迎井喷 探寻全产业链投资机会 (转)
  5. 明确人生的目的和意义
  6. HTML5新标签语义及用法
  7. python堆栈跟踪_什么是python中的堆栈跟踪?
  8. C++ 内存中堆栈讲解
  9. nnl learning
  10. Mysql 无障碍轻松学习(二)数据库利器DataGrip 下载与无限期试用