MUSIC算法仿真

DOA波达方向估计

DOA(Direction Of Arrival)波达方向是指通过阵列信号处理来估计来波的方向,这里的信源可能是多个,角度也有多个。DOA技术主要有ARMA谱分析、最大似然法、熵谱分析法和特征分解法,特征分解法主要有MUSIC算法、ESPRIT算法WSF算法等。其中MUSIC是一种经典的DOA估计算法。

MUSIC算法概述

MUSIC(multiple signal classification algorithm)算法是一种基于矩阵特征空间分解的方法。从几何角度讲,信号处理的观测空间可以分解为信号子空间噪声子空间,显然这两个空间是正交的。信号子空间由阵列接收到的数据协方差矩阵中与信号对应的特征向量组成,噪声子空间则由协方差矩阵中所有最小特征值(噪声方差)对应的特征向量组成。

MUSIC算法原理

MUSIC算法是空间谱估计测向理论的重要基石。算法原理 如下:
(1) 不管测向天线阵列形状如何,也不管入射来波入射角的维数如何,如图1所示,假定阵列由 N N N个阵元组成,并且符合窄带远场模型。
在这里插入图片描述

图1. 均匀线性阵模型

则阵列输出模型的矩阵形式都可以表示为: Y ( t ) = A S + N ( t ) Y(t)=AS+N(t) Y(t)=AS+N(t)
其中, Y Y Y是观测到的阵列输出数据复向量; X X X是未知的空间信号复向量; N ( t ) N(t) N(t)是阵列输出向量中的加性噪声; A A A是阵列的方向矩阵,又称之为阵列流形矩阵;当我们以最左侧的阵元为参考位,此处, A A A矩阵表达式表示为:
A = [ α ( θ 1 ) , α ( θ 2 ) , ⋯   , α ( θ M ) ] = [ 1 1 ⋯ 1 e − j ϕ 1 e − j ϕ 2 ⋯ e − j ϕ D e j − 2 ϕ 1 e − j 2 ϕ 2 ⋯ e − j 2 ϕ D ⋮ ⋮ ⋱ ⋮ e − j ( N − 1 ) ϕ 1 e − j ( N − 1 ) ϕ 2 ⋯ e − j ( N − 1 ) ϕ D ] A=[\alpha(\theta_1),\alpha(\theta_2),\cdots,\alpha(\theta_M)]=\begin{equation} \begin{bmatrix} 1 & 1 & \cdots &1 \\ e^{-j\phi_1} & e^{-j\phi_2} & \cdots & e^{-j\phi_D} \\ e^{j-2\phi_1} & e^{-j2\phi_2} & \cdots & e^{-j2\phi_D} \\ \vdots & \vdots & \ddots & \vdots \\ e^{-j(N-1)\phi_1} & e^{-j(N-1)\phi_2} & \cdots & e^{-j(N-1)\phi_D} \end{bmatrix} \end{equation} A=[α(θ1),α(θ2),,α(θM)]= 1ejϕ1ej2ϕ1ej(N1)ϕ11ejϕ2ej2ϕ2ej(N1)ϕ21ejϕDej2ϕDej(N1)ϕD
可以看到, A A A是一个范德蒙矩阵其中, ϕ k = 2 π s i n θ k / λ \phi_k=2{\pi}sin\theta_k/\lambda ϕk=2πsinθk/λ,且 θ k , 1 ≤ k ≤ D \theta_k,1\le k \le D θk,1kD为第 k k k个信源的角度,共有 D D D个角度。 ϕ k \phi_k ϕk在这里是指波程差引起的相移,如下图所示相邻阵元之间的波程差为 d s i n θ dsin\theta dsinθ,将此转换为相位,单位为弧度,则为 2 π s i n θ k / λ 2{\pi}sin\theta_k/\lambda 2πsinθk/λ λ \lambda λ为信号波长。由下图的等相位面可知,信号到达最左侧的阵元需要走更远的距离,因此,以最左侧的阵元为参考,即左侧阵元接收到的信号为 x 1 ( t ) x_1(t) x1(t),则其他阵元接收到的信号都超前于它,此时, x 1 ( t ) = s ( t ) , x 2 ( t ) = s ( t ) e j ϕ x_1(t)=s(t),x_2(t)=s(t)e^{j\phi } x1(t)=s(t),x2(t)=s(t)ejϕ。如果,我们以最右侧信号为参考,即最右侧阵元接收到的信号为 x 1 ( t ) x_1(t) x1(t),则 x 1 ( t ) = s ( t ) , x 2 ( t ) = s ( t ) e − j ϕ x_1(t)=s(t),x_2(t)=s(t)e^{-j\phi } x1(t)=s(t),x2(t)=s(t)ejϕ。注意角度的正负号。
在这里插入图片描述

