1 引言

MUSIC算法本质上是对信号进行“正交分解”的过程。一般地,MUSIC算法用于DOA估计,因此本文首先阐述在这种应用场景下对MUSIC算法的相关理解;接着,分析网络上一些仿真代码的不合理性;最后,给出MUSIC在参数估计领域的其他应用。

2 基本算法流程(一维)与代码(搜索版本,非快速运算)

假设线阵有MMM个阵元,某时刻ttt各个阵元接收到的复信号组成一个“快拍”,记为y(t)∈CM\boldsymbol{y}(t) \in \mathbb{C}^My(t)∈CM,则NNN个快拍的接收信号可以表示为Y∈CM×N\boldsymbol{Y} \in \mathbb{C}^{M \times N}Y∈CM×N,且Y=[y(1fs),⋯,y(Nfs)]\boldsymbol{Y}=\left[ \boldsymbol{y}(\frac{1}{f_s}), \cdots, \boldsymbol{y}(\frac{N}{f_s})\right]Y=[y(fs​1​),⋯,y(fs​N​)]。其中,fsf_sfs​为A/D的采样率。
MUSIC算法可以简单地划分为以下三个步骤:
a ) 估计快拍自相关,进而分析信号的“空间相关性”(一般用“平均值”近似“均值”):
R=E[yyH]≈R^=YYHN\boldsymbol{R} = E\left[ \boldsymbol{y}\boldsymbol{y}^H \right] \approx \boldsymbol{\hat{R}} = \frac{\boldsymbol{Y}\boldsymbol{Y}^H}{N}R=E[yyH]≈R^=NYYH​
b ) 自相关矩阵的特征值分解:
R^U=UΛΛ=diag[λ1,⋯,λM]U=[u1,⋯,uM]\begin{aligned} \boldsymbol{\hat{R}} \boldsymbol{U} &= \boldsymbol{U} \boldsymbol{\Lambda} \\ \boldsymbol{\Lambda} &= \text{diag} \left[ \lambda_1, \cdots, \lambda_M \right] \\ \boldsymbol{U} &= \left[ \boldsymbol{u}_1,\cdots,\boldsymbol{u}_M \right] \end{aligned} R^UΛU​=UΛ=diag[λ1​,⋯,λM​]=[u1​,⋯,uM​]​
其中,λi\lambda_iλi​为特征值,ui\boldsymbol{u}_iui​为与之对应的特征向量。假设存在KKK个“时间不相关”且“空间不相关”的信号,则提取M−KM-KM−K个小特征值对应的特征向量,组成噪声子空间Un\boldsymbol{U}_nUn​。
c ) 搜索:
生成理想的信号快拍a(θ)∈CM\boldsymbol{a}(\theta) \in \mathbb{C}^Ma(θ)∈CM, 则MUSIC输出可以表示为:
PMUSIC(θ)=1aH(θ)UnUnHa(θ)P_{MUSIC}(\theta) = \frac{1}{\boldsymbol{a}^H(\theta) \boldsymbol{U}_n \boldsymbol{U}^H_n \boldsymbol{a}(\theta)} PMUSIC​(θ)=aH(θ)Un​UnH​a(θ)1​

代码,其中A=[a(θ1),⋯,a(θL)]\boldsymbol{A} = \left[ \boldsymbol{a}(\theta_1) ,\cdots, \boldsymbol{a}(\theta_L)\right]A=[a(θ1​),⋯,a(θL​)]:

function Pmusic = MUSIC(Y, K, A)
% size(Y) = [M, N]
N = size(Y, 2);% step1:
R = (Y * Y') / N;% step2:
[U, D] = eig(R);
[~, idx] = sort(diag(D), 'descend');
U = U(:,idx);
Un = U(:,K+1:end);% step3:
Pmusic = zeros(size(A, 2));
for ii = 1:size(A, 2)a = A(:,ii);Pmusic(ii) = 1 / ( a' * (Un * Un') * a);
end
end

3 空间存在正交分量且时间存在正交分量的信号才能超分辨!!!

