部分来自于网络教程,如有侵权请联系本人删除

教程链接:MUSIC算法的直观解释:1,MUSIC算法的背景和基础知识_哔哩哔哩_bilibili

MUSIC算法的直观解释:2,我对于MUSIC算法的理解_哔哩哔哩_bilibili

https://blog.csdn.net/zhangziju/article/details/100730081

 一、MUSIC算法作用

MUSIC(Multiple Signal Classification),多重信号分类,是一类空间谱估计算法。其思想是利用接收数据的协方差矩阵(Rx)进行特征分解,分离出信号子空间和噪声子空间,利用信号方向向量与噪声子空间的正交性来构成空间扫描谱,进行全域搜索谱峰,从而实现信号的参数估计。

MUSIC算法通常被用来使用麦克风阵列进行声源定位。

例如当麦克风阵列放在一个房间中,房间中存在一个声源。当声源发声时,阵列会接收到来自目标方向的信号,但是也会接受到不同方向的反射信号。MUSIC算法可以剔除掉其余的反射信号,选出来自目标方向的那个信号,从而得到目标的方向。

声波是机械波,通常利用麦克风阵列接受后转换为电信号进行处理。当信号是电磁波时,例如wifi信号,我们拿天线阵列进行接收,此时仍然可以利用MUSIC算法把不同方向信号的角度计算出来。

二、MUSIC算法原理

MUSIC算法适用于来波为平行波,即目标与麦克风阵列的距离L远大于阵元之间间距d。此时来自目标的信号相对于每个阵元的方位角基本可视为相同。具体如下图所示:

图1

1.时延、相位差和目标方位角关系

假设信号源发射信号为

当信号从声源目标S传播到阵元1时,信号传播了距离,假设声速为c,则耗时

这样便会导致阵元1接受信号的相位和发射信号不一致,会延迟

那么阵元1最终接收信号为:

阵元2相对于阵元1多走了,那么阵元2接受信号则为:

其中,代表阵元2接收信号和阵元1接收信号之间的相位差

阵元3相对于阵元1多走了,那么相应的相位差为:

则阵元3接收信号为:

PS:如果还不好理解因为多走了一段距离导致的相位差怎么计算,可以这样理解(以阵元1和2为例):

假设阵元1接收信号为

因为信号到达阵元2多走了一段距离,那么信号到达阵元2的时间总会相比阵元1延迟(我们通常称之为时延,实际上相位差就是时延导致的)

那么阵元2接收信号则为

很明显,的相位差为

由数字信号处理知识可以知道,同时在图1中阵元1和阵元2的时延

那么就可以得到相位差

2.MUSIC算法核心原理(思路来源)

MUSIC算法的最终目的:计算

从以上推导可以知道和两个阵元接收信号的相位差紧密相关。能求到,就能求得

那么在理想条件,也就是没有任何的反射和折射,且只有一个声源,这时直接用两阵元接收信号相除就能得到相位差,从而得到目标方位角

但是实际上会有很多反射折射信号被麦克风阵列所接收,而且声源可能不止一个,此时该怎么办呢?这就是MUSIC算法需要解决的问题。

好,那么我们假设一共有两个声源A,B,发射信号分别为(暂时不考虑反射和折射)

那么在某时刻t,三个阵元接收信号分别为:

那么某段时间内,麦克风阵列所接收信号为:

对应可以写成:

其中我们已知,是需要求得的,可能已知,可能不知(当已知且可逆时,可以直接用逆矩阵求,但是这样的情况较少)

能不能通过处理,将等式右边的消除掉?(MUSIC算法的核心)

怎么处理呢???

如果能找到三个复数,分别对3个阵元接收信号进行幅度和相位变换(用1个复数去乘以一个信号,则是对这个信号进行了幅度和相位变换),且变换后接收信号之间完全抵消了,即:

或用矩阵表示:

分别代入上式可以得到:

即:

