root MUSIC 算法补充说明


  这篇笔记是上一篇关于 root MUSIC 笔记的补充。

多项式求根

  要理解 root MUSIC 算法,需要理解多项式求根的相关知识。给定多项式 P ( x ) P(x) P(x)
P ( x ) = a 0 + a 1 x + ⋯ + a n x n P(x) = a_0 + a_1 x + \cdots + a_n x^n P(x)=a0+a1x++anxn
容易看出 P ( x ) P(x) P(x) 中只有一个未知数 x x x,且未知数的最高次数为 n n n,因此称 P ( x ) P(x) P(x) 为一元 n n n 次多项式,同时系数 { a i ∈ C : i = 0 , ⋯   , n } \{a_i\in\mathbb{C}:i = 0,\cdots, n\} {aiC:i=0,,n}。而多项式求根就是求得一元 n n n 次方程式 P ( x ) = 0 P(x)=0 P(x)=0 的解,这个解被称作根或者零点。
  在进行后续的讨论前,还需要清楚,根据代数基本定理, n n n 次复系数多项式方程在复数域内有且只有 n n n 个根(这里的重根按重数计算)。

root MUSIC 算法原理

  root MUSIC 算法是 MUSIC 算法的一种多项式求根形式。回忆一下,传统 MUSIC 算法利用了噪声子空间矩阵 U n \mathbf{U}_n Un 和搜索方向矢量 a ( θ ) \mathbf{a}(\theta) a(θ) 来构造空间谱:
P ( θ ) = 1 a H ( θ ) U n U n H a ( θ ) a ( θ ) = [ 1 , e − j 2 π d sin ⁡ θ / λ , ⋯   , e − j 2 π ( M − 1 ) d sin ⁡ θ / λ ] T P(\theta) = \frac{1}{\mathbf{a}^H(\theta)\mathbf{U}_n\mathbf{U}^H_n\mathbf{a}(\theta)} \\ \mathbf{a}(\theta) = \left[1,e^{-\mathrm{j}2\pi d \sin \theta/\lambda},\cdots,e^{-\mathrm{j}2\pi(M-1) d \sin \theta/\lambda}\right]^T P(θ)=aH(θ)UnUnHa(θ)1a(θ)=[1,ej2πdsinθ/λ,,ej2π(M1)dsinθ/λ]T
{ θ = θ k : k = 1 , ⋯   , K } \{\theta = \theta_k:k = 1,\cdots,K\} {θ=θk:k=1,,K} P ( θ ) P(\theta) P(θ) 将产生峰值,换句话说此时 P − 1 ( θ ) = 0 P^{-1}(\theta)=0 P1(θ)=0
  在接下来的讨论中,我们令 P − 1 ( θ ) = a H ( θ ) G a ( θ ) P^{-1}(\theta) = \mathbf{a}^H(\theta)\mathbf{G}\mathbf{a}(\theta) P1(θ)=aH(θ)Ga(θ),此时我们可以知道,MUSIC 算法满足 G ≜ U n U n H \mathbf{G} \triangleq \mathbf{U}_n\mathbf{U}^H_n GUnUnH,而 Capon 算法满足 G ≜ R − 1 \mathbf{G} \triangleq \mathbf{R}^{-1} GR1。需要注意的是无论是 MUSIC 算法还是 Capon 算法, G \mathbf{G} G 均是 Hermitian 矩阵。
  令 ω = − 2 π d sin ⁡ θ / λ \omega = -2\pi d \sin\theta/\lambda ω=2πdsinθ/λ 以及 z = e j ω z = e^{\mathrm{j}\omega} z=ejω,我们将会得到:
