问题概要:
利用 MUSIC空间谱将混合的多重信号分离开,称为多重信号分类方法,简称 MUSIC算法。
此次改进版MUSIC算法来自张贤达老师《现代信号处理(第三版)》算法10.4.1,基于基础版本MUSIC算法和最大似然法得到较优的谱估计,从而实现改进版MUSIC算法的仿真。
算法内容:
算法目的:
简单来说就是咱们要用一个叫做MUSIC的算法用空间谱函数对阵列接收到的空间信号进行一个分类和估计。
算法核心:
个人认为无论是改进版的MUSIC还是基础版的MUSIC,算法最核心的地方就是由观测数据向量x(n)的自协方差矩阵求出特征值来,然后给这些求出来的特征值排个序,根据特征值的大小筛选出需要的特征向量和噪声向量(即期望向量和不期望的向量),得出特征矩阵U。
然后就根据《现代信号处理》的各个推导公式求出关键向量空间值,最后由课本提供的优化矩阵U-hat(公式10.4.37)代入P公式求解即可。
算法代码:
clear;
close all;
%%%%%%%%%%%参数设定%%%%%%%%%%%
R = pi/180; %角度->弧度
M = 3; % 信源数目
N = 8; % 阵元个数
theta = [-30 0 60]; % 待估计角度
snr = 10; % 信噪比
Sample = 666; % 快拍数(抽样密度)
element_spacing = 0.5; % 阵元间距
d=0:element_spacing:(N-1)*element_spacing;
A=exp(-1i*2*pi*d.'*sin(theta*R)); %方向矢量
%%%%%%%%%%构建信号模型%%%%%%%%
S=randn(M,Sample); %信源信号,入射信号
X=A*S; %构造接收信号
X1=awgn(X,snr,'measured'); %将白色高斯噪声添加到信号中
% 计算协方差矩阵
Rxx=X1*X1'/Sample;
% 特征值分解
[Gn,D]=eig(Rxx); %特征值分解
EVA=diag(D)'; %将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA); %将特征值排序 从小到大
Gn=Gn(:,I); % 对应特征矢量排序
%%%%%%%%%%% 优化矩阵U %%%%%%%%%
q = EVA(1);
SUM = 0;
for k = N-M+1:N
u = Gn(:,k);
SUM = SUM+(EVA(k)*u*u')/(q-EVA(k))^2;
end
U = q*SUM;
%%%%%%%遍历每个角度,计算空间谱%%%%%%
for A = 1:361
angle(A)=(A-181)/2;
phim=R*angle(A);
a=exp(-1i*2*pi*d*sin(phim)).';
G=Gn(:,1:N-M); % 取矩阵的第1到N-M列组成噪声子空间
Pmusic(A)=(a'*U*a)/(a'*G*G'*a);
end
Pmusic=abs(Pmusic);
Pmmax=max(Pmusic)
h=plot(angle,Pmusic);
set(h,'Linewidth',2);
xlabel('入射角/(degree)');
ylabel('空间谱/(dB)');
set(gca, 'XTick',[-90:30:90]);
grid on;
算法结果:
小小的总结:
改进的MUSIC算法相比于基础班MUSIC,个人认为所改进的地方可以由最后得到的谱峰所观察到,在代码一开始需要设置的三个入射角大家可以进行变动,改进版本的MUSIC可以更好的区分出相邻的谱峰,即入射角差不多的时候改进版的MUSIC不会将相邻很近的两个谱峰识别成一个。
具体的算法过程大家可以翻阅张贤达老师的教材**(如果没有欢迎私信)**
如果有需要改进的地方,欢迎大家探讨!