【学习笔记】【DOA子空间算法】4 ESPRIT 算法

这篇具有很好参考价值的文章主要介绍了【学习笔记】【DOA子空间算法】4 ESPRIT 算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4 ESPRIT 算法

4.1 算法原理

  ESPRIT 算法假设阵列传感器成对出现(即有一组平行的传感器),并且每对传感器之间有相同的位移 Δ \Delta Δ。这两组传感器的阵列接收向量分别表示如下:
x ( t ) = A s ( t ) + n x ( t ) y ( t ) = A Φ s ( t ) + n y ( t ) \begin{equation*} \begin{aligned} \mathbf{x}(t) &= \mathbf{A}\mathbf{s}(t) + \mathbf{n}_x(t) \\ \mathbf{y}(t) &= \mathbf{A}\Phi\mathbf{s}(t) + \mathbf{n}_y(t) \end{aligned} \end{equation*} x(t)y(t)=As(t)+nx(t)=AΦs(t)+ny(t)
其中 x ( t ) \mathbf{x}(t) x(t) y ( t ) \mathbf{y}(t) y(t) 为两个子阵列,该两个阵列的阵元数相同,且对应阵元之间的相位差相同; Φ \Phi Φ 表示由阵列 x ( t ) \mathbf{x}(t) x(t) 向阵列 y ( t ) \mathbf{y}(t) y(t) 转换的矩阵,以 ULA 为例,则有:
Φ = diag ⁡ { exp ⁡ ( j 2 π Δ sin ⁡ θ 1 / λ ) , ⋯   , exp ⁡ ( j 2 π Δ sin ⁡ θ K / λ ) } \begin{equation*} \Phi = \operatorname{diag}\{\exp(j 2\pi \Delta \sin \theta_1 / \lambda), \cdots, \exp(j 2\pi \Delta \sin \theta_K / \lambda) \} \end{equation*} Φ=diag{exp(j2πΔsinθ1/λ),,exp(j2πΔsinθK/λ)}
  由该对平行传感器组成的总阵列接收向量 z ( t ) ∈ C 2 M × 1 \mathbf{z}(t) \in \mathbb{C}^{2M\times 1} z(t)C2M×1 如下:
z ( t ) = [ x ( t ) y ( t ) ] = A ‾ s ( t ) + n z ( t ) = [ A A Φ ] s ( t ) + [ n x ( t ) n y ( t ) ] \begin{equation*} \begin{aligned} \mathbf{z}(t) &= \begin{bmatrix} \mathbf{x}(t) \\ \mathbf{y}(t) \end{bmatrix} = \overline{\mathbf{A}} \mathbf{s}(t) + \mathbf{n}_z(t) \\ &= \begin{bmatrix} \mathbf{A} \\ \mathbf{A}\Phi \end{bmatrix} \mathbf{s}(t) + \begin{bmatrix} \mathbf{n}_x(t) \\ \mathbf{n}_y(t) \end{bmatrix} \end{aligned} \end{equation*} z(t)=[x(t)y(t)]=As(t)+nz(t)=[AAΦ]s(t)+[nx(t)ny(t)]
且总阵列接收矩阵为 Z = [ z ( 1 ) , ⋯   , z ( T ) ] \mathbf{Z} = [\mathbf{z}(1), \cdots, \mathbf{z}(T)] Z=[z(1),,z(T)],利用 Z \mathbf{Z} Z 可以获得信号子空间 U S ∈ C 2 M × K \mathbf{U}_S \in \mathbb{C}^{2M\times K} USC2M×K
  信号子空间的一个特性就是与方向矢量矩阵所张成的空间是一致的,即 span ⁡ ( A ‾ ) = span ⁡ ( U S ) \operatorname{span}(\overline{\mathbf{A}}) = \operatorname{span}(\mathbf{U}_S) span(A)=span(US),因此必定存在一个唯一的非奇异满秩方阵 T \mathbf{T} T 使得下式成立:
