博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矢量水听器 近场 远场 --------------------常规波束形成,MVDR的比较
阅读量:4562 次
发布时间:2019-06-08

本文共 3286 字,大约阅读时间需要 10 分钟。

摘自《水平线阵的反卷积常规波束形成》,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

转载于:https://www.cnblogs.com/kiki--xiunai/p/10787295.html

你可能感兴趣的文章
图片上传
查看>>
中间件与auth认证的那点儿所以然
查看>>
Scala
查看>>
Android 中LinearLayout控件属性
查看>>
面向对象之多态性
查看>>
树状数组
查看>>
【2019.8.14 慈溪模拟赛 T1】我不是!我没有!别瞎说啊!(notme)(BFS+DP)
查看>>
pyqt动画的使用
查看>>
pyqt 自定义信号
查看>>
多任务--进程 及 进程间通信
查看>>
多线程/多进程+QProgressBar实现进度条
查看>>
多任务(进程)案例----- 拷贝文件夹
查看>>
Kotlin的快速入门
查看>>
python 虚拟环境的 安装与 使用 和修改为豆瓣源
查看>>
js 快速入门
查看>>
Python 中的GIL
查看>>
如何解决ASCII 字符显示不出来的情况
查看>>
制表符 \t 的用法
查看>>
断点模式
查看>>
Ubuntu 侧边栏和顶栏设置
查看>>