声波传播速度是海洋中最重要的声学参数,它是影响声波在海洋中传播的最基本的物理量参数。有关测量研究表明,水中声速是温度、盐度和静压力的函数,声速随着温度、盐度和压力的增加而增加。海洋的不均匀性和多变性强烈地影响着海洋中的声传播,海水中的声速变化也体现出随着空间和时间变化的复杂性。

多波束测深的本质是测量不同方向上声波传播的时间,利用声波在水中的传播速度,进而计算声波在水中传播的水平距离和深度。在多波束测深声呐一次测量过程中,一个覆盖扇面内存在多个波束对于非垂直入射的波束,即使其入射角度不变,在不同声速环境下的传播轨迹将完全不同。因此水中声速分布情况将对多波束测深结果产生根本的影响,准确获取水中的声速是多波束测量的基础。

声速对多波束测深结果的影响过程是一个综合的复杂过程,主要体现在两个方面一是表层声速对测深结果的影响二是声速剖面对测深结果的影响,且二者是相互影响的。因此,在多波束测深声呐中,即使准确测量了波束方向和传播时间,如果不能根据实际声速分布结构计算测深结果,也将带来较大的测深误差,使测量结果偏离真实地形,从而带来测深假象。由声速引起的测深假象不给予正确的消除,将使测量结果不可用。

一般而言,声速在水平方向上的变化较小,因此可以假设声速只随着深度的变化而变化,而在水平面方向上不变即声速c为深度z的函数c(z),称之为海水中声速的垂直分层模型。声速的垂直分层模型是对实际海洋中声速结构的一种近似理想模型,是解决除远程声速传播问题的基本假设。在分层介质模型中,声速沿垂直深度的分布称为声速剖面,声速剖面一般比较复杂且随着海水介质改变。

在分层介质模型假设下,射线声学所遵循的折射定律Snell定律为:

其中,α0为声波入射方向与水平方向的夹角,称为掠射角,θ0为声波入射方向与垂直方向的夹角,称为入射角;c0为入射层的介质表面的声速,αi、ci分别为出射层表面的声线掠射角和声速。若已知声线的初始掠射角α0和声速剖面,则可以根据斯涅尔(Snell)定律计算不同深度处声线传播的掠射角,从而确定声线传播的方向。

如图所示,由Snell定律可知,在声速随深度变化的情况下,声线(除垂直方向入射外)在水中并非沿直线传播,而是随着声速的变化产生弯曲。当声线从高声速层进入低声速层时,由于声速减小,掠射角增大,声线弯向水底反之当声线从低声速层进入高声速层时,由于声速增大,掠射角减小,声线弯向水面。

基于声速剖面的声线跟踪

声速剖面对测深结果的影响体现在对声线轨迹的改变,从而影响波束脚印空间归位的结果。在多波束深度计算过程中对声线在水中传播路径的跟踪称为声线跟踪。声线跟踪的理论基础为声速分层假设,即任何复杂的声速剖面结构,都可以近似为由多层具有简单结构的声速层组成。此假设是用每个独立层内的声速折线分布来代替整个声速剖面的连续变化。在具体应用中,常用的声速分层形式有常声速分层和常声速梯度分层两种,前者认为每个小层内声速不变,声线沿直线传播后者认为层内声速线性变化,声线沿曲线传播。

基于层内常声速假设的声线跟踪

层内常声速假设模型声速分层如下图所示。

层内常声速时,声线在层内掠射角不变,轨迹为直线。假设波束的初始入射角度为θ0,初始声速为c0,由Snell定律和各层声速ci,可以得到声线在各层中的入射角度由如下关系:

有声线在该层内的传播时间和水平距离分别为:

声线传播经过完整的N-1层后的累计传播时间和水平距离如下:

若声线经过了N-1层折射后仍有时间剩余,记为,但已经不足以穿越完整的第N层时,在第N层传播的深度和水平距离为:

基于层内常梯度假设的声线跟踪

层内常梯度假设模型声速分层如下图所示。

由射线声学基本理论,第i层的声线轨迹曲率为:

