Music算法介绍

MUSIC算法,全称为Multiple Signal Classification(多重信号分类),是用于波达方向估计的一种高分辨率谱估计算法。它最初由Schmidt在1979年提出,广泛应用于雷达、声纳、无线通信等领域中,以确定多个信号源的方向。该算法利用了信号子空间和噪声子空间正交性的特点,构造噪声空间然后通过谱峰搜索来检测信号的波达方向。

1. MUSIC 算法步骤

输入:多快拍接收数据 Y ∈ C M × L Y\in\mathbb{C}^{M\times L} YCM×L
1)计算采样协方差矩阵 R R R
2)对 R R R 进行特征分解,求出对应特征值及特征矢量;
3)按照特征值大小排序,根据特征值判断信号数 K K K 并确定信号子空间 U S U_S US 与噪声子空间 U N U_N UN
4)通过 P ( θ ) = 1 a ( θ ) H U N U N H a ( θ ) P(\theta)=\frac{1}{a(\theta)^HU_NU_N^Ha(\theta)} P(θ)=a(θ)HUNUNHa(θ)1 得到空间谱估计;
5)对空间谱进行谱峰搜索,前 K K K 个极大值点对应的角度就是目标入射方向。
输出:目标入射角度

2. MUSIC 算法原理证明

首先,将观测数据向量的协方差矩阵特征分解
R x x = A R s s A H + σ 2 I = U Σ U H = [ U S U N ] [ Σ S O O Σ N ] [ U S H U N H ] \begin{aligned} R_{xx}=AR_{ss}A^H+\sigma^2I =U\Sigma U^H =\begin{bmatrix}U_S&U_N\end{bmatrix}\begin{bmatrix}\Sigma_S & O \cr O & \Sigma_N \end{bmatrix}\begin{bmatrix}U_S^H\cr U_N^H\end{bmatrix} \end{aligned} Rxx=ARssAH+σ2I=UΣUH=[USUN][ΣSOOΣN][USHUNH]

右乘 U N U_N UN

R x x U N = [ U S , U N ] [ Σ S O O Σ N ] [ U S H U N H ] U N = [ U S , U N ] [ Σ S O O Σ N ] [ O I ] = σ 2 U N \begin{aligned} R_{xx}U_N =\begin{bmatrix}U_S,U_N\end{bmatrix}\begin{bmatrix}\Sigma_S & O \cr O & \Sigma_N \end{bmatrix}\begin{bmatrix}U_S^H\cr U_N^H\end{bmatrix}U_N =\begin{bmatrix}U_S,U_N\end{bmatrix}\begin{bmatrix}\Sigma_S & O \cr O & \Sigma_N \end{bmatrix}\begin{bmatrix}O\cr I\end{bmatrix} =\sigma^2U_N \end{aligned} RxxUN=[US,UN][ΣSOOΣN][USHUNH]UN=[US,UN][ΣSOOΣN][OI]=σ2UN

以及

R x x U N = A R s s A H U N + σ 2 U N \begin{aligned} R_{xx}U_N=AR_{ss}A^HU_N+\sigma^2U_N \end{aligned} RxxUN=ARssAHUN+σ2UN

联立两式得到

A R s s A H U N = O AR_{ss}A^HU_N=O ARssAHUN=O

左乘 U N H U_N^H UNH

U N H A R s s A H U N = O U_N^HAR_{ss}A^HU_N=O UNHARssAHUN=O

若 Q 非奇异时 t H Q t = 0 t^HQt=0 tHQt=0,则 t = 0 t=0 t=0 。故当 R S S R_{SS} RSS非奇异,也就是入射信号不相干时,有

A H U N = O A^HU_N=O AHUN=O
也就是
[ a ( ω 1 ) , a ( ω 2 ) , … , a ( ω N ) ] H U N = O \begin{bmatrix}a(\omega_1),a(\omega_2),\dots,a(\omega_N)\end{bmatrix}^HU_N=O [a(ω1),a(ω2),,a(ωN)]HUN=O

a ( ω ) H U N = 0 T , ω = ω 1 , ω 2 , … , ω N a ( ω ) H U N ≠ 0 T , ω ≠ ω 1 , ω 2 , … , ω N \begin{aligned} a(\omega)^HU_N=0^T,\quad\omega=\omega_1,\omega_2,\dots,\omega_N\cr a(\omega)^HU_N\ne0^T,\quad\omega\ne\omega_1,\omega_2,\dots,\omega_N \end{aligned} a(ω)HUN=0T,ω=ω1,ω2,,ωNa(ω)HUN=0T,ω=ω1,ω2,,ωN
写成标量形式,定义一种类似功率谱的函数
P ( ω ) = 1 a ( ω ) H U N U N H a ( ω ) P(\omega)=\frac{1}{a(\omega)^HU_NU_N^Ha(\omega)} P(ω)=a(ω)HUNUNHa(ω)1
上式的N个峰值对应N个信号的来波方向

3. MATLAB仿真

clear all
close all

