• 矢量水听器 近场 远场 --------------------常规波束形成,MVDR的比较


    摘自《水平线阵的反卷积常规波束形成》,IRONMAN---------------------------------------------------

      在常规的波束形成中,是将阵列上的每个接收机的同时刻数据乘上一个预设的系数然后求和并最终得到一系列的具有特定指向性的波束。但是由此得到的波束它的主瓣宽度很宽而且旁瓣衰减有限,能量泄漏很严重。为了解决这些问题,许多的学者提出了一些高分辨的波束形成算法,MVDR和DMR就是其中的代表。然而这些算法虽然能够得到很窄的波束宽度和低的旁瓣级,但是需要大量的数据样本来估计数据的协方差矩阵(如MVDR),计算量很大,而且当目标方位变化很快的时候,这种方法的性能将大打折扣甚至变得不稳定。对于DMR其需要事先知道目标的个数这一先验知识,而往往目标的个数事先是未知的,因此它的应用受到了限制。针对这些问题T.C.Yang教授创造性的将解卷积的方法应用到常规波束形成中,效果显著。此方法于2016年首次被提出,文章的题目是Deconvolved Conventional Beamforming for a Horizontal Line Array,在IEEE JOURNAL OF OCEANIC ENGINEERING上发表。为了方便大家阅读,博主将其翻译成了中文版的,如果有什么不对的地方,还请大家批评指正。


            

     

    仿真程序:

    %------------矢量水听器  近场 远场 常规波束形成 MVDR-----0722-----

    clc; clear all; close all;

    %-----------信号模型--------------

    M=12;

    N=1024;

    f0=1000;

    fs=10*f0;

    c=1500;

    lamda=c/f0;   %波长

    w=2*pi*f0;

    k=w/c;

    d=lamda/2;

    t=0:N-1;

    snr=10;%信噪比

    theta=30*pi/180;%入射角度

    A=sqrt(2*10^(snr/10));

    s=A*exp(-j*w*t/fs);

    %----------远场 常规波束形成--------------

    for m=1:M    

    Sp(m,:)=A*exp(-j*(w*t/fs+k*(m-1)*d*cos(theta)))+randn(size(t))/3;    

    Sx(m,:)=A*exp(-j*(w*t/fs+k*(m-1)*d*cos(theta)))*cos(theta)+randn(size(t))/3;    

    Sy(m,:)=A*exp(-j*(w*t/fs+k*(m-1)*d*cos(theta)))*sin(theta)+randn(size(t))/3;

    end

    S=[Sp.',Sx.',Sy.'];

    R=cov(S);

    theta1=-180:180; for i=1:length(theta1)    

    for m=1:M        

    Wp(m)=exp(-j*k*(m-1)*d*cos(theta1(i)*pi/180));        

    Wx(m)=exp(-j*k*(m-1)*d*cos(theta1(i)*pi/180))*cos(theta1(i)*pi/180);        

    Wy(m)=exp(-j*k*(m-1)*d*cos(theta1(i)*pi/180))*sin(theta1(i)*pi/180);    

    end    

    W=[Wp,Wx,Wy];        

    P(i)=W*R*W';    

    Pm(i)=1/(W*(R^-1)*W');

    end

    %-----------归一化-----------------

    pp=max(abs(P));

    P=20*log10(P/pp);

    ppm=max(abs(Pm));

    Pm=20*log10(Pm/ppm);

    %----------------------------------

    figure

    plot(theta1,P);

    title('远场 常规算法波束形成') xlabel('x/角度°') ylabel('y/dB') ;

    %-----------------------------------

    figure

    plot(theta1,Pm);

    title('远场 MVDR算法波束形成') xlabel('x/角度°') ylabel('y/dB')

    %------------------------------------

    figure

    plot(theta1,P,'r-',theta1,Pm,'b:');

    title('远场 常规与MVDR算法波束形成'); xlabel('x/角度°'); ylabel('y/dB'); legend('常规算法','MVDR算法');

    %----------近场 波束形成--------------

    x0=15; y0=20; % 目标位置x0              % 目标位置y0

    for m=1:M    

    theta2(m,:)=atan(y0/(x0-(m-1)*d));    

    r(m,:)=sqrt(y0^2+((x0-(m-1)*d))^2);   

    SMp(m,:)=A*exp(-j*(w*t/fs+k*r(m,:)))+randn(size(t))/3;    

    SMx(m,:)=A*exp(-j*(w*t/fs+k*r(m,:))).*cos(theta2(m,:))+randn(size(t))/3;    

    SMy(m,:)=A*exp(-j*(w*t/fs+k*r(m,:))).*sin(theta2(m,:))+randn(size(t))/3;

    end

    SM=[SMp.',SMx.',SMy.'];

    RM=cov(SM);

    x=-30:0.5:30;

    y=-30:0.5:30;

    for xx=1:length(x)       

    hwait=waitbar(0,'请等待>>>>>>>>');   

    step=length(x)/100;    

    if length(x)-xx<=5        

    waitbar(xx/length(x),hwait,'即将完成');         

    pause(0.1);       

    else        

    PerStr=fix(xx/step);        

    str=['正在运行中',num2str(PerStr),'%'];        

    waitbar(xx/length(x),hwait,str);        

    pause(0.1);    

    end      

    close(hwait);            

    for yy=1:length(y)        

    for m=1:M          

    theta3=atan(y(yy)/(x(xx)-(m-1)*d));          

    r2=sqrt(y(yy)^2+((x(xx)-(m-1)*d))^2);          

    WMp(m)=exp(-j*k*r2);          

    WMx(m)=exp(-j*k*r2)*cos(theta3);          

    WMy(m)=exp(-j*k*r2)*sin(theta3);        

    end        

    WM=[WMp,WMx,WMy];        

    PP(xx,yy)=WM*RM*WM';        

    PPm(xx,yy)=1/(WM*(RM^-1)*WM');    

    end

    end  

    size(xx) size(yy) size(PP)

    figure

    imagesc(x,y,abs(PP'))  colorbar; colormap gray;

    title('近场 常规算法波束形成') xlabel('x/米'); ylabel('y/米'); axis xy;

    figure

    imagesc(x,y,abs(PPm')) title('近场 MVDR算法波束形成') xlabel('x/米'); ylabel('y/米'); axis xy; colorbar; colormap gray;

    参考:

    https://blog.csdn.net/HJ199404182515/article/details/73882953

  • 相关阅读:
    yarn & mapreduce 配置参数总结
    理解配置yarn参数&mapreduce参数
    hive on spark 编译
    sparksql与hive整合
    tachyon与hdfs,以及spark整合
    spark取得lzo压缩文件报错 java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec
    Tachyon 0.7.1伪分布式集群安装与测试
    Apache Spark 1.5.0正式发布
    zeppelin入门使用
    spark standalone模式 zeppelin安装
  • 原文地址:https://www.cnblogs.com/kiki--xiunai/p/10787295.html
Copyright © 2020-2023  润新知