概要
运动声源的到达结构仿真中,由于声传播速度远高于声源运动速度,而且声源辐射出声波后,介质的振子传递声波几乎不受声源影响,因此可以将根据每个时间帧的声源位置,使用bellhop计算到达结构,数字离散采样近似运动声源的到达结构。
整体架构流程
- 根据声源运动模型,得到声源在时间点t0,t1,t2...t0,t1,t2...上的位置
- 根据声场互易理论,将接收器放在射线模型的Source位置,而声源放在Receiver上,即在.env的Rz和Rr,写声源位置序列
- 使用bellhop计算到达结构
- 画图
.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。
小结
使用分帧的手段,对不同时间点运动声源的到达结构进行仿真,并画图,可视化运动声源的到达结构随时间的变化。