资源简介
圆阵波束形成 包括时延,相移,频域波束形成相关知识
代码片段和文件信息
function [powerpowerdBdoasignal_out]=Beamforming_CircleArray(stylemethodscandthitasigRNf0fsW)
%--------------2012-02-17------------------------------
% 圆弧阵波束形成,360度全方位扫描
% 输入: style :信号形式 1---窄带信号(单频信号) 2---宽带信号(LFM)
% method : 波束形成算法类型
% “1”--- 时域的时延波束形成
% “2”--- 相移波束形成
% “3”--- 频域波束形成
% “4”--- 经过三次FFT的频域波束形成,延迟滤波器和输入信号在频域相乘
% scan : 开角范围(单位:度)
% dthita : 扫描步长 (单位:度)
% sig : 圆阵输入信号
% R : 圆阵半径
% N : 阵元个数
% f0 : 窄带的中心频率或者宽带的最小频率
% fs :采样率
% W : 加权值
% 输出: power :能量
% powerdB : 能量归一化分贝输出
% doa : 信号波达方向( 单位:度)
% signal_out : 波束在预成方向上叠加后的输出信号,每一行代表一个方向上的输出
%---------------------------------------------------------
c=1500; %%默认声速为1500m/s
[sig_Nsig_len]=size(sig);
if( sig_N ~= N )
error(‘信号和圆阵个数不匹配‘);
end
if ( style ~=1 & style ~=2 )
error(‘请正确选择输入信号类型‘);
end
if ( method ~=1 & method ~=2 & method ~=3 & method ~=4 )
error(‘请正确选择波束形成算法‘);
end
psi = 2 * pi *(0:N-1) / N; %%圆心角
thita=[0:dthita:359]*pi/180;
power=zeros(1length(thita));
scan_begin = thita - scan *pi/180/ 2;
scan_begin( scan_begin < 0 ) = scan_begin( scan_begin < 0 )+2*pi;
scan_end = thita + scan * pi/180/ 2;
scan_end(scan_end >= 2*pi) = scan_end(scan_end >= 2*pi)-2*pi;
flag=zeros(length(thita)N); %% 标志位,对应位为1时,表示该号阵元参与计算
%%---------- 确定预成方向上参与计算的阵元号存入flag中 ----
for a=thita
index=round(a/(dthita*pi/180)+1);
if( scan_end (index) / (scan_begin (index)+eps) <= (1.0+0.0001))
flag(indexfind(scan_begin (index)./ (psi+eps) <=(1.0+eps)))=1;
flag(indexfind((psi-eps) ./(scan_end (index)+eps) <= (1.0+eps)))=1;
else
flag(indexfind(scan_begin (index)./(psi+eps) <= (1.0+eps) & psi ./(scan_end (index)+eps)<= (1.0+eps)))=1;
end
end
%%-------------------------------------------------------------
if( method == 1) %%---- 时延波束形成对入射信号不限制,窄带、宽带均可 ( method == 1) ----
beishu=1;
%%---- 升采样(可选) ----
% beishu=10;
% sig=resample(sig.‘beishu1);
% sig=sig.‘;
% fs=fs*beishu;
% sig_len=sig_len*beishu;
%%------------------------
MaxTao=round(2*R/c*fs);
for a=thita
% a*180/pi
sig_buchang=zeros(Nsig_len+MaxTao);
index=round(a/(dthita*pi/180)+1);
Number_Array_InUse=find(flag(index:)==1);
Ntao0=round(R*(1-cos(a-psi(Number_Array_InUse)))/c*fs);
for kk=1:length(Number_Array_InUse)
sig_buchang(Number_Array_InUse(kk)MaxTao-Ntao0(kk)+1:MaxTao-Ntao0(kk)+sig_len)=sig(Number_Array_InUse(kk):);
end
sig_buchang=resample(sig_buchang.‘1beishu);
sig_buchang=sig_buc
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-09-11 15:42 CircleBeamforming\
文件 7420 2014-09-11 15:34 CircleBeamforming\Beamforming_CircleArray.m
文件 3830 2014-02-28 16:41 CircleBeamforming\CreateSignal_CircleArray.m
文件 2040 2014-09-11 15:44 CircleBeamforming\Simulation1.m
评论
共有 条评论