运动声源的到达结构仿真

运动声源的到达结构仿真@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。

小结

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

相关推荐
人工智能培训11 分钟前
边缘AI与大模型轻量化:让智能跑进每一个终端
大数据·人工智能·算法·重构·生活
lengxuenong43 分钟前
树状数组 · 信息学学习手册3-优化LIS
c++·学习·算法
动词ing1 小时前
【题目练习】外观数列
算法
余额瞒着我当琳1 小时前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
suhan1 小时前
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
数据结构·算法·排序算法
suhan1 小时前
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
数据结构·算法·排序算法
Dola_Zou1 小时前
工商业储能系统核心策略
算法·自动化·软件工程
Tsuki_tl1 小时前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零
Rain的Java大神之路2 小时前
面了上百人,我最爱问的LeetCode 1「两数之和」:能背代码的很多,能讲清“先查后存”的没几个
java·后端·算法