图2. 波程差示意图

接收信号写为向量形式:
Y ( t ) = [ y 1 ( t ) y 2 ( t ) y 3 ( t ) ⋮ y N ( t ) ] Y(t)=\begin{equation} \begin{bmatrix} y_1(t) \\ y_2(t) \\ y_3(t) \\ \vdots \\ y_N(t) \end{bmatrix} \end{equation} Y(t)= y1(t)y2(t)y3(t)yN(t)
y i ( t ) y_i(t) yi(t)为第 i i i个阵元接收到的信号,共有 N N N个阵元。 S = [ s 1 ( t ) , s 2 ( t ) , ⋯   , s D ( t ) ] S=[s_1(t),s_2(t),\cdots,s_D(t)] S=[s1(t),s2(t),,sD(t)] s i ( t ) , 1 ≤ i ≤ D s_i(t),1\le i \le D si(t),1iD,表示第 i i i个信源发出的信号。 N ( t ) = [ n 1 ( t ) , n 2 ( t ) , ⋯   , n N ( t ) ] T N(t)=[n_1(t),n_2(t),\cdots,n_N(t)]^T N(t)=[n1(t),n2(t),,nN(t)]T,表示噪声,符合独立同分布的假设。
MUSIC算法的处理任务就是设法估计出入射到阵列的空间信号的个数 D D D以及空间信号源的强度及其来波方向 θ k \theta_k θk
(2) 在实际处理中, Y Y Y得到的数据是有限时间段内的有限次数的样本(也称快拍或快摄),样本的长度取决于采样率和采样时间,在这段时间内,假定来波方向不发生变化,且噪声为与信号不相关的白噪声,则定义阵列输出信号的二阶矩: R y R_y Ry
R y = E [ Y Y H ] R_y=E[YY^H] Ry=E[YYH]
其中, [ ∙ ] H [\bullet]^H []H表示共轭转置,值得注意的是,在MATLAB中我们常用的转置符号 ( ′ ) (') 其实是共轭转置,而普通转置为(.'),当然他们对于实数矩阵而言没有任何区别。 E [ ∙ ] E[\bullet] E[]表示统计学上的期望。
由于噪声信号符合独立同分布的假设,信号与噪声互不相关,噪声为零均值白噪声,则上式又可以写为:
R y = E [ Y Y H ] = E [ ( A S + N ) ( A S + N ) H ] = A E [ S S H ] A H + E [ N N H ] = A R S A H + R N R_y=E[YY^H]=E[(AS+N)(AS+N)^H]=AE[SS^H]A^H+E[NN^H]=AR_SA^H+R_N Ry=E[YYH]=E[(AS+N)(AS+N)H]=AE[SSH]AH+E[NNH]=ARSAH+RN
其中, R S = E [ S S H ] R_S=E[SS^H] RS=E[SSH]为信号相关矩阵, R N = E [ N N H ] = σ 2 I R_N=E[NN^H]=\sigma^2I RN=E[NNH]=σ2I为噪声相关矩阵, I I I N ∗ N N^*N NN的单位矩阵。
(3) MUSIC算法的核心就是对 R y R_y Ry进行特征值分解,利用特征向量构建两个正交的子空间,即信号子空间和噪声子空间。对 R y R_y Ry进行特征分解。
(4) U U U是非负定的厄米特矩阵,所以特征分解得到的特征值均为非负实数,有 D D D个大的特征值和 M − D M-D MD个小的特征值,大特征值对应的特征向量组成的空间Us为信号子空间,小特征值对应的特征向量组成的空间 U n U_n Un为噪声子空间。
(5) 将噪声特征向量作为列向量,组成噪声特征矩阵 ,并张成 M − D M-D MD维的噪声子空间 U n U_n Un,噪声子空间与信号子空间正交。而 U s U_s Us的列空间向量恰与信号子空间重合,所以 U s U_s Us的列向量与噪声子空间也是正交的,由此,可以构造空间谱函数。
(6) 在空间谱域求取谱函数最大值,其谱峰对应的角度即是来波方向角的估计值。
P m u s i c = 1 α H ( θ ) U n U n H α ( θ ) P_{music}=\frac{1}{\alpha^H(\theta)U_nU^H_n\alpha(\theta)} Pmusic=αH(θ)UnUnHα(θ)1

