MUSIC_算法

  1. 2 MUSIC 算法
    1. 2.1 算法原理
    2. 2.2 算法步骤
    3. 2.3 代码实现
    4. 2.4 参考内容

2 MUSIC 算法

2.1 算法原理

  根据信号模型,可以得到接收信号的协方差矩阵,理想协方差矩阵如下:

R=E{x(t)xH(t)}=AE{s(t)sH(t)}AH+E{n(t)nH(t)}=ARsAH+σ2nIR=E{x(t)xH(t)}=AE{s(t)sH(t)}AH+E{n(t)nH(t)}=ARsAH+σ2nI

其中 RsRsσ2nIσ2nI 分别代表信号协方差矩阵和噪声协方差矩阵,σ2nσ2n 为噪声方差, II 为单位矩阵。需要注意到的是,由于信号源之间是独立的,RsRs 是对角非奇异矩阵;RR 是非奇异的,同时 R=RHR=RH,因此 RR 是 Hermitian 矩阵且是正定矩阵。
  但因为采样数 TT 有限,理想协方差矩阵无法直接获得,此时通常用样本的协方差矩阵 ˆR^R 来代替:

RˆR=1TTt=1x(t)xH(t)=1TXXH

  对 R 进行特征值分解,可得到:

R=UΣUH=Mi=1λiuiuHi=[UsUn][ΣsOOΣn][UHsUHn]=UsΣsUHs+UnΣnUHn

其中 λiui 分别为特征值和对应的特征向量,O 为全零矩阵,Σ 为由 M 个特征值 λ1,,λM 组成的对角矩阵:

Σ=diag{λ1,,λM}

且假设:

λ1>>λK>λK+1==λM=σ2n

Σs 为由 K 个较大特征值 λ1,,λK 组成的对角矩阵, Σn 为由 MK 个较小特征值 λK+1,,λM 组成的对角矩阵:

Σs=diag{λ1,,λK},Σn=diag{λK+1,,λM}

Us 表示由 K 个较大特征值 λ1,,λK 对应的特征矢量张成的信号子空间,Un 表示由 MK 个较小特征值 λK+1,,λM 对应的特征矢量张成的噪声子空间。注意,U 为酉矩阵。
  将 R=ARsAH+σ2nI 左右两边乘以 Un 可得:

RUn=ARsAHUn+σ2nUn

  同时将 R=UsΣsUHs+UnΣnUHn 左右两边乘以 Un 可得:

RUn=UsΣsUHsUn+UnΣnUHnUn=O+σ2nUn=σ2nUn

  联立上面两式子可得:

ARsAHUn=O

  由于 RsAHA 均满秩,所以均可逆,因此上式两边同时乘以 R1s(AHA)1AH 可得:

R1s(AHA)1AHARsAHUn=R1s(AHA)1AHO

化简得:

AHUn=O

或者可以写成如下形式:

AHui=0,i=K+1,,M

其中 0 为全零向量。上式表明:噪声特征值所对应的特征向量 ui 与方向矢量矩阵 A 的列向量正交,而 A 的各列与信号源的方向相对应的,因此可以利用噪声子空间求解信号源方向。

2.2 算法步骤

  MUSIC 算法步骤如下(输入为阵列接收矩阵 X):

  1. 计算协方差矩阵 R=1TXXH
  2. R 进行特征值分解,并对特征值进行排序,然后取得 MK 个较小特征值对应的特征向量来组成噪声子空间 Un
  3. 以下式遍历 θ[90,90]

    P(θ)=1aH(θ)UnUHna(θ)

    此时得到一组 P(θ)K 个最大值对应的 θ 就是需要返回的结果。

    2.3 代码实现

     % music.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 = 0;                                              % 信噪比
    
     %% 信号模型建立
     S = randn(K,T) + 1j*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');                           % 添加噪声
    
     %% MUSIC 算法
     % 计算协方差矩阵
     R = X*X'/T;
     % 特征值分解并取得噪声子空间
     [U,D] = eig(R);                                       % 特征值分解
     [D,I] = sort(diag(D));                                % 将特征值排序从小到大
     U = fliplr(U(:, I));                                  % 对应特征矢量排序,fliplr 之后,较大特征值对应的特征矢量在前面
     Un = U(:, K+1:M);                                     % 噪声子空间
     Gn = Un*Un';
     % 空间谱搜索
     searchGrids = 0.1;                                    % 搜索间隔
     ang = (-90:searchGrids:90)*derad;
     Pmusic = zeros(1, length(ang));                       % 空间谱
     for i = 1:length(ang)
         a = exp(-1j*pi*idx*sin(ang(i)));
         Pmusic(:, i) = 1/(a'*Gn*a);
     end
     % 归一化处理,单位化为 db
     Pmusic = abs(Pmusic);
     Pmusic = 10*log10(Pmusic/max(Pmusic));
     % 作图
     figure;
     plot(ang/derad, Pmusic, '-', 'LineWidth', 1.5);
     set(gca, 'XTick',(-90:30:90));
     xlabel('\theta(\circ)', 'FontSize', 12, 'FontName', '微软雅黑');
     ylabel('空间谱(dB)', 'FontSize', 12, 'FontName', '微软雅黑');
     % 找出空间谱Pmusic中的峰值并得到其对应角度
     [pks, locs] = findpeaks(Pmusic);                      % 找极大值
     [pks, id] = sort(pks);
     locs = locs(id(end-K+1:end))-1;
     Theta = locs*searchGrids - 90;
     Theta = sort(Theta);
     disp('估计结果:');
     disp(Theta);
    
    lang-matlab复制代码

    2.4 参考内容

  4. 【博客园】子空间分析方法
  5. 【博客园】空间谱专题10:MUSIC算法
  6. 【CSDN】子空间方法——MUSIC算法
  7. 【CSDN】Traditional Comm笔记【5】:基于MUSIC Algorithm的DoA/AoA估计以及MATLAB实现
  8. 【知乎】DoA 估计:多重信号分类 MUSIC 算法(附 MATLAB 代码)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

×

喜欢就点赞,疼爱就打赏