U S = A ‾ T \begin{equation*} \mathbf{U}_S = \overline{\mathbf{A}} \mathbf{T} \end{equation*} US=AT
U S \mathbf{U}_S US 同样可以分成上下两部分:
U S = [ U X U Y ] = [ A T A Φ T ] \begin{equation*} \mathbf{U}_S = \begin{bmatrix} \mathbf{U}_X \\ \mathbf{U}_Y \end{bmatrix} = \begin{bmatrix} \mathbf{A} \mathbf{T} \\ \mathbf{A} \Phi \mathbf{T} \end{bmatrix} \end{equation*} US=[UXUY]=[ATAΦT]
由上式可以推导出:
U Y = U X T − 1 Φ T \begin{equation*} \mathbf{U}_Y = \mathbf{U}_X \mathbf{T}^{-1} \Phi \mathbf{T} \end{equation*} UY=UXT1ΦT
此时令 Ψ = T − 1 Φ T \Psi = \mathbf{T}^{-1} \Phi \mathbf{T} Ψ=T1ΦT 则有:
U Y = U X Ψ \begin{equation*} \mathbf{U}_Y = \mathbf{U}_X \Psi \end{equation*} UY=UXΨ
上式表明了: U Y \mathbf{U}_Y UY U X \mathbf{U}_X UX 所张成的空间是一致的,即 span ⁡ ( U X ) = span ⁡ ( U Y ) \operatorname{span}(\mathbf{U}_X) = \operatorname{span}(\mathbf{U}_Y) span(UX)=span(UY),且 Φ \Phi Φ Ψ \Psi Ψ 为相似矩阵, Φ \Phi Φ 的对角元素是 Ψ \Psi Ψ 的特征值。这意味着只需要求得 Ψ \Psi Ψ 然后进行特征值分解即可:
Ψ = U X † U Y \begin{equation*} \Psi = \mathbf{U}_X^{\dagger} \mathbf{U}_Y \end{equation*} Ψ=UXUY
其中 ( ⋅ ) † (\cdot)^{\dagger} () 表示伪逆。由前面的讨论可以看出,只要能估计出 Ψ \Psi Ψ,就能估计出 Φ \Phi Φ,同时可以得到到达角度。
  然而通常情况下只有一组传感器阵列 X = [ x ( 1 ) , ⋯   , x ( T ) ] \mathbf{X} = [\mathbf{x}(1), \cdots, \mathbf{x}(T)] X=[x(1),,x(T)],因此需要做的就是通过 X \mathbf{X} X 构造 Z = [ z ( 1 ) , ⋯   , z ( T ) ] \mathbf{Z} = [\mathbf{z}(1), \cdots, \mathbf{z}(T)] Z=[z(1),,z(T)],对于 ULA 而言,第一组元素可以取 M M M 个阵元中的 1 ∼ M − 1 1\sim M-1 1M1 个(前 M − 1 M-1 M1 个),第二组元素可以取 M M M 个阵元中的 2 ∼ M 2\sim M 2M 个(后 M − 1 M-1 M1 个),则此时可以认为 Δ = − d \Delta = -d Δ=d
  具体来说,我们不需要直接构造 Z \mathbf{Z} Z,因为利用 Z \mathbf{Z} Z 构造 U S ∈ C 2 M × K \mathbf{U}_S \in \mathbb{C}^{2M\times K} USC2M×K 计算量上较大;可以通过 X \mathbf{X} X 构造 U S \mathbf{U}_S US,然后分别取 U S \mathbf{U}_S US 的前 M − 1 M-1 M1 个和后 M − 1 M-1 M1 个组成 U X ∈ C ( M − 1 ) × K \mathbf{U}_X \in \mathbb{C}^{(M-1)\times K} UXC(M1)×K U Y ∈ C ( M − 1 ) × K \mathbf{U}_Y\in \mathbb{C}^{(M-1)\times K} UYC(M1)×K。需要注意的是这两种构造方法是等价操作。

