运动声源的到达结构仿真

运动声源的到达结构仿真@toc

概要

运动声源的到达结构仿真中,由于声传播速度远高于声源运动速度,而且声源辐射出声波后,介质的振子传递声波几乎不受声源影响,因此可以将根据每个时间帧的声源位置,使用bellhop计算到达结构,数字离散采样近似运动声源的到达结构。

整体架构流程

  1. 根据声源运动模型,得到声源在时间点 t 0 , t 1 , t 2 . . . t_0, t_1, t_2 ... t0,t1,t2...上的位置
  2. 根据声场互易理论,将接收器放在射线模型的Source位置,而声源放在Receiver上,即在.env的Rz和Rr,写声源位置序列
  3. 使用bellhop计算到达结构
  4. 画图

.env环境文件写法

下面展示一些 代码片

c 复制代码
'Munk profile'		! TITLE
100.0			! FREQ (Hz)
1			! NMEDIA
'NVW'			! SSPOPT (Analytic or C-linear interpolation)
0  0.0  5000.0		! DEPTH of bottom (m)
    0.0  1548.52  /
  200.0  1530.29  /
  250.0  1526.69  /
  400.0  1517.78  /
  600.0  1509.49  /
  800.0  1504.30  /
 1000.0  1501.38  /
 1200.0  1500.14  /
 1400.0  1500.12  /
 1600.0  1501.02  /
 1800.0  1502.57  /
 2000.0  1504.62  /
 2200.0  1507.02  /
 2400.0  1509.69  /
 2600.0  1512.55  /
 2800.0  1515.56  /
 3000.0  1518.67  /
 3200.0  1521.85  /
 3400.0  1525.10  /
 3600.0  1528.38  /
 3800.0  1531.70  /
 4000.0  1535.04  /
 4200.0  1538.39  /
 4400.0  1541.76  /
 4600.0  1545.14  /
 4800.0  1548.52  /
 5000.0  1551.91  /
'A' 0.0
 5000.0  1600.00 0.0 1.0 /
1				! NSD
1000.0 /			! SD(1:NSD) (m)
101				! NRD
1000.0 1000.0 /			! RD(1:NRD) (m)
101				! NR
10  20 /			! R(1:NR ) (km)
'AB  I'	  			! 'R/C/I/S' 注意这里第五个位置使用了I,即Irregular的网格布局,可以布放任意位置的Receivers列表
0			! NBeams
-85.0 85.0 /		        ! ALPHA1,2 (degrees)
0.0  5500.0 101.0		! STEP (m), ZBOX (m), RBOX (km)

代码

项目链接 运动声源到达结构仿真

matlab 复制代码
clc;
filename = 'MunkB_Arr_f';
bellhop(filename);
ARRFIL = [filename '.arr'];
% [ Arr, Pos ] = read_arrivals_bin( ARRFIL );
[ Arr, Pos ] = read_arrivals_asc( ARRFIL );


% plotarr
figure;
hold("on");
for isd = 1: size(Arr,1)
Arr1 = Arr( isd, 1 );
Narr = Arr1.Narr;

indexTNC0BNC0 = Arr1.NumTopBnc==0 &Arr1.NumBotBnc==0; % 直达
indexTNC1BNC0 = Arr1.NumTopBnc~=0 &Arr1.NumBotBnc==0; % 海面反射
indexTNC0BNC1 = Arr1.NumTopBnc==0 &Arr1.NumBotBnc~=0; % 海底反射
indexTNC1BNC1 = Arr1.NumTopBnc~=0 &Arr1.NumBotBnc~=0; % 海面、海底反射

stem(real( Arr1.delay( indexTNC1BNC1 ) ), abs( Arr1.A( indexTNC1BNC1 ) ) , 'k' )

stem(real( Arr1.delay( indexTNC0BNC1 ) ), abs( Arr1.A( indexTNC0BNC1 ) ) , 'b' )
stem(real( Arr1.delay( indexTNC1BNC0 ) ), abs( Arr1.A( indexTNC1BNC0 ) ) , 'g' )
stem(real( Arr1.delay( indexTNC0BNC0 ) ), abs( Arr1.A( indexTNC0BNC0 ) ) , 'r' )
% 以上的时延delay可以再加上声源运动到该点上所需要的时间,我这里只是示例,所以没加
pause(0.5);
end
hold("off")
xlabel('Time (s)' )
ylabel('Amplitude' )
% title([ 'Src_z=', num2str( Pos.s.z( 1 ) ), ...
%    ' m  Rcvr_z=', num2str( Pos.r.z( 1 ) ), ...
%    ' m  Rcvr_r=', num2str( Pos.r.r( 1 )/1e3 ), ' km' ] )

注意,上面画图中时延delay可以再加上声源运动到该点上所需要的时间,即根据声源当前的位置,得到当前帧对应的仿真时间。举例,如果声源速度10m/s,当前是循环为第二点,且距离第一个点100m,则delay需要加上 100 / 10 = 10 s 100/10=10s 100/10=10s。

小结

使用分帧的手段,对不同时间点运动声源的到达结构进行仿真,并画图,可视化运动声源的到达结构随时间的变化。

相关推荐
alphaTao12 分钟前
LeetCode 每日一题 2026/5/25-2026/5/31
算法·leetcode
菜菜的顾清寒15 分钟前
力扣HOT100(41)动态规划-杨辉三角
算法·leetcode·动态规划
Cthy_hy20 分钟前
Python算法竞赛:集合去重+字典映射 核心用法一站式整理
数据结构·python·算法
Deepoch27 分钟前
Deepoc数学大模型:驱动发动机行业数智化转型的底层解
人工智能·算法·deepoc·数学大模型
happymaker062630 分钟前
LeetCodeHot100——盛水最多的容器
数据结构·算法·leetcode·双指针·hot100
3DVisionary30 分钟前
蓝光三维扫描:磁性轴承全尺寸精密3D检测方案
算法·3d·3d检测·蓝光三维扫描·精密检测·磁性轴承·圆度测量
过期动态36 分钟前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
逻辑君40 分钟前
Foresight研究报告【20260010】
人工智能·算法·机器学习
weixin_468466851 小时前
大语言模型原理新手入门指南
人工智能·python·算法·语言模型·自然语言处理·transformer·注意力机制
z200509301 小时前
今日算法(回溯找IP,加检测)
算法·leetcode