Bellhop
Bellhop,是一种水声工具箱,可以进行水下声学仿真,通过env文件设置环境参数,可得到与之对应的声线信息、多途等仿真,本博文并不着重介绍Bellhop的使用经验,主要介绍env文件的设置。使用东泰山版本即可,他的介绍已经很详细了,同时还有Acoustics Toolbox官方及时更新的版本。
env文件说明
env文件是Bellhop仿真中最先要解决的文件编辑,包含了对声场中基础参数的设计。env文件通过Bellhop工具仿真后会输出多个文件,我个人主要应用 .arr文件 和 .shd文件。
以下为Bellhop输出的三个文件说明:
.arr文件:描述声线到达的时间序列;
.shd文件:描述声线的传播损失;
.ray文件:描述声线和本征声线。
先看一个典型的env文件大致包含了什么:
标题等
'kenvintest' ! TITLE 标题
6000.0 ! FREQ(Hz) 声波频率
1 ! NMEDIA 介质分层数 传播介质个数为 1
上端属性
选择模式说明:
甲
主要描述了 Bellhop 为了计算声速以及沿着声线相关的其他参数而采用的一些插值方法,下面是为声速剖面进行插值。
选项 | 说 明 |
---|---|
C | C-线性插值 |
N | N2-线性插值(n 是折射率) |
S | 三次样条插值 |
Q | 2D SSP 四边形插值(只用于 BELLHOP,从文件中读取 .ssp 文件。) |
H | 3D SSP 六面体插值(只用于 BELLHOP3D,从文件中读取 SSP) |
A | 解析值 用户必须修改 ANALYT.FOR 中的解析公式,然后再编译和链接。 |
乙
主要描述海水表面的类型
选项 | 说 明 |
---|---|
V | 表面真空 |
R | 表面完全刚性的硬物 |
A | 声学半空间 |
F | 从一个*.brc 文件读入反射系数 |
S | 用于“软层(Soft-boss)”Twersky 散射 |
H | 用于“硬层(Hard-boss)”Twersky 散射 |
T | 只用于“软层(Soft-boss)”Twersky 散射的幅度 |
I | 只用于“硬层(Hard-boss)”Twersky 散射的幅度 |
其中在描述为“A”的声学半空间中,SURFACE-LINE 格式如下:
z-surface | cp-surface | cs-surface | density-surface | AP-surface | AS-surface |
---|---|---|---|---|---|
深度 | 纵波声速 | 横波声速 | 表面密度 | 纵波吸收系数 | 横波吸收系数 |
如果不选’A’,Bellhop 只用到前两个参数(每行要以“/” 结尾,其余参数用默认的),后面的参数是其他模型使用的。
丙
描述底部的衰减所用的单位。
选项 | 说 明 |
---|---|
F | (dB/m)kHz, F 指与频率相关 |
L | 衰减单位对应于参数损失 损失参量(又称损失切线) |
M | dB/m,M 指每米 |
N | Nepers/m |
Q | 品质因子 |
W | dB/λ, W 指波长 |
丁
可选参数,如果描述声音的 Thope Volume 衰减,要设置为“T”
戊
可选参数,用.ati 文件来描述海面边界形状要设置为’*’,如可以描述为高斯波浪等所需的海面形状。
根据以上选择模式为CVMT
'CVMT' ! SSPOPT 模式1
0 0.0 28.0
! 分别对应:NMESH内部离散化使用的网格点数。
!SIGMA--界面 RMS 粗糙度。BELLHOP 和 SPARC 忽略此值。
!DEPTH_of_BOTTOM (m)--介质底端的深度(m)
声速曲线
0.0 1528.6 /
1.0 1528.5 /
2.0 1528 /
3.0 1527 /
4.0 1526.5 /
5.0 1526 /
6.0 1526 /
7.0 1525.8 /
8.0 1524 /
9.0 1517 /
10.0 1505 /
11.0 1500 /
12.0 1496 /
13.0 1493 /
14.0 1490.5 /
15.0 1488 /
16.0 1485.5 /
17.0 1483 /
18.0 1480 /
19.0 1477 /
20.0 1475 /
21.0 1473 /
22.0 1471 /
23.0 1469 /
24.0 1466 /
25.0 1460 /
26.0 1458 /
27.0 1457.5 /
28.0 1455 /
声线图为:
底部半空间属性
和上端属性类似,主要参考乙
,这里选择A
模式
'A' 0.0
28 1800.0 0.0 1.84 0.3 0.0 /
收发设置
以下是对于发射和接收的单元个数、距离的说明。
1 ! NSD-- The number of source depths ,声源在垂直方向上个数,一般小于50;
20 ! SD(1:NSD) (m)-- The source depths (m),声源的深度;
1 ! NRD-The number of receiver depths,接收水听器的垂直方向上个数 (NRD<101 and NR*NRD<= 52000);
30 / ! RD(1:NRD) (m)--The receiver depths (m),接收水听器的深度;
1 ! NRR--The number of receiver ranges,接收水听器的水平方向上个数(NR<1001 and NR*NRD<= 50000);
0.2 / ! RR(1:NR ) (km)The receiver ranges (km),接收水听器的水平接收范围;
输出描述
用五个字母来描述输出选项,分别对应了:
选项 | 说 明 |
---|---|
A | 幅度和传播时间 |
E | 本征声线坐标 |
R | 声线坐标 |
C | 相干声压 |
I | 非相干声压 |
S | 半相干声压 |
在我的仿真中选择A
,最终输出为幅度和传播时间。
'A' ! Run-type: ’R/C/I/S’
其他设置
10 ! NBEAMS--波束数目。设为 0 时,程序会自动计算一个值。
-20 20 / ! ALPHA(1:NBEAMS) (degrees)--开扇角度。
0 50 2.5 ! STEP (m) ZBOX (m) RBOX (km) 对应的有STEP--声线跟踪的步长,ZBOX--The maximum depth to trace a ray (m),接收水听器的最大深度,RBOX--The maximum range to trace a ray (km),接收水听器与声源的最
大水平距离。
其他说明
在以上设置中我们使用的是的单发单收,实际环境中涉及的会有多个,例如单发多收的情况,在收发设置
单元中,我们做一下设置说明。
单发单收
1 ! NSD-- The number of source depths ,声源在垂直方向上个数,一般小于50;
20 ! SD(1:NSD) (m)-- The source depths (m),声源的深度;
1 ! NRD-The number of receiver depths,接收水听器的垂直方向上个数 (NRD<101 and NR*NRD<= 52000);
30 / ! RD(1:NRD) (m)--The receiver depths (m),接收水听器的深度;
1 ! NRR--The number of receiver ranges,接收水听器的水平方向上个数(NR<1001 and NR*NRD<= 50000);
0.2 / ! RR(1:NR ) (km)The receiver ranges (km),接收水听器的水平接收范围;
以图形的方式展现如下
单发多收
同一距离
这种情况下的接收为同一距离下的不同深度,设置如下:
1 ! NSD-- The number of source depths ,声源在垂直方向上个数,一般小于50;
100 ! SD(1:NSD) (m)-- The source depths (m),声源的深度;
2 ! NRD-The number of receiver depths,接收水听器的垂直方向上个数 (NRD<101 and NR*NRD<= 52000);
30 50 / ! RD(1:NRD) (m)--The receiver depths (m),接收水听器的深度;
1 ! NRR--The number of receiver ranges,接收水听器的水平方向上个数(NR<1001 and NR*NRD<= 50000);
0.2/ ! RR(1:NR ) (km)The receiver ranges (km),接收水听器的水平接收范围;
以图形的方式展现如下
在我的仿真中,设置声线数为20的时候,下图中debug后的Narr显示为[2,1]
,即代表了接收1和接收2分别对应的到达次数为2和1。
不同距离
这种情况下为不同距离下的接收,设置如下:
1 ! NSD-- The number of source depths ,声源在垂直方向上个数,一般小于50;
100 ! SD(1:NSD) (m)-- The source depths (m),声源的深度;
2 ! NRD-The number of receiver depths,接收水听器的垂直方向上个数 (NRD<101 and NR*NRD<= 52000);
150 300 / ! RD(1:NRD) (m)--The receiver depths (m),接收水听器的深度;
2 ! NRR--The number of receiver ranges,接收水听器的水平方向上个数(NR<1001 and NR*NRD<= 50000);
1 2/ ! RR(1:NR ) (km)The receiver ranges (km),接收水听器的水平接收范围;
以图形的方式展现如下
同样的设置声线数为20的时候,下图中debug后的Narr显示为[2,1],[6,2]
,即代表了接收1、接收2、接收3、接收4分别对应的到达次数为2、1、6、2。
完整env文件
以下为一段较为完整的env
文件。
'SH Lake Freq = 6 kHz, Sd = 30 m' ! TITLE
6000.0 ! FREQ(Hz)
1 ! NMEDIA
'CVMT' ! SSPOPT
0 0.0 28.0 ! NMESH SIGMA DEPTH_of_BOTTOM (m)
0.0 1528.6 /
1.0 1528.5 /
2.0 1528 /
3.0 1527 /
4.0 1526.5 /
5.0 1526 /
6.0 1526 /
7.0 1525.8 /
8.0 1524 /
9.0 1517 /
10.0 1505 /
11.0 1500 /
12.0 1496 /
13.0 1493 /
14.0 1490.5 /
15.0 1488 /
16.0 1485.5 /
17.0 1483 /
18.0 1480 /
19.0 1477 /
20.0 1475 /
21.0 1473 /
22.0 1471 /
23.0 1469 /
24.0 1466 /
25.0 1460 /
26.0 1458 /
27.0 1457.5 /
28.0 1455 /
'A' 0.0
28 1800.0 0.0 1.84 0.3 0.0 /
1 ! NSD
6 !SD(1:NSD) (m)
1 ! NRD
3 / ! RD(1:NRD) (m)
1 ! NRR
2 / ! RR(1:NR ) (km)
'A' ! Run-type
20 ! NBEAMS
-20 20 / ! ALPHA(1:NBEAMS) (degrees)
0 50 2.5 ! STEP (m) ZBOX (m) RBOX (km)
经过bellhop后的env
会产生对应的文件,因为设置为'A' ! Run-type
,所以产生以下文件。
其他
关于如何使用Bellhop可参见东泰山版本的使用说明,如果你习惯使用Python平台,可参见我个人关于Bellhop的Python版本的设置说明。