4.2 算法步骤

  ESPRIT 算法步骤如下(输入为阵列接收矩阵 X \mathbf{X} X):文章来源地址https://www.toymoban.com/news/detail-784669.html

  1. 计算协方差矩阵 R = 1 T X X H \mathbf{R} = \frac{1}{T} \mathbf{X}\mathbf{X}^H R=T1XXH
  2. R \mathbf{R} R 进行特征值分解,并对特征值进行排序,然后取得 K K K 个较大特征值对应的特征向量来组成信号子空间 U S \mathbf{U}_S US
  3. 分别取 U S \mathbf{U}_S US 的前 M − 1 M-1 M1 行和后 M − 1 M-1 M1 行形成 U X \mathbf{U}_X UX U Y \mathbf{U}_Y UY
  4. 使用最小二乘法(或者完全最小二乘法)求解出 Ψ \Psi Ψ
    Ψ = U X † U Y \begin{equation*} \Psi = \mathbf{U}_X^{\dagger} \mathbf{U}_Y \end{equation*} Ψ=UXUY
  5. Ψ \Psi Ψ 进行特征值分解,得到 K K K 个特征值 { z i : i = 1 , ⋯   , K } \{z_i:i = 1, \cdots, K\} {zi:i=1,,K}
  6. 利用下式求得角度 { θ i : i = 1 , ⋯   , K } \{\theta_i: i = 1,\cdots, K\} {θi:i=1,,K}
    θ i = arcsin ⁡ ( − λ 2 π d arg ⁡ { z i } ) , i = 1 , ⋯   , K \begin{equation*} \theta_i = \arcsin\left(-\frac{\lambda}{2\pi d} \arg \{ z_i \} \right), i = 1, \cdots, K \end{equation*} θi=arcsin(2πdλarg{zi}),i=1,,K

4.3 代码实现

% esprit.m
clear;
clc;
close all;

%% 参数设定
c = 3e8;                                              % 光速
fc = 500e6;                                           % 载波频率
lambda = c/fc;                                        % 波长
d = lambda/2;                                         % 阵元间距,可设 2*d = lambda
twpi = 2.0*pi;                                        % 2pi
derad = pi/180;                                       % 角度转弧度
theta = [-20, 30]*derad;                              % 待估计角度
idx = 0:1:7; idx = idx';                              % 阵元位置索引

M = length(idx);                                      % 阵元数
K = length(theta);                                    % 信源数
T = 512;                                              % 快拍数
SNR = 10;                                             % 信噪比

%% 信号模型建立
S = randn(K, T) + 0j*randn(K,T);                      % 复信号矩阵S,维度为K*T
% A = exp(-1j*twpi*d*idx*sin(theta)/lambda);          % 方向矢量矩阵A,维度为M*K
A = exp(-1j*pi*idx*sin(theta));                       % 2d = lambda,直接忽略不写
X = A*S;                                              % 接收矩阵X,维度为M*T
X = awgn(X,SNR,'measured');                           % 添加噪声

%% ESPRIT 算法
% 计算协方差矩阵
R = X*X'/T;
% 特征值分解并取得信号子空间
[U,D] = eig(R);                                       % 特征值分解
[D,I] = sort(diag(D));                                % 将特征值排序从小到大
U = fliplr(U(:, I));                                  % 对应特征矢量排序,fliplr 之后,较大特征值对应的特征矢量在前面
Us = U(:, 1:K);                                       % 信号子空间
% 角度估计
Ux = Us(1:M-1, :);
Uy = Us(2:M, :);

% 方法一:最小二乘法
% Psi = pinv(Ux)*Uy;
% Psi = linsolve(Ux,Uy);                                % Ux\Uy

% 方法二:完全最小二乘法
Uxy = [Ux, Uy];
Uxy = Uxy'*Uxy;
[U,D] = eig(Uxy);
[D,I] = sort(diag(D));
F = fliplr(U(:,I));
F0 = F(1:K, K+1:K*2);                                 % F0是F的左上角部分
F1 = F(K+1:K*2, K+1:K*2);                             % F1是F的右下角部分
Psi = -F0/F1;

[T,Phi] = eig(Psi);
Theta = asin(-angle(diag(Phi))/pi)/derad;             % 估计角度
Theta = sort(Theta).';
disp('估计结果:');
disp(Theta);

4.4 参考内容

  1. Roy R, Kailath T. ESPRIT-estimation of signal parameters via rotational invariance techniques[J]. IEEE Transactions on acoustics, speech, and signal processing, 1989, 37(7): 984-995.
  2. 【知乎】ESPRIT算法的数理逻辑(DOA)(包含每一个细节)
  3. 【CSDN】DOA算法2:ESPRIT算法
  4. 【CSDN】【阵列信号处理】DOA估计算法

