很多同学在BELLHOP Actup原指南中找不到 BELLHOPdata.m 文件,同时存在程序代码的缺失等问题,在利用Actup时无法很好的工作。这里提供了本人编写的Actup使用说明书点击打开链接,以及相关代码点击打开链接。
这里在Matlab代码中再次详细说明BELLHOP 关于Actup冲激响应的绘制。
(1)首先利用Actup得到幅度和相位.arr文件。详细配置方式请参考本人编写的使用说明书。
(2)利用工具箱自带的read_arrivals_asc(filename)函数(可以通过搜索的方式找到该函数)获取幅度、相位、角度等数据。如下列代码所示。
clear clc filename = 'Test_00100.arr'; Minimum_range=100 %(接收水听器的水平方向上接收范围最小值,m)----R Maximum_range=1000 %(接收水听器的水平方向上接收范围最大值,m)---RB [ amp1, delay, SrcAngle, RcvrAngle, NumTopBnc, NumBotBnc, narrmat, Pos ]... = read_arrivals_asc( filename );
(3)根据需要绘制单位冲激响应。注意这里amp和delay的维度。这里由于在水平方向设置了50个接收机,因此这里的amp和delay是2维数据。图中选取最大的m值,表示选取第50号接收机的幅度和时延。如果设置水平和垂直方向均有接收机,则会使得amp和delay是3维数据,这里就需要根据实际情况取自己设定位置的接收机的幅值和时延。(这里可以参考本人编写的说明书第8章内容)
%%单位冲激响应 [m,n]=size(amp1); amp = abs(amp1); %取模 x = delay(m,:); %获取第50个接收机的时延和幅值 y = amp(m,:); figure(1) stem(x,y) grid on xlabel('相对时延/s') ylabel('幅度') title('单位冲激响应')
(4)绘制归一化冲激响应。
%%归一化冲激响应 Amp_Delay = [x;y]; Amp_Delay(:,all(Amp_Delay==0,1))=[]; %去掉0值 Amp_Delay=sortrows(Amp_Delay',1); %按照时延从小到大排序 normDelay = Amp_Delay(:,1)-Amp_Delay(1,1);%归一化时延 normAmp = Amp_Delay(:,2)/Amp_Delay(1,2);%归一化幅度 figure(2) stem(normDelay,normAmp,'^') grid on xlabel('相对时延/s') ylabel('归一化幅度') title('归一化冲激响应')
(5)绘制距离时延图。
figure(3) mum=1:m; ReRange = Minimum_range+(Maximum_range-Minimum_range)/m*mum; for i=1:min(narrmat) plot(delay(:,i),ReRange,'o') hold on end hold off grid on colorbar xlabel('时延(sec)') ylabel('Range(m)') title(filename)