运动声源的到达结构仿真

0 阅读2分钟

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

概要

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

整体架构流程

运动声源分帧模型

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

.env环境文件写法

下面展示一些 代码片

'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)

代码

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

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=10s100/10=10s运动声源到达结构仿真

小结

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