a ( z ) = [ 1 , z , z 2 , ⋯   , z M − 1 ] T = a ( θ ) P − 1 ( z ) = a H ( z ) G a ( z ) = P − 1 ( θ ) \begin{aligned} \mathbf{a}(z) &= [1,z,z^{2},\cdots,z^{M-1}]^T = \mathbf{a}(\theta) \\ P^{-1}(z) &= \mathbf{a}^H(z)\mathbf{G}\mathbf{a}(z) = P^{-1}(\theta) \end{aligned} a(z)P1(z)=[1,z,z2,,zM1]T=a(θ)=aH(z)Ga(z)=P1(θ)
接下来我们展开 P − 1 ( z ) P^{-1}(z) P1(z)
P − 1 ( z ) = a H ( z ) G a ( z ) = [ 1 , z ∗ , ( z ∗ ) 2 , ⋯   , ( z ∗ ) M − 1 ] G [ 1 , z , z 2 , ⋯   , z M − 1 ] T = [ 1 , z − 1 , z − 2 , ⋯   , z − M + 1 ] G [ 1 , z , z 2 , ⋯   , z M − 1 ] T = ∑ m = 0 M − 1 ∑ n = 0 M − 1 z − m G [ m , n ] z n = ∑ m = 0 M − 1 ∑ n = 0 M − 1 z n − m G [ m , n ] = ∑ p = − M + 1 M − 1 a p z − p \begin{aligned} P^{-1}(z) &= \mathbf{a}^H(z)\mathbf{G}\mathbf{a}(z) \\ &= [1,z^{*},(z^{*})^2,\cdots,(z^*)^{M-1}] \mathbf{G} [1,z,z^{2},\cdots,z^{M-1}]^T \\ &= [1,z^{-1},z^{-2},\cdots,z^{-M+1}] \mathbf{G} [1,z,z^{2},\cdots,z^{M-1}]^T \\ &= \sum_{m = 0}^{M-1} \sum_{n=0}^{M-1} z^{-m} \mathbf{G}_{[m,n]} z^{n} \\ &= \sum_{m = 0}^{M-1} \sum_{n=0}^{M-1} z^{n-m} \mathbf{G}_{[m,n]} \\ &=\sum_{p=-M+1}^{M-1}a_p z^{-p} \end{aligned} P1(z)=aH(z)Ga(z)=[1,z,(z)2,,(z)M1]G[1,z,z2,,zM1]T=[1,z1,z2,,zM+1]G[1,z,z2,,zM1]T=m=0M1n=0M1zmG[m,n]zn=m=0M1n=0M1znmG[m,n]=p=M+1M1apzp
其中 G [ m , n ] \mathbf{G}_{[m,n]} G[m,n] 表示矩阵 G \mathbf{G} G 的第 m m m 行第 n n n 列元素, a p a_p ap 表示矩阵 G \mathbf{G} G 的第 p p p 条对角线的求和:
a p ≜ ∑ m − n = p G [ m , n ] a_p \triangleq \sum_{m-n = p} \mathbf{G}_{[m,n]} apmn=pG[m,n]
  到这里我们已经可以看出,传统 MUSIC 算法对 P ( θ ) P(\theta) P(θ) 求峰值,其实等价于对 P − 1 ( z ) P^{-1}(z) P1(z) 求根,为了方便大家的理解,我们令 M = 3 M=3 M=3,此时会得到一条简单的式子:
P − 1 ( z ) = a 2 z − 2 + a 1 z − 1 + a 0 z 0 + a − 1 z 1 + a − 2 z 2 P^{-1}(z) = a_{2}z^{-2}+a_{1}z^{-1} + a_{0}z^{0} + a_{-1}z^{1} + a_{-2}z^{2} P1(z)=a2z2+a1z1+a0z0+a1z1+a2z2
可以看出,其实 P − 1 ( θ ) P^{-1}(\theta) P1(θ) 是一个 2 M − 1 = 5 2M-1 = 5 2M1=5 项的多项式,但还存在一个问题, P − 1 ( θ ) P^{-1}(\theta) P1(θ) 中存在负整数次数,我们令 P − 1 ( z ) z M − 1 P^{-1}(z)z^{M-1} P1(z)zM1 将负整数次数消除即可,操作前后,求根的结果是一样的,因此我们可以说 P − 1 ( z ) z M − 1 P^{-1}(z)z^{M-1} P1(z)zM1 是一个一元的 2 M − 1 2M-1 2M1 项的 2 M − 2 2M-2 2M2 次的多项式。更进一步地,我们可以说求解 P − 1 ( z ) z M − 1 = 0 P^{-1}(z)z^{M-1}=0 P1(z)zM1=0 将会得到 2 M − 2 2M-2 2M2 个根,从已知条件我们知道,其中 K K K 个根必定是 e j ω k e^{\mathrm{j}\omega_k} ejωk e j ω k e^{\mathrm{j}\omega_k} ejωk 的幅值是 1 1 1,因此该 K K K 点在单位圆上),在这里 ω k = − 2 π d sin ⁡ θ k / λ \omega_k = -2\pi d \sin\theta_k/\lambda ωk=2πdsinθk/λ
  总结一下,MUSIC 算法的谱峰搜索操作等价于对方程式 P − 1 ( z ) z M − 1 = 0 P^{-1}(z)z^{M-1}=0 P1(z)zM1=0 求根,root MUSIC 算法所做的,就是利用 G \mathbf{G} G 的多条对角线求和得到对应的多项式系数,从而求解得 2 M − 2 2M-2 2M2 个根,接着筛选得到合适的 K K K 个根 z k z_k zk,再通过 z k z_k zk 推导得到原先的 θ k \theta_k θk

