MUSIC算法及MATLAB实现

       MUSIC (Multiple Signal Classification)算法,即多信号分类算法,由Schmidt等人于1979年提出。MUSIC算法是一种基于矩阵特征空间分解的方法。从几何角度讲,信号处理的观测空间可以分解为信号子空间和噪声子空间,显然这两个空间是正交的。信号子空间由阵列接收到的数据协方差矩阵中与信号对应的特征向量组成,噪声子空间则由协方差矩阵中所有最小特征值(噪声方差)对应的特征向量组成.

       MUSIC算法利用信号子空间和噪声子空间的正交性,构建空间谱函数,通过谱峰搜索,估计信号的参数。对于声源定位来说,需要估计信号的DOA。MUSIC算法对DOA的估计有很高的分辨率.但是该算法对于入射信号的要求非常高,应用该算法的前提是入射信号必须是互不相干的。

      假设由 N 个阵元组成的均匀线性阵列 ,阵列之间的间距为半波长 d = λ / 2 ,假设有M个入射远场信号源,它们的功率相同且互不相干,分别从不同的方向入射到接收阵列,其中入射信号和噪声互不相关。以最左侧的阵元为参考点,各个阵元的位置相比前一个增加距离d。其中一个信号S_1(t)的入射方向角为 θ,表示入射信号与线阵法线的夹角。一般假设信号源数M 小于阵元数目 N 。

                                   

在第 t次快拍(也就是第t个时刻),得到的接收数据向量为:

                                  X(t)=A(\theta )S(t)+N(t)

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

其中:

        X(t)=[X_1(t),X_2(t)...X_N(t) ] ^T,    X是一个N*L的矩阵,代表第t时刻下,阵列输出矢量,X_1(t)是1*L的信号矢量,即该信号有L个采样点

       N=[N_1(t),N_2(t),...N_N(t) ] ^T,        噪声

       S=[S_1(t),S_2(t),...S_M(t) ] ^T,             S是一个M*L的输入信号矩阵,空间中一共有M个入射信号,S_1(t)是1*L的信号矢量,即该信号有L个采样点

       A=[\alpha(\theta _1),\alpha(\theta _2),...\alpha (\theta _M) ],              N*M的空间阵列的导向矢量阵

                

        我们要求解的问题是: 通过对采样的输出信号 X(k) ,估计出M个信号源各自的波达方向角\theta_i(i=1,2...M)

        在实际处理中,输出信号数据是有限时间段内的有限次数的样本(也称快拍或快摄),在这段时间内,假定来波方向不发生变化,且噪声为与信号不相关的白噪声,则定义阵列输出信号的协方差矩阵:R_{XX}

                          

          其中R_S是输入信号的协方差矩阵。R_N​是噪声相关阵

          MUSIC算法的核心就是对R_{XX}进行特征值分解(R_{XX}对称矩阵),利用特征向量构建两个正交的子空间,即信号子空间和噪声子空间(信号和噪声相互独立,数据协方差可分解为信号子空间和噪声子空间)。

                             

        其中 U=\left[ U_S,U_N\right], \Sigma = \text{diag} \left( \sigma_{1}^2,\cdots,\sigma_{N}^2 \right)U_S是由大的特征值对应的特征向量张成的子空间,即信号子空间。U_N是由小的特征值对应的特征矢量张成的子空间,即为噪声子空间。

                              

      由于噪声子空间U_N与信号子空间U_S正交,则:

                                               

则:

                           

           上式的充分必要条件A^HU_N=\mathbf{0}

           由于实际的干扰因素,\mathbf{a}^H(\theta)U_N=\mathbf{0}不完全成立,即不完全满足正交性。所以可采用最小优化搜索来估计波达方向:

                                                       

MUSIC算法实现的步骤

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

2.对上面得到的协方差矩阵进行特征分解

3.按特征值的大小排序将与信号个数M相等的特征值和对应的特征向量看做信号部分空间,将剩下的特征值和特征向量看做噪声部分空间,得到噪声矩阵

4.由于阵列方向向量与噪声子空间正交的缘故,\theta _{MUSIC}在信号入射方向上会出现极小值。整理得到空间谱函数,进行极大值的谱峰搜索,使\theta变化:

clear; close all;
%%%%%%%% MUSIC for Uniform Linear Array%%%%%%%%
derad = pi/180;      %角度->弧度
N = 8;               % 阵元个数        
M = 3;               % 信源数目
theta = [-30 0 60];  % 待估计角度
snr = 10;            % 信噪比
K = 512;             % 快拍数
 
dd = 0.5;            % 阵元间距 
d=0:dd:(N-1)*dd;
A=exp(-1i*2*pi*d.'*sin(theta*derad));  %方向矢量

%%%%构建信号模型%%%%%
S=randn(M,K);             %信源信号,入射信号
X=A*S;                    %构造接收信号
X1=awgn(X,snr,'measured'); %将白色高斯噪声添加到信号中
% 计算协方差矩阵
Rxx=X1*X1'/K;
% 特征值分解
[EV,D]=eig(Rxx);                   %特征值分解
EVA=diag(D)';                      %将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA);                 %将特征值排序 从小到大
EV=fliplr(EV(:,I));                % 对应特征矢量排序
                 
 
% 遍历每个角度,计算空间谱
for iang = 1:361
    angle(iang)=(iang-181)/2;
    phim=derad*angle(iang);
    a=exp(-1i*2*pi*d*sin(phim)).'; 
    En=EV(:,M+1:N);                   % 取矩阵的第M+1到N列组成噪声子空间
    Pmusic(iang)=1/(a'*En*En'*a);
end
Pmusic=abs(Pmusic);
Pmmax=max(Pmusic)
Pmusic=10*log10(Pmusic/Pmmax);            % 归一化处理
h=plot(angle,Pmusic);
set(h,'Linewidth',2);
xlabel('入射角/(degree)');
ylabel('空间谱/(dB)');
set(gca, 'XTick',[-90:30:90]);
grid on;

from:https://blog.csdn.net/qq_23947237/article/details/82318222

  • 32
    点赞
  • 244
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
音乐算法是指在音乐数据上进行分析、处理和运算的一种计算方法。典型的音乐算法包括音频采样、频谱分析、频率识别、节奏分析、音高分析、音乐分类和音乐生成等。 音乐算法的原理可以分为两类:时域算法和频域算法。时域算法主要从时域波形的角度来处理音乐数据,包括时间序列分析和差分方程分析等。频域算法则基于时域信号的傅立叶变换结果,通过分析其频域成分来对音乐数据进行处理。其中,基于傅立叶变换的频谱分析和频率识别是最常用的方法。 由于音频数据采样率很高,因此使用MATLAB作为音乐算法实现的工具具有很大的优势。MATLAB提供了多种工具箱,包括信号处理工具箱、音频工具箱等,可用于实现音乐算法。比如,用MATLAB实现音频采样可通过调用“audioread”函数实现,这样就可以得到采样后的音频信号。 基于MATLAB实现的音乐算法通常包括以下几个步骤:读取音频数据、预处理、特征提取和分类等。其中,预处理包括平滑处理、去噪等操作;特征提取则包括计算频谱能量、频率、均值等特征;分类则是将音乐数据分成不同的类别,比如用神经网络分类器划分出不同的乐器类别。除此之外,也可以通过MATLAB实现音乐生成,比如基于音乐语言模型的音乐生成等。 总之,音乐算法是一种涉及时域和频域的计算方法,可以实现音乐数据的分析、处理和生成。在MATLAB的支持下,音乐算法得以更加简便和有效地实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值