theta = [10 30 60];            % 信源入射角度
source_number = length(theta); % 信元数
sensor_number = 8;             % 阵元数
w = pi/4;                      % 信号频率
lambda = (2*pi*3e8)/w;         % 信号波长
d = 0.5*lambda;                % 阵元间距
snr = 10;                      % 信噪比为10
n = 500;                       % 快拍数500

A = exp(-1j*2*pi*(0:d:(sensor_number-1)*d).'*sind(theta)/lambda); % 阵列流形
S = randn(source_number,n);                                       % 随机数矩阵
X = A*S;                                                          % 信号矩阵
X1 = awgn(X,snr,'measured');                                      % 添加噪声
Rxx = X1*X1'/n;                                                   % 协方差矩阵

InvS = inv(Rxx);
[EV,D] = eig(Rxx);             % 协方差矩阵对角化 EV特征向量矩阵 D对角阵
EVA = diag(D)';                % 提取对角元素
[EVA,I] = sort(EVA);           % EVA对角元素从小到大排序 I位置索引
EVA = fliplr(EVA);             % 左右翻转
EV = fliplr(EV(:,I));          % 使用索引I对EV列重新排列 左右翻转

for k = 1:361
angle(k)=(k-181)/2;
a = exp(-1j*2*pi*(0:d:(sensor_number-1)*d)*sind((k-181)/2)/lambda).';       % 方向向量
En=EV(:,source_number+1:sensor_number);                                     % 提取source_number+1列到sensor_number列
SP(k)=(a'*a)/(a'*En*En'*a);                                                 % 存储计算值
end
SP=abs(SP);                                                                 % SP的绝对值
SPmax=max(SP);    
SP=10*log10(SP/SPmax);                                                      % 以dB为单位

h=plot(angle,SP);                                                           % 绘制angle与SP的关系图
set(h,'Linewidth',2)                                                        % 绘制线条宽度为 2
xlabel('angle(degree)')                                                     % 为 x 轴和 y 轴添加标签
ylabel('magnituded(dB)')
title('Music Algorithm For Doa', 'fontsize', 16);
set(gca,'XTick',[-90:30:90])                                                % x 轴刻度
grid on

运行结果:
请添加图片描述

这里可以看到,music算法能够识别多个方向,而且具有很高的分辨率。需要注意的是,当入射信号相干时,music算法会失效,在推导过程中也是以入射信号不相干为前提的。对于相干信号,可采用平滑music算法进行处理,这种方法在之后的文章中进行介绍。

4. 不同信噪比下的RMSE

在信源数为1,阵元数为8,间距 λ 2 \frac{\lambda}{2} 2λ,蒙托卡罗次数为1000 时的 RMSE

clear all
close all

source_number = 1;         % 信元数
sensor_number = 8;         % 阵元数
w = pi/4;                  % 信号频率
lambda = (2*pi*3e8)/w;     % 信号波长
d = 0.5*lambda;            % 阵元间距

kps = 100;                 % 快拍数
theta = 30;                % 信源入射角度
mengtimes = 1000;          % 蒙特卡洛次数


A = exp(-1j*2*pi*(0:d:(sensor_number-1)*d).'*sind(theta)/lambda); % 阵列流形
S = randn(source_number,kps);                                     % 随机数矩阵
X = A*S;                                                          % 信号矩阵

snr = 0:1:25;                                                     % 信噪比区间
eror = zeros(length(snr),1);                                      % 估计误差

for n = 1:size(snr,2)
    for m = 1:mengtimes
        X1 = awgn(X,snr(n),'measured'); % 添加噪声
        Rxx = X1*X1'/kps;               % 协方差矩阵
        InvS = inv(Rxx);
        [EV,D] = eig(Rxx);              % 协方差矩阵对角化 EV特征向量矩阵 D对角阵
        EVA = diag(D)';                 % 提取对角元素
        [EVA,I] = sort(EVA);            % EVA对角元素从小到大排序 I位置索引
        EVA = fliplr(EVA);              % 左右翻转
        EV = fliplr(EV(:,I));           % 使用索引I对EV列重新排列 左右翻转
        for k = 1:3601
            a = exp(-1j*2*pi*(0:d:(sensor_number-1)*d)*sind((k-1801)/20)/lambda).';       % 方向向量
            En = EV(:,source_number+1:sensor_number);                                     % 提取source_number+1列到sensor_number列
            SP(k) = (a'*a)/(a'*En*En'*a);                                                 % 存储计算值
        end
        SP = abs(SP);                                                                     % SP的绝对值
        [maxsp,index] = max(SP);                                                          % 搜索谱峰最大值坐标
        estmt(m) = (index-1801)/20;
        eror(n) = (estmt(m)-theta)^2 + eror(n);                                           % 误差平方和
    end
rmse(n) = sqrt(eror(n)/mengtimes);
end

figure
plot(snr,rmse,'Linewidth',2)
grid on
xlabel('SNR(dB)','Fontname','Times New Roman','FontSize',17)
ylabel('\fontname{Times New Roman}\fontsize{17}RMSE°')
legend('\fontname{Times New Roman}\fontsize{17}MUSIC','Location','Best')

运行结果:
请添加图片描述

参考:
Music算法原理部分参考于:《矩阵分析与应用》张贤达

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值