如何从 2 M − 2 2M-2 2M2 个根中确定 K K K 个根

  那么如何从 2 M − 2 2M-2 2M2 个根中确定 K K K 个根?这个问题大部分的论文和博客都一笔带过了。从前面的讨论可知,多项式系数是由 G \mathbf{G} G 的多条对角线求和得到,同时 G \mathbf{G} G 是 Hermitian 矩阵,因此以下式子可以得到:
a p = a − p ∗ a_p = a_{-p}^* ap=ap
这个等式意味着在 2 M − 1 2M-1 2M1 个系数 { a p : p = − M + 1 , ⋯   , M − 1 } \{a_p:p=-M+1,\cdots,M-1\} {ap:p=M+1,,M1} 中,前 M − 1 M-1 M1 个和后 M − 1 M-1 M1 个系数是前后共轭对称,同时正中间的系数是实数。
  我们继续假设 M = 3 M=3 M=3 P − 1 ( z ) = 0 P^{-1}(z)=0 P1(z)=0 可以进一步表示如下:
P − 1 ( z ) = a 2 z − 2 + a 1 z − 1 + a 0 + a 1 ∗ z 1 + a 2 ∗ z 2 = 0 P^{-1}(z) = a_{2}z^{-2}+a_{1}z^{-1} + a_{0} + a_{1}^*z^{1} + a_{2}^*z^{2}=0 P1(z)=a2z2+a1z1+a0+a1z1+a2z2=0
  如此我们分析 P − 1 ( 1 / z ∗ ) P^{-1}(1/z^*) P1(1/z),可得:
P − 1 ( 1 / z ∗ ) = a 2 ( z ∗ ) 2 + a 1 ( z ∗ ) 1 + a 0 + a 1 ∗ ( z ∗ ) − 1 + a 2 ∗ ( z ∗ ) − 2 = [ P − 1 ( z ) ] ∗ = P − 1 ( z ) = 0 \begin{aligned} P^{-1}(1/z^*) &= a_{2}(z^*)^{2}+a_{1}(z^*)^{1} + a_{0} + a_{1}^*(z^*)^{-1} + a_{2}^*(z^*)^{-2} \\ &=[P^{-1}(z)]^* = P^{-1}(z) = 0 \end{aligned} P1(1/z)=a2(z)2+a1(z)1+a0+a1(z)1+a2(z)2=[P1(z)]=P1(z)=0
这意味着假若 z 1 = ρ e j φ z_1 = \rho e^{\mathrm{j}\varphi} z1=ρejφ P − 1 ( z ) = 0 P^{-1}(z)=0 P1(z)=0 的根,那么 z 2 = 1 / z 1 ∗ = 1 / ρ e j φ z_2 = 1/z_1^* = 1/\rho e^{\mathrm{j}\varphi} z2=1/z1=1/ρejφ 同样是 P − 1 ( z ) = 0 P^{-1}(z)=0 P1(z)=0 的根。观察 z 1 z_1 z1 z 2 z_2 z2 在复平面的位置,将会观察得到 z 1 z_1 z1 z 2 z_2 z2 是关于单位圆有一个类似对称的关系;简单来说,这个现象是因为 z 1 z_1 z1 z 2 z_2 z2 是幅值互为倒数而相位相等的关系,因此它们就像是关于 e j φ e^{\mathrm{j}\varphi} ejφ 对称一样( e j φ e^{\mathrm{j}\varphi} ejφ 的幅值是 1 1 1,因此该点在单位圆上)。
  综上所述,通过 P − 1 ( z ) P^{-1}(z) P1(z) 得到 2 M − 2 2M-2 2M2 个根,它们是关于单位圆对称的 M − 1 M-1 M1 对根,因此一定有 K K K 对根在单位圆附近,所以我们只需要从 2 M − 2 2M-2 2M2 个根中找 M − 1 M-1 M1 个处于单位圆内的根(找 M − 1 M-1 M1 个处于单位圆外的根同样是可以的,因为角度信息其实只存在于 z k z_k zk 的相位中,与幅值无关),最后确定最接近单位圆的 K K K 个根就可以确定 z k z_k zk

从复数域上观察 2 M − 2 2M-2 2M2 个根的分布

  我们从实验中进一步观察 2 M − 2 2M-2 2M2 个根的分布,matlab 代码实现如下:

clear; close all; clc;