其中,θ为声线微元ds的入射角,α为其掠射角,c为ds微元处的声速。由Snell定律当声线在第i层内的初始掠射角αi和初始声速ci,给定时为常数。对于常声速梯度层为常数。因此有为常数,即在第i层内,声线曲率处处相等,为声线在层内的轨迹为一段圆弧。

倾斜入射声线的计算

声线在层内的轨迹为一段圆弧,该圆弧的曲率半径为:

根据上图所示,可以求出在第i层内声线传播的水平距离xi如下:

由Snell定律和常声速梯度假设,声线在第i层传播的时间为:

对于上式,考虑到声线掠射角α变化范围为,当层内声速梯度为正梯度即gi>0时,ci+1>ci,由Snell定律,αi+1<αi,则有;当层内声速梯度为负梯度即gi<0时,ci+1<ci,由Snell定律,αi+1>αi,则有。因此式可以确切表达为:

给出了声线在第i层内传播的水平距离和传播时间,需要特别指出的是,两式只适用于在声速梯度gi不为0且初始掠射角度的情况。对于声速梯度等于0的情况,可以退化到层内常声速假设的声线跟踪。

垂直入射声线的计算

下面单独给出在梯度不为0的常梯度层内、声波垂直入射即掠射角为π/2时的计算公式。垂直入射时,声线曲线的曲率0为即声线为垂直于水平面的直线,水平距离为0。根据Larry Mayer的推导,声速在第i层的传播时间为:

其中为层内的声速分布函数,代入上式有:

上式给出了声线在一个完整分层内声线传播的时间和水平距离,称为声线在常梯度层内传播的正解公式。

残余传播时间的计算

讨论对于更为一般的情况,设声线传播经过了N-1层折射后仍有时间剩余,记为t',但己经不足以穿越完整的N层时,需要根据t'计算声线在第N层传播的深度和水平距离。

对于倾斜入射的声线,声线在第N层的掠射角为αN,初始声速为cN。可以推导出声线传播终点即t'耗尽时的掠射角为:

由Snell定律,声线传播终点处的声速为:

由第N层的声速梯度为常数可以得到声线传播终点处的深度为:

声线在第N层传播的水平距离为:

对于垂直入射的声线,水平距离为0,声线传播终点处的声速为:

结合上式可以计算声线传播终点处的深度z'。

Matlab仿真分析

下面给出的是基于分层常梯度模型的声线追踪:

function [cos_alfa1,t1, x1, z1] = Sound_Ray_Tracing_core(cos_alfa0,c0,c1,z,t,over_flag)
% **************** 基于射线声学的恒定声速梯度的声线追踪计算核心 *********************
% **************** 输入参数
% ***  cos_alfa0  入射掠射角余弦
% ***  c0         入射声速(超出时为上一层的入射声速)
% ***  c1         射出声速(超出时为上一层的射出声速)
% ***  z          层厚(超出时为上一层的厚度)
% ***  t          总传播时间
% ***  over_flag  表示数据超出声速剖面给出的范围
% **************** 输出参数
% ***  cos_alfa1  射出掠射角余弦
% ***  t1         实际的传播时间增量
% ***  x1         实际的水平传播距离增量
% ***  z1         实际的垂直传播距离增量
% *********** 最后更新 20180611
% ***  更新内容:首次编写%%if over_flag == 0        %表示没有超出给定的范围 a = (c1 - c0)/z/c0;  %求声速梯度 注意正负号区分if a ~= 0       %声速梯度不等于0的时候alfa0 = acos(cos_alfa0);        %求入射掠射角cos_alfa1 = cos_alfa0/c0*c1;    %求射出掠射角余弦alfa1 = acos(cos_alfa1);        %求射出掠射角sin_alfa0 = sin(alfa0);         %求入射掠射角正弦sin_alfa1 = sin(alfa1);         %求出射掠射角正弦x_max = z/tan((alfa0+alfa1)/2);                                                            %求声线最大可能的水平距离增量t_max = (log((1+sin_alfa0)/(1-sin_alfa0)) - log((1+sin_alfa1)/(1-sin_alfa1)))/(2*a*c0);    %求最大可能的传播时间增量t_max = abs(t_max);           %保证为正数if t_max > t        %说明声线到达终点了t1 = t;         %返回实际的时间增量A = log((1+sin_alfa0)/(1-sin_alfa0)) - 2*a*c0*t;sin_alfa2 = (exp(A) - 1)/(exp(A) + 1);            %重新求到达掠射角正弦alfa2 = asin(sin_alfa2);                          %求实际的到达掠射角cos_alfa2 = cos(alfa2);                           %重新求到达掠射角余弦cos_alfa1 = cos_alfa2;c2 = cos_alfa2/cos_alfa0*c0;                      %求实际到达点的声速z1 = (c2/c0 - 1)/a;                               %求实际达到点的深度增量x1 = z1/tan((alfa0+alfa2)/2);                     %求实际达到点的水平距离增量else                %声线还没有到达终点t1 = t_max;     %返回实际的时间增量x1 = x_max;     %返回实际的水平距离增量z1 = z;         %返回实际的深度增量endelse       %声速梯度等于0的时候    为常声速层cos_alfa1 = cos_alfa0;alfa0 = acos(cos_alfa0);      %求入射掠射角sin_alfa0 = sin(alfa0);       %求入射掠射角正弦t1 = z/sin_alfa0/c0;          %返回实际的时间增量x1 = z/sin_alfa0*cos_alfa0;   %返回实际的水平距离增量z1 = z;                       %返回实际的深度增量end
elsea = (c1 - c0)/z/c0;  %求声速梯度 注意正负号区分alfa0 = acos(cos_alfa0);        %求入射掠射角sin_alfa0 = sin(alfa0);         %求入射掠射角正弦t1 = t;         %返回实际的时间增量A = log((1+sin_alfa0)/(1-sin_alfa0)) - 2*a*c0*t;sin_alfa2 = (exp(A) - 1)/(exp(A) + 1);            %重新求到达掠射角正弦alfa2 = asin(sin_alfa2);                          %求实际的到达掠射角cos_alfa2 = cos(alfa2);                           %重新求到达掠射角余弦cos_alfa1 = cos_alfa2;c2 = cos_alfa2/cos_alfa0*c0;                      %求实际到达点的声速z1 = (c2/c0 - 1)/a;                               %求实际达到点的深度增量x1 = z1/tan((alfa0+alfa2)/2);                     %求实际达到点的水平距离增量
end
function [xx,zz,tracing_time] = Sound_Ray_Tracing(field_angle, Echo_time, z_s, Sound_velocity_profile)
% **************** 基于射线声学的恒定声速梯度的声线追踪计算 *********************
% ********* 输入参数
% ****** field_angle              波束角
% ****** Echo_time                回波总时间
% ****** z_s                      开始追踪的深度
% ****** Sound_velocity_profile   声速剖面
% ********* 输出参数
% ****** xx                       水平距离累计
% ****** zz                       深度累计
% ****** tracing_time             各段总时间累计data_points = size(Sound_velocity_profile,1); %得到声速剖面的数据点数%%Grazing_angle0 = pi/2 - abs(field_angle);      %初始化掠射角for k = 1:data_pointsif Sound_velocity_profile(k,1) > z_s   %当分层深度首次大于z_s时break;end
endif k == 1    %如果初始深度小于声速剖面的最小值  向上外推声速剖面值x0 = Sound_velocity_profile(1,1);x1 = Sound_velocity_profile(2,1);y0 = Sound_velocity_profile(1,2);y1 = Sound_velocity_profile(2,2);c_temp = y0 - (y1 - y0)/(x1 - x0)*(x0 - z_s);depth = [z_s; Sound_velocity_profile(:,1)];              %初始化深度Sound_velocity = [c_temp; Sound_velocity_profile(:,2)];  %初始化声速
elsex0 = Sound_velocity_profile(k-1,1);x1 = Sound_velocity_profile(k,1);y0 = Sound_velocity_profile(k-1,2);y1 = Sound_velocity_profile(k,2);c_temp = y1 - (y1 - y0)/(x1 - x0)*(x1 - z_s);depth = [z_s; Sound_velocity_profile(k:end,1)];              %初始化深度Sound_velocity = [c_temp; Sound_velocity_profile(k:end,2)];  %初始化声速
enddata_points1 = length(depth);for i = 1:data_points1 - 1if i == 1             %第一层cos_alfa0 = cos(Grazing_angle0); %初始化入射掠射角余弦   c0 = Sound_velocity(i);          %初始化当前层入射处的声速c1 = Sound_velocity(i+1);        %初始化当前层射出处的声速z = depth(i+1) - depth(i);       %初始化当前层厚度t = Echo_time/2;                 %初始化总时间[cos_alfa1,t1, x1, z1] = Sound_Ray_Tracing_core(cos_alfa0,c0,c1,z,t,0);tracing_time(i) = t1*2;             %得到该层总传播时间xx(i) = x1;                         %得到累计水平距离zz(i) = z_s + z1;                   %得到累计深度距离elsecos_alfa0 = cos_alfa1;c0 = Sound_velocity(i);             %初始化当前层入射处的声速c1 = Sound_velocity(i+1);           %初始化当前层射出处的声速z = depth(i+1) - depth(i);     %初始化当前层厚度t = Echo_time/2 - tracing_time(i-1)/2;   %初始化剩余总时间[cos_alfa1,t1, x1, z1] = Sound_Ray_Tracing_core(cos_alfa0,c0,c1,z,t,0);tracing_time(i) = tracing_time(i-1) + t1*2;   %得到截止到目前层的总传播时间xx(i) = xx(i-1) + x1;                         %得到累计水平距离zz(i) = zz(i-1) + z1;                         %得到累计深度距离endif tracing_time(i) >= Echo_time     %如果追踪总时间大于等于需要追踪的总时间 则跳出循环break;end
endif tracing_time(i) < Echo_time          %还没有到达最终的追踪时间i = data_points;cos_alfa0 = cos_alfa1;c0 = Sound_velocity(i-1);             %初始化当前层入射处的声速c1 = Sound_velocity(i);z = depth(i) - depth(i-1);     %初始化当前层厚度t = Echo_time/2 - tracing_time(i-1)/2;   %初始化剩余总时间[cos_alfa1,t1, x1, z1] = Sound_Ray_Tracing_core(cos_alfa0,c0,c1,z,t,1);tracing_time(i) = tracing_time(i-1) + t1*2;   %得到截止到目前层的总传播时间xx(i) = xx(i) + x1;                         %得到累计水平距离zz(i) = zz(i) + z1;                         %得到累计深度距离
endtracing_time = [0, tracing_time];
xx = [0,xx];
zz = [z_s ,zz];if field_angle < 0xx = - xx;          %水平累计坐标为负值
end
clc;
close all;
clear all;
%%data_points = 50;
depth_down = (1:data_points)/data_points*100;
depth_down = depth_down';
Sound_velocity_down = 1480 - 1*depth_down;Sound_velocity_profile = [depth_down,Sound_velocity_down];  %获取声速剖面figure;
plot(depth_down, Sound_velocity_down,'*-');
grid on;
xlabel('深度m');
ylabel('声速m/s');
title('深度VS声速');%%
c = Sound_velocity_down(1);           %表面声速
field_angle = 85/180*pi;              %初始入射角
Echo_time = 2*30/cos(field_angle)/c;  %需要追踪的总时间
z_s = 0.7;                            %开始追踪的深度[xx,zz,tracing_time] = Sound_Ray_Tracing(field_angle, Echo_time, z_s, Sound_velocity_profile);
[horizontal_dis,depth,time_total,total_dis] = acustic_speed_fix(field_angle, Echo_time, z_s, Sound_velocity_profile);depth1 = tracing_time*c/2*cos(field_angle) + z_s;
horizontal_dis1 = tracing_time*c/2*sin(field_angle);
figure;
plot(horizontal_dis1,-depth1,'*-');
hold on;
grid on;
plot(xx,-zz,'*r-');
legend('按表面恒定声速计算的声线','按水平分层恒定声速梯度模型计算的追踪声线');
xlabel('水平距离m');
ylabel('深度m');
string = ['初始入射角',num2str(field_angle/pi*180),'°'];
title(string);