注:存在正交分量指两个向量在向量空间中指向的方向存在正交分量,也即这两个向量组成的矩阵是列满秩的。
截至发文时,MUSIC相关文章中最热的文章为《较为详细的MUSIC算法原理及MATLAB实现》 。在该文章中,存在一处仿真BUG,即强制设定频率相同的信号在时间轴上是正交的,具体涉及到的代码为:

A=exp(-1i*2*pi*d.'*sin(theta*derad));  %方向矢量
S=randn(M,K);             %信源信号,入射信号
X=A*S;                    %构造接收信号

上述代码中,从方向矢量AAA可以看出k=2πλ=2πk=\frac{2\pi}{\lambda}=2\pik=λ2π​=2π,则信号波长λ=1\lambda=1λ=1,频率f=cλ=3×108f=\frac{c}{\lambda}=3\times10^8f=λc​=3×108。空间轴上,由于同频信号入射角度不同,则不同方向的信号存在“正交成分”。而在时间轴上,这些同频信号应该是“相同”的,即ej2πfte^{j2\pi ft}ej2πft。程序中其强制设置为高斯分布的随机值,使得在时间轴上这些信号存在正交成分,才能实现超分辨。因此,我们将重写一段程序,给出仿真结果,从而验证网上仿真结果的不合理性:
a ) 当S=randn(M,K)S=\text{randn}(M,K)S=randn(M,K)时(仿真BUG

b )当S=ej2πf(0:N−1)/fsS=e^{j2\pi f(0:N-1)/fs}S=ej2πf(0:N−1)/fs时(实际情况

4 结论及原因分析

从上述结果中可知,MUSIC算法对信号在时间维度上的相关性也有要求。在《Music算法详解》 中,也提到了这种现象,产生该现象的原因如下:
在求解自相关矩阵的时候,我们使用时间平均近似集总平均,即认为
E[yyH]≈YYHNE\left[ \boldsymbol{y}\boldsymbol{y}^H \right] \approx \frac{\boldsymbol{Y}\boldsymbol{Y}^H}{N}E[yyH]≈NYYH​
但由于同频信号在时间维度是完全相同的,因而其在时间维度不能视为“各态历经的平稳随机过程”,而只有各态历经约束情况下,我们才能够认为时间平均能够近似集总平均,这就是MUSIC算法的问题所在。

5 主程序代码

clearvars;
close all;
clc;
%%
M = 16;
N = 200;
fs = 20e3;
f = 10 * fs / N;
lambda = 3e8/f;
search_Azimuth = -90:1:90;
d = 0.5*lambda;
snr = 20;
source_doa = [0,2,-10];
K = length(source_doa);
%%
Xm = d*(0:M-1).';
lambda = 3e8 / f;                      A = zeros(M, K);
for q = 1:KA(:,q) = exp(-1j*Xm*2*pi*sin(source_doa(q)*pi/180)/lambda);
end% MK and KN -> MN
noise = (1/sqrt(2)*sqrt(10.^(-snr/10)))*(randn(M,N)+ 1j*randn(M,N));
% s = 1/sqrt(2)*(randn(K, N) + 1j*randn(K,N));    % 仿真bug
s = repmat(exp(1j*2*pi*f*(0:N-1)/fs), K, 1);    % 实际情况
Y = A*s + noise;        % received dataAx = zeros(M, length(search_Azimuth));
for q = 1:length(search_Azimuth)Ax(:,q) = exp(-1j*Xm*2*pi*sin(search_Azimuth(q)*pi/180)/lambda);
endPmusic = MUSIC(Y, K, Ax);figure;
plot(search_Azimuth, db(Pmusic), 'LineWidth', 1);
grid on; axis tight;
xlabel('$\theta$(degree)','Interpreter','latex');

多信号分类算法(MUSIC)的理解与应用相关推荐

  1. 重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性

    重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性摘要:我们评估了对抗性Logit Pairing的稳健性,这是最近针对广告范例提出的防御措施. 我们发现,使用Adversarial Lo ...

  2. [react] 说说你对React的reconciliation(一致化算法)的理解

    [react] 说说你对React的reconciliation(一致化算法)的理解 就是启发式Diff算法 ,时间复杂度从N的三次方下降到N ,通过博客途径了解到实现的策略是 tree diff , ...

  3. 协同过滤算法的简单理解《推荐系统实践》

    协同过滤算法的简单理解 本文主要是讲解一下<推荐系统实践>中UserCF和ItemCF这两种基于领域的推荐算法,写出自己的理解. UserCF(基于用户的协同过滤算法) 这种推荐算法的出发 ...

  4. Mean-shift算法的直观理解

    Mean-shift算法的直观理解 0 前言 暑假的时候参加移动计算竞赛打了下酱油,接触到了Mean-shift算法,用于做目标跟踪.在那段时间也在网上查阅了不少关于这个算法的资料,可是总感觉它们都比 ...

  5. 工作6年,谈谈我对“算法岗”的理解

    文 | Severus 编 | 小轶 写在前面:本文完全基于我个人的工作经验,没有经过任何形式的行业调研,所以我的理解也有相当浓厚的个人印记,可以认作一家之言.如果能对读者朋友们起到任何帮助,都是我的 ...

  6. 国密SM2算法的只求理解不求甚解 (4/5)SM2算法加解密协议

    国密SM2算法的只求理解不求甚解 (1/5)前置数学知识:模运算 国密SM2算法的只求理解不求甚解 (2/5)前置数学知识:平面几何 国密SM2算法的只求理解不求甚解 (3/5)SM2算法数学模型 国 ...

  7. Hamiltonian Monte Carlo抽样算法的初步理解

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

  8. 论文研读笔记_基于优化的SVM心音信号分类算法的研究

    论文研究_基于优化的SVM心音信号分类算法的研究 先存起来,持续更新 摘要 心音信号采集易混入杂音,影响判断: 经验式模态分解算法分析特征分布:心音信号集中于低频.噪音集中于高频: 利用切比雪夫滤波器 ...

  9. Interview之AI:人工智能领域岗位求职面试—人工智能算法工程师知识框架及课程大纲(AI基础之数学基础/数据结构与算法/编程学习基础、ML算法简介、DL算法简介)来理解技术交互流程

    Interview之AI:人工智能领域岗位求职面试-人工智能算法工程师知识框架及课程大纲(AI基础之数学基础/数据结构与算法/编程学习基础.ML算法简介.DL算法简介)来理解技术交互流程 目录 一.A ...

最新文章

  1. 微信服务号、公众号、企业号注册
  2. Matlab并行编程函数cellfun arrayfun
  3. hdu 3078(LCA+排序)
  4. 大剑无锋之Hadoop的三个作业调度器【面试推荐】
  5. 开发中的问题——环境相关
  6. UE4从4.15移植到4.16
  7. 从入门到入土:Python requests代理 proxy配置 HTTP
  8. 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)
  9. Flexsim——初学AGV必看的知识点(如何解决AGV锁死的情况)
  10. python整人代码大全_整人代码大全
  11. 金蝶K3系统中间层群集部署方案
  12. 1386 安排电影院座位(字典、位运算)
  13. 一张思维导图完成淘宝精细化运营
  14. RiskCloud-双控平台(有效分享LOPA软件篇)
  15. 使用swiper插件时不会自动轮播
  16. 浅淡数据结构时间复杂度和空间复杂度
  17. 聚类之高斯混合模型(Gaussian Mixture Model)
  18. html复选框代码隐藏勾勾,[译] 为什么 HTML 中复选框样式难写 — 本文给你答案
  19. 如何查看当前Word是即点即用版本还是安装版本
  20. 打造数字孪生社区,极视角助力成都市成华区杉板桥社区智能感知体系建设

热门文章

  1. 【趣解Bug】解决‘WebDriver‘ object has no attribute ‘find_element_by_xpath‘问题
  2. 微信小程序设置全局请求URL 封装wx.request请求
  3. java web银行项目
  4. 推荐: 一个免费开源大型的商城系统_B2B2C+O2O一体化商城系统_OctShop免费开源大型商城系统
  5. truetype技术和矢量字库的技术原理及实现
  6. 基于python获取网易云热门歌单及封面
  7. mysql 练习题(持续更新中)
  8. 适用于Mac端的四款高效率的办公软件
  9. pybind11使用教程笔记__4.3_binding STL containers -- opaque types
  10. word文档,两个段落之间的间距大于行距很多,怎么设置?