zoukankan      html  css  js  c++  java
  • 矢量水听器 近场 远场 --------------------常规波束形成,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

  • 相关阅读:
    (第九周)视频发布及git统计报告
    (第九周)团队项目16
    (第九周)团队项目15
    (第九周)团队项目14
    C# 中请求数据方式
    C#中Json和List/DataSet相互转换
    C#枚举注释实例
    C#常用简单线程实例
    C#动态多线程实例
    MySql中文乱码
  • 原文地址:https://www.cnblogs.com/kiki--xiunai/p/10787295.html
Copyright © 2011-2022 走看看