运行上述程序可得如下图:

可见如果不考虑声速剖面的影响,声线的传播时间越长,计算的回波点离实际的声波回波点越远,误差越大。

浅谈水下声速剖面及声线追踪算法相关推荐

  1. 浅谈水下机器人ROV发展态势现状

    水下机器人也称无人遥控潜水器,是一种工作于水下的极限作业机器人.水下环境恶劣危险,人的潜水深度有限,所以水下机器人已成为开发海洋的重要工具. 无人遥控潜水器主要有:有缆遥控潜水器和无缆遥控潜水器两种, ...

  2. 浅谈MySQL索引背后的数据结构及算法

    2019独角兽企业重金招聘Python工程师标准>>> 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存 ...

  3. 浅谈神经网络之链式法则与反向传播算法

    反向传播是训练神经网络最重要的算法,可以这么说,没有反向传播算法就没有深度学习的今天.但是反向传播算法涉及一大堆数据公式概念.所以我们了解导数计算过程以及要介绍的新的复合函数多层求导计算过程. 链式法 ...

  4. 浅谈决策树算法以及matlab实现ID3算法

    决策树方法在分类.预测.规则提取等领域有着广泛的应用.在20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinilan提出了ID3算法以后,决策树在机器学习.数据挖掘领域得到极大的发 ...

  5. 水下声呐定位声线跟踪算法

    声波传播速度是海洋中最重要的声学参数,它是影响声波在海洋中传播的最基本的物理量参数.有关测量研究表明,水中声速是温度.盐度和静压力的函数,声速随着温度.盐度和压力的增加而增加.海洋的不均匀性和多变性强 ...

  6. 浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)

    主要内容: OMP的算法流程 OMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.OMP的算法流程 二.OMP的MATL ...

  7. 浅谈压缩感知(九):正交匹配追踪算法OMP

    浅谈压缩感知(九):正交匹配追踪算法OMP 主要内容: OMP算法介绍 OMP的MATLAB实现 OMP中的数学知识 一.OMP算法介绍 来源:http://blog.csdn.net/scucj/a ...

  8. 浅谈知识追踪(BKT、IRT、DKT)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.知识追踪是什么? 二.具体内容 1.基于贝叶斯的知识追踪(BKT) 项目反应理论(IRT) 深度知识追踪(DKT) ...

  9. 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

    浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP) 主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.g ...