MUSIC算法MATLB仿真

% MUSIC空间谱估计算法仿真
close all; clear all; clc;
J=sqrt(-1); 
source_number=4; 
source_doa=[30 40 50 70]; 
sensor_number=7; 
snapshot_number=2000; 
snr=10; 
  
A=exp(-J*(0:sensor_number-1)'*pi*sin(source_doa*pi/180)); 
s=(randn(source_number,snapshot_number)+J*randn(source_number,snapshot_number))/sqrt(2); 
x=A*s; 
y=awgn(x,snr,'measured'); 
R=y*y'/snapshot_number; 
[V,D]=eig(R); 
Un=V(:,1:sensor_number-source_number); 
Gn=Un*Un'; 
  
searching_doa=0:0.1:90; 
for i=1:length(searching_doa) 
    a_theta=exp(-J*(0:sensor_number-1)'*pi*sin(pi*searching_doa(i)/180))
    P_con(i)=abs(a_theta'*R*a_theta);
    P_BF(i)=abs((a_theta'*R*a_theta)./(a_theta'*a_theta)); 
    P_capon(i)=1./abs((a_theta'*inv(R)*a_theta)); 
    P_music(i)=1./abs((a_theta'*Gn*a_theta)); 
end 
plot(searching_doa,P_con/max(P_con),'k');hold on;
plot(searching_doa,P_BF/max(P_BF),'r'); hold on;  
plot(searching_doa,P_capon/max(P_capon),'g'); hold on;
plot(searching_doa,P_music/max(P_music),'b'); hold off;grid on;
xlabel('ang');
ylabel('功率谱估计');
legend('conditional spectrum','Bartlett spectrum','Capon spectrum','Music spectrum');

仿真结果如下:
在这里插入图片描述

图3. 仿真结果

还有一种参考程序:

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;

仿真结果如下:
在这里插入图片描述

图4. 仿真结果
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
以下是一维ESPRIT算法实现DOA估计的Matlab程序示例: ``` % 输入参数: % X:接收信号矩阵,大小为M*N,M为接收阵元数量,N为接收信号长度; % d:阵元间距离; % K:信号源数量; % 输出参数: % theta_hat:信号源DOA估计值,大小为K*1。 function theta_hat = DOA_ESPRIT_1D(X, d, K) [M, N] = size(X); R = X * X' / N; % 径向信号相关矩阵 [U, S, V] = svd(R); E = U(:, 1:K); F = U(:, 2:K+1); P = F * E' * inv(E * E'); Phi = diag(exp(-1j * 2 * pi * d * (0:M-1)' * sin(0:pi/180:179*pi/180))); % 接收信号的旋转矩阵 S_hat = P * Phi * X; [U_hat, S_hat, V_hat] = svd(S_hat); V1 = U_hat(:, 1:K); V2 = U_hat(:, K+1:end); theta_hat = angle(diag(V2' * V1)) / pi * 180; end ``` 其中,输入参数`X`为接收信号矩阵,大小为`M*N`,`M`为接收阵元数量,`N`为接收信号长度;`d`为阵元间距离;`K`为信号源数量。输出参数`theta_hat`为信号源DOA估计值,大小为`K*1`。 该程序实现了ESPRIT算法的一维版本,主要包括以下步骤: 1. 计算接收信号的径向信号相关矩阵`R`,并对其进行奇异值分解,得到信号子空间矩阵`E`和其余空间矩阵`F`; 2. 计算信号子空间矩阵`E`的伪逆`P`,并利用接收信号的旋转矩阵`Phi`将接收信号进行旋转; 3. 对旋转后的接收信号进行奇异值分解,得到信号子空间矩阵`V1`和其余空间矩阵`V2`; 4. 计算信号源的DOA估计值`theta_hat`。 需要注意的是,该程序中的旋转矩阵`Phi`是在`0`到`180`度间以`1`度为步长生成的,可根据实际情况进行调整。另外,在计算`theta_hat`时,需要将弧度转换为角度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsuaf_huasir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值