MUSIC算法在此时进行了一个假设,即假设信号和信号是不相关(MUSIC算法的假设条件1)的(当信号和信号线性相关时,可以找到一个非零复数,使得

那么此时上面公式中的系数必须都为0,即:

上式中系数可以直接消除掉,那么可以看出,只要找到便可求出

那么现在问题就转换为了,如何找到这一组复数???

要能找到这一组复数,必须满足:阵元个数 > 声源信号的个数(MUSIC算法的假设条件2)

其实最终就是解:

,那么MUSIC算法是通过求的最大值(谱峰搜索)来找相应的解,对应的也就是相应的目标方位角

3.MUSIC算法步骤总结

窄带远场信号的DOA数学模型为:

其中X为阵列接收到的信号矩阵,两个维度分别代表:阵元个数(number of array elements)、采样点数(snapshots);A为阵列方向矩阵,两个维度分别代表:阵元个数、信号方向的方向向量;s为信号源发射信号矩阵,两个维度分别代表:信号源个数、采样点数;N为噪声矩阵,两个维度分别为阵元个数、采样点数。

那么阵列接收数据的协方差矩阵为:

由于信号和噪声互相独立,数据协方差矩阵可以分解为信号、噪声相关的两部分,其中Rs是信号的协方差矩阵,ARsA^H是信号部分。

对R进行特征分解有:

式中,Us是由R的所有特征值中较大的(信号源个数)个特征向量组成的子空间,称为信号子空间;Un是由R的所有特征值中娇小的(阵元个数-信号源个数)个特征向量组成的子空间,称为噪声子空间。

根据之前我们所推导的MUSIC算法的条件,要求理想情况下信号子空间和噪声子空间正交,也就是信号子空间中的方向向量a(theta)和噪声子空间正交:

由于噪声的存在,实际上a(theta)和Un并不能完全正交。因此实际上是通过进行最小优化搜索来实现的:

和我们上文所说一样,MUSIC实际上是通过谱峰搜索来求最优解theta:

PS:由于实际中阵列接受数据是有限的,所以通常由协方差矩阵的最大似然估计来代替协方差矩阵:

总结以上算法原理,MUSIC算法的步骤为:

1.根据N个接收信号矢量得到下面协方差矩阵的估计值:

2.对第1步得到的协方差矩阵进行特征分解

3.矩阵会有M个特征值。将其从大到小进行排列:

其中D(D=信号源个数)个较大的特征值对应信号,将其对应的特征向量看做信号部分空间。

M-D(M=阵元个数)个较小的特征值对应噪声,将其对应的特征向量看做信号部分空间,得到噪声矩阵

4.使不断变化,计算谱函数:

通过寻找谱峰来计算波达方向的估计值。此处的为阵元的方向相应向量。

4.Matlab代码实现

clear all
close all
clc
%----------------均匀线列阵实现MUSIC算法------------------%
ang2rad = pi/180;                   % 角度转弧度系数
N = 10;                             % 阵元个数
M = 3;                              % 信源个数
theta = [-65,0,45];                 % 来波方向(角度)
snr = 10;                           % 信号信噪比dB
K = 512;                            % 总采样点
delta_d = 0.05;                     % 阵元间距
f = 2400;                           % 信号源频率
c = 340;                            % 声速d = 0:delta_d:(N-1)*delta_d;
A = exp(-1i*2*pi*(f/c)*d.'*sin(theta*ang2rad));   % 接收信号方向向量
S = randn(M,K);                     % 阵列接收到来自声源的信号
X = A*S;                            % 最终接收信号,是带有方向向量的信号
X1 = awgn(X,snr,'measured');        % 在信号中添加高斯噪声
Rx = X1*X1'/K;                      % 协方差矩阵
[Ev,D] = eig(Rx);                   % 特征值分解
% [V,D] = eig(A) 返回特征值的对角矩阵 D 和矩阵 V
% 其列是对应的右特征向量,使得 AV = VD
EVA = diag(D)';                     % 将特征值提取为1行
[EVA,I] = sort(EVA);                % 对特征值排序,从小到大。其中I为index:1,2,...,10
EV = fliplr(Ev(:,I));               % 对应特征矢量排序En = EV(:,M+1:N);                  % 取特征向量矩阵的第M+1到N列特征向量组成噪声子空间% 遍历所有角度,计算空间谱
for i = 1:361angle(i) = (i-181)/2;           % 映射到-90度到90度theta_m = angle(i)*ang2rad;a = exp(-1i*2*pi*(f/c)*d*sin(theta_m)).';p_music(i) = abs(1/(a'*En*En'*a));
end
p_max = max(p_music);
p_music = 10*log10(p_music/p_max);  % 归一化处理
figure()
plot(angle,p_music,'b-')
grid on
xlabel('入射角/度')
ylabel('空间谱/dB')

MUSIC算法相关原理知识(物理解读+数学推导+Matlab代码实现)相关推荐

  1. 前端面试:你应该了解的JS算法相关的知识

    前端面试:你应该了解的JS算法相关的知识 时间复杂度 通常使用最差的时间复杂度来衡量一个算法的好坏. 常数时间 O(1) 代表这个操作和数据量没关系,是一个固定时间的操作,比如说四则运算. 对于一个算 ...

  2. RFID相关原理知识及RFID应用领域详细介绍

    RFID工作原理和相关原理知识 其中,电子标签又称为射频标签.应答器.数据载体:阅读器又称为读出装置,扫描器.通讯器.读写器(取决于电子标签是否可以无线改写数据).电子标签与阅读器之间通过耦合组件实现 ...

  3. 原创 | 机器学习数学推导与代码实现30讲.pdf

    机器学习 Author:louwill Machine Learning Lab 机器学习数学推导与代码实现30讲已完成,主要包括监督学习模型.无监督学习模型.集成学习模型和概率模型四个大类29个模型 ...

  4. ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比)

    ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

  5. PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码

    PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据,也可以加载本地数据.mat,使用换自 ...

  6. 【MIMO】两种空间相关信道生成方式的记录(公式+MATLAB代码)

    文章目录 前言 一. Kronecker相关信道模型 二.生成方式1 1.公式 2.MATLAB代码 三.生成方式2-complex correlation 1.公式 2.MATLAB代码 四.生成方 ...

  7. SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比

    SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

  8. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)

    前言 NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准. NSGA-Ⅱ算法是 Srinivas 和 D ...

  9. 【滤波跟踪】基于Huber函数和最大相关熵的抗差滤波算法实现GNSS导航定位粗差处理附matlab代码

    1 内容介绍 雷达系统中跟踪滤波器的设计通常依赖于线性高斯系统.一旦系统为非线性且受到非高斯噪声干扰时,雷达跟踪性能便出现严重恶化.为了提高目标在非线性非高斯环境下跟踪的精度,将最大相关熵扩展卡尔曼滤 ...

  10. 滤波系列(一)卡尔曼滤波算法(KF):详细数学推导

    滤波系列(一)卡尔曼滤波算法(KF) 在本文,将给出卡尔曼滤波算法的详细数学推导过程,如果想直接了解卡尔曼滤波算法的应用,请看博客:卡尔曼滤波算法的应用(python代码)或者直接可以调用Python ...