%% Parameters
lambda     = 3e8/1e9;         % wavelength, c/f
d          = lambda/4;        % distance between sensors
theta      = [10,20];         % true DoAs, 1 times K vector
theta      = sort(theta);
M          = 16;              % # of sensors
T          = 500;             % # of snapshots
K          = length(theta);   % # of signals
noise_flag = 1;
SNR        = 0;               % signal-to-noise ratio

%% Signals
S = exp(1j*2*pi*randn(K,T)); % signal matrix
A = exp(-1j*(0:M-1)'*2*pi*d/lambda*sind(theta)); % steering vector matrix
N = noise_flag.*sqrt(10.^(-SNR/10))*(1/sqrt(2))*(randn(M,T)+1j*randn(M,T)); % noise matrix
X = A*S+N; % received matrix
R = X*X'/T; % covariance matrix

%% DoA:root-MUSIC
[U,~] = svd(R); % SVD
Un = U(:, K+1:end); % noise subspace matrix
Gn = Un*Un';
coe = arrayfun(@(i) sum(diag(Gn, M-i)),(1:2*M-1));
r = roots(coe); % 2M-2 roots

%% plot
dis = sort(abs(r)-1);
disp(dis);
cnt = sum(dis<0);
disp(cnt); % 记录单位圆内的根个数

% 提取实部和虚部
realPart = real(r);
imaginaryPart = imag(r);

% 绘制复平面
figure;
scatter(realPart, imaginaryPart, 'filled');
hold on;

% 绘制单位圆
theta = linspace(0, 2*pi, 100);
unitCircleReal = cos(theta);
unitCircleImag = sin(theta);
plot(unitCircleReal, unitCircleImag, 'r--', 'LineWidth', 1);

xlabel('实部');
ylabel('虚部');
title('复平面上的复数点和单位圆');
grid on;
box on;

%% find K roots
r = r(abs(r)<1);
[~, idx] = sort(abs(abs(r)-1));
z = angle(r(idx));
theta = sort(asin(-z(1:K)/2/pi/d*lambda)/pi*180).';

  设 M = 16 M=16 M=16 K = 2 K=2 K=2,根的分布如下图所示,可以看到 2 M − 2 = 30 2M-2 = 30 2M2=30 个根,其中 2 K = 4 2K=4 2K=4 个接近单位圆的根对应着估计角度:
复平面上的复数点和单位圆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试题-01

1、JDK 和 JRE 和 JVM 分别是什么&#xff0c;有什么区别&#xff1f; JDK&#xff08;Java Development Kit&#xff0c;Java 软件开发工具包&#xff09; JDK&#xff08;Java Development Kit&#xff09;&#xff1a;JDK 是 Java 开发⼯具包&#xff0c;包含了编写、编译…

社区居家养老新选择,全视通智慧方案让长者生活更安心

随着人口老龄化趋势加剧&#xff0c;养老问题已经成为社会各界关注的焦点。我国政府积极采取相关措施&#xff0c;加速推动养老服务业的健康发展。2023年5月&#xff0c;《城市居家适老化改造指导手册》发布&#xff0c;针对城市老年人居家适老化改造需求&#xff0c;提出了47项…

Linux线程(1)--线程的概念 | 线程控制

目录 前置知识 线程的概念 Linux中对线程的理解 重新定义进程与线程 重谈地址空间 线程的优缺点 线程的优点 线程的缺点 线程异常 线程的用途 Linux线程 VS 进程 线程控制 创建线程 线程等待 线程终止 线程ID的深入理解 前置知识 我们知道一个进程有属于自己的P…

python学习24

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

macOS开启HiDPI外接2K显示器(解决字体发虚问题)

1.前言&#xff1a; 购置了一台2K显示器&#xff0c;但通过HDMI直接连接时的显示效果让人难以接受&#xff0c;因此我们需要启用苹果系统的HiDPI模式&#xff0c;以实现更完美的显示效果。 那么&#xff0c;为什么要启用HiDPI模式呢&#xff1f;2K显示器的分辨率为2560*1440&…

数学建模【线性规划】

一、线性规划简介 线性规划通俗讲就是“有限的资源中获取最大的收益”&#xff08;优化类问题&#xff09;。而且所有的变量关系式都是线性的&#xff0c;不存在x、指数函数、对数函数、反比例函数、三角函数等。此模型要优化的就是在一组线性约束条件下&#xff0c;求线性目标…

7.1 Qt 中输入行与按钮

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 参考&#xff1a; 前言&#xff1a; line edit 与pushbotton的一点联动 当输入行有内容时&#xff0c;按钮才能使用&#xff0c;并能读出输入行的内容 技能&#xff1a; pushButton->setEnabled(false) 按钮不…

17.3.2.9 像素处理与内存处理之比较

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 通过第17.3.2.1节到第17.3.2.8节&#xff0c;相信读者对通过锁定内存来处理图像有了一定认识。与第17.3.1节相比较&#xff0c;可以…

【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树

【递归】【后续遍历】Leetcode 101 对称二叉树 解法一&#xff1a; 递归&#xff1a;后序遍历 左右中解法二&#xff1a; 迭代法&#xff0c;用了单端队列 ---------------&#x1f388;&#x1f388;对称二叉树 题目链接&#x1f388;&#x1f388;------------------- 解法一…

项目开发日志(登录界面):2. LoginTitle组件

LoginTitle组件 样式 说明 属性 属性名含义类型是否必填默认值welcomeTitle欢迎标语String是无mainTitle标题String是无 样式 mainColor -> 主题颜色 代码 <template><div class"logintitle-container"><p class"subtitle">{{ welc…

模拟算法.

1.什么是模拟 在信息奥赛中,有一类问题是模拟一个游戏的对弈过程或者模拟一项任务的操作过程.比如乒乓球在比赛中模拟统计记分最终判断输赢的过程等等,这些问题通常很难通过建立数学模型用特定的算法来解决因为它没有一种固定的解法,需要深刻理解出题者对过程的解释一般只能采…

备战蓝桥杯---图论之建图基础

话不多说&#xff0c;直接看题&#xff1a; 首先&#xff0c;这个不是按照字典序的顺序&#xff0c;而是以只要1先做&#xff0c;在满足后让2先做。。。。 就是让数字小的放前面做拓扑排序。 我们可以先做1&#xff0c;看看它的前驱。 举个例子&#xff1a; 我们肯定要把1放…

⭐北邮复试刷题429. N 叉树的层序遍历(按层入队出队BFS)

429. N 叉树的层序遍历 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1&#xff1a;输入&a…

VMware Workstation创建虚拟机

一、VMware Workstation下载安装 1、安装教程 VMware Workstation下载安装&#xff08;含密钥&#xff09; 二、VMware Workstation 创建虚拟机 1、新建虚拟机&#xff0c;点击“创建新的虚拟机” 2、选择自定义&#xff08;高级&#xff09;&#xff0c;点击“下一步” 3…

docker (六)-进阶篇-数据持久化最佳实践MySQL部署

容器的数据挂载通常指的是将宿主机&#xff08;虚拟机或物理机&#xff09;上的目录或文件挂载到容器内部 MySQL单节点安装 详情参考docker官网文档 1 创建对应的数据目录、日志目录、配置文件目录(参考二进制安装&#xff0c;需自己建立数据存储目录) mkdir -p /data/mysq…

Ps:污点修复画笔工具

污点修复画笔工具 Spot Healing Brush Tool专门用于快速清除图像中的小瑕疵、污点、尘埃或其他不想要的小元素。 它通过分析被修复区域周围的内容&#xff0c;无需手动取样&#xff0c;自动选择最佳的修复区域来覆盖和融合这些不完美之处&#xff0c;从而实现无痕修复的效果。 …

使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

项目地址&#xff1a;使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com) 背景介绍 本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型&#xff0c;抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告&#xff0c;目标是获取受理…

解锁Spring Boot中的设计模式—02.解释器模式:探索【解释器模式】的奥秘与应用实践!

解释器模式 1.简介 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于定义语言的文法&#xff0c;并且解释语言中的表达式。在Java中&#xff0c;解释器模式可以用于构建解释器以解析特定的语言或表达式&#xff0c;如数学表达式、…

OpenAI发布Sora模型,可根据文字生成逼真AI视频

早在2022年11月30日&#xff0c;OpenAI第一次发布人工智能聊天机器人ChatGPT&#xff0c;随后在全世界掀起了人工智能狂潮&#xff0c;颠覆了一个又一个行业。在过去的一年多的时间里&#xff0c;chatGPT的强大功能改变了越来越多人的工作和生活方式&#xff0c;成为了世界上用…

Open CASCADE学习|Geom_BSplineSurface转TopoDS_Face

B样条曲面&#xff08;B-Spline Surface&#xff09;是一种数学上用于描述三维形状的工具&#xff0c;它是B样条曲线在二维空间上的扩展。B样条曲面在计算机图形学、计算机辅助设计&#xff08;CAD&#xff09;、动画和许多其他领域都有广泛的应用。 B样条曲面由一组控制点和一…