最新文章

  1. 解决rspec 生成报告时报utf-8错误的方法
  2. 数据库存储模型-数据存储
  3. 实现Android-JNI本地C++调试
  4. spark-shell开发wordcount程序
  5. 定制MyBatis的日志
  6. .NET 4.5 MEF 基于约定的编程模型
  7. win7下dynamips类模拟器桥接到本地PC,但是无法ping通的解决办法
  8. matleb2016A安装教程
  9. 计算机二级公共基础知识(四)—— 数据库设计基础
  10. json转excel_json数据转换成excel表格
  11. URL rewrite
  12. 解除宝塔面板强制绑定手机号教程
  13. 女神周迅离婚,Python分析国内离婚情况,结果触目惊心!
  14. 001.Python安装及Pycharm安装破解
  15. 97年大学计算机考试是 级,1997年9月全国计算机等级考试一级笔试试卷 DOS
  16. 手把手学习和理解遗传算法的最佳例子
  17. 边框颜色和背景色之间的关系
  18. 第一集 斗罗世界 第六章
  19. 侦探悬疑推理大全隐私政策
  20. vba 为excel排序

热门文章

  1. 小米 Redis 的 K8S 容器化部署实践
  2. ubuntu16服务器vnc无显示器,Ubuntu Server 16.04 配置VNC
  3. python银行利息问题_python要求用户输入本金,银行年利率和...
  4. 如何评价一个算法的好坏
  5. 给编程小白的一些建议,让你对学习编程有一个清晰的认识。
  6. 退款单适用现在的店铺吗?怎么操作?
  7. Ubuntu将图标放置于任务栏
  8. WPF绘制三维坐标系
  9. Python使用turtle画棋盘格
  10. 计算机网路基础(IP地址、TCP/IP协议、三握四挥)