最近一段时间,对浅海的一些特性进行了学习,相应的需要BELLHOP软件作为辅助。说到BELLHOP,其实就是一种水声工具箱,可以进行水声计算,通过env文件调整环境参数,得到对应的声线信息、多途信息等。网上有BELLHOP的使用指南,另外BELLHOP工具包里自带的压缩包/at_wintel/doc文件夹中对env文件各参数做了详细介绍,在这里就不赘述了,只讲述一些经常需要修改的参数和生成信息,其他的参数在特定环境下需要用到再去查阅该参数的含义等。
我在使用的时候,是在MATLAB中进行操作的,获取导出数据也比较方便(其实有界面那个我也没整明白),所以需要将bellhop的路径添加到matlab中,方便调用其中的库。
File——>Set Path——>Add with Subfolders——>将工具压缩包所在路径下的at_Wintel整个文件夹添加至路径。
利用m脚本文件,运用matlab中的fprintf对.env文件进行参数配置。逐行是:
名称-频率-介质-插值类型-点数&海洋环境深度范围-声速剖面-声源个数-声源深度-接收个数-接收深度-水平向距离个数-水平向距离范围-运行类型-波束数-起止角度(发射)-步长和坐标轴范围。脚本程序如下。按照自身需要的环境设置好之后bellhop文件名即可,脚本中已经加了bellhop,直接运行即可(但是参数需要自己设置)。其中run_class为A时,生成的是多途信息,选择R时,可直接生成声线图。
fid=fopen([filename,'.env'],'wt+');%文件名
fprintf(fid,'%-30s\n','xxx'); %name
fprintf(fid,'%5.1f\n',f); % frequency
fprintf(fid,'%5g\n',1); % Nmedia
fprintf(fid,'%-s',interpret_type);%选择插值类型
fprintf(fid,'%s','V');%选择插值类型
fprintf(fid,'%s\n',att_type);%选择插值类型
fprintf(fid,'%5g %5g %5g\n',0,0.0,depth);% number of point, min_depth,max_depth
for ii=1:m
fprintf(fid,'%7.1f %6g %s\n',A(ii,1),A(ii,2),'/'); %SSP
end
fprintf(fid,'%-5s %5.1f\n','A*',0.0);%海底类型&粗糙度
fprintf(fid,'%-7.1f %-9.2f %-7.2f %-9.2f %-7.5f %-7.2f %s\n',depth,cpm2,ctm2,rho2,att_p,att_s,'/');%海底参数
fprintf(fid,'%-5g\n',1);%number of SD
fprintf(fid,'%-5g %s\n',depths,'/');%SD
fprintf(fid,'%-5g\n',1);%number of RD
fprintf(fid,'%-5g %s\n',depthr,'/');%RD
fprintf(fid,'%-5g\n',Nrr);%number of R_distantce
fprintf(fid,'%f %f %s\n',start_distance,end_distance,'/');
fprintf(fid,'%s%s\n',run_class,beamtype);
fprintf(fid,'%-7g\n',Nbeams);%Nbeams
fprintf(fid,'%-5g %-5g %s\n',start_degree,end_degree,'/');%起止角度fprintf(fid,'%-4.1f %-6.1f% -5.1f%s\n',step,zbox,Rbox,'/' );%起止角度
fclose(fid);
bellhop(filename);
有时候需要用到多途信息(例如我需要得到该环境下的信道冲激响应,并图形化)。那么以此为例,需要在.env文件中选择run_class=A.对得到的.arr文件进行信息提取。
首先对arr文件中的数据进行说明。例如下图中为我在300KHz发射频率,水下1m深的1个声源,50个接收点个数条件下生成的arr文件。从第五行开始,属于声线信息,L.5的77代表接收的声线数目最大值(即50个接收点接收的声线数目不同,从50个值里面选取数目最多的声线数目作为maxarr)。而对每个接收点,最开始(eg.L.6)代表该点接收的声线数目,之后从左到右(按列)依次是幅值、相位、时延、声源处掠射角、接收点处掠射角。(后面的0、1用于声线颜色控制,未用到)。
300000.00000000000 1 1 50
1.0000000
2.0000000
10.000000 11.836735 13.673470 15.510204 17.346939 19.183674 21.020409 22.857143 24.693876 26.530613 28.367346 30.204082 32.040817 33.877552 35.714287 37.551018 39.387756 41.224491 43.061222 44.897957 46.734695 48.571430 50.408161 52.244900 54.081635 55.918365 57.755100 59.591839 61.428574 63.265308 65.102043 66.938774 68.775513 70.612244 72.448975 74.285713 76.122444 77.959190 79.795921 81.632652 83.469391 85.306122 87.142853 88.979591 90.816330 92.653061 94.489799 96.326530 98.163261 100.00000
77
19
2.79809668E-04 180.00000 6.95161847E-03 -19.545454 19.545454 1 0
3.91941797E-03 180.00000 6.95622666E-03 -18.636364 18.636364 1 0
2.01009810E-02 180.00000 6.95908396E-03 -17.727272 17.727272 1 0
3.78686860E-02 180.00000 6.96018944E-03 -16.818182 16.818182 1 0
2.62399763E-02 180.00000 6.95954263E-03 -15.909091 15.909091 1 0
6.68257987E-03 180.00000 6.95714355E-03 -15.000000 15.000000 1 0
6.23768254E-04 180.00000 6.95299311E-03 -14.090909 14.090909 1 0
2.12382893E-05 180.00000 6.94709271E-03 -13.181818 13.181818 1 0
3.06984839E-05 0.0000000 6.68786000E-03 2.2727273 2.2727273 0 0
8.26534757E-04 0.0000000 6.69339253E-03 3.1818182 3.1818182 0 0
8.12163390E-03 0.0000000 6.69724029E-03 4.0909090 4.0909090 0 0
2.92595606E-02 0.0000000 6.69940189E-03 5.0000000 5.0000000 0 0
3.87486890E-02 0.0000000 6.69987686E-03 5.9090910 5.9090910 0 0
1.88737158E-02 0.0000000 6.69866521E-03 6.8181820 6.8181820 0 0
3.37629160E-03 0.0000000 6.69576740E-03 7.7272725 7.7272725 0 0
2.21053531E-04 0.0000000 6.69118389E-03 8.6363640 8.6363640 0 0
1.86470188E-05 0.77806765 1.04337493E-02 43.181820 -52.329662 0 1
3.51262075E-04 0.75650609 1.04414858E-02 44.090908 -53.238750 0 1
2.41991039E-03 0.73622096 1.04465941E-02 45.000000 -54.147842 0 1
读取后的数据输入的是arr文件,输出分别是水平向距离点、幅值、时延、声源处声线掠射角。如下:
[R,Newamp,Newdelay,NewRcvrAngle] = readnchoose(filename);
按时间顺序,即时延顺序排序后,按序做运算生成冲激响应函数。
%单点冲激响应h(tao)=ΣA*δ(tao-taoi)
for i=1:length(R)
for k=1:size(NewRcvrAngle_new,2)
for m=1:size(NewRcvrAngle_new,2)
h(i,(k-1)*m+m)
=Newamp_new(i,k)*exp(j*NewRcvrAngle_new(i,k)*pi/180)
*Newamp_new(i,m)*exp(j*NewSrcAngle_new(i,m)*pi/180);
end
end
end
%散射特性
for i=1:N
p1(i,:)=ain(i)*h_point_nonzero_merge(1,:)*exp(j*fai(i));
p_sum=p_sum+p1(i,:);
end
图片传不上去,本来有个画好的冲激响应图,大家自行看包络吧,符合高斯分布。