二维声速环境下的声线仿真
背景与理论
之前学习了基础的Bellhop使用,即在水平海底情况下,对声速是深度函数,即c(z),进行声线的跟踪。由于这一种使用已经可以满足大部分情况下的需求了,就没有进行更深入的学习了。但是最近在《水声学原理》课程上老师布置了一个作业,需要调整水平声速的变化,故对Bellhop仿真二维海水声速环境下的声线跟踪进行了学习,并总结一些近来使用Bellhop的小tips。
- 水声学课程作业
- 仿真效果示意图
负水平声速梯度环境下,随着水平坐标增大,深海声道中下反转点深度减小,上反转点深度增大。
二维声速剖面设置
如上一篇Bellhop的文章中说到,Bellhop运行前首先编写.env文件,这是Bellhop调用的环境参数文件,其中包括了设置的海洋环境、计算选项等,这里不再赘述。为了使用声速场,需要对声速剖面参数进行更改,即第四行的options1,这是SSP-TOP-WATER参数,表征了声速梯度、海面水体参数。
这里是由单引号括起来的的五个字符的字符串,如不设置可以不写。以下为五个参数的详细说明:
这里我们的声速场就是使用OPTIONS1(1)中Q,对声场进行二次逼近,即此行我们使用‘QVW’。使用Q参数需要建立声速场文件.ssp文件。
9
0.0 12.5 25.0 37.5 50.0 75.0 100.0 125.0 225.0
1536 1536 1536 1536 1536 1536 1536 1536 1536
1506 1508.75 1511.5 1514.25 1517 1520 1524 1528 1528
1503 1503 1503 1502.75 1502.5 1502 1502 1502 1502
1508 1507 1506 1505 1504 1503 1501.5 1500 1500
1508 1506.6 1505 1503.75 1502.5 1500.5 1499 1497 1497
1497 1497 1497 1497 1497 1497 1497 1497 1497
1500 1500 1500 1500 1500 1500 1500 1500 1500
1512 1512 1512 1512 1512 1512 1512 1512 1512
1528 1528 1528 1528 1528 1528 1528 1528 1528
1545 1545 1545 1545 1545 1545 1545 1545 1545
这里,第一行的数字表示水平分段数,上例中9表示水平上分为九个声速。第二行是水平分段位置,上例中分别在0,12.5,25,37.5,……225km处分段,Bellhop在这里并不是断崖式分段,而是一种逼近,上述声速表现出来的声速场如下图:
运算结果
运算代码如下
clc; clear all; close all;
global units; units = 'km';
plotssp2d('gulf');%画声速剖面图
figure;
subplot(311); bellhop('gulf');plotray('gulf');%env文件运行参数为A,追踪声线,写入振幅和传播时间,画出声线
subplot(312); bellhop('gulf_E');plotray('gulf_E');%env文件运行参数为E,计算并画出本征声线
subplot(313); bellhop('gulf_C');plotshd('gulf_C.shd');%env文件运行参数为C,计算相干传播损失
运算后,计算结果图如下:
- 图一:声速场伪彩图
- 图二:声速剖面图
- 图三,依次为声线图、本征声线、相干传播损失
一些Bellhop的小tips
- 关于运行错误如何排除
使用Bellhop时,有个最难过的点就是当我们写的环境参数文件.env文件出错导致运行错误时,Matlab不报错,只是运行结果出错,或者运行结束。这时我们可以打开.prt文件,其中会有详细的运行信息,解决我们的问题。 - 关于提取声线信息
在Bellhop中运行参数为A时,可以获得不同的声线振幅和传播时间,这时这些信息都存储在.arr文件中,可以使用函数read_arrivals_asc提取这些信息,这个函数在bellhop工具包中。
[ Arr, Pos ] = read_arrivals_asc( 'flatwav_UUV1_target.arr' );
具体提取出来的Arr和Pos中存储了多种信息,就请各位自行探索吧。