到了这里,关于【学习笔记】【DOA子空间算法】4 ESPRIT 算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 宽带信号处理实现DOA估计(ISM算法、MUSIC、MVDR、CBF)

    功率谱:                              功率谱:                              功率谱:                                    由快拍信号 计算协方差矩阵 ,其中 ,为快拍长度;对上述的空间谱公式遍历各个角度,计算对应角度的导向

    2024年04月23日
    浏览(39)
  • 阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

      阵列调向是阵列信号处理中一个非常基本的问题,通常阵列调向需要做的就是将主瓣对准某一特定位置。这一骚操作可以通过物理手段实现,例如旋转阵列朝向,或者通过电子方式实现。一个比较经典的例子是基站天线的下倾角调节,如图所示。   这种天线通过一个可调

    2024年02月11日
    浏览(41)
  • 【阵列信号处理】空间匹配滤波器、锥形/非锥形最佳波束成形器、样本矩阵反演 (SMI) 研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 空间匹配

    2024年02月14日
    浏览(44)
  • 现代信号处理——阵列信号处理(空域滤波原理及其算法)

    一、阵列信号处理简介 1、阵列信号处理的研究内容:检测、估计、滤波、成像等。 2、阵列信号处理的研究对象:空间传播波携带信号(空域滤波) 3、阵列信号处理方法:统计与自适应信号处理技术(如谱估计、最优与自适应、滤波) 4、阵列信号处理的目的:①滤波:增强

    2024年02月02日
    浏览(91)
  • 阵列信号处理_对比常规波束形成法(CBF)和Capon算法

    利用电磁波信号来获取目标或信源相对天线阵列的角度信息的方式,也称测向、波达方向估计(DOA)。主要应用于雷达、通信、电子对抗和侦察等领域。 发展 常规波束形成(CBF)。本质是时域傅里叶变换在空域直接应用,分辨力受限于瑞利限; Capon自适应波束形成(1969年)

    2024年02月03日
    浏览(47)
  • DOA估计 基于互质阵列的DOA估计

            传统阵列的配置方式是均匀线阵,该阵列要求相邻阵元的间距为半波长,易产生耦合效应,影响 DOA 估计精度。而稀疏阵列利用协方差矩阵构建差分共阵方式在虚拟域上生成虚拟阵列,并利用虚拟阵列实现波达方向角的估计。由于虚拟阵列的自由度不在局限于阵列

    2024年02月06日
    浏览(41)
  • 《阵列信号处理及MATLAB实现》阵列响应矩阵(均匀线阵、均匀圆阵、L型阵列、平面阵列和任意阵列)

    常用的阵列形式包括均匀线阵、均匀圆阵、L型阵列、平面阵列和任意阵列等。  假设接收信号满足窄带条件,即信号经过阵列长度所需的时间应远远小于信号的相干时间,信号包络在天线阵列传播时间内变化不大。为简化,假定信源和天线阵列是在同一平面内,并且入射到阵

    2024年01月23日
    浏览(82)
  • Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12     开放空间算法的配置主要在 valet_parking_config.pb.txt 中,分为4个部分: OPEN_SPACE_ROI_DECIDER 、 OPEN_SPACE_TRAJECTORY_PROVIDER 、 OPE

    2023年04月10日
    浏览(37)
  • EMC学习笔记(九)特殊信号的EMC处理(一)

    在PCB的EMC设计考虑中,我们主要的精力都是围绕一些为数不多的特殊信号的处理上。从信号与外界的关系来分,可分为强信号与小弱信号;从信号的种类来分,需要关注的有时钟、总线、I/O、复位、接口、电源、地等。 经验根据,二极管三极管之间跨界RC或者C吸收电路,推荐

    2024年02月10日
    浏览(40)
  • 数字信号处理教程学习笔记1-第2章时域中的离散信号和系统

    信号处理的任务示意方框图 模拟信号和数字信号分别是啥样的,有啥区别

    2024年01月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包