最新文章

  1. Javascript 实现TreeView
  2. oracle表名最大长度6,Oracle中表名的最大长度是多less?
  3. astype函数_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!
  4. 【小白问题】appendTo()
  5. Windows Print Spooler 远程代码执行漏洞(CVE-2021-34527)
  6. flex AdvancedDataGrid 高级表格 介绍 教程
  7. oralce 存储过程、函数和触发器
  8. 8.10 数据库安全性II Day28
  9. nodepad代码格式复制到word发布到博客
  10. 基于SSM框架的图书管理系统
  11. DOM ------ 百度换肤
  12. 关于云优CMS系统模板标签调用列表随机显示的代码rand()标签适用
  13. IDEA安装插件及安装失败的处理方法
  14. linux cd是什么目录,linux cd是什么意思?
  15. 魔兽世界燃烧的远征服务器状态,6月2日加入“燃烧的远征” 立刻了解《魔兽世界》经典怀旧服的服务器抉择...
  16. 车辆占用应急车道识别抓拍系统 opencv
  17. 【FME】矢量间进行空间传值、属性关联
  18. 杭电不要62java,杭电 2089 不要62
  19. 中国少儿模特明星盛典 《荣耀王者》主题曲 即将全网发布
  20. daocloud mysql_GitHub - DaoCloud/php-laravel-mysql-sample

热门文章

  1. SPSS-process插件-中介调节模型
  2. 软件工程需求分析文档模板
  3. mybatis自动生成代码
  4. 安卓udp发包工具_好装逼牌udp-tcp发包工具
  5. avast! 5 简体中文正式版 官方直接下载链接
  6. 3500常用汉字书法体检测数据集
  7. 班级量化考核系统php代码,学生信息量化考核管理系统
  8. Linux chmod权限详解
  9. LR11安装报错:此计算机上缺少vc2005_sp1_with_atl_fix_redist,请安装所有缺少的必要组件,然后重新运行此安装。
  10. java实现word转pdf