logo资料库

MUSIC和ESPRIT程序代码.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
MUSIC 和 ESPRIT 程序(仅供参考学习) 本人最近做 DOA 估计,MUSIC 和 ESPRIT 算法是最经典的算法,看到很多初学者都在求 助 MUSIC 和 ESPRIT 的程序,其实大家只要把原理搞明白了,很简单的。下面我把我编的程序 奉献给大家,仅供大家参考,如果有错误和不足之处请指正。 鉴于有些人下了程序不看为什么,就直接复制、粘贴了,我把程序转化为 PDF 文档,进 行了加密处理,不能复制,只能看,相信你看懂了自热就明白了,程序只是算法的实现而已, 最重要的是算法。 另外 MUSIC 和 ESPRIT 算法都需要进行特征分解,在雷达上应用受到限制,建议大家研究 下 DOA 的并行运算、非特征分解的 DOA 估计和一次快拍的 DOA 估计,有兴趣的同学可以和 我交流,大家共同进步。 程序我是经过测试过的,没有任何问题,如果你在仿真时出了问题请检查下你敲的代码 是不是有问题。 clc clear all format long N=200;%%快拍数 doa=[20 40]/180*pi; %%信号到达角, w=[pi/4 pi/3]';%%信号频率 M=8;%%阵元数 P=length(w); %%信号个数,也可以用特征分解的大特征值来决定 lambda=150;%波长 d=lambda/2;%阵元间距 snr=15;%%信噪比 %%%导向向量 B=zeros(P,M); for k=1:P B(k,:)=exp(-j*2*pi*d*sin(doa(k))/lambda*[0:M-1]); end B=B'; %%%导向向量 xx=2*exp(j*(w*[1:N])); %生成信号 x=B*xx; %%%%噪声平均 因为matlab产生的噪声不太好,不是严格意义上的白噪声, %%%平均后结果更好 [pp,ppp]=size(x); xx=zeros(pp,ppp); cycle=200; for kkk=1:cycle xx=xx+awgn(x,snr); end x=xx/cycle; %%%%噪声平均结束 R=x*x'; %数据协方差矩阵 %针对相干源的时候进行平衡 J=fliplr(eye(M)); R=R+J*conj(R)*J; By han in HIT 2010-4-14
MUSIC 和 ESPRIT 程序(仅供参考学习) %%%%以下是MUSIC的程序 [U,V]=eig(R); UU=U(:,1:M-P); theta=-90:0.5:90; %%谱峰搜索 for ii=1:length(theta) AA=zeros(1,length(M)); for jj=0:M-1 AA(1+jj)=exp(-j*2*jj*pi*d*sin(theta(ii)/180*pi)/lambda); end WW=AA*UU*UU'*AA'; Pmusic(ii)=abs(1/WW); end Pmusic=10*log10(Pmusic/max(Pmusic)+eps); figure(1) plot(theta,Pmusic) xlabel('Angle \theta/degree') ylabel('P(\theta) /dB') title('Spectrum') grid on %%%%MUSIC程序结束 %%以下是ESPRIT程序 Rxx=R(1:M-1,1:M-1);%%%M-1维的自相关函数 Rxy=R(1:M-1,2:M);%%%M-1维的互相关函数 b=[zeros(1,M-2);eye(M-2)]; b=[b zeros(M-1,1)]; Cxx=Rxx-min(eig(Rxx))*eye(M-1); Cxy=Rxy-min(eig(Rxx))*b; a=eig(Cxx,Cxy); %找出最接近1的a值其对应的角度即为φ a1=abs(abs(a)-1); for i=1:P [c,d]=min(a1); a1(d)=1000; bb(i)=a(d); a(d)=1000; end if P>1 disp('The angles of signals are') else disp('The angle of signal is') end DOA=asin(angle(bb)/pi)/pi*180 %%%%ESPRIT程序结束 By han in HIT 2010-4-14
分享到:
收藏